
function doToMailSend(name, domain) {
    locationstring = 'mai' + 'lto:' + name + '@' + domain;
    window.location.replace(locationstring);
}

function js_include($script) {
  var script = document.createElement('script');
  script.src = "/hoojano/js/" + $script;
  script.type = 'text/javascript';
  var head = document.getElementsByTagName('head')[0];
  head.appendChild(script);
}

var popupWin;
function popupDisplayWindow(path, width, height) {
	try {
		if (popupWin != null && !popupWin.closed) {
			alert('Only one open popup window is allowed at a time');
			return false;
		}
		var scrollbars = 1;
		popupWin = window.open(path, 'newwindow',
				'toolbar=0,location=0,status=0,menubar=0,scrollbars='
						+ scrollbars + ',resizable=1,width=' + width
						+ ',height=' + height);
		
		if(popupWin) setTimeout('popupWin.focus();', 250);
		return false;
	} catch (e) {
		return false;
	}
}

var disabledColor = '#D3D3D3';

function setRowToSelected(/*tr*/ selectedRow, /*table*/ table) {
	var rows = table.getElementsByTagName('tr');
            
    for(var i = 0; i < rows.length; i++) {
    	if(rows[i] == selectedRow) {
    		rows[i].className = 'selected';
    	} else {
    		rows[i].className = '';
    	}
    }
}

function setToLoadingImage(/*element*/ element) {
	var containerDiv = document.createElement('DIV');
	containerDiv.className = 'loadingContainerDiv';
	var image = document.createElement('img');
	image.alt = 'Loading...';
	image.src = appContext + '/images/spinner.gif';
	containerDiv.appendChild(image);
	
	containerDiv.style.height = Math.max(36, element.offsetHeight) + 'px';
	containerDiv.style.width = element.offsetHeight + 'px';
	element.appendChild(containerDiv);
	
	for(var i = 0; i < element.childNodes.length; i++) {
		if(element.childNodes[i] != containerDiv) {
			element.removeChild(element.childNodes[i--]);
		}
	}
}

function logger(/*anything*/ stuff) {
	if(console && console.log) {
		console.log(stuff);
	}
}

var goingToHide = false;
var currentDropdownClicker;
var dropdownHideTimeout;

function showDropDown (dropdownContentElement, clickElement) {

	var dropdownElement = document.getElementById('dropdownContainer');
	
	if(dropdownElement.style.visibility != 'hidden' && clickElement == currentDropdownClicker) {
		return hideDropDown();
	}
	
	var dropdownHandle = $('dropdownContainer');
	var clickHandle = $(clickElement.id);
	currentDropdownClicker = clickElement;

    dropdownHandle.setHTML(dropdownContentElement.innerHTML);
    
    var currentParent = clickHandle.parentNode;;
    var scrollingOffsetX = 0;
    var scrollingOffsetY = 0;
    while(currentParent && currentParent != document.body) {
		scrollingOffsetX += currentParent.scrollLeft;
		scrollingOffsetY += currentParent.scrollTop;
		currentParent = currentParent.parentNode;
    }
    /*
    dropdownElement.style.left = (clickHandle.getPosition().x + (clickHandle.getSize().size.x/2) - (dropdownHandle.getSize().size.x/2) - scrollingOffsetX) + 'px';
    */
    dropdownElement.style.left = (clickHandle.getPosition().x + (clickHandle.getSize().size.x) - (dropdownHandle.getSize().size.x) - scrollingOffsetX) + 'px';
    dropdownElement.style.top = ((clickHandle.getPosition().y + clickHandle.getSize().size.y) - scrollingOffsetY) + 'px';
    dropdownElement.style.visibility = 'visible';
    
    clickHandle.addEvent('mouseout', function () {
    	prepareToHideDropDown(dropdownElement, clickElement);
    });
    
    dropdownHandle.addEvent('mouseout', function () {
    	prepareToHideDropDown(dropdownElement, clickElement);
    });
    
    dropdownHandle.addEvent('mouseover', function () {
    	cancelHidingDropDownTimer();
    });
}

