﻿/*** Layout Related Common Functions ****/
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function compareDates(objDate1, objDate2, timeComparison)
{
   	if(objDate1.getFullYear() - objDate2.getFullYear() != 0)
		return objDate1.getFullYear() - objDate2.getFullYear();

	if(objDate1.getMonth() - objDate2.getMonth() != 0)
		return objDate1.getMonth() - objDate2.getMonth();
		
	if(objDate1.getDate() - objDate2.getDate() != 0)
		return objDate1.getDate() - objDate2.getDate();
		
	if(!timeComparison)
		return 0;
		
	if(objDate1.getHours() - objDate2.getHours() != 0)
		return objDate1.getHours() - objDate2.getHours();
		
	if(objDate1.getMinutes() - objDate2.getMinutes() != 0)
		return objDate1.getMinutes() - objDate2.getMinutes();
		
	if(objDate1.getSeconds() - objDate2.getSeconds() != 0)
		return objDate1.getSeconds() - objDate2.getSeconds();

	return (objDate1.getMilliseconds() - objDate2.getMilliseconds())
}
function deselectOtherRadioButton(chkcontrol)
{
    var e;
    e = document.aspnetForm.elements ;
    var i=0;
    for (i=0; i < e.length; i ++)
    {
        if ( e[i].type =='checkbox' && e[i].id.indexOf("dgrHchk")!= -1  )
        {
                e[i].checked= true;
        }
        if ( e[i].type =='radio' && e[i].id != chkcontrol)
        {
                e[i].checked= false;
        }
   }       
}  
function RedirectToPage(query,pageName,id)
{
    alert(getElementById(id));
    alert(pageName+'?'+query+'='+id.Text)
    return pageName+'?'+query+'='+id.Text;
}    
function CheckChars()
{
   
    if((event.keyCode > 96 && event.keyCode < 123) || (event.keyCode > 64 && event.keyCode < 91) || (event.keyCode > 47 && event.keyCode < 58) || event.keyCode == 32 || event.keyCode == 9)
       event.returnValue = true;
      
    else
        event.returnValue = false;
}
function PopupPage(pageUrl, pageWidth, pageHeight)
{
	//Code to display in the center goes here
	var left = (screen.availWidth - pageWidth)/2;
	var top = (screen.availHeight - pageHeight)/2;
	if (isNaN(left)) 
	left = 0;
	if (isNaN(top)) 
	top = 0;
	var newPopup = window.open(pageUrl, "_blank", "dependent=yes, directories=no, location=no, menubar=no, personalbar=no, resizable=Yes, scrollbars=yes, status=yes, toolbar=no, height=" + pageHeight + ", width=" + pageWidth + ", left=" + left + ", top=" + top + ", dialog=yes");
	return newPopup;
}
function countChars(cBoxName, cTxtName, maxKeys, e, enabled) 
{
    var str = new String(cBoxName.value);
    if (str.length >= maxKeys) {
		cBoxName.value = cBoxName.value.substring(0,maxKeys*1); 
	}
	var showstr = maxKeys - cBoxName.value.length + " characters remaining of " + maxKeys ;
	if (enabled == 'False')
		document.getElementById(cTxtName).innerHTML = showstr;		
}        	
function chkLimit(cBoxName, maxKeys, e)
{
	var key;
	var str = new String(cBoxName.value);
	var oEvent = (window.event) ? window.event : e;
	if (window.event){
		key = e.keyCode;
	}
	else{
		key = e.which;
	}
	if (str.length >= maxKeys)
	{
		if(key != 8)	
		{
			oEvent.returnValue = false;
			oEvent.cancelBubble = true;
			if(document.all){ //IE
				oEvent.keyCode = 0;
			}else{ //NS,FF
				oEvent.preventDefault();
				oEvent.stopPropagation();
			}	
		}
	}
}
/****** Common String functions ******/
String.prototype.trim = trim;
String.prototype.replaceAll = replaceAll;
function trim()
{
	if (this.length > 0)
	{
		var retstr = this.replace(/^\s+/,"");
		retstr = retstr.replace(/\s+$/,"");
		return retstr;		
	}
} 
function replaceAll(str1, str2)
{
	var idx1 = 0;
	var idx2 = this.indexOf(str1);
	var retStr = "";
	while(idx2 >= 0)
	{
		retStr += this.substring(idx1,idx2) + str2;
		idx1 = idx2 + str1.length;
		idx2 = this.indexOf(str1,idx1);
	}
	retStr += this.substring(idx1);
	return retStr;

}
function getListSelectionCount(lstId) {
	var lstControl = document.getElementById(lstId);
	var iSelectionCnt = 0;
	if(typeof(lstControl.options) != 'undefined') {
		for(var idx = 0; idx < lstControl.options.length; idx++)
			iSelectionCnt += lstControl.options[idx].selected ? 1 : 0;
	}
	return iSelectionCnt;
}

