   dojo.require("dijit.form.Button");
   dojo.require("dijit.Menu");
 
 if (IE) {
	document.getElementsByName = function(name, tag) {
		if (!tag) {
			tag = '*';
		}
		
		var elems = document.getElementsByTagName(tag);
		var res = [];
		for (var i=0; i<elems.length; i++) {
			att = elems[i].getAttribute('name');
			if (att == name)
				res.push(elems[i]);
		}
		return res;
	}
}

function resizeMainFrame(header, service) {
	var clientWidth;

	if (navigator.appName.indexOf("Microsoft") != -1) {
		clientWidth = document.documentElement.clientWidth;
	}
	else {
		clientWidth = window.innerWidth;
	}
	
	var newWidth;
	
	if (clientWidth < 1200) {
		if (clientWidth < 1100)
			newWidth = '900px';
		else
			newWidth = (clientWidth - 200) + 'px';
	} else {
		newWidth = '1000px';
	}
	
	if (header) {
		var innerHeader = dojo.byId('innerHeader');
		innerHeader.style.width = newWidth;
	}
	if (service) {
		var outerServiceDiv = dojo.byId('outerServiceDiv');
		outerServiceDiv.style.width = newWidth;
	}
}

function switchTab(containerId, activeTab, id) {
	activeTab.blur();
    activeTab.className = "tab-active"; 
    
    var container = document.getElementById(containerId);
    //var tabs = container.getElementsByTagName("ul")[0];
    var tabList = container.getElementsByTagName("a");
    
    for (var i=0; i < tabList.length; i++ ) {
       var tab = tabList[i];
       if (tab != activeTab) 
       		tab.className = "tab-disabled";
    } 
    
	var hiddenField = document.getElementById(id);
	if (hiddenField != null) {
		//Hide active div
		var divContent = document.getElementById(hiddenField.value+'Div');
		if (divContent != null)
			divContent.style.display = 'none';
			
		//Save current value so it can be submitted
		var hiddenFieldSave = document.getElementById(id+'Save');
		if (hiddenFieldSave != null)
			hiddenFieldSave.value = hiddenField.value;
			
		hiddenField.value = activeTab.id;
	}
	
	//Show new div
	var divContent = document.getElementById(activeTab.id+'Div');
	if (divContent != null)
		divContent.style.display = 'block';
	
    return false;
}

function switchToDefaultTab(containerId, id) {
	var hiddenField = document.getElementById(id);
	if (hiddenField != null) {
		var tab = document.getElementById(hiddenField.value);
		if (tab != null) {
			switchTab(containerId, tab);
		}
	}
}

function springSubmit(buttonId, parameters) {
	var button = document.getElementById(buttonId);
	if (button) {
		var formElement = findParentByTagName('form', button);
		if (formElement) {
			Spring.remoting.submitForm(buttonId, formElement.id, parameters);
		}
	}
}

function springSubmitDynamicForm(formId, action, parameters) {
	var formElement = document.createElement("form");
	formElement.id = formId;
	formElement.action = action;
	formElement.method = 'post';
	document.body.appendChild(formElement);
	
	if (formElement) {
		Spring.remoting.submitForm(formElement.id, formElement.id, parameters);
	}
}


function formSubmit(buttonId) {
	var button = document.getElementById(buttonId);
	if (button) {
		var formElement = findParentByTagName('form', button);
		if (formElement) {
			formElement.submit();
		}
	}
}

function formSubmitDynamicHidden(buttonId) {
	var button = document.getElementById(buttonId);
	if (button) {
		var formElement = findParentByTagName('form', button);
		if (formElement) {
			//Add elements
			for (var i=1; i<arguments.length; ) {
				var node = dojo.doc.createElement("input");
				node.type = 'hidden';
				node.id = arguments[i];
				node.name = arguments[i];
				node.value = arguments[i+1];
				
				formElement.appendChild(node);
				
				i = i+2;
			}
			formElement.submit();
		}
	}
}

function formSubmitOnKeyPress(buttonId, e) {
    var isEnter = window.event == null ? 
                  e.keyCode == 13 : 
                  window.event.keyCode == 13;
    if(isEnter) {
        document.getElementById(buttonId).click();
        return false;
    } else
    	return true;
}

function triggerFormSubmitOnKeyPress(buttonId, e) {
    var isEnter = window.event == null ? 
                  e.keyCode == 13 : 
                  window.event.keyCode == 13;
    if(isEnter)
        formSubmit(buttonId);
}

function ajaxSubmitOnKeyPress(ajaxSource, formId, parameters, e) {
    var isEnter = window.event == null ? 
                  e.keyCode == 13 : 
                  window.event.keyCode == 13;
    if(isEnter) {
        Spring.remoting.submitForm(ajaxSource, formId, parameters);
        return false;
    } else
    	return true;
}

function triggerOnClickOnKeyPress(ajaxSource, e) {
    var isEnter = window.event == null ? 
                  e.keyCode == 13 : 
                  window.event.keyCode == 13;
    if(isEnter) {
        dojo.byId(ajaxSource).onclick();
        return false;
    } else
    	return true;
}

function findParentByTagName(tagName, element) {
	var parent=element.parentNode;
	if (parent && parent.tagName.toLowerCase()!='form') {
		parent=findParentByTagName(tagName, parent);
	} 
	return parent;
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	
	return [curleft,curtop];
}

function focusOnChildInputOfElement(elementId) {
	var element = null;	
	if (typeof(elementId) == 'undefined' || elementId == null) {
		if (typeof(focusOnChildInput) != 'undefined') {
			element = dojo.byId(focusOnChildInput);
		}
	} else
		element = dojo.byId(elementId);
	if (element != null) {
		var inputs = element.getElementsByTagName('input');
		var focused = false;
		for (var i=0; i < inputs.length && !focused; i++) {
			type = inputs[i].getAttribute('type');
			if (type == 'text' || type == 'null' || type == null) {
				try {
					if (IE) {
						var focusElementObj = inputs[i];
						setTimeout(function(){
							focusElement(focusElementObj);
						}, 500);
					} else
						inputs[i].focus();
					focused = true;
				} catch (err) {
					
				}
			}
		}
	}	
}

function focusElement(element) {
	try {
		element.focus();
	} catch (err ) {
	}
}

function moveElementToEndOfBody(elementId) {
	var element = dojo.byId(elementId);
	if (element != null) {
		if (element.parentNode)
			element.parentNode.removeChild(element);
		dojo.place(element, document.body, 'last');
	}
}

function showTooltip(tooltipid, element, xoffset, yoffset, showSubmit, onclickFunc) {
	var tooltip = dojo.byId(tooltipid);
	var pos = findPos(element);
	
	//Get fieldName
	var fieldName = element.name.split('_');
	var valueContainerField = dojo.byId('containerName');
	valueContainerField.value = fieldName[1];
	
	//Set values for tooltip
	var currentValues = dojo.byId(fieldName[1]).value;
	dojo.byId('origSecurityTokens').value = currentValues;
	var values = currentValues.split(',');
	
	var checkboxes = dojo.byId('securityLevelContainer').getElementsByTagName('input');
	for (var i=0; i < checkboxes.length; i++) {
		type = checkboxes[i].getAttribute('type');
		if (type == 'checkbox') {
			var found = false;
			for (var j=0; !found && j<values.length; j++) {
				if (checkboxes[i].name ==  values[j]+'Checkbox') {
					found = true;
				}
			}
			if (found) {
				checkboxes[i].checked = true;
			} else
				checkboxes[i].checked = false;
		}
	}
	
	//Disable buttons
	//document.getElementsByName('saveButton','input')[0].disabled = true;
	//document.getElementsByName('cancelButton','input')[0].disabled = true;
	
	//Show tooltip
	tooltip.style.left = pos[0]+xoffset+'px';
	tooltip.style.top = pos[1]+yoffset+'px';
	
	if (showSubmit) {
		var submitDiv = dojo.byId('securityLevelPopupSubmit');
		if (submitDiv != null)
			submitDiv.style.display='block';
		dojo.byId('origSecurityTokens').value = currentValues;
		dojo.byId('securityLevelPopupSubmitChange').onclick = onclickFunc;
	}
		
	
	tooltip.style.display = 'block';
	
	//document.onclick=new Function('e','var target = (e && e.target) || (event && event.srcElement);var obj = document.getElementById(\''+tooltipid+'\');alert(obj);if(target!=obj){hideTooltip(obj)}');
	
	return false;
}

