/* form_functions.js */
function ResetForm()
{
	if (confirm("Are you sure you wish to reset this form?"))
	{
		var x = document.forms[0].elements;
		for (var i=0; i<x.length; i++)
		{
			var isText =  x[i].getAttribute('type');
			if (isText=='text') { x[i].value = ''; }
		}
	}
}

function NextNav(Obj)
{
	if (Obj.getAttribute('next'))
	{
		nextID  = Obj.getAttribute('next');
		nextObj = $(nextID);
		return nextObj;
	}
	else
	{
		var x = document.forms[0].elements;
		for (var i=0; i<x.length; i++)
		{
			if ((x[i]==Obj) && (i+1)<x.length)
			{
				var found = false;
				var cnt	  = 1;
				while ((!found) && ((i+cnt)<x.length))
				{
					nextObj = x[i+cnt];
					var isHidden = nextObj.getAttribute('type');
					if (isHidden!="hidden") { found = true; }
					cnt++;
				}
			}
		}
		if (nextObj) { return nextObj; }
	}
}

function PrevNav(Obj)
{
	if (Obj.getAttribute('prev'))
	{
		nextID  = Obj.getAttribute('prev');
		nextObj = document.getElementById(nextID);
		return nextObj;
	}
	//Not Functional Yet
	var x = document.forms[0].elements;
	for (var i=0; i<x.length; i++)
	{
		if ((x[i]==Obj) && (i+1)<x.length)
		{
			var found = false;
			var cnt	  = 1;
			while (!found)
			{
				nextObj = x[i-cnt];
				var isHidden = nextObj.getAttribute('type');
				if (isHidden!="hidden") { found = true; }
				cnt++;
			}
		}
	}
	if (nextObj) { return nextObj; }
}

function checkLimit(e)
{
	if (!e) { var e = window.event; }
	if (e.keyCode) { code = e.keyCode; }
	else if (e.which) { code = e.which; }
	
	if ((code!=9) && (code!=16) && (code>38))
	{
		var vMax = this.getAttribute('maxlength');
		var vFocusNext = this.getAttribute('focusnext');
		
		if (this.value.length>=vMax && vFocusNext=="true")
		{
			this.value 	= this.value.substring(0,vMax);
			nextObj 	= NextNav(this);
			nextElmnt 	= $(nextObj.id);
			
			setTimeout(function(){nextElmnt.focus();},0);
		}
	}
}

function FocusNext(Obj)
{
	nextObj = NextNav(Obj);
	setTimeout(function(){$(nextObj.id).focus();},0);
}

var First = "";
function CheckReqFields()
{
	var errors = false;
	var x = document.forms[0].elements;
	 for (var i=0;i<x.length;i++)
	 {
	  	if (x[i].getAttribute('required') && !x[i].value)
	    {
			x[i].className='frmError';
			if (First==="") { First = x[i].id; }
			errors = true;
		}
	 }
	return errors;
}

function CheckMinFields()
{
	var errors = false;
	var x = document.forms[0].elements;
	 for (var i=0;i<x.length;i++)
	{
		if (x[i].getAttribute('min') && (x[i].value!==""))
		{
			MinValue = x[i].getAttribute('min');
			if (x[i].value<MinValue) 
			{
				alert("A minimum of "+MinValue+" is required!");
				x[i].className='frmError';
				if (First==="") { First = x[i].id; }
				errors = true;
			}
		}
	}
	return errors;
}

function CheckMinLengthFields()
{
	var errors = false;
	var x = document.forms[0].elements;
	for (var i=0;i<x.length;i++)
	{
		if (x[i].getAttribute('minlength') && (x[i].value!==""))
		{
			MinValue = x[i].getAttribute('minlength');
			if (x[i].value.length<MinValue) 
			{
				alert("A minimum of "+MinValue+" characters/digits is required!");
				x[i].className='frmError';
				if (First==="") { First = x[i].id; }
				errors = true;
			}
		}
	}
	return errors;
}

