/****************************************************************
 * Class-handling helper functions
 ****************************************************************
 */
var aCachedREs = new Array();
function classCacheRE(sClass) {
	if(!aCachedREs[ sClass ])
		aCachedREs[ sClass ] = new RegExp('^\\s*(.*)\\b('+ sClass +')\\b(.*)\\s*$');
	return( aCachedREs[ sClass ] );
}

function classMatch(oObject, sClass) {
	if(oObject && oObject.className)
		return(classCacheRE(sClass).exec(oObject.className));
	return(false);
}

function classAdd(oObject, sClass) {
	if(oObject && !classMatch(oObject, sClass))
		oObject.className += ' '+ sClass;
}

function classDel(oObject, sClass) {
	var aMatches = classMatch(oObject, sClass);
	if(aMatches)
		oObject.className = aMatches[1] + aMatches[ aMatches.length - 1 ];
}

/****************************************************************
 * Lanbel-handling helper functions
 ****************************************************************
 */
function initOverLabels () {
  if (!document.getElementById) return;

  var labels, id, field;
   // Set focus and blur handlers to hide and show
  // labels with 'overlabel' class names.
  labels = document.getElementsByTagName('label');
  for (var i = 0; i < labels.length; i++) {

	if(classMatch(labels[i], 'sys_overlabel')) {

	  // Skip labels that do not have a named association
	  // with another field.
	  id = labels[i].htmlFor || labels[i].getAttribute ('for');
	  if (!id || !(field = document.getElementById(id))) {
		continue;
	  }

	  // Change the applied class to hover the label
	  // over the form field.
	  classAdd(labels[i], 'sys_overlabel-apply');

	  // Hide any fields having an initial value.
	  //if (field.value !== '') {
	  //hideLabel(field.getAttribute('id'), true);
	  //}

	  //update - actually blank the field
	  field.value='';

	  // Set handlers to show and hide labels.
	  field.onfocus = function () {
		hideLabel(this.getAttribute('id'), true);
	  };
	  field.onblur = function () {
		if (this.value === '') {
		  hideLabel(this.getAttribute('id'), false);
		}
	  };

	  // Handle clicks to label elements (for Safari).
	  labels[i].onclick = function () {
		var id, field;
		id = this.getAttribute('for');
		if (id && (field = document.getElementById(id))) {
		  field.focus();
		}
	  };

	}
  }
};

function hideLabel (field_id, hide) {
  var field_for;
  var labels = document.getElementsByTagName('label');
  for (var i = 0; i < labels.length; i++) {
	field_for = labels[i].htmlFor || labels[i].getAttribute('for');
	if (field_for == field_id) {
	  labels[i].style.marginLeft= (hide) ? '-10000px' : '5px';
	  return true;
	}
  }
}


window.onload = function () 
{
    initEditBoxes();
    generateHelpMessages();
    initOverLabels();
    
    try
    {
        EnableLoginFields();
    }
    catch (e) { }
}


/****************************************************************
 * Quick search functions
 ***************************************************************/
 
 /*When job type is permanent, display min salary
 When job type is temp, display min hourly wage
 When job type is all, display neither*/
 
 function swapWageSelector(jobType) {
 	minSalary = document.getElementById('minSalaryLabel');
 	minWage = document.getElementById('minWageLabel');
 	
 	switch(jobType) {
 		case 'permanent':
			minSalary.style.display="block";
 			minSalary.style.visibility="visible";
 			minWage.style.display="none";
 			minWage.style.visibility="hidden";
 			if (document.getElementById('salaryHr')) {
	 			document.getElementById('salaryHr').style.display = 'block'
			}
 		break;
 		
 		case 'temporary':
 			minWage.style.display="block";
 			minWage.style.visibility="visible"; 			
 			minSalary.style.display="none";
 			minSalary.style.visibility="hidden";
 			if (document.getElementById('salaryHr')) {
	 			document.getElementById('salaryHr').style.display = 'block'
			}
 		break;
 		
 		default:
 			minSalary.style.display="none";
 			minSalary.style.visibility="hidden";
 			minWage.style.display="none";
 			minWage.style.visibility="hidden";
 			if (document.getElementById('salaryHr')) {
	 			document.getElementById('salaryHr').style.display = 'none'
			}
 		break;
	}
 }

/****************************************************************
 * Help messages
 ***************************************************************/