function hideTooltipWithCancelCheck(cancel) {
	var popup = dojo.byId('securityLevelPopup');
	var popupSubmit = dojo.byId('securityLevelPopupSubmit');
	
	if (popupSubmit.style.display == 'block' && cancel) {
		var origValue = dojo.byId('origSecurityTokens').value;
		var valueContainerField = dojo.byId('containerName');
		var container = dojo.byId(valueContainerField.value);
		container.value = origValue;
	}
	
	popup.style.display='none';
	popupSubmit.style.display='none';
}

function switchPrivacySecurity(element, onValue, offValue) {
	var fieldName = element.name.split('_');
	var privacyField = fieldName[1];
	
	var container = dojo.byId(privacyField);
	var rewriteDisplayNames;
	if (container.value == 'off') {
		container.value = 'on';
		rewriteDisplayNames = onValue;
	} else {
		container.value = 'off';
		rewriteDisplayNames = offValue;
	}

	//Rewrite table
	var displayDiv = document.getElementsByName(privacyField+'DisplayDiv','div')[0];
	if (displayDiv != null) {
		var htmlText = '<table class="gwVerticalAlignInTable" cellpadding="0" cellspacing="0">';
		htmlText = htmlText + '<tr><td>' +rewriteDisplayNames + '</td></tr>'
		htmlText = htmlText + '</table>';
		displayDiv.innerHTML = htmlText;
	}
	
	return false;
}

function tooglePrivacyCheckbox(element) {
	//Get container
	var valueContainerField = dojo.byId('containerName');
	var container = dojo.byId(valueContainerField.value);
	
	var newValue = "";
	var newValues = new Array();
	var publicClicked = element.name.indexOf('public',0)==0;
	var privateClicked = element.name.indexOf('private',0)==0;

	var displayNames = new Array();
	var publicCBElement;

	//public and private alone, anything else resets public and private, if all unclicked public is set
	var checkboxes = dojo.byId('securityLevelContainer').getElementsByTagName('input');
	var j=0;
	var k=0;
	for (var i=0; i < checkboxes.length; i++) {
		type = checkboxes[i].getAttribute('type');
		if (type == 'checkbox') {
			var publicCB = checkboxes[i].name.indexOf('public',0)==0;
			if (publicCB)
				publicCBElement = checkboxes[i];
			var privateCB = checkboxes[i].name.indexOf('private',0)==0;
			if (publicClicked && !publicCB ||
			    privateClicked && !privateCB ||
			    !publicClicked && !privateClicked && 
			        (publicCB || privateCB))
				checkboxes[i].checked = false;
				
			if (checkboxes[i].checked) {
				var idx = checkboxes[i].name.indexOf('Checkbox');
				if (idx > 0) {
					if (newValue.length>0)
						newValue = newValue + ',' + checkboxes[i].name.substr(0,idx);
					else
						newValue = checkboxes[i].name.substr(0,idx);
					newValues[k++] = checkboxes[i].name.substr(0,idx);
				}
			}
		} else if (type == 'hidden' && checkboxes[i].name.length > 11 && 
		           checkboxes[i].name.indexOf('DisplayName',0) == checkboxes[i].name.length-11) {
			//Hidden value with display name
			displayNames[j] = new Array();
			displayNames[j][0] = checkboxes[i].name.substring(0, checkboxes[i].name.length-11);
			displayNames[j][1] = checkboxes[i].value;
			j++;
		}	
	} 
	
	//Check if no value is selected
	if (newValue.length==0 && publicCBElement != null) {
		publicCBElement.checked = true;
		newValue = 'public';
		newValues[0] = newValue;
	}
	
	container.value = newValue;

	var rewriteDisplayNames = new Array();
	j=0;	
	//Get display names for newValues 
	for (var i=0; i<newValues.length; i++) {
		var found = false;
		for (var ii=0; !found && ii<displayNames.length; ii++) {
			if (displayNames[ii][0] == newValues[i])
				rewriteDisplayNames[j++]=displayNames[ii][1];
		}
	}
	
	//Rewrite table
	var displayDiv = document.getElementsByName(valueContainerField.value+'DisplayDiv','div')[0];
	if (displayDiv != null) {
		var htmlText = '<table class="gwVerticalAlignInTable" cellpadding="0" cellspacing="0">';
		for (var i=0; i<rewriteDisplayNames.length; i++) {
			htmlText = htmlText + '<tr><td>' +rewriteDisplayNames[i] + '</td></tr>'
		}
		htmlText = htmlText + '</table>';
		displayDiv.innerHTML = htmlText;
	}
	

	return false;
}

function checkChild(parent, child) {
	var found = false;
	
	if (child.parentNode != null) {
		found = child.parentNode == parent;
		if (!found)
			found = checkChild(parent, child.parentNode);
	}
	
	return found;
}

function showDijitDialog(dialogId) {
	var dialog = dijit.byId(dialogId);
	var paramDiv = dojo.byId(dialogId+'Parameters');
	if (paramDiv != null) {
		var html = '';
		for (var i=1; i<arguments.length; ) {
			html = html + '<input type="hidden" id="'+arguments[i]+'" name="'+arguments[i]+'" value="'+arguments[i+1]+'"/>';
			i = i+2;
		}
		paramDiv.innerHTML = html;
	}
	dialog.show();
}

function showDijitDialogWithFormInputs(dialogId, formName, idprefix) {
	var lidprefix;
	if (idprefix == null)
		lidprefix = '';
	else
		lidprefix = idprefix;
	var dialog = dijit.byId(dialogId);
	var paramDiv = dojo.byId(dialogId+'Parameters');
	if (paramDiv != null) {
		var html = '';
		//Add inputs
		var inputs = dojo.byId(formName).getElementsByTagName('input');
		for (var i=0; i<inputs.length; i++) {
			if (inputs[i].type != 'image' && inputs[i].type != 'submit' && inputs[i].type != 'checkbox' && inputs[i].name.match(/^variables/)) {
				html = html + '<input type="hidden" id="'+lidprefix+inputs[i].id+'" name="'+inputs[i].name+'" value="'+inputs[i].value+'"/>';
			} else if (inputs[i].type == 'checkbox' && inputs[i].name.match(/^variables/)) {
				//We are converting to hidden, so only give it value if it is checked
				html = html + '<input type="hidden" id="'+lidprefix+inputs[i].id+'" name="'+inputs[i].name+'" value="'+inputs[i].checked+'"/>';
			}
		}
		//Add selects
		var selectes = dojo.byId(formName).getElementsByTagName('select');
		for (var i=0; i<selectes.length; i++) {
			if (selectes[i].type != 'image' && selectes[i].type != 'submit' && selectes[i].name.match(/^variables/)) {
				html = html + '<input type="hidden" id="'+lidprefix+selectes[i].id+'" name="'+selectes[i].name+'" value="'+selectes[i].options[selectes[i].selectedIndex].value+'"/>';
			}
		}
		for (var i=3; i<arguments.length; ) {
			html = html + '<input type="hidden" id="'+lidprefix+arguments[i]+'" name="'+arguments[i]+'" value="'+arguments[i+1]+'"/>';
			i = i+2;
		}
		
		paramDiv.innerHTML = html;
		
		//text area
		var textareas = dojo.byId(formName).getElementsByTagName('textarea');
		var divHidden = dojo.doc.createElement('div');
		for (var i=0; i<textareas.length; i++) {
			var taElement = dojo.doc.createElement('textarea');
			taElement.value = textareas[i].value;
			taElement.name = textareas[i].name;
			taElement.id = lidprefix+textareas[i].id;
			divHidden.appendChild(taElement);
		}
		if (textareas.length>0) {
			divHidden.style.display = 'none';
			paramDiv.appendChild(divHidden);
		}
		
	}
	dialog.show();
}

function hideDijitDialog(dialogId) {
	var dialog = dijit.byId(dialogId);
	dialog.hide();
}

function showSendMessageDialog(dialogImg, dialogDefaultText, dialogParameter) {
	document.getElementById('sendMessageDialogImg').src = dialogImg;
	document.getElementById('sendMessageDialogArea').value = dialogDefaultText;
	document.getElementById('friendId').value = dialogParameter;
	
	showDijitDialog('sendMessageDialog');
	
	return false;
}

function showAddFriendDialog(dialogText, dialogImg, dialogDefaultText, dialogParameter) {
	document.getElementById('textBoxDialogImg').src = dialogImg;
	document.getElementById('textBoxDialogText').innerHTML = dialogText;
	document.getElementById('textBoxDialogArea').value = dialogDefaultText;
	document.getElementById('addFriendId').value = dialogParameter;
	
	showDijitDialog('textBoxDialog');
	
	return false;
}