function CheckEmails()
{
	var errors = false;
	var x = document.forms[0].elements;
	 for (var i=0;i<x.length;i++)
	 {
		if (x[i].getAttribute('validate')=="email")
		{
			var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
			eString = x[i].value;
			if ((eString!=="") && (!filter.test(eString)))
			{
				if (First==="") { First = x[i].id; }
				errors = true;
			}
		}
	 }
	return errors;
}

function tab(e)
{
	if (!e) { var e = window.event; }
	sNext = this.getAttribute('next');
	sPrev = this.getAttribute('prev');
	return tab_to(e, sNext, sPrev);
}

function tab_to(event, sNext, sPrev)
{
	var keyCode = (document.layers) ? keyStroke.which : event.keyCode;
	
	if ((event.shiftKey) && (keyCode==9))
	{ 
		if ((sPrev!=="") && (sPrev!==null))
		{
			FormElements = document.forms[0];
			Elemnt	= FormElements[sPrev];
			if (Elemnt.value!=="") 
			{
				setTimeout(function(){Elemnt.focus();},0);
			}
			else { setTimeout(function(){Elemnt.focus();},0); }
		}
	}
	else if ((keyCode==9) && (sNext!=="") && (sNext!==null))
	{
		FormElements = document.forms[0];
		Elemnt	= FormElements[sNext];
		if (Elemnt.value!=="")
		{
			setTimeout(function(){Elemnt.focus();},0);
		}
		else { setTimeout(function(){Elemnt.focus();},0); }
	}
}

function mask(e)
{
	if (!e) { var e = window.event; }
	sMask = this.getAttribute('mask');
	return FormMask(e, sMask);
}

function subEnter(funcName)
{
	eval(funcName);
}

// -- Restrict typing to atleast .Min. length.
function MinType(Obj, Limit)
{
	if ((Obj.value!=="") && (Obj.value.length<Limit))
	{
		keyCount = Obj.value.length;
		MyField  = Obj.name;
		if (keyCount<Limit) 
		{
			Elemnt	= document.forms[0].c__zip;
			setTimeout(function(){Elemnt.focus();},0);
		}
	}
}

function FormMask(event,sMask)
{
	var keyCode = (document.layers) ? keyStroke.which : event.keyCode;
	var KeyTyped = String.fromCharCode(getKeyCode(event));
	var targ = getTarget(event);
	MyField = targ.name;
	
	//Accept Editing Keys
	if (event.ctrlKey && isMask(KeyTyped, 'vVxXcC')) { return true; }
	
	if (KeyTyped.charCodeAt(0)<37) { return true; }
	
	//Accept All
	if (sMask == '*') { return true; }

	//Punct
	if ((sMask == '?') && isPunct(KeyTyped)) { return true; }

	//Numeric
	if ((sMask == '#') && isMask(KeyTyped, '0123456789')) { return true; }
	
	//Full Numeric (-)
	if ((sMask == '$') && isMask(KeyTyped, '0123456789-')) { return true; }
		
	//Alpha Numeric Chars
	if ((sMask == 'a') && (isAlpha(KeyTyped) || isMask(KeyTyped, '0123456789'))) { return true; }

	//Alpha Chars
	if ((sMask == 'A') && isAlpha(KeyTyped)) { return true; }

	//Alpha Chars
	if ((sMask == 'B') && isAlphaNoQuotes(KeyTyped)) { return true; }

	//Alpha [No Punc] Numeric Chars
	if ((sMask == 'b') && (isAlphaNoQuotes(KeyTyped) || isMask(KeyTyped, '0123456789'))) { return true; }

	//Alpha Numeric Chars and .
	if ((sMask == 'c') && (isAlpha(KeyTyped) || isMask(KeyTyped, '0123456789') || isMask(KeyTyped, '.'))) { return true; }

	//Credit Type
	if ((sMask == 'C') && isMask(KeyTyped, 'AVMDavmd')) { return true; }

	//Decimal (# - . )
	if ((sMask == 'd') && isMask(KeyTyped, '0123456789-.')) { return true; }
	
	//Day
	if ((sMask == 'D') && isDay(KeyTyped,MyField)) { return true; }
	
	//Email
	if ((sMask == 'E') && isEmail(KeyTyped)) { return true; }
	
	//Phone
	if ((sMask == 'h') && isMask(KeyTyped, '0123456789-() ')) { return true; console.log(KeyTyped); }

	//Money
	if ((sMask == 'm') && isMask(KeyTyped, '01234567890,.-')) { return true; }

	//Date Handling
	if ((sMask == 'M') && isMonth(KeyTyped,MyField)) { return true; }

	//Dashed Numeric
	if ((sMask == 'n') && isMask(KeyTyped, '0123456789-')) { return true; }

	//Numeric with . 
	if ((sMask == 'N') && isMask(KeyTyped, '0123456789.')) { return true; }

	//Am/Pm
	if ((sMask == 'p') && isMask(KeyTyped, 'aApP')) { return true; }

	//Purpose
	if ((sMask == 'P') && isMask(KeyTyped, 'ANRCLGanrclg')) { return true; }

	//Percent (%) - 0>%<100
	if ((sMask == 'r') && isPercent(KeyTyped, MyField)) { return true; }

	//Own/Rent
	if ((sMask == 'R') && isMask(KeyTyped, 'OoRr')) { return true; }

	//Payment Type
	if ((sMask == 'T') && isTypeOfPayment(KeyTyped,MyField)) { return true; }
	
	return false;
}