/****** Element Movements within a single list / between 2 lists ******/
// Check whether the object is a valid object
function isValid(oObject)
{
	if(oObject == null) return false;
	if(typeof(oObject) == "undefined") return false;
	return true;
}

// Check whether the object is of type select (dropdown / list)
function isValidSelect(oObject)
{
	if(!isValid(oObject) || typeof(oObject.options) == "undefined") return false;
	return true;
}

// Unselects the options of the given select object
function unselect(oObject)
{
	// Remove the selection from all the options
	for (var i = 0; i < oObject.length; i++)
	{
		oObject.options[i].selected = false;
	}
}

function move(oFrom, oTo, maxlimit, maxLimitMessage)
{
	// If the parameter is an object and is of type select or select-multiple
	
	if(!isValidSelect(oFrom) || !isValidSelect(oTo))
	{
		return false;
	}

	var access = 1;
	var removelist = new Array();
	var rlcount = 0;
	var refreshthis = 0;
	if(maxlimit==null)
		maxlimit = 0;
	if(maxLimitMessage==null)
		maxLimitMessage = "";
	var messageDisplayed = false;
		
	unselect(oTo);
	for (var i = 0; i < oFrom.length; i++)
	{
		if (oFrom.options[i].selected)
		{
			if(maxlimit == 0 || oTo.options.length < maxlimit)
			{
				var selText	= oFrom.options[i].text;
				var selValue= oFrom.options[i].value;
				var newOptionIdx = oTo.options.length;
				oTo.options[newOptionIdx] = new Option(selText,selValue);
				oTo.options[newOptionIdx].selected = true;
				removelist[rlcount] = i;
				rlcount++;
			}
			else
			{
				if(!messageDisplayed)
				{
					alert(maxLimitMessage);
					messageDisplayed = true;
				}
			}				
		}
	}

	unselect(oFrom);
	for (var i = removelist.length; i>0;  i--)
	{
		oFrom.options[removelist[i-1]]= null;
	}
	return (rlcount > 0);
}

function copyListSelectedItems(oFrom, oTo, maxlimit, maxLimitMessage)
{
	// If the parameter is an object and is of type select or select-multiple
	if(!isValidSelect(oFrom) || !isValidSelect(oTo))
	{
		return false;
	}

	var access = 1;
	var removelist = new Array();
	var removeNodes = new Array();
	var removeNodesLevel = new Array();
	var rlcount = 0;
	var refreshthis = 0;
	if(maxlimit==null)
		maxlimit = 0;
	if(maxLimitMessage==null)
		maxLimitMessage = "";
	var messageDisplayed = false;
		
	unselect(oTo);
	
	for (var i = 0; i < oFrom.length; i++)
	{
		if (oFrom.options[i].selected)
		{
			
			var selText	= oFrom.options[i].text;
			var selValue= oFrom.options[i].value;
			var itemLevel= oFrom.options[i].itemLevel;
			var selParentLoc = oFrom.options[i].parentValue ;
			var newOptionIdx = oTo.options.length;
			
			oTo.options[newOptionIdx] = new Option(selText,selValue + "-" + selParentLoc + "-" + itemLevel);
			oTo.options[newOptionIdx].selected = true;
			
			removelist[rlcount] = i;
			removeNodes[rlcount] = selValue ;
			removeNodesLevel[rlcount] = itemLevel ;
			rlcount++;
		    
		}
	}
	
	for (var i = 0; i < oTo.length; i++)
	{
	    oTo.options[i].selected = true;   
	}
	 
	for ( i=0 ; i< removeNodes.length ; i++ )
	{
	    if ( removeNodesLevel[i] != "2" )
	    {
	        for ( j=0 ; j < oFrom.length ; j++ )    
	        {
	            if ( oFrom.options[j].value == removeNodes[i])
	            {
    	            
	                oFrom.removeChild(oFrom.options[j]);
	            }
	        }
	    }
	}
    
	unselect(oFrom);
	return (rlcount > 0);
}
function removeListSelectedItems(oFrom, oTo, maxlimit, maxLimitMessage)
{
	// If the parameter is an object and is of type select or select-multiple
	if(!isValidSelect(oFrom) || !isValidSelect(oTo))
	{
		return false;
	}

	var access = 1;
	var removelist = new Array();
	var removeNodes = new Array();
	var rlcount = 0;
	var refreshthis = 0;
	if(maxlimit==null)
		maxlimit = 0;
	if(maxLimitMessage==null)
		maxLimitMessage = "";
	var messageDisplayed = false;
		
	unselect(oTo);
	for (var i = 0; i < oFrom.length; i++)
	{
		if (oFrom.options[i].selected)
		{
			if(maxlimit == 0 || oTo.options.length < maxlimit)
			{
				var selText	= oFrom.options[i].text;
				var selValue= oFrom.options[i].value;
				//alert ( oFrom.options[i].parentLevel);
				var newOptionIdx = oTo.options.length;
				var arrValues= selValue.split("-");
				
				oTo.options[newOptionIdx] = new Option(selText,selValue);
				//oTo.options[newOptionIdx].selected = true;
				removelist[rlcount] = i;
				rlcount++;
				removeNodes[rlcount] = selValue ;
				insertAdjacentOptions(oTo,arrValues[0],selText,arrValues[2],arrValues[1]);
			}
			else
			{
				if(!messageDisplayed)
				{
					alert(maxLimitMessage);
					messageDisplayed = true;
				}
			}				
		}
	}

    for ( i=0 ; i< removeNodes.length ; i++ )
	{
	    for ( j=0 ; j < oFrom.length ; j++ )    
	    {
	        if ( oFrom.options[j].value == removeNodes[i])
	        {
	            oFrom.removeChild(oFrom.options[j]);
	        }
	    }
	}
	
	unselect(oFrom);
	return (rlcount > 0);
	
	
}