function showInviteFriendDialog(dialogText, dialogImg, dialogDefaultText, dialogParameter) {
	document.getElementById('inviteDialogImg').src = dialogImg;
	document.getElementById('inviteDialogText').innerHTML = dialogText;
	document.getElementById('inviteDialogArea').value = dialogDefaultText;
	document.getElementById('inviteFriendId').value = dialogParameter;
	
	showDijitDialog('inviteDialog');
	
	return false;
}

function showDenyFriendDialog(dialogText, dialogImg, dialogDefaultText, dialogParameter) {
	document.getElementById('denyDialogImg').src = dialogImg;
	document.getElementById('denyDialogText').innerHTML = dialogText;
	document.getElementById('denyDialogArea').value = dialogDefaultText;
	document.getElementById('denyFriendId').value = dialogParameter;
	
	showDijitDialog('denyDialog');
	
	return false;
}

function switchProfileViewer(element, myfriendsid, showalldiv, showallcommand, hideallcommand) {
	var myfrienddiv = dojo.byId(myfriendsid);
	var viewerdiv = dojo.byId(showalldiv);
	if (myfrienddiv.style.display == 'block') {
		myfrienddiv.style.display = 'none';
		viewerdiv.style.display = 'block';
		element.innerHTML = hideallcommand;
	} else {
		viewerdiv.style.display = 'none';
		myfrienddiv.style.display = 'block';
		element.innerHTML = showallcommand;
	}
}

function hideProfileViewer(element, myfriendsid, showalldiv, showallcommand) {
	if (element != null) {
		var myfrienddiv = dojo.byId(myfriendsid);
		var viewerdiv = dojo.byId(showalldiv);
		viewerdiv.style.display = 'none';
		myfrienddiv.style.display = 'block';
		element.innerHTML = showallcommand;
	}
}

function submitFriendSecurityChange(element, securityUserId, currentPosition) {
	hideTooltipWithCancelCheck(false);
	
	Spring.remoting.submitForm(element, 'socialNetworkForm', 
	               { fragments:'profileviewer,friendlistmyfriends', securityUserId: securityUserId, currentPosition: currentPosition });
	               
	return false;
}

function selectAllCBWFilters(containerName, flag) {
	var checkboxes = dojo.byId(containerName).getElementsByTagName('input');
	var filterNames = new Array();
	for (var i=0; i < checkboxes.length; i++) {
		type = checkboxes[i].getAttribute('type');
		if (type == 'checkbox') {
			if (flag) {
				checkboxes[i].checked = true;
				addRemovableFilter(checkboxes[i], filterNames, false);
			} else
				checkboxes[i].checked = false;
		}
	}
	applyRemovableFilters(filterNames);
}

function toggletAllCBs(containerName, flag) {
	var checkboxes = dojo.byId(containerName).getElementsByTagName('input');
	for (var i=0; i < checkboxes.length; i++) {
		type = checkboxes[i].getAttribute('type');
		if (type == 'checkbox') {
			if (flag) {
				checkboxes[i].checked = true;
			} else
				checkboxes[i].checked = false;
		}
	}
}

function updateMsgRemovableFilters(containerName) {
	var checkboxes = dojo.byId(containerName).getElementsByTagName('input');
	var filterNames = new Array();
	for (var i=0; i < checkboxes.length; i++) {
		type = checkboxes[i].getAttribute('type');
		if (type == 'checkbox' && checkboxes[i].checked) {
			addRemovableFilter(checkboxes[i], filterNames, false);
		}
	}
	applyRemovableFilters(filterNames);
}

function addRemovableFilter(checkbox, filterNames, apply) {
	//get filternames
	var hiddenId = 'msgcbh' + checkbox.id.substring(5);
	var filterNameStr = dojo.byId(hiddenId).value;
	var filterNamesArray = filterNameStr.split(',');
	if (filterNamesArray != null && filterNamesArray.length > 0) {
		for (var i=0; i<filterNamesArray.length; i++) {
			if(filterNamesArray[i].replace('/\s/g','') != ''){
				var found = false;
				for (var j=0; j<filterNames.length && !found; j++) {
					if (filterNamesArray[i] == filterNames[j]) {
						found = true;
					}
				}
				if (!found)
					filterNames.push(filterNamesArray[i]);
			}
		}
	}
	
	if (apply)
		applyRemovableFilters(filterNames);
}

function applyRemovableFilters(filterNames) {
	var selectObj = dojo.byId('commands');
	var children = selectObj.childNodes;
	
	//remove filters
	var found = false;
	var j=0;
	for (var i=children.length-1; !found && i>=0;i--) {
		if (children[i].tagName && children[i].tagName.toLowerCase() == 'option' ) {
			selectObj.remove(selectObj.options.length-1);
		} else 
		if (children[i].tagName && children[i].tagName.toLowerCase() == 'optgroup' ) {
			found = true;
		}
	}
	
	
	for (var i=0; i<filterNames.length; i++) {
		selectObj.options[selectObj.options.length] = new Option(filterNames[i],'remove_'+filterNames[i]);
	}
}

function buildDropDownArray(idPrefix, containerName, array) {
	var container = dojo.byId(containerName);
	var inputs = container.getElementsByTagName('input');
	for (var i=0; i<inputs.length; i++) {
		type = inputs[i].getAttribute('type');
		if (type == 'hidden' && inputs[i].id.indexOf(idPrefix) == 0) {
			var entry = new Object();
			entry.value = inputs[i].value;
			entry.id = inputs[i].id.substring(idPrefix.length);
			entry.searchStr = inputs[i].value.toLowerCase();
			array.push(entry);
		}
	}
}

function processRecepientKeyPress(element, e, friendSelectorId, recepientsTAId, dropDownSelectId) {
	var fsId, rTAId, ddsId;
	if (friendSelectorId != null)
		fsId = friendSelectorId;
	else
		fsId = 'friendselector';
	if (recepientsTAId != null)
		rTAId = recepientsTAId;
	else
		rTAId = 'recepients';
	if (dropDownSelectId != null)
		ddsId = dropDownSelectId;
	else
		ddsId = 'dropdownselect';
	
	 var kC  = (window.event) ?    // MSIE or Firefox?
             event.keyCode : e.keyCode;
      var Down = (window.event) ?   
                40 : e.DOM_VK_DOWN // MSIE : Firefox
      var Up = (window.event) ?   
                38 : e.DOM_VK_UP // MSIE : Firefox
      var Return = (window.event) ?   
                13 : e.DOM_VK_RETURN // MSIE : Firefox
      var Enter = (window.event) ?   
                14 : e.DOM_VK_ENTER // MSIE : Firefox
  	  var container = dojo.byId(ddsId);
  	  
  	  var ddDisplay = dojo.byId(fsId).style.display != 'none';
  	  
  	  //get top position
  	  var top = (container.scrollTop)/20;
  	  
	  if (kC==Up) {
      	if (container.hasChildNodes() && ddDisplay) {
      		var found = false;
      		for (var i=0;i<container.childNodes.length && !found; i++) {
      			if (container.childNodes[i].className == 'ddMenuItemSelected') {
      				if (i>0) {
      					found = true;
      					container.childNodes[i-1].className='ddMenuItemSelected';
      					container.childNodes[i].className='ddMenuItem';
      					
      					if (i-1<top)
      						container.scrollTop -= 20;
      				}
      			}
      		}
      	}
      	return false;
      } else if (kC==Down) {
      	if (container.hasChildNodes() && ddDisplay) {
      		var found = false;
      		for (var i=0;i<container.childNodes.length && !found; i++) {
      			if (container.childNodes[i].className == 'ddMenuItemSelected') {
      				if (i<container.childNodes.length-1) {
      					found = true;
      					container.childNodes[i+1].className='ddMenuItemSelected';
      					container.childNodes[i].className='ddMenuItem';
      					
      					if (i+1-top>7)
      						container.scrollTop += 20;
      				}
      			}
      		}
      	}
      	
      	return false;
      } else if (kC==Return || kC==Enter) {
      	if (ddDisplay) {
	  		var found = -1;
	  		for (var i=0;i<container.childNodes.length && found==-1; i++) {
	  			if (container.childNodes[i].className == 'ddMenuItemSelected') {
	  					found = i;
	  			}
	  		}
	      	 writeRecepientSelection(container.childNodes[found], fsId, rTAId);
      	} 

      	return false;
      }
      
      return true; 
}

function writeRecepientSelection(menuItem, friendSelectorId, rTAId) {
		var element = dojo.byId(rTAId)
      	var str = element.value;
      	var index = str.lastIndexOf(',');
      	var newStr;
  	    var selectedItem = menuItem.innerHTML;
      	if (index >= 0)
      		newStr = str.substring(0, index+1) + ' ' + selectedItem + ', ';
      	else {
      		newStr = selectedItem + ', ';
      	}
      	element.value = newStr;
      	
      	hideRecepientDropDown(friendSelectorId);
      	
      	element.focus();
}

