//***************************************************//
//*** Script by Stefano Roncari - www.eggsist.com ***//
//***************************************************//

/*** This function returns an Array with the LABEL object and it's value. ***/
function getLabelFor(fieldObj)
{
	var labels = document.getElementsByTagName('LABEL');
	var foundLabel = false;
	for (var l=0; l<labels.length; l++)
	{
		if (fieldObj.id == labels[l].htmlFor) {foundLabel=labels[l]; break;}
	}
	if (foundLabel) {return [foundLabel,foundLabel.firstChild.nodeValue];}
	else {return [null,null];}
}

function checkSkills()
{
	skillSelected = 0;
	skillFields = document.getElementById("skillSelection").getElementsByTagName("select");
	for (b=0; b<skillFields.length; b++)
	{
		if (!skillFields[b].options[0].selected) {skillSelected++;}
	}
	if (skillFields.length==0 || skillSelected==0) {alert('Warning! You must select some skills.'); return false;}
}

/** For *SPECIFIK* form only: check required "GROUPS" of checkboxes **/
function checkReqFieldset(myFS)
{
	CBSelected=0;
	for (f=0; f<myFS.childNodes.length; f++)
	{
		if ( (myFS.childNodes[f].type=="checkbox" || myFS.childNodes[f].type=="radio") && myFS.childNodes[f].checked) {CBSelected++;}
	}
	if (CBSelected==0) {
		alert('Warning! Field "' +myFS.title+ '" is required.');
		myFS.getElementsByTagName("input")[0].focus();
		return false;
	}
}

function setContract(contractField)
{
	contractField.value = "";
	myFields = document.getElementsByTagName("input");
	for (b=0; b<myFields.length; b++)
	{
		if (myFields[b].type=="checkbox" && myFields[b].id.indexOf("contract")!=-1 && myFields[b].checked)
		{
			// We create a sequence of numbers (like "1234"), to list all accepted contract forms
			contractField.value += "" + myFields[b].value;
		}
	}
	//alert(contractField.value);
}

function formIsLocked()
{
	theErrors = document.getElementsByClassName('loginError');
	if (theErrors.length!=0) {
		alert('Invalid login information. Please correct.');
		myTD = theErrors[0].parentNode.parentNode.parentNode; //IMG->SPAN->SPAN->TD
		myErrField = myTD.getElementsByTagName('input')[0];
		myErrField.select();
		myErrField.focus();
		return true;
	}
	else {
		return false;
	}
}

function checkForm(quale)
{
	theWebForm = document.getElementById(quale);

	// Only for SPECIFIK form: if ther are required fieldsets
	theFieldsets = theWebForm.getElementsByTagName('fieldset');
	for (f=0; f<theFieldsets.length; f++) {
		mySet = theFieldsets[f];
		for (a=0; a<reqFields.length; a++) {
			if (reqFields[a] == mySet.id) {
				if (checkReqFieldset(mySet)==false) {return false;}
			}
		}
	}

	for (i=0; i<theWebForm.elements.length; i++)
	{
		myField = theWebForm.elements[i];
		if (myField.name) // This excludes useless fields, as well as fieldsets and legends
		{
			setQuotes(myField); // Fixes all problems with single and double quotes
			
			re1 = /\r\n/; // "\r" is the "carriage return", which always comes before "\n" when the user inputs a new line, so that deleting "\n" is not enough!
			emailReg = /^[\S]{2,}[@]{1}[\S]{2,}[.]{1}[\S]{2,8}$/;  // "\S" means "any non-whitespace character"
			dataReg = /^(\d{4})(\-)(\d{2})(\-)(\d{2})$/; // "\d" means "any digit", like [0-9]
			intReg = /^[0-9]*[1-9][0-9]*$/;
			spaceRegExp = /(\s)/;
			specialRegExp = /^([\w\.]+)$/;	// W = any non-alphanumeric character

			/*Start of loop on Required fields*/
			for (a=0; a<reqFields.length; a++)
			{
				myLabel = getLabelFor(myField)[1];
				if (myField.name==reqFields[a] && myField.value=="" && myField.disabled==false)
				{
					alert('Warning! Field "' +myLabel.toUpperCase()+ '" is required.');
					if (myField.type!="hidden") {theWebForm.elements[i].focus();}
					return false;
				}
				else if (myField.name==reqFields[a] && myField.type=="select-one" && myField.options[0].selected)
				{
					alert('Warning! Field "' +myLabel.toUpperCase()+ '" is required.');
					theWebForm.elements[i].focus();
					return false;
				}
			}
			/*End of loop on Required fields*/

			if (myField.type=="hidden" && myField.name.indexOf("contract")!=-1)
			{
				setContract(myField);
			}
			if (myField.name.indexOf("mail")!=-1 && myField.value!="" && !emailReg.test(myField.value))
			{
				alert('Warning! Invalid e-mail address.');
				myField.select(); myField.focus();
				return false;
			}
			else if (myField.name.indexOf("date")!=-1 && myField.value!="" && !dataReg.test(myField.value))
			{
				alert('Warning! Invalid date. Format "yyyy-mm-dd" is required.');
				myField.select(); myField.focus();
				return false;
			}
			else if ((myField.name.indexOf("salary")!=-1 || myField.name.indexOf("length")!=-1) && myField.value!="" && !intReg.test(myField.value))
			{
				myLabel = getLabelFor(myField)[1];
				alert('Warning! Invalid format. Interger is required for field "' +myLabel+ '".');
				myField.select(); myField.focus();
				return false;
			}
			else if ((myField.name=='u_name' || myField.name=='u_pwd') && (myField.value.length<5 || spaceRegExp.test(myField.value) || !specialRegExp.test(myField.value)))
			{
				myLabel = getLabelFor(myField)[1];
				alert('Warning! ' +myLabel+ ' must be at least 5 characters long and can only include\nLetters and Numbers (no blank spaces or special characters).');
				myField.select(); myField.focus();
				return false;
			}
			else if (myField.name=='u_pwd2' && myField.value!=document.getElementById('u_pwd').value)
			{
				alert('Warning! Your Confirmation Password does not match the first one.');
				myField.select(); myField.focus();
				return false;
			}

		}
	}

	if (theWebForm.id=='positionForm' || theWebForm.id=='resumeForm')
	{
		if (checkSkills()==false) {return false;}
	}
	
	if (theWebForm.id=='registerForm') {
		if (formIsLocked()) {return false;}
	}

	theWebForm.submit();
	showHideLoading(1);
	return true;
}

