// set functions to work with a forms																		//
// writed by Leonid Volkov /leon@catom.com/, Minicy Catom Ltd. /www.catom.com/	//
// v. 2.2, jul. 20 2004																								//

/////////// standard trim function - clean spaces, tabs and new line symbols at the beginning and the end of the string ////////
function trim(str)
{	
	var lead = 0, trail = str.length - 1;	
	while(str.charCodeAt(lead)  < 33) lead++;
	while(str.charCodeAt(trail)  < 33) trail--;
	return lead > trail ? '' : str.substring(lead, trail + 1);
}

////////// Check the Search forms //////////////
function checkSearch(frmObj)
{
	for (i=0; i<frmObj.length; i++)
	{
		if (frmObj[i].type.indexOf('text') == 0)
		{
			frmObj[i].value = trim(frmObj[i].value);
			if (frmObj[i].value.length == 0)
			{
				alert('Please type the keyword to search');
				frmObj[i].focus();
				return false;
				break;
			}
		}
	}
	return true;
}

////////// Check all other forms //////////////
function isValidEmail(strEmail)
{
	 if (strEmail.indexOf('@') <= 0 || strEmail.indexOf('.') <= 0) 
	{
		alert('Please type a valid e-mail address!');
		return false;
	}
	return true;
}

function isValidPhone(strPhone) 
{
	var goodChars = "0123456789()-+ ";
	var i = 0;	
	for (i =0; i < strPhone.length; i++)
	{
		if (goodChars.indexOf(strPhone.charAt(i)) == -1)
		{
			alert('Please type a valid phone number!');
			return false;
		} 
	}	
	if (strPhone.length < 6)
	{
		alert('Please type a full phone number!');
		return false;
	}
	return true;
}

function isNumber(strNumber) 
{
	var goodChars = "0123456789 ";
	var i = 0;	
	for (i =0; i < strNumber.length; i++)
	{
		if (goodChars.indexOf(strNumber.charAt(i)) == -1)
		{
			alert('Please type a valid number!');
			return false;
		} 
	}	
	return true;
}

function isHumanName(strName) 
{
	var notGoodChars = "0123456789!@#$%^&*()_+=<>?/.,\|~`\"[]";
	var i = 0;	
	for (i =0; i < strName.length; i++)
	{
		if (notGoodChars.indexOf(strName.charAt(i)) != -1)
		{
			alert('Please type a valid human name!');
			return false;
		} 
	}	
	return true;
}

function isValidCVFileName(fileName) 
{
	var strExt = fileName.substring(fileName.length - 4, fileName.length);
	strExt = strExt.toLowerCase();	
	if (strExt != ".txt" && strExt != ".rtf" && strExt != ".doc" && strExt != ".pdf")
	{
		alert('Please send a file in one of the following formats: \n \".txt\", \".rtf\", \".doc\", \".pdf\"!');
		return false;
	} 
	return true;
}


function isValidPassword(curField)
{
	var strValue=curField.value;

	if (strValue.length < 6)
	{ 
		return false;
	}
	else
	{
		return true;
	}
}

function isValidUserName(curField)
{
	var strValue=curField.value;

	if (strValue.length < 6)
	{ 
		return false;
	}
	else
	{
		return true;
	}
}



function containValidChars(curField)
{
	var curName = curField.name;
	if (curName.indexOf('Email') != -1)
	{
		return isValidEmail(curField.value);
	}
	else if (curName.indexOf('Phone') != -1 || curName.indexOf('Fax') != -1 || curName.indexOf('Cell') != -1)
	{
		return isValidPhone(curField.value);
	}
	else if (curName.indexOf('Number') != -1 || curName.indexOf('Quantity') != -1)
	{
		return isNumber(curField.value);
	}
	else if (curName.indexOf('_Name') != -1 || curName.indexOf('FullName') != -1 || curName.indexOf('FirstName') != -1 || curName.indexOf('FamilyName') != -1 || curName.indexOf('LastName') != -1 || curName.indexOf('FromName') != -1 || curName.indexOf('ToName') != -1)
	{
		return isHumanName(curField.value);
	}
	else if (curName.indexOf('_CV') != -1)
	{
		return isValidCVFileName(curField.value);
	}
	return true;
}

function showAlert(curField)
{
	if ( curField.verefication_alert!=undefined)
	{
		strAlert = curField.verefication_alert;
		alert(strAlert);
	}
	else
	{
		strAlert = 'Please provide all required information';
		alert(strAlert);
	}
	
}