function hideDropDown () {
	var dropdownElement = document.getElementById('dropdownContainer');
	dropdownElement.style.visibility = 'hidden';
	dropdownElement.removeEvents();
	currentDropdownClicker.removeEvents();
}

function prepareToHideDropDown(dropdown, clickElement) {
	goingToHide = true;
   	if(dropdownHideTimeout) {
   		clearTimeout(dropdownHideTimeout);
   	}
   	dropdownHideTimeout = setTimeout(function () {
   		if(clickElement == currentDropdownClicker) {
   			dropdown.style.visibility = 'hidden';
   		}
   		dropdown.removeEvents();
   		clickElement.removeEvents();
   	}, 250);
}

function cancelHidingDropDownTimer() {
	goingToHide = false;
   	if(dropdownHideTimeout) {
   		clearTimeout(dropdownHideTimeout);
   	}
}

function ourReplace(/*mooable*/ element, relativeUrl, callback) {
    setToLoadingImage($(element));
    
    new Ajax(appContext + relativeUrl+((relativeUrl.indexOf('?') == -1) ? '?': '&')+'ajaxGrabbyTime='+new Date().getTime(), 
           { method: 'get', update: $(element), 
               onFailure: function (xhr) {
           		   ajaxFailure(xhr, element);
           	   }, 
           	   onSuccess: function(data) {
           	   		if(callback) {
           	   			callback(data, element);
           	   		}
           	   }
           }
      ).request();
}

function ajaxFailure (xhr, element) {
	$(element).setHTML('<div class="ajaxError">Error ('+xhr.status+'): ' + xhr.statusText+ '</div>');
}

// This needs a refactor - BAD.  Flagrant copy-pasting.
var currentPopupClicker;

function showPopup (popupContentElement, clickElement, titleHTML) {

	var popupElement = document.getElementById('popupContainer');
	popupElement.style.zIndex = 40;
	var popupHandle = $('popupContainer');
	var clickHandle = $(clickElement);

	currentPopupClicker = clickElement;
	
	if(titleHTML) {
	    var titleBar = document.createElement('div');
	    titleBar.className = 'popupTitle';
	    titleBar.innerHTML = '<div class="closer" onclick="closePopup();"><div style="display: none">Cancel</div></div>' + titleHTML;
	    popupHandle.setHTML('');
	    popupHandle.appendChild(titleBar);
	}
	
    popupHandle.innerHTML += '<div class="popupBody">' + popupContentElement.innerHTML + '</div>'; 
                        
    var currentParent = clickHandle.parentNode;
    var scrollingOffsetX = 0;
    var scrollingOffsetY = 0;
    
    while(currentParent && currentParent != document.body) {
		scrollingOffsetX += currentParent.scrollLeft;
		scrollingOffsetY += currentParent.scrollTop;
		currentParent = currentParent.parentNode;
    }
	popupElement.style.left = (clickHandle.getPosition().x - scrollingOffsetX) + 'px';
    popupElement.style.top = ((clickHandle.getPosition().y + clickHandle.getSize().size.y) - scrollingOffsetY) + 'px';
    
 	LayerHelper.show(document.getElementById("popupContainer"));
 	
    popupElement.style.visibility = 'visible';
}

function closePopup() {
	$('popupContainer').style.visibility = 'hidden';
	LayerHelper.hide();
} 

function ajaxifyElement (element, callback) {
	var elem = $(element);	
	var form = $E('form', elem);
	if(form) {
		form.addEvent('submit', function (event) {
		    event = new Event(event);
		    
		    if(window['tinyMCE']) {
                $ES('.mceEditorContainer iframe', form).each(function (mceIFrame) {
                    tinyMCE.getInstanceById(mceIFrame.id).triggerSave();
                    tinyMCE.removeInstance(tinyMCE.getInstanceById(mceIFrame.id))
                });
            }
            
			setToLoadingImage(elem);
			
		    var call = new Ajax(form.getProperty('action'), 
                  {data: form, 
                   onFailure: function (xhr) {
                       ajaxFailure(xhr, elem);
                   }, 
                   onSuccess: function (data) {
                   	 elem.setHTML(elem.innerHTML + data);
                   	 $(elem.childNodes.item(0)).remove();
                   	 ajaxifyElement(elem, callback);
                   	 if(callback) {
                   	 	callback(data, elem);
                   	 }
                   }
                  }
                 )
		    call.request();
		    
		    event.stop();
		});
	}
}