function preventSubmit(e) {
     var kC  = (window.event) ?    // MSIE or Firefox?
                 event.keyCode : e.keyCode;
      var Enter = (window.event) ?   
                14 : e.DOM_VK_ENTER // MSIE : Firefox
      var Return = (window.event) ?   
                13 : e.DOM_VK_RETURN // MSIE : Firefox
                
      if (kC==Return || kC == Enter)
      	return false;
      	
      return true;
}
          
function processRecepientKeyUp(element, e, friendSelectorId, recepientsTAId, dropDownSelectId) {
	
	var fsId, rTAId, ddsId;
	if (friendSelectorId != null)
		fsId = friendSelectorId;
	else
		fsId = 'friendselector';
	if (recepientsTAId != null)
		rTAId = recepientsTAId;
	else
		rTAId = 'recepients';
	if (dropDownSelectId != null)
		ddsId = dropDownSelectId;
	else
		ddsId = 'dropdownselect';
	
     var kC  = (window.event) ?    // MSIE or Firefox?
                 event.keyCode : e.keyCode;
      var Esc = (window.event) ?   
                27 : e.DOM_VK_ESCAPE // MSIE : Firefox

  	  var container = dojo.byId(ddsId);

      var Down = (window.event) ?   
                40 : e.DOM_VK_DOWN // MSIE : Firefox
      var Up = (window.event) ?   
                38 : e.DOM_VK_UP // MSIE : Firefox
      var Enter = (window.event) ?   
                14 : e.DOM_VK_ENTER // MSIE : Firefox
      var Return = (window.event) ?   
                13 : e.DOM_VK_RETURN // MSIE : Firefox
                
      if (kC==Down || kC==Up || kC == Enter || kC == Return)
      	return false;          
                
      if(kC==Esc) {
      	dojo.byId(fsId).style.display = 'none';
      } else {
      	//Get search string
      	var str = dojo.byId(rTAId).value;
      	var index = str.lastIndexOf(',');
      	var searchStr = null;
      	if (index >= 0 && str.length>index+1)
      		searchStr = trim(str.substring(index+1)).toLowerCase();
      	else if (index == -1) {
      		searchStr = trim(str).toLowerCase();
      	}
      		
      	if (searchStr != null && searchStr.length > 0) {
      		//Remove all children
			while( container.hasChildNodes() ) { 
				container.removeChild( container.lastChild ); 
			}
      		
	      	//Search friends
	      	var first = true;
	      	var listLength=0;
	      	for (var i=0; i<buddies.length; i++) {
	      		var idx = buddies[i].searchStr.indexOf(searchStr);
	      		if (idx >= 0) {
	      			var menuItem = document.createElement('div');
	      			if (first) {
	      				menuItem.className='ddMenuItemSelected';
	      				first = false;
	      			} else
	      				menuItem.className='ddMenuItem';
	      			menuItem.innerHTML = buddies[i].value;
	      			menuItem.name = 'ddRMenuItem';
	      			menuItem.onmouseover = function() {if (this.className != 'ddMenuItemSelected') changeClass(this, 'ddMenuItemOver')};
	      			menuItem.onmouseout = function() {if (this.className != 'ddMenuItemSelected') changeClass(this, 'ddMenuItem')};
	      			menuItem.onclick = function() {writeRecepientSelection(this)};
	      			
	      			container.appendChild(menuItem);
	      			listLength++;
	      		}
	      	}
	      	
	      	if (container.childNodes.length > 0) {
	      		var fs = dojo.byId(fsId);
	      		var rcptsTA = dojo.byId(rTAId);
	      		var pos = findPos(rcptsTA);
	      		fs.style.left = pos[0]+'px';
	      		fs.style.top = (pos[1]+rcptsTA.offsetHeight)+'px';
	      		
	      		if (listLength>8)
	      			container.className = 'dropdownselectlong';
	      		else
	      			container.className = 'dropdownselect';
	      		
	      		fs.style.display = 'block';
	      	} else
	      		hideRecepientDropDown();
	      	
      	} else
	      	hideRecepientDropDown();
      }

	
}

function recepientBlur(friendSelectorId) {
	var hide = function() {
		hideRecepientDropDown(friendSelectorId);
	};
	setTimeout(hide, 300);
}

function hideRecepientDropDown(friendSelectorId) {
	var fsId;
	if (friendSelectorId != null)
		fsId = friendSelectorId;
	else
		fsId = 'friendselector';
	dojo.byId(fsId).style.display = 'none';
}

function saveMessage(unknownRecepientWarn, emptySubjectWarn, emptyMessageWarn, tooLongMessageWarn) {
	//Verify recepients
	var matchArray = new Array();
	var ok = matchRecepients(dojo.byId('recepients').value, matchArray);
	if (!ok) {
		alert(unknownRecepientWarn);
	} 
	
	var formatElement = dojo.byId('msgformat');
	var format = getSelectOrHiddenValue(formatElement);
	
	//Verify subject or sms message
	if (ok) {
		if (format == 'sms' || format == 'tweet') {
			var text = dojo.byId('shorttextarea').value;
			if (trim(text).length==0) {
				ok = false;
				alert(emptyMessageWarn);
			} else {
				//Check if too long
				var smsUsed = calculateSMSUsage(null, text, 'ERROR', false);
				if (smsUsed == 'ERROR') {
					ok = false;
					alert(tooLongMessageWarn);
				}
			}
		} else {
			var subject = dojo.byId('subject').value;
			if (trim(subject).length==0) {
				ok = false;
				alert(emptySubjectWarn);
			}
		}
	}
	
	//Get message
	if (ok) {
		var msg = getRichtext('msgcomposearea');
		var matchStr = msg.match(/^(<[^<>]+>|\s)*$/);
		if (format == 'sms' || format == 'tweet' || matchStr == null) {
			Spring.remoting.submitForm('saveButton', 'messagesForm', {fragments: 'folders,tabcontent', msghtml: msg, recepients: matchArray.join(',')});
		} else {
			alert(emptyMessageWarn);
		}
	}
}

function sendMessageFromDialog(sourceId, formName, fragments, emptyMessageWarn, tooLongMessageWarn) {
	var formatElement = dojo.byId('msgformat');
	var format = getSelectOrHiddenValue(formatElement);
	
	var ok = true;
	
	var text = dojo.byId('sendMessageDialogArea').value;
	if (trim(text).length==0) {
		ok = false;
		alert(emptyMessageWarn);
	} 

	//Verify sms message
	if (ok) {
		if (format == 'sms' || format == 'tweet') {
			var text = dojo.byId('sendMessageDialogArea').value;
			//Check if too long
			var smsUsed = calculateSMSUsage(null, text, 'ERROR', false);
			if (smsUsed == 'ERROR') {
				ok = false;
				alert(tooLongMessageWarn);
			}
		} 
	}
	
	if (ok) {
		hideDijitDialog('sendMessageDialog');
		Spring.remoting.submitForm(sourceId, formName, 
				{ fragments:fragments, 
			      sendFriendId: dojo.byId('friendId').value, 
			      msgformat: format, 
			      text: text
			    });
	}
}

function sendMessage(unknownRecepientWarn, emptyRecepientWarn, emptySubjectWarn, emptyMessageWarn, tooLongMessageWarn) {
	//Verify recepients
	var matchArray = new Array();
	var ok = matchRecepients(dojo.byId('recepients').value, matchArray);
	if (ok && matchArray.length == 0) {
		ok = false;
		alert(emptyRecepientWarn);
	} else if (!ok) {
		alert(unknownRecepientWarn);
	} 
	
	var formatElement = dojo.byId('msgformat');
	var format = getSelectOrHiddenValue(formatElement);
	
	//Verify subject or sms message
	if (ok) {
		if (format == 'sms' || format == 'tweet') {
			var text = dojo.byId('shorttextarea').value;
			if (trim(text).length==0) {
				ok = false;
				alert(emptyMessageWarn);
			} else {
				//Check if too long
				var smsUsed = calculateSMSUsage(null, text, 'ERROR', false);
				if (smsUsed == 'ERROR') {
					ok = false;
					alert(tooLongMessageWarn);
				}
			}
		} else {
			var subject = dojo.byId('subject').value;
			if (trim(subject).length==0) {
				ok = false;
				alert(emptySubjectWarn);
			}
		}
	}
	
	//Get message
	if (ok) {
		var msg = getRichtext('msgcomposearea');
		//var matchStr = msg.match(/^(<[^<>]+>|\s)*$/);
		//if (matchStr == null) {
			Spring.remoting.submitForm('sendButton', 'messagesForm', {fragments: 'folders,tabcontent', msghtml: msg, recepients: matchArray.join(',')});
		//} else {
		//	alert(emptyMessageWarn);
		//}
	}
}