function getTarget(e) 
{
	if (e.srcElement) { return e.srcElement; }
	if (e.target) { return e.target; }
}

function getKeyCode(e) 
{
	if (e.srcElement) { return e.keyCode; }
	if (e.target) { return e.which; }
}

function isMask(c, vStr)
{
	var ValidChar = vStr;
	if (ValidChar.indexOf(c)==-1) { return false; }
	else { return true; }
}

function isPercent(c, Val)
{
	var sNumbers = "0123456789";
	Per = document.forms[0][Val].value;
	if (Per!=="")
	{
		Per = ((Per+c)*1);
		if ((Per>=0) && (Per<=100))
		{
			if (sNumbers.indexOf(c) == -1) { return false; }
			else { return true; }
		}
		else { return false; }
	}
	
	if (sNumbers.indexOf(c) == -1) { return false; }
	else { return true; }
}  


function isMonth(c, Val)
{
	var sNumbers = "0123456789";

	Month  = document.forms[0][Val].value;
	if ((Month!=="") && (Month.length<2))
	{
		Month = ((Month+c)*1);
		if ((Month>=1) && (Month<=12))
		{
			if (sNumbers.indexOf(c) == -1) { return false; }
			else { return true; }
		}
		else { return false; }
	}
	
	if (sNumbers.indexOf(c) == -1) { return false; }
	else { return true; }
}  

function isDay(c, Val)
{
	var sNumbers = "0123456789";

	Day  = document.forms[0][Val].value;
	if ((Day!=="") && (Day.length<2))
	{
		Day = ((Day+c)*1);
		if ((Day>=1) && (Day<=31))
		{
			if (sNumbers.indexOf(c) == -1) { return false; }
			else { return true; }
		}
		else { return false; }
	}
	
	if (sNumbers.indexOf(c) == -1) { return false; }
	else { return true; }
}  

function isAlpha(c)
{
	//38 = &
	//39 = '
	//45 = /
	//32 = Space
	var lCode = c.charCodeAt(0);
	if ((lCode >= 65 && lCode <= 122 ) || (lCode==38) || (lCode==47) || (lCode==39) || (lCode==32) || (lCode==45))
	{ return true; }
	else { return false; }
}

function isAlphaNoQuotes(c)
{
	//38 = &
	//45 = /
	//32 = Space
	var lCode = c.charCodeAt(0);
	if ((lCode >= 65 && lCode <= 122 ) || (lCode==38) || (lCode==47) || (lCode==32) || (lCode==45))
	{	
		return true;
	}
	else { return false; }
}