function insertAdjacentOptions( objTo,objValue,objText,objLevel,objParent)
{
    
    if ( objLevel == "3")
    {
        for ( i=0 ; i< objTo.length ; i++ )    
        {
            if ( objTo.options[i].value == objParent )
            {
                var oOption = document.createElement("OPTION");
                objTo.insertBefore(oOption,objTo.options[i+1]);
                oOption.innerText = objText;
                oOption.value = objValue;
                /*var x = document.createAttribute('itemLevel',objLevel);
                oOption.setAttributeNode(x);
                var y = document.createAttribute('parentValue',objParent);
                oOption.setAttributeNode(y);
                alert (oOption.getAttribute('parentValue'));*/
                return;
            }
            
        }
    }
}

function clearList(obj)
{
	obj.options.length = 0;
}

function moveUp(obj)
{
	if (!isValidSelect(obj)) return;
	if (0 >= obj.selectedIndex) return;

	var selIdx = obj.selectedIndex;
	var movedOption = new Option(obj.options[selIdx-1].text, obj.options[selIdx-1].value);

	unselect(obj);
	obj.options[selIdx-1] = new Option(obj.options[selIdx].text, obj.options[selIdx].value);
	obj.options[selIdx-1].selected = true;
	obj.options[selIdx] = movedOption;	
}

function moveDown(obj)
{
	if (!isValidSelect(obj)) return;
	if ((obj.options.length-1) <= obj.selectedIndex) return;

	var selIdx = obj.selectedIndex;
	if (selIdx < 0)
		return;
	var movedOption = new Option(obj.options[selIdx+1].text, obj.options[selIdx+1].value);

	unselect(obj);
	obj.options[selIdx+1] = new Option(obj.options[selIdx].text, obj.options[selIdx].value);
	obj.options[selIdx+1].selected = true;
	obj.options[selIdx] = movedOption;	
}
/*******************************/
function openJobLocation(advId, strRootPath) {
	PopupPage(strRootPath + "Common/UserControls/JobLocations.aspx?AdvId=" + advId, 300, 300);





}

function openProfileLocation(profileId, strRootPath) {
	PopupPage(strRootPath + "Common/UserControls/ProfileLocations.aspx?ProfileId=" + profileId, 300, 300);



}

function openLocations(strRootPath) {
	PopupPage(strRootPath + "Common/UserControls/all-locations.aspx?", 700, 550);
}
function addBookmark(url, title) {
	if (window.sidebar) { 
		window.sidebar.addPanel(title, url,""); 
	} else if( document.all ) {
		window.external.AddFavorite( url, title);
	} else if( window.opera && window.print ) {
		return true;
	}
}