function toggleHelpMessage(messageID,state,title,message) {
	messagebox=document.getElementById(messageID);	
	if(state=="show" && !messagebox.hasChildNodes()) {
		
		var arrowDiv = document.createElement('div');
		arrowDiv.className = 'arrow';
		messagebox.appendChild(arrowDiv);
		
		var messageTitle=document.createElement('h4');
		messagebox.appendChild(messageTitle);
		messageTitle.appendChild(document.createTextNode(title));
		
		var messageContent=document.createElement('p');
		messagebox.appendChild(messageContent);
		messageContent.appendChild(document.createTextNode(message));
		
		messagebox.style.display="block";
    if (!IsIE())
    {
        return;
    }

    var iFrame = document.createElement("iframe");
    iFrame.setAttribute("src", "");
    iFrame.style.position="absolute";
    iFrame.style.right = 0 + 'px';
    iFrame.style.top = 45 + 'px';
    iFrame.style.width = messagebox.clientWidth + 'px';;
    iFrame.style.height = messagebox.clientHeight + 'px';
    iFrame.style.zIndex=1;
		
    messagebox.parentNode.appendChild(iFrame);

    gPopupIFrame=iFrame;  
		
	} else if(state=="hide") {
		messagebox.style.display="none";
		
		if (IsIE()) {
	    messagebox.parentNode.removeChild(gPopupIFrame);
	    gPopupIFrame=null;
		}

		do {
			messagebox.removeChild(messagebox.firstChild);       
		} while (messagebox.hasChildNodes()); 
	}
}

function IsIE() {
	return (navigator.appName=="Microsoft Internet Explorer");
}

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 generateHelpMessages() {
	var i;
	for (var i=0;i<document.images.length;i++) {
		if(document.images[i].className=='help') {
			var messageContent = document.images[i].getAttribute('title').split(' - ',2);
			document.images[i].setAttribute('title','');
			
			var helpMessage = document.createElement('span');
			helpMessage.setAttribute('id','helpMessage' + i);
			helpMessage.className = 'message top';
			document.images[i].parentNode.appendChild(helpMessage);
			
			document.images[i].parentNode.onmouseover = setHelpMouseover('helpMessage'+i,'show',messageContent[0],messageContent[1]);
			document.images[i].parentNode.onfocus = document.images[i].parentNode.onmouseover;
			
			document.images[i].parentNode.onmouseout = setHelpMouseover('helpMessage'+i,'hide');
			document.images[i].parentNode.onblur = document.images[i].parentNode.onmouseout;
		}
	}
}

function setHelpMouseover(messageID,state,title,message) {
	if(state=='show') {
		var mouseoverFunction = function () {toggleHelpMessage(messageID,state,title,message);}
	} else {
		var mouseoverFunction = function () {toggleHelpMessage(messageID,state);}
	}
  return mouseoverFunction;
}

function initEditBoxes() {
	var div=document.getElementsByTagName('div');
	for (var d=0;d<div.length;d++) {
		if (div[d].className=="popoutBox") {
			var elementid = div[d].getAttribute('id');
			div[d].className="editBox";
			div[d].style.display="none";
			var editButton=document.getElementById(elementid +'Button');
			//editButton.onclick=setEditButtonEvent(elementid, '');
			//var selectAllCheckbox = document.getElementById(elementid + 'SelectAll');
			//selectAllCheckbox.onclick = setSelectAllEvent(elementid);
			
//			var okButton=document.createElement('img');
//			okButton.src='/Resources/Images/buttons/ok.png';
//			okButton.className='button';
//			okButton.onclick = setEditButtonEvent(elementid);
//			div[d].appendChild(okButton);
//			
			div[d].style.left = findPos(editButton)[0];
			
		}	
	}	
}

function toggleDisplay(divid, elementid) {
	var div=document.getElementsByTagName('div');
	for (var i=0;i<div.length;i++) {
		if (div[i].className=='editBox') {
			if (div[i].id!=divid) {
				div[i].style.display='none';
			}	else {
				if(div[i].style.display=='none') {
					div[i].style.display='block';
					div[i].style.left=180 + 'px';
				}	else {
					div[i].style.display='none';
					saveCheckboxStates(divid, elementid);
					//alert("hiding " + elementid);
				}
			}
		}
	}
}

function setEditButtonEvent(divid, elementid) {
	var eventFunction = function () {
		toggleDisplay(divid, elementid);
		return false;
	}
	return eventFunction;
}

//function setSelectAllEvent(elementid) {
//	var onchangeFunction = function () {
//		toggleCheckboxes(elementid);
//	}
//	return onchangeFunction;
//}