function changeMessageFormat(selectedValue, tooLongText) {
	var subjectFieldName = dojo.byId('subjectFieldName');
	var smsFieldName = dojo.byId('smsFieldName');
	var tweetFieldName = dojo.byId('tweetFieldName');
	var messageAreaDiv = dojo.byId('messageAreaDiv');
	var subjectText = dojo.byId('subjectText');
	var shortText = dojo.byId('shortText');
	var attachmentRow = dojo.byId('attachmentRow');
	
	if (selectedValue == 'sms') {
		calculateSMSUsage('remainingText', dojo.byId('shorttextarea').value, tooLongText, true, selectedValue);
		subjectFieldName.style.display='none';
		smsFieldName.style.display='block';
		tweetFieldName.style.display='none';
		messageAreaDiv.style.display='none';
		subjectText.style.display='none';
		attachmentRow.style.display='none';
		shortText.style.display='block';
		var tooltip = dojo.byId('remainingTextTooltip');
		var remainingTextHolder = dojo.byId('smsRemainingTextTooltip');
		tooltip.innerHTML = remainingTextHolder.innerHTML;
	} else if (selectedValue == 'tweet') {
		calculateSMSUsage('remainingText', dojo.byId('shorttextarea').value, tooLongText, true, selectedValue);
		subjectFieldName.style.display='none';
		smsFieldName.style.display='none';
		tweetFieldName.style.display='block';
		messageAreaDiv.style.display='none';
		subjectText.style.display='none';
		shortText.style.display='block';
		attachmentRow.style.display='none';
		var tooltip = dojo.byId('remainingTextTooltip');
		var remainingTextHolder = dojo.byId('tweetRemainingTextTooltip');
		tooltip.innerHTML = remainingTextHolder.innerHTML;
	} else {
		subjectFieldName.style.display='block';
		smsFieldName.style.display='none';
		tweetFieldName.style.display='none';
		messageAreaDiv.style.display='block';
		subjectText.style.display='block';
		shortText.style.display='none';
		attachmentRow.style.display='';
	}

}		

function changeMessageFormatFriends(selectedValue, tooLongText) {
	var shortText = dojo.byId('remainingTextWrapper');
	
	if (selectedValue == 'sms') {
		calculateSMSUsage('remainingText', dojo.byId('sendMessageDialogArea').value, tooLongText, true, selectedValue);
		shortText.style.display='block';
		var tooltip = dojo.byId('remainingTextTooltip');
		var remainingTextHolder = dojo.byId('smsRemainingTextTooltip');
		tooltip.innerHTML = remainingTextHolder.innerHTML;
	} else if (selectedValue == 'tweet') {
		calculateSMSUsage('remainingText', dojo.byId('sendMessageDialogArea').value, tooLongText, true, selectedValue);
		shortText.style.display='block';
		var tooltip = dojo.byId('remainingTextTooltip');
		var remainingTextHolder = dojo.byId('tweetRemainingTextTooltip');
		tooltip.innerHTML = remainingTextHolder.innerHTML;
	} else {
		shortText.style.display='none';
	}

}		

function getFormatInNotifCreate() {
	var format = 'none';
	var tweetElement = dojo.byId('notifformat_8');
	if (typeof(tweetElement) != 'undefined' && tweetElement != null) {
		if (tweetElement.checked)
			format = 'tweet';
		else
			format = 'sms';
	}

	return format;
}

function changeMessageFormatNotifCreate(tooLongText) {
	var shortText = dojo.byId('remainingTextWrapper');
	
	var format = getFormatInNotifCreate();
	
	if (format == 'tweet') {
		calculateSMSUsage('remainingText', dojo.byId('shorttextarea').value, tooLongText, true, true, 'tweet');
		shortText.style.display='block';
		var tooltip = dojo.byId('remainingTextTooltip');
		var remainingTextHolder = dojo.byId('tweetRemainingTextTooltip');
		tooltip.innerHTML = remainingTextHolder.innerHTML;
	} else {
		calculateSMSUsage('remainingText', dojo.byId('shorttextarea').value, tooLongText, true, true, 'sms');
		shortText.style.display='block';
		var tooltip = dojo.byId('remainingTextTooltip');
		var remainingTextHolder = dojo.byId('smsRemainingTextTooltip');
		tooltip.innerHTML = remainingTextHolder.innerHTML;
	} 

}		

function cancelMessage() {
	Spring.remoting.submitForm('cancelButton', 'messagesForm',{fragments: 'folders,tabcontent'});
}

function displayMessage(userMessageId, fragments) {
	var formElement = findParentByTagName('form', dojo.byId('displayMessage'));
	if (formElement) {
		Spring.remoting.submitForm('displayMessage', formElement.id ,{fragments: fragments, displayMessageId: userMessageId});
	}
}

function backToMessageList(fragments) {
	var formElement = findParentByTagName('form', dojo.byId('backButton'));
	if (formElement) {
		Spring.remoting.submitForm('backButton', formElement.id ,{fragments: fragments, backButton: 'backButton'});
	}
}

function matchRecepients(recepients, matchArray) {
	var ok = true;
	
	var ra = recepients.split(',');
	
	for (var i=0; i<ra.length && ok; i++) {
		var name = trim(ra[i]);
		if (name.length>0) {
			//Get match
			var found = false;
	      	for (var j=0; j<buddies.length && !found; j++) {
	      		if (name == buddies[j].value) {
	      			found = true;
	      			matchArray.push(buddies[j].id);
	      		}
	      	}
	      	if (!found)
	      		ok = false;
		}
	}
	
	return ok;
}

function getRichtext(editorid) {
	var editor = dijit.byId(editorid);
	if (editor != null)
		return trim(dijit.byId(editorid).getValue(false));
	else
		return '';
	
}

function copyRichtextValue(editorId, hiddenId) {
	var content = getRichtext(editorId);
	var hidden = dojo.byId(hiddenId);
	if (hidden != null)
		dojo.byId(hiddenId).value = content;
}

function copyRichtextValueToInnerHtml(editorId, hiddenId) {
	var content = getRichtext(editorId);
	var hidden = dojo.byId(hiddenId);
	if (hidden != null)
		dojo.byId(hiddenId).innerHTML = content;
}