function CheckValidDateFormatAndRange(controlValue,controlLabel,oSrc, args)
{
    
    var validformat=/^\d{1,2}\/\d{1,2}\/\d{4}$/ ;//Basic check for format validity
    var returnval=false;
    
    if ( controlValue != '')
    {
        if (!validformat.test(controlValue))
            oSrc.errormessage = 'Invalid Date Format. Please enter correct ' + controlLabel + " in (dd/mm/yyyy) format.";
        else
        { 
            //Detailed check for valid date ranges
            var dayfield=controlValue.split("/")[0];
            var monthfield=controlValue.split("/")[1];
            var yearfield=controlValue.split("/")[2];
           
            var dayobj = new Date(yearfield, monthfield-1, dayfield);
            if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
                oSrc.errormessage = 'Invalid Day, Month, or Year range detected. Please correct ' + controlLabel ;
            else
            {
                returnval = true;
            }
        }
    }
    else
    {
        returnval = true ;
    }
    args.IsValid = returnval ;
 }
function displayTable(mytable){
	document.getElementById(mytable).style.display = 'block';
}
function hideTable(mytable){
	if (document.getElementById(mytable).style.display == 'none') {
		document.getElementById(mytable).style.display = 'block';
	} else {
		document.getElementById(mytable).style.display = 'none';
	}
}

/* Keeps track of whether a select box is being mouseover'd or is mouseout'd */
var mouseover_selects = Array();

function selectReplacement(obj, ulclassname) {
	obj.className += ' replaced';
	var ul = document.createElement('ul');
	ul.className = (ulclassname!=undefined)?ulclassname:'selectReplacement';
	ul.onclick=function(){
		var lis = obj.parentNode.getElementsByTagName('li');
		lis[obj.selectedIndex].className='selected';
	};
	ul.onmouseover=function(){
		mouseover_selects[obj.id]=true;
	}
	ul.onmouseout=function() {
		mouseover_selects[obj.id] = function() {
			ul.className = ul.className.replace(new RegExp(" selectOpen\\b"), '');
		};
		setTimeout('var thevalue=mouseover_selects["'+obj.id+'"];if(typeof(thevalue)=="function"){thevalue();};',500);
	};
	var opts = obj.options;
	for (var i=0; i<opts.length; i++) {
		var selectedOpt;
		if (opts[i].selected) {
			selectedOpt = i;
			break;
		} else {
			selectedOpt = 0;
		}
	}
	for (var i=0; i<opts.length; i++) {
		var li = document.createElement('li');
		var txt = document.createTextNode(opts[i].text);
		li.appendChild(txt);
		li.selIndex = opts[i].index;
		li.selectID = obj.id;
		li.onclick = function() {
			selectMe(this);
			if (obj.onchange) { obj.onchange(); }
		};
		li.onmouseover=function() {
			mouseover_selects[obj.id]=true;
		};
		li.onmouseout=function() {
			mouseover_selects[obj.id] = function() {
				li.parentNode.className = li.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
			};
			setTimeout('var thevalue=mouseover_selects["'+obj.id+'"];if(typeof(thevalue)=="function"){thevalue();};',500);
		};
		if (i == selectedOpt) {
			li.className = 'selected';
			li.onclick = function() {
				this.parentNode.className += ' selectOpen';
				this.onclick = function() {
					selectMe(this);
					if (obj.onchange) { obj.onchange(); }
				};
			};
		}
		if (window.attachEvent) {
			li.onmouseover = function() {
				this.className += ' hover';
				mouseover_selects[obj.id]=true;
			};
			li.onmouseout = function() {
				this.className = 
				this.className.replace(new RegExp(" hover\\b"), '');
				mouseover_selects[obj.id] = function() {
					li.parentNode.className = li.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
				};
				setTimeout('var thevalue=mouseover_selects["'+obj.id+'"];if(typeof(thevalue)=="function"){thevalue();};',500);
			};
		}
		ul.appendChild(li);
	}
	obj.parentNode.insertBefore(ul,obj);
}
function selectMe(obj) {
	var lis = obj.parentNode.getElementsByTagName('li');
	for (var i=0; i<lis.length; i++) {
		if (lis[i] != obj) {
			lis[i].className='';
			lis[i].onclick = function() {
				selectMe(this);
			};
		} else {
			setVal(obj.selectID, obj.selIndex);
			obj.className='selected';
			obj.parentNode.className = obj.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
			obj.onclick = function() {
				obj.parentNode.className += ' selectOpen';
				this.onclick = function() {
					selectMe(this);
				}
			}
		}
	}
}
function setVal(objID, selIndex) {
	var obj = document.getElementById(objID);
	obj.selectedIndex = selIndex;
}
function setForm(ulclassname) {
	var s = document.getElementsByTagName('select');
	for (var i=0; i<s.length; i++) {
		if(ulclassname!=undefined){
			selectReplacement(s[i],ulclassname);
		}
		else {
			selectReplacement(s[i]);
		}
	}
}