function isEmail(c)
{
	var lCode = c.charCodeAt(0);
	if ((lCode >= 65 && lCode <= 122 ) || (lCode==46) || (lCode==45) || (lCode==64) || isMask(c, '0123456789'))	{ return true; }
	else { return false; }
}  

function isTypeOfPayment(c, Val)
{
	pType = document.forms[0][Val].value;
	if ((pType!=="") && (pType.length<2))
	{
		if (pType=="c")
		{
			allowed_C = "CHOAchoa";
			if (allowed_C.indexOf(c) == -1) { return false; }
			else { return true; }
		}
		else if (pType=="b")
		{
			allowed_C = "k";
			if (allowed_C.indexOf(c) == -1) { return false; }
			else { return true; }
		}
		else if (pType=="m")
		{
			allowed_C = "o";
			if (allowed_C.indexOf(c) == -1) { return false; }
			else { return true; }
		}
	}
	else
	{
		var sChars = "CBMcbm";
		if (sChars.indexOf(c) == -1) { return false; }
		else { return true; }
	}
}

function isPunct(c)
{
	var lCode = c.charCodeAt(0);
	if (lCode >= 32 && lCode <= 47 ) { return true; }
	else { return false; }
}

function phoneMask(event)
  {
	var sMask = "01234567890";
	var KeyTyped = String.fromCharCode(getKeyCode(event));
	// IE only version var KeyTyped = String.fromCharCode(window.event.keyCode);
	// ** IE only var srcObject = window.event.srcElement;
	var targ = getTarget(event);

	keyCount = targ.value.length;
	if (keyCount>0) { keyCount--; }
	sField = "";

	if (getKeyCode(event) < 15) /* del, backspace and other movement characters are okay */ {
	 	return true;		
  	} else if (sMask.indexOf(KeyTyped.toString()) == -1) {
				return false;
	}
	
    var tmpStr = "(";
    
    keyEntered = KeyTyped;
    keyCount++;
    switch (keyCount)
    {
		case 2:
	      tmpStr += targ.value;
	      targ.value = tmpStr;
	      break;
		case 5:
			targ.value += ")";
			break;
		case 9:
			targ.value += "-";
			break;
		}
    //return true;
 }
 
function CreditNum(event)   
{  
	var sMask = "0123456789";
	var KeyTyped = String.fromCharCode(getKeyCode(event));
	var targ = getTarget(event);
	
	keyCount = targ.value.length;
	if (keyCount>0) { keyCount--; }
	sField = "";
	
	 /* del, backspace and other movement characters are okay */ 
	if (getKeyCode(event) < 15) { return true; } 
	else { if (sMask.indexOf(KeyTyped.toString()) == -1) { return false; } }
	
	//Limit entry to 18 digits. (including the - signs)
	if (keyCount>18) { return false; }
	
	var tmpStr = "";
	keyEntered = KeyTyped;
	keyCount++;
	switch (keyCount)   
	{
		case 4:
			targ.value += "-";
			break;
		case 9:
			targ.value += "-";
			break;
		case 14:
			targ.value += "-";
			break;
	}
	return true;
}

var AmountConfirmed = false;
var CurrentAmount = 0;