function checkForm(frmObj)
{
	var found;
	var i, ii;
	var curField, curName, curType;
	var strReq = '_req';// Must be included in the "name" attribute of a "input" or "textarea" tag
	var isFilled, isRequired;	
	var passCounter = 0;
	var passField1;

	with(frmObj)
	{
		for (i = 0; i < elements.length; i++)
		{
			curField = elements[i];				
			curField.value = trim(curField.value);
			curName = curField.name;
			curType = curField.type;
			isFilled =  trim(curField.value) != '' ? true : false;
			isRequired = curName.indexOf(strReq) != -1 ? true : false;

			if(curType == 'text' && isFilled && !containValidChars(curField))
			{
					curField.focus();
					curField.select();
					return false;
					break;
			}
			else if (elements[curName].length && isRequired &&  (curType == 'radio' || curType == 'checkbox'))
			{	
				found = 0;
				for (ii = 0; ii < elements[curName].length; ii++)
				{
					if (elements[curName][ii].checked)
					{
						found = 1;
						break;
					}
				}
				if (found == 0)
				{	
					showAlert(curField);
					elements[curName][0].focus();	
					elements[curName][0].click();
					return false;
					break;
				}
			}
			else if (isRequired && (curType == 'select-one' || curType == 'select-multiple'))
			{
				if (curField.selectedIndex == 0)
				{
					showAlert(curField);
					curField.focus();
					return false;
					break;
				}
			}
			else if (isRequired && (curType == 'text' || curType == 'textarea' || curType == 'password'))
			{
				
				if (!isFilled)
				{
					showAlert(curField);
					try { curField.focus(); } catch (e) { }
					return false;
					break;
				}
				
				isValidUserName
				if ( curType == 'text' && curField.id.indexOf('UserName')!=-1 && !isValidUserName(curField) )
				{
					alert('Username length have to be more than 6 chars.');
					try { curField.focus(); } catch (e) { }
					return false;
					break;
				}
				
				if ( curType == 'password' && !isValidPassword(curField) )
				{
					alert('Password length have to be more than 6 chars.');
					try { curField.focus(); } catch (e) { }
					return false;
					break;
				}
				
			}
			else if(curType == 'file' && isFilled && !containValidChars(curField))
			{
					curField.focus();
					curField.select();
					return false;
					break;
			}
			if (curType == 'password' && passCounter == 0)
			{
				passCounter++;
				passField1 = curField;
			}
			else if (curType == 'password' && passCounter == 1)
			{
				if (passField1.value != curField.value)
				{
					alert('The entered passwords do not match.\nPlease re enter them.');
					curField.value = "";
					passField1.focus();
					passField1.select();
					return false;
					break;
				}				
			}
		}		
	}	
	return true;
}								

function manualSubmit(frmObj)
{	
	if(checkForm(frmObj))
	{
		frmObj.submit();
	}
}

function manualReset(frmObj)
{		
	frmObj.reset();	
}
//////////////// if the user check/uncheck 'All' checkbox ////////////////
function switchBoxesGroup(boxObj)
	{
		var status = boxObj.checked;
		var parentObj = boxObj.form[boxObj.name];

		for(var i=1; i<parentObj.length; i++)
		{
			parentObj[i].checked = status;			
			parentObj[i].disabled = status;
		}		
	}
//////////////// Setup - called on window.onload in init() function /////////////////////
function buttonsMouseEventHandler()
{
	if (!document.layers && document.forms && document.forms.length)
	{
		var i, ii;
		var curElem;
		var strTypes = 'button submit reset';
		for  (i = 0;i < document.forms.length; i++)
		{
			for (ii =0; ii < document.forms[i].length; ii++)			
			{
				curElem = document.forms[i][ii];
				if (curElem.className && strTypes.indexOf(curElem.type) != -1)
				{
					curElem.onmouseover = curElem.onfocus = buttonOver;
					curElem.onmouseout = curElem.onblur = buttonOut;
				}
			}
		}
	}
}
function buttonOver() {if (this.className.indexOf('Over') == -1) this.className += 'Over'}
function buttonOut() {if (this.className.indexOf('Over') != -1) this.className = this.className.substring(0,this.className.indexOf('Over'))}
///////////// set focus to the first text field of the first form on page //////////////
function setFocusToField()
{	
	if (!document.layers && document.forms && document.forms.length)
	{
		var frmObj = document.forms[0]; 
		for (i=0; i<frmObj.length; i++)
		{
			if (frmObj[i].type == 'text' && !frmObj[i].disabled)
			{
				frmObj[i].focus();
				break;
			}
		}
	}
}

////////////// onload function ///////////////////////////////////////
function init()
{	
	//buttonsMouseEventHandler();		
	//setFocusToField();
}
window.onload = init;