function getElementPosition(theElement){
  var posX = 0;
  var posY = 0;

  var width = theElement.offsetWidth;
  var height = theElement.offsetHeight;

  var zIndex = theElement.style.zIndex;
             
  while(theElement != null){
    posX += theElement.offsetLeft;
    posY += theElement.offsetTop;
    theElement = theElement.offsetParent;
  }

 return {x:posX,y:posY,z:zIndex,w:width,h:height};

}

// This only creates one layer and reuses it so you can not
// have it working with multiple elements at the same time
var LayerHelper = {

  isIframeCreated : false,
  id : "ifHelper",

  show : function(elem){
    if(!this.isIframeCreated)this.create();
    var info = getElementPosition(elem);
    var ifr = document.getElementById(this.id)
    ifr.style.left = info.x + 'px';
    ifr.style.top = info.y + 'px';
    ifr.style.width = info.w + 'px';
    ifr.style.height = info.h + 'px';
    ifr.style.zIndex = info.z - 1;
    ifr.style.display = "block";
    ifr.style.border = "none";
    ifr = null;
  },

  hide : function(){
    document.getElementById(this.id).style.display = "none";
  },

  create : function(){
    var ifr = document.createElement("iframe");
    ifr.id = this.id;
    ifr.style.position = "absolute";
    //ifr.style.display = "none";
    //ifr.style.visibility = "hidden";
    document.body.appendChild(ifr);
    this.isIframeCreated = true;
    ifr=null;
  }
}

var ratingTexts = ['No rating', 'Terrible!', 'Poor', 'Average', 'Good', 'Excellent!'];

function parseTextareaMaxLengths(parseElement) {
	if(parseElement) {
		parseElement = $(parseElement);
	} else {
		parseElement = $('page-container');
	}
	
    if(!parseElement) return;

	parseElement.getElements('[textareamaxlength]').each(function (elem, index) {
	    $E('textarea', elem).setAttribute('maxlength', $(elem).getAttribute('textareamaxlength'));
	});
	
	setMaxLength();
}

function parseDatePickers(parseElement) {
	if(parseElement) {
		parseElement = $(parseElement);
	} else {
		parseElement = $('page-container');
	}
    if(!parseElement) return;
	
	$$('input.DatePicker').each( function(el){
	
	    var elem = $(el);
	    
	    
	    parseElement.getElements('label[for='+elem.id+']').each (function (elem, index) {
	        elem.setAttribute('for', elem.getProperty('for').replace('.', '_'));
	    });
	
		el.setAttribute('alt', "{format:'dd/mm/yyyy'}");
	
		new DatePicker(el);
		
	    el.id = el.id.replace('.', '_');
	});
}

function setMaxLength() {
	var x = document.getElementsByTagName('textarea');
	var counter = document.createElement('div');
	counter.className = 'counter';
	for (var i=0;i<x.length;i++) {
		if (x[i].getAttribute('maxlength')) {
			var counterClone = counter.cloneNode(true);
			counterClone.relatedElement = x[i];
			counterClone.innerHTML = '<span>0</span>/'+x[i].getAttribute('maxlength');
			x[i].parentNode.insertBefore(counterClone,x[i].nextSibling);
			x[i].relatedElement = counterClone.getElementsByTagName('span')[0];

			x[i].onkeyup = x[i].onchange = checkMaxLength;
			x[i].onkeyup();
		}
	}
}

function maxLengthTextArea(textArea, maxLength) {
    var currentLength = textArea.value.length;
    if (currentLength >= maxLength) {
        textArea.value = textArea.value.substr(0, maxLength);
    }
}