function ExtraRules(Obj, Val, Val2)
{
	switch (Val)
	{
		case "Min":
			if ((parseInt(Obj.value,10) < parseInt(Val2,10)) && (Obj.value!==""))
			{
				Obj.value = Val2;
				alert("A minimum of "+Val2+" is required!");
				switchClass(Obj,'frmError');
			}
			break;
		case "Day":
			if ((Obj.value<10) && (Obj.value.length==1)) { Obj.value = "0"+Obj.value; }
			if (Obj.value>31) { Obj.value = 31; }
			break;
		case "Month":
			if (Obj.value!=="")
			{
				if ((Obj.value<10) && (Obj.value.length==1)) { Obj.value = "0"+Obj.value; }
				if ((Obj.value>12) || (Obj.value===0))
				{ 
					Obj.value = ""; 
					alert("Invalid Month typed, Please try again!"); 
					setTimeout(function(){Obj.focus();},0);
				}
			}
			break;
		case "Year":
			if ((Obj.value<=2000) && (Obj.value.length<3) && (Obj.value.length!==0)) 
			{
				Obj.value = (Number(Obj.value)+2000);
			}
			break;
		case "ThisYear":
			if (Obj.value>Val2)
			{
				alert('Invalid year, Please try again!');
				Obj.value = '';
			}
			break;
		case "ValidYear":
			if (Obj.value.length<4)
			{
				alert('Year must be 4 digits, in the format yyyy');
				Obj.value = '';
			}
			var thisYear = new Date();
			if ((Obj.value<1800) || (Obj.value>thisYear.getFullYear()))
			{
				alert('Invalid year, please try again!');
				Obj.value = '';
			}
			break;
		case "Phone":
			if ((Obj.value.length<7) && (Obj.value.length>0))
			{
				alert('A Phone field should be consisted of at least 7 digits.\nPlease try again!');
				Obj.value = "";
			}
			while ((Obj.value.length>=7) && (Obj.value.length<10) && (Obj.value!==""))
			{
				Obj.value = "0"+Obj.value;
			}
			break;
		case "Zip":
			if ((Obj.value.length<5) && (Obj.value.length!==0))
			{
				NextField = "c__zip";
			}
			break;
		case "Credit":
			if (Obj.value.length!==0)
			{
				CreditVal = document.forms[0].c__credittype.value.toLowerCase();
				if (CreditVal=="a")
				{
					if (Obj.value.length!=18) { alert("American Express credit card must consist 15 digits only!"); }
				}
				else
				{
					if (Obj.value.length!=19) { alert("Credit card number must consist 16 digits only!"); }
				}
				NextField = "c__creditnum";
			}
			break;
		case "Secure":
			if (Obj.value.length!==0)
			{
				CreditVal = document.forms[0].c__credittype.value.toLowerCase();
				if (CreditVal=="a")
				{
					if (Obj.value.length!=4) { alert("American Express security code must consist 4 digits only!"); }
				}
				else
				{
					if (Obj.value.length!=3) { alert("Credit card security code must consist 3 digits only!"); }
				}
				NextField = "c__security";
			}
			break;
		case "Expiration":
			if (Obj.value.length!==0)
			{
				var today = new Date();
				var Month = (today.getMonth()+1);
				var year = today.getYear();
				if(year<1000) { year += 1900; }
				if ((Number(document.forms[0].c__expyear.value)+2000)<=year)
				{
					if (document.forms[0].c__expmonth.value<=Month)
					{
						alert('Typed credit card has expired!');
					}
				}
			}
			break;
		case "Email":
			eString = Obj.value;
			if (eString!=="")
			{
				var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
				if (!filter.test(eString))
				{
					if (confirm("Invalid Email address, Please try again!"))
					{ 
						window.event.cancelBubble = true;
				        window.event.returnValue = false;
						document.forms[0].elements(Obj.name).select();
					}
				}
			}
			break;
		case "OwnRent":
			if (Obj.value) 
			{
				if (!(Obj.value=='R' || Obj.value=='O' || Obj.value=='r' || Obj.value=='o')) 
				{
					alert ("Please type either an O or an R");
					Obj.value = "";
					setTimeout(function(){Obj.focus();},0);
				}
			}
			break;

		case "Limit":
			if (Obj.value.length>=Val2) 
			{
				alert ("Please note that this field is limited to "+Val2+" characters.");
			}
			break;
		}	
}

function Replace(FieldName, In, Out) 
{
	temp = document.forms[0][FieldName].value.toUpperCase();
	
	Ind = temp.indexOf(In);
	Ind2 = temp.indexOf('PO BO');
	if ((Ind>-1) && (Ind2==-1))
	{
		pos = temp.indexOf(In);
		temp = "" + (temp.substring(0, pos) + Out + temp.substring((pos + In.length), temp.length));
	}
	document.forms[0][FieldName].value = temp;
}