//function toggleCheckboxes(elementid) {
//	var checkboxes=document.getElementById(elementid).getElementsByTagName('input');
//	if (!document.getElementById(elementid + 'SelectAll').checked) {
//		for (var i=0;i<checkboxes.length;i++) {
//			if (checkboxes[i].id!= elementid + 'SelectAll') {
//				checkboxes[i].checked=false;
//			}
//		}
//	} else {
//		for (var i=0;i<checkboxes.length;i++) {
//			if (checkboxes[i].id!= elementid + 'SelectAll') {
//				checkboxes[i].checked=true;
//			}
//		}	
//	}		
//}

function toggleCheckboxes(divid, elementid)
{
	var checkboxes=document.getElementById(divid).getElementsByTagName('input');
	if (!document.getElementById(elementid).checked) {
		for (var i=0;i<checkboxes.length;i++) {
			if (checkboxes[i].id!= elementid) {
				checkboxes[i].checked=false;
			}
		}
	} else {
		for (var i=0;i<checkboxes.length;i++) {
			if (checkboxes[i].id!= elementid) {
				checkboxes[i].checked=true;
			}
		}	
	}		
}

function toggleSelectAll(divid, selectAllElementid)
{
//    alert("divid=" + divid + " :ele=" + selectAllElementid);
    var checkBoxCount = 0;
    var selectionCount = 0;
	var checkboxes = document.getElementById(divid).getElementsByTagName('input');
	for (var i=0;i<checkboxes.length;i++) {
		if (checkboxes[i].id != selectAllElementid && checkboxes[i].type != 'hidden') {
		    ++checkBoxCount;
		    if (checkboxes[i].checked)
		    {
		        ++selectionCount;
		    }
		}
	}
	var chkSelectAll = document.getElementById(selectAllElementid);
	chkSelectAll.checked = (checkBoxCount == selectionCount);
}

function saveCheckboxStates(divid, elementid) {
	var list=document.getElementById(divid + 'List');
	
	while (list.hasChildNodes()) {
		list.removeChild(list.firstChild);
	}
	
	var checkboxes = document.getElementById(divid).getElementsByTagName('input');
	var bFoundCheckedBox=false;
	for (var i=0;i<checkboxes.length;i++) {
		if (checkboxes[i].id!=(elementid) && checkboxes[i].type != 'hidden' && checkboxes[i].checked) {
			bFoundCheckedBox=true;	
			var listItem = document.createElement('li');
			//var listItemContent = checkboxes[i].parentNode.getElementsByTagName('span')[0].firstChild.nodeValue;
			var listItemContent = '';

			if (checkboxes[i].parentNode.parentNode.nextSibling.firstChild)
			{
			    listItemContent = checkboxes[i].parentNode.parentNode.nextSibling.firstChild.nodeValue;
			}
			else
			{
			    listItemContent = checkboxes[i].parentNode.parentNode.nextSibling.nextSibling.firstChild.nodeValue;
			}
			listItem.appendChild(document.createTextNode(listItemContent));
			list.appendChild(listItem);
		}
	}

//function saveCheckboxStates(elementid) {
//	var list=document.getElementById(elementid + 'List');
//	
//	while (list.hasChildNodes()) {
//		list.removeChild(list.firstChild);
//	}
//	
//	var checkboxes = document.getElementById(elementid).getElementsByTagName('input');
//	var bFoundCheckedBox=false;
//	for (var i=0;i<checkboxes.length;i++) {
//		if (checkboxes[i].id!=('<%(elementid + ''SelectAll'').ClientID%>') && checkboxes[i].type != 'hidden' && checkboxes[i].checked) {
//			bFoundCheckedBox=true;	
//			var listItem = document.createElement('li');
//			//var listItemContent = checkboxes[i].parentNode.getElementsByTagName('span')[0].firstChild.nodeValue;
//			var listItemContent = checkboxes[i].parentNode.parentNode.nextSibling.firstChild.nodeValue;
//			listItem.appendChild(document.createTextNode(listItemContent));
//			list.appendChild(listItem);
//		}
//	}

//	if (!bFoundCheckedBox) {
//		var listItem = document.createElement('li');
//		listItem.appendChild(document.createTextNode('none'));
//		list.appendChild(listItem); 
//	}
}

/****************************************************************
 * Validation Functions
 ***************************************************************/
 
function ValidateLength(txtBox, maxLength)
{
    if(txtBox)
    {
        return (txtBox.value.length < maxLength);
    }
}

function TrimText(txtBox, maxLength)
{
    if(txtBox)
    {
        txtBox.value = txtBox.value.substring(0, maxLength);
    }
}