function checkMaxLength() {

	var maxLength = this.getAttribute('maxlength');
	var currentLength = this.value.length;
	
	if (currentLength >= maxLength) {
		this.relatedElement.className = 'toomuch';
		this.value = this.value.substr(0, maxLength);
		this.relatedElement.firstChild.nodeValue = maxLength;
	} else {
		this.relatedElement.className = '';
		this.relatedElement.firstChild.nodeValue = currentLength;
	}
	// not innerHTML
}



function textAreaSetup(/*Element Id*/ id) {
	
	for (key in tinyMCE.instances) {
    	var thisInstance = tinyMCE.instances[key];

	    if(thisInstance.isTinyMCE_Control && !thisInstance.getDoc()) {
		    tinyMCE.removeInstance(thisInstance);
	    }
	}

    if (document.getElementById(id)) {    	
        window['foo'] = tinyMCE.execCommand("mceAddControl", true, id);
        
        var field = document.getElementById(id);

        if (field.value == '' || field.value == longDescriptionHintText()) {
        	
            for(key in tinyMCE.instances) {
                var thisInstance = tinyMCE.instances[key];
                if (thisInstance.isTinyMCE_Control) {
					
					if(!tinyMCE.isMSIE){
                		thisInstance.select = new tinyMceFocuslistenerz(key, thisInstance);
                	}else{
                	   tinyMCE.getInstanceById(key).getWin().attachEvent('onfocus',tinyMceFocuslistenerz(key,thisInstance));	
			   		   tinyMCE.getInstanceById(key).getWin().document.fgColor = "#999999";	
		   			}
	                if (thisInstance.getBody()) {
	                	thisInstance.getBody().style.color="#999999";	                
	                }

                }
            }
        }
        
    }
        
}
function tinyMceFocuslistenerz(key, instance) {
    return function () {
    	longDescriptionOnFocus(instance);
    }
}

function hideTips () {
	setTipContainersDisplay('none');
	setTipButtonShowState(true);
	setServerAjaxTips(true);
}

function showTips () {
	setTipContainersDisplay('block');
	setTipButtonShowState(false);
	setServerAjaxTips(false);
}

function setTipContainersDisplay (display) {
	
	var inner = document.getElementById('innerTipsHints');
	var main = document.getElementById('tipsHints');
	
	var innerArray = document.getElementsByName("innerTipsHints");
	
	if(inner) {
		inner.style.display = display;
	}
	
	for(var i= 0 ; i < innerArray.length ; i ++ ){
		innerArray[i].style.display = display;
	}
	
	if(main) {
		main.style.display = display;
	}	
}

function setTipButtonShowState (setToShow) {
	var showButton = document.getElementById('showTipsButton');
	var hideButton = document.getElementById('hideTipsButton');
	
	showButton.style.display = setToShow ? 'inline' : 'none';
	hideButton.style.display = setToShow ? 'none' : 'inline';
}

function setServerAjaxTips (tipsOn) {
	var myAjax = new Ajax(appContext+'/showTips.html', {data: {showTips: tipsOn?0:1 }}).request();
}

function capitalFirstLetter (str) {
	return str.substr(0, 1).toUpperCase().concat(str.substr(1, str.length));	
}

function setSortReversing (elem, func, field, ascending, customLabel) {
	elem.setAttribute("onclick", "");
	
	elem.innerHTML = customLabel ? customLabel : capitalFirstLetter(field);
	
	$(elem.id).onclick = function () {func(field, !ascending, customLabel);}
}

function fieldWithHintFocused(field, hintText) {
    if (field.value == hintText) {
        field.style.color="#000000";
        field.value = "";
    }
    return false;
}
function fieldWithHintBlurred(field, hintText) {
    if (field.value == hintText || field.value == "") {
        field.style.color="#999999";
        field.value = hintText;
    }
    return false;
}
function removeIfHintText(field, hintText) {
    if (field.value == hintText) {
        field.value = "";
    }
    return false;
}