function checkTime(Val, fID)
{
	chk = true;
	if (Val.length<2) { Val = '0'+Val+'00'; }
	if (Val.length==2) { Val = Val+'00'; }
	if (Val.length==3) { Val = '0'+Val; }
	if ((Val.length==4) && (Val>1259)) { chk = false; }
	if (Val.substr(2,1)>5) { chk = false;  }
	Elemnt = document.forms[0][fID];
	if (!chk)
	{
		Elemnt.value = null;
		alert("Invalid Entry!");
		setTimeout(function(){Elemnt.focus();},0);		
	}
	else
	{
		Elemnt.value = Val;
	}
}

function BoolcheckTime(Val, fID)
{
	if (Val.length<2) 	{ Val = '0'+Val+'00'; }
	if (Val.length==2) 	{ Val = Val+'00'; }
	if (Val.length==3) 	{ Val = '0'+Val; }
	if ((Val.length==4) && (Val>1259)) { alert("Invalid Entry!"); Val=""; }
	if (Val.substr(2,1)>5) { Val=""; return false; }
	document.forms[0][fID].value = Val;
	return true;
}

function ValidateForm()
{
	var x = document.forms[0];
	
	for (var i=0; i<x.length; i++)
	{
		if (x[i].getAttribute('type')!="hidden")
		{
			if (!x[i].getAttribute('noevent'))
			{
				if (x[i].getAttribute('maxlength')) { x[i].onkeyup = checkLimit; }
				if (x[i].getAttribute('mask')) 		{ x[i].onkeypress = mask; }
				if (x[i].getAttribute('next') || x[i].getAttribute('prev')) { x[i].onkeydown = tab; }
			}
		}
	}
}

function formValidate(Val) 
{
	First = "";
	var Errors = CheckReqFields();
	if (Errors)
	{
		alert('Required fields are either selected or highlighted in red, \n               please verify and try again!\n');
		if (First) 
		{
			FormElements = document.forms[0];
			Elemnt	= FormElements[First];
			setTimeout(function(){Elemnt.focus();},0);
		}
		return;
	}
	
	var EmailErrors = CheckEmails();
	if (EmailErrors)
	{
		alert('Invalid Email address, Please try again!');
		return;
	}

	var MinimumValues = CheckMinFields();
	var MinimumLength = CheckMinLengthFields();
	if ((!Errors) && (!EmailErrors) && (!MinimumValues) && (!MinimumLength))
	{
		if (Val!=="") { document.forms[0].FormStatus.value = Val; }
		inlineProcessing('Processing, Please wait!',0);
		document.forms[0].submit();
	}
}

function formValidateBool() 
{
	First = "";
	var Errors = CheckReqFields();
	if (Errors)
	{
		alert('Required fields are either selected or highlighted in red, \n               please verify and try again!\n');
		if (First)
		{
			Elemnt	= document.forms[0][First];
			setTimeout(function(){Elemnt.focus();},0);
		}
		return false;
	}
	
	var EmailErrors = CheckEmails();
	if (EmailErrors)
	{
		alert('Invalid Email address, Please try again!');
		return false;
	}
	
	var MinimumValues = CheckMinFields();
	var MinimumLength = CheckMinLengthFields();
	if ((!Errors) && (!EmailErrors) && (!MinimumValues) && (!MinimumLength)) { return true; }
	else { return false; }
}

function focus_to(id)
{
	nextElmnt = document.forms[0][id];
	setTimeout(function(){nextElmnt.focus();},0);
}

function FocusFirst()
{
	Obj = document.forms[0].elements[0];
	tObj = document.getElementById(Obj.id);
	if ((tObj.type=="select-one") && (document.all)) eval("document.forms[0].elements("+Obj.name+").select()");
	else tObj.focus();
}

Event.observe(window, 'load', ValidateForm, false);