//Array with "The 7 bit defaultalphabet"
gsmalphabet = new Array('@', '£', '$', '¥', 'è', 'é', 'ù', 'ì', 'ò', 'Ç', '\n', 'Ø', 'ø', '\r','Å', 'å','\u0394', '_', '\u03a6', '\u0393', '\u039b', '\u03a9', '\u03a0','\u03a8', '\u03a3', '\u0398', '\u039e','', 'Æ', 'æ', 'ß', 'É', ' ', '!', '"', '#', '¤', '%', '&', '\'', '(', ')','*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7','8', '9', ':', ';', '<', '=', '>', '?', '¡', 'A', 'B', 'C', 'D', 'E','F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S','T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Ä', 'Ö', 'Ñ', 'Ü', '§', '¿', 'a','b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o','p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'ä', 'ö', 'ñ','ü', 'à');

function processSMSUsageCharacter(displayElement, format, e) {
	var element = dojo.byId(displayElement);
	
	var endFlag = (format == 'sms' || format == 'tweet') && element.innerHTML.match((/^[0-9\/]*$/)) ==  null;
	if (!endFlag) {
		if (format == 'sms') {
			var v = element.innerHTML.split('/');
			var remaining = parseInt(v[0]);
			var smsUsed = parseInt(v[1]);
			
			endFlag = ((remaining == 0 && smsUsed == 3) || smsUsed > 3);
		} else if (format == 'tweet') {
			var remaining = parseInt(element.innerHTML);
			
			endFlag = (remaining == 0);
		}
	}
	
	if (endFlag) {
		//Only allow keys and delete and backspace
		 var kC  = (window.event) ?    // MSIE or Firefox?
	             event.keyCode : e.keyCode;
	      var Down = (window.event) ?   
	                40 : e.DOM_VK_DOWN // MSIE : Firefox
	      var Up = (window.event) ?   
	                38 : e.DOM_VK_UP // MSIE : Firefox
	      var Left = (window.event) ?   
	                37 : e.DOM_VK_LEFT // MSIE : Firefox
	      var Right = (window.event) ?   
	                39 : e.DOM_VK_RIGHT // MSIE : Firefox
  	      var Back = (window.event) ?   
               8 : e.DOM_VK_BACK_SPACE // MSIE : Firefox
   	      var Delete = (window.event) ?   
                  46 : e.DOM_VK_DELETE // MSIE : Firefox
                  
          if (kC == Down || kC == Up || kC == Left || kC == Right || kC == Back || kC == Delete)
        	  return true;
          else
        	  return false;
		
	} else
		return true;
}

function getSelectOrHiddenValue(element) {
	if (element != null) {
		if (element.options != null) {
			return element.options[element.selectedIndex].value;
		} else
			return element.value;
	}
	
	return null;
}

function calculateSMSUsage(displayElement, text, tooLongText, setValue, smsAsAllFormats, format) {
	var smsUsedString;

	if (format == 'sms' || smsAsAllFormats != null && smsAsAllFormats && format != 'tweet') {
		var unicode = false;
		for(var i=0;i<text.length && !unicode;i++) {
			var index = getSevenBit(text.charAt(i));
			if (index == -1) {
				unicode = true;
			}
		}
		
		var maxChars;
		if (unicode) {
			if (text.length > 70)
				maxChars = 67;
			else
				maxChars = 70;
		} else {
			if (text.length > 160)
				maxChars = 153;
			else
				maxChars = 160;
		}
		
		//Calculate remaining and number of sms messages
		if (text.length == 0)
			smsUsedString = '160/1';
		else {
			if (text.length > maxChars) {
				var smsUsed = Math.floor(text.length/maxChars);
				var remaining
				if (text.length%maxChars != 0) {
					smsUsed += 1;
				    remaining = maxChars - text.length%maxChars;
				} else
					remaining = 0;
				if (smsUsed >3)
					smsUsedString = tooLongText;
				else
					smsUsedString =  remaining+'/'+smsUsed;
			} else
				smsUsedString =  (maxChars-text.length)+'/1';
		}
	} else if (format == 'tweet') {
		
		if (text.length>140) {
			smsUsedString = tooLongText;
		} else {
			var remaining = 140-text.length;
			smsUsedString = remaining+'';
		}
	}
	
	if (setValue) {
		var element = dojo.byId(displayElement);
		element.innerHTML = smsUsedString;
	}
	
	return smsUsedString;
}

function getSevenBit(character) //sp
{
	for(var i=0;i<gsmalphabet.length;i++)
	{
		if(gsmalphabet[i] == character)
		{
			return i;
		}
	}
	
	return -1;
}


function changeClass(element, newClass) {
	element.className = newClass;
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function makeClassBrowserSelection(element, rowIndex, classId, hasChildren) {
	var spanElements = dojo.byId('classBrowserColumn'+rowIndex).getElementsByTagName('div');
	var classItems = new Array();
	for (var j=0; j<spanElements.length; j++) {
		if (spanElements[j].id != null && spanElements[j].id.indexOf('classItem')== 0)
			classItems.push(spanElements[j]);
	}
	
	var newClicked = false;
	
	for (var i=0; i<classItems.length; i++) {
		if (classItems[i].id.indexOf('classItem')==0) {
			if (classItems[i].id == 'classItem'+classId) {
				if (classItems[i].className != 'classItemSelected') {
					//New one clicked
					newClicked = true;
					classItems[i].className = 'classItemSelected';
				}
			} else {
				//Not the selected entry
				if (classItems[i].className == 'classItemSelected')
					classItems[i].className = 'classItem';
			}
		}
	}
	
	dojo.byId('selectedClassId').value = classId;
	
	//if (newClicked) 
	springSubmit(element.id, {fragments: 'classbrowser,locationnavigator', folderid: element.id.substring(9)});
	
}

function scrollBrowser() {
	var idxs = dojo.byId('browserIndexes').value.split(',');
	var level = parseInt(dojo.byId('numberOfLevels').value);
	
	for (var i=0; i<idxs.length; i++) {
		var index = parseInt(idxs[i])
		if (index>13) {
			dojo.byId('classBrowserColumn'+i).scrollTop = (index-13)*20; 
		}
	}
	
	var container = dojo.byId('classBrowserDiv');
	var w = container.clientWidth;
	if (level*140>w-280)
	 	container.scrollLeft = level*140+280-w;
}

function showClassBrowserDialog(type) {
	var selectedClassId = parseInt(dojo.byId('selectedClassId').value);
	
	if (selectedClassId > 0) {
		if (type == 'delete')
			showDijitDialog('warningdialog','deleteClassId', selectedClassId);
		else if (type == 'rename')
			showDijitDialog('renamedialog');
		else if (type == 'move')
			Spring.remoting.submitForm('moveButton','classadminform', {fragments: 'classcreate,classbuttons,locationnavigator,classbrowser', moveClassId: selectedClassId});
	}
	
	//Should be able to move to Root
	if (type == 'paste')
		Spring.remoting.submitForm('pasteButton','classadminform', {fragments: 'classcreate,classbuttons,locationnavigator,classbrowser', moveClassId: selectedClassId});
}

function currencySelectorDialog(type, priceType, formName) {
    if (type == 'submit') {
		var cS = dojo.byId('currencydialogSelect');
		var currency = cS.options[cS.selectedIndex].value;
		if (trim(currency).length>0)
			Spring.remoting.submitForm('addCurrency',formName, {fragments: 'tabcontent', priceType: dojo.byId('priceType').value, currency: currency, aspectAjaxRequest: true});
    } else if (type == 'remove') {
		Spring.remoting.submitForm('removeCurrency',formName, {fragments: 'tabcontent', priceType: dojo.byId('removePriceType').value, currency: dojo.byId('removeCurrency').value, aspectAjaxRequest: true});
	} else {
		showDijitDialog('currencydialog','priceType', priceType);
	}
}

function DropDownMenu() {
	var menuItems = new Array();
	
	this.addMenuItem = function(itemName, itemValue) {
		var menuItem = new MenuItem();
		menuItem.setMenuItem(itemName, itemValue);
		this.menuItem.push(subMenuItem);
	}
}

function MenuItem() {
	var menuItems = null;
	var name;
	var value;
	var selected;
	
	this.setMenuItem = function(itemName, itemValue) {
		this.name = itemName;
		this.value = itemValue;
		this.selected = false;
	}
	
	this.addSubMenuItem = function(itemName, itemValue) {
		if (this.menuItems == null)
			this.menuItems = new Array();
			
		var subMenuItem = new MenuItem();
		subMenuItem.setMenuItem(itemName, itemValue);
		this.menuItems.push(subMenuItem);
	}
	
	this.selectItem = function() {
		this.selected = true;
	}
	
	this.unselectItem = function() {
		this.selected = false;
	}
}

function redisplayDropDownMenu(placeHolderId,restoreFrom,saveIn, properties) {
	var widget = dijit.byId(placeHolderId+'DDButton');
	if (widget != null) {
		var dropDownContainer = dojo.byId(placeHolderId);
		var ddMenu = widget.dropDown;
		var title = widget.label;
		widget.destroy();
		var ddButton = new dijit.form.DropDownButton({label: title, dropDown: ddMenu, id:placeHolderId+'DDButton'},dropDownContainer);
		if (properties != null && typeof(properties)!='undefined') {
			if (typeof(properties.cnStyle)!='undefined') {
				ddButton.containerNode.style.cssText = properties.cnStyle;
			}
		}
		
		if (restoreFrom != null)
			restoreDDButtonSelection(placeHolderId+'DDButton',restoreFrom,saveIn);
		
		return true;
	} else
		return false;
}


function createDijitPopupMenu(placeHolderId, menu, pos) {
	var pMenu;
	var catMenuId = placeHolderId;
    pMenu = new gw.menu.gwMenu({
    	leftClickToOpen: true , 
        targetNodeIds: [catMenuId],
        position: [pos]
    });
	
	//alert(getPos(friendsElement).x);

    if (menu.menuItems && menu.menuItems.length > 0) {
    	for (var i=0;i<menu.menuItems.length; i++) {
			 	var tempValue = menu.menuItems[i].name;
			 	var functionName = new Function(tempValue);
    		   pMenu.addChild(new dijit.MenuItem({
   	            label: menu.menuItems[i].value,
   	         onClick: functionName
	        }));
    	}
    }	        
    pMenu.startup();
	 
    return pMenu;
}


dojo.declare("gw.menu.gwMenu", dijit.Menu, {

	defaultPosition : ["after", "before"],
	
	position: [],
	
_openMyself: function(/*Event*/ e){
	  // summary:
	  //  Internal function for opening myself when the user
	  //  does a right-click or something similar	
	  if(this.leftClickToOpen&&e.button>0){
		  return;
	  }
	  dojo.stopEvent(e);

	  var self=this;
	  var savedFocus = dijit.getFocus(this);
	 
	  function closeAndRestoreFocus(){
		   // user has clicked on a menu or popup
		   dijit.focus(savedFocus);
		   dijit.popup.close(self);
	  }
	  
	var align = {};
	var ltr = this.isLeftToRight();
	dojo.forEach( (this.position && this.position.length) ? this.position : this.defaultPosition, function(pos){
		switch(pos){
			case "after":				
				align[ltr ? "BR" : "BL"] = ltr ? "BL" : "BR";
				break;
			case "before":
				align[ltr ? "BL" : "BR"] = ltr ? "BR" : "BL";
				break;
			case "below":
				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
				align[ltr ? "BL" : "BR"] = ltr ? "TL" : "TR";
				align[ltr ? "BR" : "BL"] = ltr ? "TR" : "TL";
				break;
			case "above":
			default:
				// first try to align left borders, next try to align right borders (or reverse for RTL mode)
				align[ltr ? "TL" : "TR"] = ltr ? "BL" : "BR";
				align[ltr ? "TR" : "TL"] = ltr ? "BR" : "BL";
				break;
		}
	});
	  
	  dijit.popup.open({
	   popup: this,
	   around: dojo.byId(this.targetNodeIds[0]),
	   onExecute: closeAndRestoreFocus,
	   onCancel: closeAndRestoreFocus,
	   orient: align
	  });
	  this.focus();

	  this._onBlur = function(){
		   this.inherited('_onBlur', arguments);
		   // Usually the parent closes the child widget but if this is a context
		   // menu then there is no parent
		   dijit.popup.close(this);
		   // don't try to restore focus; user has clicked another part of the screen
		   // and set focus there
	  }
	}
})


function getPos(inputElement) {
    var coords =  new Object();
    coords.x = 0;
    coords.y = 0;
    try {
        targetElement = inputElement;
        if(targetElement.x && targetElement.y) {
            coords.x = targetElement.x;
            coords.y = targetElement.y;
        } else {
            if(targetElement.offsetParent) {
                coords.x += targetElement.offsetLeft;
                coords.y += targetElement.offsetTop;
                while(targetElement = targetElement.offsetParent) {
                    coords.x += targetElement.offsetLeft;
                    coords.y += targetElement.offsetTop;
                }
            } else {
                //alert("Could not find any reference for coordinate positioning.");
            }
        }
        return coords;
    } catch(error) {
        //alert(error.msg);
        return coords;
    }
}
function writeDropDownMenu(placeHolderId, menu, title, focusOnClose, saveIn, allowParentSelection, submitFunc, restoreFrom, properties) {
	if (menu) {
		var ddMenu = new dijit.Menu({ style: "display: none;"});
		var ddButtonId = placeHolderId+'DDButton';
		
		//Get value to be restored
		var restoreValue = null;
		if (restoreFrom != null) {
			var restoreFromElement = dojo.byId(restoreFrom);
			if (restoreFromElement != null)
				restoreValue = restoreFromElement.value;
		}
		
		//Create title menuItem
		var titleMenuItem = new MenuItem();
		if (title != null && typeof(title)!='undefined') {
			if (typeof(title.value)!='undefined' && title.value != null) {
				titleMenuItem.name = title.name;
				titleMenuItem.value = title.value;
			} else {
				titleMenuItem.name = title;
				titleMenuItem.value = '0';
			}
			var child = new dijit.MenuItem({label: titleMenuItem.name, name: titleMenuItem.value, disabled: false});
			child.connect(child.domNode, 'ondijitclick', function(){processMenuItemClick(ddButtonId,titleMenuItem,focusOnClose,saveIn,submitFunc)});
			ddMenu.addChild(child);
		} else {
			if (restoreValue==null || restoreValue=='') {
				//Select first element
				restoreValue = menu.menuItems[0].value;
			}
		}
		var restoreMenuItem = null;
		if (menu.menuItems && menu.menuItems.length > 0) {
			for (var i=0;i<menu.menuItems.length; i++) {
				var rmiTmp = addChild(ddButtonId, ddMenu, menu.menuItems[i], focusOnClose, saveIn, allowParentSelection, submitFunc, restoreValue);
				if (restoreMenuItem == null && rmiTmp != null)
					restoreMenuItem = rmiTmp;
			}
		}
		var ddProps = {label: titleMenuItem.name, dropDown: ddMenu, id:placeHolderId+'DDButton'};
		if (typeof(properties)!='undefined') {
			for (var key in properties) {
				ddProps[key] = properties[key];
			}
		}	
		var ddButton = new dijit.form.DropDownButton(ddProps,dojo.byId(placeHolderId));
		if (restoreMenuItem != null) {
			restoreDDButtonSelection(ddButtonId, restoreMenuItem, saveIn);
		}
		if (properties != null && typeof(properties)!='undefined') {
			if (typeof(properties.cnStyle)!='undefined') {
				ddButton.containerNode.style.cssText = properties.cnStyle;
			}
		}
	}
}

function addChild(ddButtonId, parent, menuItem, focusOnClose, saveIn, allowParentSelection, submitFunc, restoreValue) {
	var child = null;
	var restoreMenuItem = null;
	if (menuItem.menuItems && menuItem.menuItems.length > 0) {
		var ddSubMenu = new dijit.Menu({ style: "display: none;"});
		child = new dijit.PopupMenuItem({label: menuItem.name, name: menuItem.value, disabled: false, popup: ddSubMenu});
		for (var i=0;i<menuItem.menuItems.length; i++) {
			var rmiTmp = addChild(ddButtonId, ddSubMenu, menuItem.menuItems[i], focusOnClose, saveIn, allowParentSelection, submitFunc, restoreValue);
			if (restoreMenuItem == null && rmiTmp != null)
				restoreMenuItem = rmiTmp;
		}
		if (allowParentSelection)
			child.connect(child.domNode, 'ondijitclick', function(){processMenuItemClick(ddButtonId,menuItem,focusOnClose,saveIn,submitFunc)});
		child.arrowWrapper.style.display = 'block';
	} else {
		child = new dijit.MenuItem({label: menuItem.name, name: menuItem.value, disabled: false});
		child.connect(child.domNode, 'ondijitclick', function(){processMenuItemClick(ddButtonId,menuItem,focusOnClose,saveIn,submitFunc)});
	}
	
	if (restoreMenuItem ==  null && menuItem.value == restoreValue) {	
		restoreMenuItem = menuItem;
	}
	
	parent.addChild(child);
	
	return restoreMenuItem;
	
}

function setDropDownListWidth(ddButtonId, newWidth) {
	var ddButton = dijit.byId(ddButtonId);
	
	if (ddButton != null) {
		var containerNode = ddButton.containerNode;
		var titleNode = ddButton.titleNode;
		
		containerNode.style.width = newWidth + 'px';
		titleNode.style.width = (newWidth+20) + 'px';
	}
}

function processMenuItemClick(ddButtonId, menuItem,focusOnClose,saveIn,submitFunc) {
	restoreDDButtonSelection(ddButtonId, menuItem, saveIn);
	
	if (focusOnClose != null){
		var focusElement = dojo.byId(focusOnClose);
		if (focusElement != null)
			focusElement.focus();
	
		if (submitFunc != null)
			submitFunc();
	}
}

function restoreDDButtonSelection(ddButtonId, menuItem,saveIn) {
	var ddButton = dijit.byId(ddButtonId);
	var containerNode = ddButton.containerNode;
	var saveInElement = dojo.byId(saveIn);
	//Save width
	cnWidth = containerNode.style.width;
	if (cnWidth == null || cnWidth == '')
		containerNode.style.width = containerNode.clientWidth + 'px';
	if (menuItem.name) {
		containerNode.innerHTML = menuItem.name;
		if (saveInElement != null) {
			saveInElement.value = menuItem.value;
		}
	} else {
		//Get value to be restored
		var restoreValue = null;
		if (menuItem != null) {
			var restoreFromElement = dojo.byId(menuItem);
			if (restoreFromElement != null)
				restoreValue = restoreFromElement.value;
		}			
		
		if (restoreValue != null) {
			//Find child that has value
			foundMenuItem = findDDMenuItem(ddButton.dropDown, restoreValue);
			
			if (foundMenuItem != null) {
				containerNode.innerHTML = foundMenuItem.label;
				if (saveInElement != null) {
					saveInElement.value = foundMenuItem.name;
				}
			}
		}
	}
	
}

function findDDMenuItem(menu, value) {
	if (menu != null) {
		var childMenuItems = menu.getChildren();
		if (childMenuItems != null) {
			for (var i=0; i<childMenuItems.length; i++) {
				if (childMenuItems[i].name == value)
					return childMenuItems[i];
				
				if (childMenuItems[i].popup != null) {
					var foundItem = findDDMenuItem(childMenuItems[i].popup, value);
					if (foundItem != null)
						return foundItem;
				}
			}
		}
	} 
	
	return null;
	
}

function findMenuItem(menuItem, value) {
	if (menuItem != null) {
		if (typeof(menuItem.value) != 'undefined' && menuItem.value == value) {
			return menuItem;
		}
		var childMenuItems = menuItem.menuItems;
		var found = null;
		if (typeof(childMenuItems) != 'undefined' && childMenuItems != null) {
			for (var i=0; i<childMenuItems.length && found == null; i++) {
				found = findMenuItem(childMenuItems[i], value);
			}
		}
		return found;
	} 
	
	return null;
	
}

function disableEnterKey(e)
{
     var key;     
     if(window.event)
          key = window.event.keyCode; //IE
     else
          key = e.which; //firefox     

     return (key != 13);
}

function disableEnterKeyForConnect(e)
{
     var key;     
     if(window.event)
          key = window.event.keyCode; //IE
     else
          key = e.which; //firefox     

     if (key == 13) {
     	dojo.stopEvent(e);
     }
}

function animateBackgroundImageChange(divId, changeFunc, fadeOutDuration, fadeInDuration) {
	var element = dojo.byId(divId);
	if (element != null) {
		var fadeOut = dojo.fadeOut({node: divId,duration: fadeOutDuration});
		var fadeIn = dojo.fadeIn({node: divId,duration: fadeInDuration});
  		var fadeOutIn = dojo.fx.chain([fadeOut,fadeIn]);
  		
  		dojo.connect(fadeOut, 'onEnd', changeFunc);

		fadeOutIn.play();
  	}
}

function displayRepeatUntilRow(show) {
	var element = dojo.byId('repeatuntilrow');
	if (show)
		element.style.display = '';
  	else
		element.style.display = 'none';
}

function showDiscountPriceDialog(dialogId, containerName) {
	//Check if there are selected checkboxes
	var checkboxes = dojo.byId(containerName).getElementsByTagName('input');
	var checked = false;
	for (var i=0; i < checkboxes.length && !checked; i++) {
		type = checkboxes[i].getAttribute('type');
		if (type == 'checkbox' && checkboxes[i].checked) {
			checked = true;
		}
	}
	
	if (checked)
		showDijitDialog(dialogId);
	
}

function addProductToPromotion(dialogId,invalidText) {
	//Check if value is valid
	var value = trim(dojo.byId(dialogId+'Input').value);
	var discount = 0;
	var discountType = 'percentage';
	
	if (value.length >0) {
		var matchStr = value.match(/^-?[0-9]+(\.[0-9])?%?$/);
		if (matchStr == null) {
			var msgElement = dojo.byId(dialogId+'Message');
			msgElement.innerHTML += invalidText;
			msgElement.style.display = 'block';
			
			return; //Invalid value
		} else {
			if (value.match(/^.*%+$/) !=  null) {
				value = value.substring(0, value.length-1);
			} else {
				discountType = 'price';
			}
		}
		
		discount = parseFloat(value);
		
		if (discountType == 'percentage' && (discount > 100 || discount < -100)) {
			var msgElement = dojo.byId(dialogId+'Message');
			msgElement.innerHTML += invalidText;
			msgElement.style.display = 'block';
			
			return; //Invalid value
		}
		
	}
	
	hideDijitDialog(dialogId);
	Spring.remoting.submitForm('addProductToPromotion','maintainPromotionForm',{fragments:'promotionproductlist',aspectAjaxRequest: true,discount:discount,discountType:discountType});
}

function destroyWidget(widgetId) {
    if (dijit.byId(widgetId)) {
        dijit.byId(widgetId).destroy(true);
    }
} 

function startSimpleDD() {
	if (IE) {
		dojo.query('.simpleDD').forEach(function(selectTag) {
			dojo.connect(selectTag, "onmouseover", function () {dojo.addClass(selectTag, 'over');});
			dojo.connect(selectTag, "onmouseout", function () {dojo.removeClass(selectTag, 'over');});
		});	
	}
}

function reconnectToSearchBox(elementId) {
	dojo.addOnLoad(function(){
		var selectTag = dojo.byId(elementId);
		
		dojo.connect(selectTag, "onfocus", function () {
			selectTag.value = '';
			var selectTagBlurElement = dojo.byId(selectTag.id+'BlurValue');
			if (selectTagBlurElement != null)
				selectTagBlurElement.value = '';
			dojo.addClass(selectTag, 'gwButtonTextBoxFocus');
		});
		dojo.connect(selectTag, "onblur", function () {
			dojo.removeClass(selectTag, 'gwButtonTextBoxFocus');
			var selectTagHelpElement = dojo.byId(selectTag.id+'HelpValue');
			var selectTagBlurElement = dojo.byId(selectTag.id+'BlurValue');
			if (selectTagBlurElement != null)
				selectTagBlurElement.value = selectTag.value;
			if ((selectTag.value == null || trim(selectTag.value) == '') && selectTagHelpElement != null)
				selectTag.value = selectTagHelpElement.value;
		});
	});
	
}

function showConfirmSubscription(serviceName) {
	//Set text
	var text = dojo.byId('subscribeText').innerHTML.replace('SERVICE_TITLE',dojo.byId(serviceName+'SubscribeTitle').innerHTML);
	text = text.replace('SERVICE_PRICE',dojo.byId(serviceName+'Price').innerHTML);
	var trialDateElement = dojo.byId(serviceName+'TrialEnd');
	if (trialDateElement != null)
		text = text+'<br/>'+ dojo.byId('subscribeTrialText').innerHTML.replace('TRIAL_END_DATE',trialDateElement.value);
	text = text + '<br/>'+dojo.byId('areyousure').innerHTML;
	
	dojo.byId('subscriptionDialogText').innerHTML = text;
	showDijitDialog('subscriptionDialog', 'confirmSubscribeServiceName', serviceName, 'confirmSubscriptionCommandId', 'serviceCommand_'+serviceName);
}

function showConfirmUnSubscription(serviceName, subscriptionId, userServiceId, purge) {
	//Set text
	var text = dojo.byId('unsubscribeText').innerHTML.replace('SERVICE_TITLE',dojo.byId(serviceName+'SubscribeTitle').innerHTML);
	if (purge)
		text = text + '<br/>'+dojo.byId('unsubscribePurgeText').innerHTML;
	text = text + '<br/>'+dojo.byId('areyousure').innerHTML + '<div>&nbsp;</div>';
	
	dojo.byId('unsubscribeDialogText').innerHTML = text;
	
	showDijitDialog('unsubscribeDialog', 'confirmUnsubscribeServiceName', serviceName, 'confirmUnsubscribeCommandId', 'serviceCommand_'+serviceName,
			'confirmUnsubscribeSubscriptionId', subscriptionId, 'confirmUnsubscribeUserServiceId', userServiceId);
}

function submitPlanSubscriptionChange(element) {
	if (element.options[element.selectedIndex].value != "") 
		springSubmit(element.id, {fragments: 'changesubscriptiontable', changePlan: true});
}

function changeWebContentTheme(themeName, themeImage, themeDesc) {
		dojo.byId('themeName').value = themeName;
		dojo.byId('themeDesc').innerHTML = themeDesc;
		dojo.byId('themeImage').src = themeImage;
}

function fileUploadAnimate(dialogId) {
	var hideDiv = dojo.byId(dialogId+'ContentWrapper');
	var showDiv = dojo.byId(dialogId+'ContentWrapperOverlay');
	if (hideDiv!= null && showDiv!=null){
		var offset=dojo.coords(hideDiv, true);
		showDiv.style.width=offset.w+'px';
		if (offset.h>123)
			showDiv.style.height=offset.h+'px';
		else
			showDiv.style.height='123px';
		dojo.query('div',showDiv).forEach(function(selectTag){
			selectTag.style.width=offset.w+'px';
		});
		hideDiv.style.display='none';
		showDiv.style.display='block';
		showDiv.style.visibility='visible';
		if (IE) {
			dojo.query('img',showDiv).forEach(function(selectTag){
				selectTag.src=selectTag.src+'?random='+selectTag;
			});
		}
			
	}
}