/* Check the form keyword has been filled or a search filter selectbox has been selected before submitting */
function checkJobSearchForm(theform) {
	theform.Keyword.value
		= (theform.Keyword.value == 'Job Search') ? ''
		: (theform.Keyword.value == 'Search Candidates') ? ''
		: (theform.Keyword.value == 'Candidate Search') ? ''
		: theform.Keyword.value;
	if(theform.Keyword.value.length > 0 &&  theform.Keyword.value.length < 3){
		alert('The search term must be at least 3 characters long');
		return false;
	}
	else if((theform.Keyword.value.length < 3) && (theform.WorkType.value + theform.Category.value + theform.Location.value == '')){
		alert('Please enter a search term or choose a Work Type, Category or Location');
		return false;
	}

	// Just return true if we don't have the radio buttons
	if (theform.SearchType==undefined)
		return true;

	// Alter form action based on selected radio button
	for(var i=0; i<theform.SearchType.length; i++) {
		if(theform.SearchType[i].checked) {
			theform.action = '/' + theform.SearchType[i].value + '/process';
			break;
		}
	}

	return true;
}

/* Check the form keyword has been filled or a search filter selectbox has been selected before submitting */
function checkCandidateSearchForm(theform) {
	return checkJobSearchForm(theform);
}

/* Greybox does not display correctly */
function greybox_scrollfix() {
	scroll(0,0);
}

function show_hide(element_id, visibility_property, visibility_value, invisibility_value, presume_invisible) {

	// The property to use to toggle an object's visibility
	if (!visibility_property)
		visibility_property = 'display';

	// The value to use to make an object visible
	if (!visibility_value)
		visibility_value = 'inline';

	// The value to use to make an object invisible
	if (!invisibility_value)
		invisibility_value = 'none';

	// Bool: presume it is INvisible if visibility cannot be reliably determined
	// particularly for initial visibility
	if (presume_invisible==undefined)
		presume_invisible = false;

	var element = document.getElementById(element_id);

	if (!element)
		return 0;

	var current_visibility_value = element.style[visibility_property];
	// Currently visible
	element.style[visibility_property]
		= (!current_visibility_value && presume_invisible)	?	visibility_value
		: (!current_visibility_value)						?	invisibility_value
		: (current_visibility_value == visibility_value)	?	invisibility_value
		:														visibility_value
		;

	return true;
}

/**
 * If select_box's current value is in select_box_matching_values,
 * make required_input_id input a required field (via a '*' in the label)
 */
function select_make_required(select_box, select_box_matching_values, required_input_ids, value_attribute) {
	for(var i=0; i<select_box_matching_values.length; i++) {
		selected_value = null;
		if (value_attribute == 'label' || value_attribute == 'text') {
			selected_value = select_box.options[select_box.selectedIndex].text;
		}
		if (selected_value == null) {
			selected_value = select_box.options[select_box.selectedIndex].value;
		}
		if ( selected_value == select_box_matching_values[i] ) {
			make_required(required_input_ids);
			return;
		}
	}
	// If here, make them non-required
	make_required(required_input_ids, true);
}

/**
 * Make all of these inputs look as though required (or non-required)
 */
function make_required(required_input_ids, non_required) {
	if (non_required == undefined) {
		non_required = false;
	}
	var labels = document.getElementsByTagName('label');

	// all required inputs
	for (var i=0; i<required_input_ids.length; i++) {

		var required_input = document.getElementById(required_input_ids[i]);
		if (required_input == undefined) {
			continue;
		}
		else {
			current_class = required_input.className;
			if (non_required) {
				new_class = current_class.replace(/\berror\b/, '');
				required_input.className = new_class;
			}
		}

		// all labels
		for (var l=0; l<labels.length; l++) {

			// if this label is 'for' the required_input_id in the current iteration
			var for_value = labels[l].getAttribute('for') ? labels[l].getAttribute('for') : labels[l].getAttribute('htmlFor');
			if ( for_value == required_input_ids[i] ) {
				var label_spans = (labels[l].getElementsByTagName('span'));
				var found = false;

				// all spans within this label
				for (var s=0; s<label_spans.length; s++){
					if(label_spans[s].className='form-required') {
						label_spans[s].style.display = non_required ? 'none' : 'inline';
						found = true;
					}
				}
				if (!found) {
					// never had the span, so create and append it
					required_span = document.createElement('span');
					required_span.title = 'This field is required.';
					required_span.className = 'form-required';
					required_span.id = required_input_ids[i] + '-span';
					required_span.style.display = non_required ? 'none' : 'inline';
					required_span.appendChild(document.createTextNode('*'));
					labels[l].appendChild(required_span);
					continue;
				}
			}
		}
	}
}