function setQuotes(myField)
{
	regQuot = /\'/g;
	regQuot2 = /\"/g;
	if (myField.type=="text" || myField.type=="textarea")
	{
		myString = "" + myField.value;
		myString = myString.replace(regQuot,"&rsquo;");
		myString = myString.replace(regQuot2,"&rdquo;");
		myField.value = myString;
	}
}

function formWarning()
{
	if (!confirm("Warning! Are you sure to leave the page without submitting the data?"))
	{
		showHideLoading(2); // Eventually hide loading divs
		this.blur(); return false;
	}
	else {/*alert(this.originalHref);*/ window.location.href = this.originalHref;}
}

function checkLinks4FormExit()
{
	for (q=0; q<document.forms.length; q++)
	{
		theForm = document.forms[q];
		if (theForm.id!="loginForm" && theForm.name!="searchForm" && theForm.name!="contactForm" && theForm.name!="matchForm" && theForm.name!="unlock" && theForm.name!="emailForm" && theForm.name!="linkForm" && theForm.name!="rechargeForm") // If there is a form which is NOT the login form..
		{
			for (j=0; j<document.getElementsByTagName("a").length; j++)
			{
				myLink = document.getElementsByTagName("a")[j];
				if (myLink.href.indexOf('void(null)')==-1) // If the <a> object is NOT a JavaScript link
				{
					myLink.originalHref = myLink.href;
					myLink.href='javascript:void(null);'
					addEvent(myLink,"mousedown",formWarning);
				}
			}
		}
	}
}
addEvent(window,"load",checkLinks4FormExit);

/** checkReq() and checkLevel() make sure that a "req" skill has a level assigned. **/
function checkReq(myCheckbox)
{
	mySelect = myCheckbox.parentNode.getElementsByTagName("select")[0];
	myLabel = getLabelFor(myCheckbox)[0];
	if (myCheckbox.checked && !mySelect.options[0].selected) {myLabel.className="req";}
	else {myLabel.className="noReq"; myCheckbox.checked=false;}
}

function checkLevel(mySelect)
{
	myLabel = getLabelFor(mySelect)[0];
	if (mySelect.options[0].selected)
	{
		myLabel.className = "noLevelled";
		myCheckbox = mySelect.parentNode.getElementsByTagName("input")[0];
		if (myCheckbox) {checkReq(myCheckbox);} // In the resume' profile, there is no "REQ" checkbox
	}
	else
	{
		myLabel.className = "levelled";
	}
}

function checkLength(myObj,maxLen)
{
	myObj.maxLen = maxLen;
	addEvent(myObj,"keyup",imposeMaxLength);
}

function imposeMaxLength(e)
{
	var evt = e || window.event;
	percent = Math.round(100*this.value.length/this.maxLen);
	myDiv = document.getElementById('fillRate');
	myDiv.style.width = (percent<100) ? percent+"%" : "100%";

	if (evt.keyCode!=8 && evt.keyCode!=46 && evt.keyCode!=17) { // 8=BACKSPACE; 46=DEL; 17=CTRL
		if (this.value.length >= this.maxLen) { alert("Please input a short text! You can write a long description in your resume' file (DOC or PDF)!"); this.value=this.value.substring(0,this.maxLen-1); }
	}
}
