var formInputs;

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]).readAttribute('type');
			if (isText=='text') { x[i].value = ''; }
		}
	}
}

function NextNav(Obj)
{
	var IDs	= [];
	var elmnts 	= Form.getElements(document.forms[0]);
	if (elmnts) {
		elmnts.each(function(idx){IDs.push($(idx).id);});
		IDs = IDs.compact();
		Pos = IDs.indexOf(Obj.id);
		return (Pos!=-1 && IDs[Pos+1]) ? IDs[Pos+1] : '';
	}
}

function checkLimit(event)
{
	var Obj 	 = Event.element(event);
	var code	 = event.keyCode || event.which;
	var charCode = event.charCode || event.keyCode;
	var relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
		relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;

	if (typeof(code)!='undefined' && (code!=9 && code!=16 && code!=46 && code>38))
	{
		var vMax = relObj.limit;
		if (Obj.value.length>=vMax)
		{
			Obj.value	= Obj.value.substring(0,vMax);
			nextID 		= NextNav(Obj);
			if (nextID) { setTimeout(function(){$(nextID).focus();},0); }
		}
	}
}

function FocusNext(Obj)
{
	nextID = NextNav(Obj);
	if (nextID) { setTimeout(function(){$(nextID).focus();},0); }
}

var First = "";
function CheckReqFields()
{
	var errors = false, relObj;
	if (formInputs && formInputs.length>0)
	{
		formInputs.each(function(Obj){
			relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
			relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
			if (relObj && relObj.required && Obj.value.empty()) {
				$(Obj).addClassName('frmError');
				if (First==="") { First = Obj.id; }
				errors = true;
			}
		});
	}
	return errors;
}

function CheckEmails()
{
	var errors = false, relObj;
	if (formInputs && formInputs.length>0)
	{
		formInputs.each(function(Obj){
			relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
			relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
			if (relObj && relObj.validate=='email' && !Obj.value.empty()) {
				var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
				eString = Obj.value;
				if ((eString!=="") && (!filter.test(eString)))
				{
					Obj.className='frmError';
					if (First==="") { First = Obj.id; }
					errors = true;
				}
			}
		});
	}
	return errors;
}

function CheckMinFields()
{
	var errors = false, relObj;
	if (formInputs && formInputs.length>0)
	{
		formInputs.each(function(Obj){
			relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
			relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
			if (relObj && relObj.min && !Obj.value.empty()) {
				if (Obj.value<relObj.min)
				{
					Obj.className='frmError';
					if (First==="") { First = Obj.id; }
					errors = true;
					alert("A minimum of "+MinValue+" is required!");
				}
			}
		});
	}
	return errors;
}

function CheckMinLengthFields()
{
	var errors = false, relObj;
	if (formInputs && formInputs.length>0)
	{
		formInputs.each(function(Obj){
			relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
			relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
			if (relObj && relObj.minlength && !Obj.value.empty()) {
				if (Obj.value.length<relObj.minlength)
				{
					Obj.className='frmError';
					if (First==="") { First = Obj.id; }
					errors = true;
					alert("A minimum of "+relObj.minlength+" characters/digits is required!");
				}
			}
		});
	}
	return errors;
}

function tab(event)
{
	var Obj 	= Event.element(event);
	var keyCode = event.keyCode;
	var relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
		relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
	var sNext 	= (relObj.next) ? relObj.next : null;
	var sPrev 	= (relObj.prev) ? relObj.prev : null;
	if (keyCode==9)
	{
		if (event.shiftKey && sPrev!=null) { 
			event.stop();
			setTimeout(function(){$(sPrev).focus();},0); 
		}
		else {
		if (sNext!==null) { 
			event.stop();
			setTimeout(function(){$(sNext).focus();},0);
		}}
	}	
}

function mask(event)
{
	var keyCode	 	= event.keyCode || event.which;
	var charCode	= event.charCode || event.keyCode;
	var Obj 	 	= Event.element(event);
	var relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
		relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
	var KeyTyped 	= String.fromCharCode(keyCode);
	
	if (event.ctrlKey && isMask(KeyTyped, 'vVxXcC')) { return true; }
  	if ([Event.KEY_LEFT, Event.KEY_RIGHT].indexOf(keyCode)!=-1) { return true; }
	if ([Event.KEY_UP, Event.KEY_DOWN].indexOf(keyCode)!=-1 && !event.shiftKey) { return true; }
	if ([Event.KEY_HOME, Event.KEY_END, Event.KEY_PAGEUP, Event.KEY_PAGEDOWN].indexOf(keyCode)!=-1) { return true; }
	if ([8,9,13,27,33,34,35,36,45,46].indexOf(keyCode)!=-1) { return true; }
    
	if (!FormMask(Obj, relObj.mask, charCode, KeyTyped, event.shiftKey, event.ctrlKey)) { event.stop(); }
}

// -- 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(Obj, sMask, keyCode, KeyTyped, shiftKey, ctrlKey)
{
	var MyField = $(Obj).name;
	
	//Accept All
	if (sMask == '*') { return true; }

	//Punct
	if ((sMask == '?') && isMask(KeyTyped, '.,()-_+=&%#@!')) { return true; }

	//Numeric
	if (sMask=='#' && (isMask(KeyTyped, '0123456789') || keyCode>=48 && keyCode<=57) && !shiftKey) { return true; }
	
	//Full Numeric (-)
	if ((sMask == '$') && isMask(KeyTyped, '0123456789-') && !shiftKey) { return true; }
		
	//Duration [Numerics + :]
	if ((sMask == ':') && (isMask(KeyTyped, '0123456789') && !shiftKey) && isMask(KeyTyped, ':')) { 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-.') && !shiftKey) { return true; }
	
	//Day
	if ((sMask == 'D') && isDay(KeyTyped,MyField)) { return true; }
	
	//Email
	if ((sMask == 'E') && isEmail(KeyTyped,keyCode)) { return true; }
	
	//Phone
	if ((sMask == 'h') && isMask(KeyTyped, '0123456789-() ')) { return true; }

	//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.') && !shiftKey) { return true; }

	//Am/Pm
	if ((sMask == 'p') && isMask(KeyTyped, 'aApP')) { return true; }

	//Percent (%) - 0>%<100
	if ((sMask == 'r') && isPercent(KeyTyped, MyField)) { return true; }

	//Payment Type
	if ((sMask == 'T') && isTypeOfPayment(KeyTyped,MyField)) { return true; }
	
	//Web
	if ((sMask == 'w') && isWeb(KeyTyped) && !shiftKey) { return true; }

	//Web Safe
	if ((sMask == 'W') && isWebSafe(KeyTyped, keyCode)) { return true; }
	
	return false;
}

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  = $F(Val);
	if ((Day!=="") && (Day.length<2))
	{
		Day = ((Day+c)*1);
		if ((Day>=1) && (Day<=31)) { return (sNumbers.indexOf(c)==-1) ? false : true; }
		else { return false; }
	}
	
	if (sNumbers.indexOf(c) == -1) { return false; }
	else { return true; }
}  

function isAlpha(c) 		{ return (/[a-zA-Z&'" /]/.exec(c)) ? true : false; }
function isAlphaNoQuotes(c) { return (/[a-zA-Z& /]/.exec(c)) ? true : false; }
function isEmail(c,k) 		{ return (/[a-zA-Z0-9&@.,:/_\?=^*%$#!~+]/.exec(c)) ? true : false; }  
function isWebSafe(c,k) 	{ return (/[a-zA-Z0-9&@.,:/_\?=^*%$#~+]/.exec(c)) ? true : false; }  

function isWeb(c) { return (isAlphaNoQuotes(c) || isMask(c, '0123456789:/')) ? true : 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 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 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; }
		klGeneric.process();
		document.forms[0].submit();
	}
}

function formValidateBool(formObj) 
{
	if (formObj!='undefined') { 
		if ($(formObj)) { form = $(formObj); } else { form = document.forms[0]; }
		selectForm(form);
	}
	
	First = "";
	var Errors = CheckReqFields();
	if (Errors) {
		//alert('Required fields are either selected or highlighted in red,\nPlease verify and try again!');
		klGeneric.alert({msg:'Required fields are either selected or highlighted in red,\nPlease verify and try again!',width:300,timer:3500});
		if (First) { setTimeout(function(){$(First).focus();},5); }
		return false;
	}
	
	var EmailErrors = CheckEmails();
	if (EmailErrors) {
		//alert('Invalid Email address, Please try again!');
		klGeneric.alert({msg:'Invalid Email address, Please try again!',timer:2500});
		return false;
	}
	
	var MinimumValues = CheckMinFields();
	var MinimumLength = CheckMinLengthFields();
	if ((!Errors) && (!EmailErrors) && (!MinimumValues) && (!MinimumLength)) { return true; }
	else { return false; }
}

function selectForm(formObj)
{
	if ($(formObj))
	{
		var txtInputs	= $(formObj).getInputs('text');
		var selectInputs = $(formObj).select('select');
		var passInputs 	= $(formObj).getInputs('password');
		var areaInputs 	= $(formObj).select('textarea');
		formInputs = txtInputs.concat(selectInputs).concat(passInputs).concat(areaInputs);
	}
}

var klForms = {
	validate : function() {
		if ($('mainForm')) {
			selectForm('mainForm');
			formInputs.each(function(idx){
				Obj = $(idx);
				relObj 	= (typeof(Obj.readAttribute("rel"))=="string") ? Obj.readAttribute("rel") : null;
				relObj	= (relObj && relObj.isJSON()) ? relObj.evalJSON() : null;
				if (relObj) 
				{
					if ((relObj && !relObj.noevent))
					{
						if (relObj.limit) 	{ Obj.observe('keydown', 	function(event){checkLimit(event);}); }
						if (relObj.watch===true) { Obj.observe('form:event', function(event){ klForms.formEvent(event); }); }
						if (relObj.mask) 	{ Obj.observe('keypress', function(event){ return mask(event);}); }
						if (relObj.next || relObj.prev) { Obj.observe('keydown', function(event){tab(event); }); }
						if (relObj.webSafe) { $(Obj).tgt = relObj.webSafe; Obj.observe('keyup', function(event) { klForms.webSafe(event); }); }
						if (relObj.onEnter) { $(Obj).onEnter = relObj.onEnter; Obj.observe('keydown', function(event){ klForms.onEnter(event);}); }
						if (relObj.info) { 
							$(Obj).info = relObj.info; 
							$(Obj).infoParent = relObj.infoParent || document.body;
							Obj.observe('focus',function(event){klForms.showInfo(event);}).observe('blur',function(){klForms.hideInfo();}); 
						}
					}
				}
			});
		}
	},

	reset : function(fields) {
		var relObj;
		$A(fields).each(function(idx){
			if ($(idx)) {
				if ($(idx).readAttribute('type')=='select') {
					$(idx).selectedIndex = 0;
					relObj = (typeof($(idx).readAttribute("rel"))=="string") ? $(idx).readAttribute("rel").evalJSON() : null;
					if (relObj) {
						var objArray = (relObj.Switch) ? relObj.Switch : null;
						if (objArray)
						{
							$A(objArray).each(function(idx){$(idx).hide();});
							if ($(objArray[0])) { $(objArray[0]).show(); }
						}
					}
				} else { $(idx).setValue(''); }
			}
		});
		setTimeout(function(){if($($A(fields)[0])){$($A(fields)[0]).focus();}},10);
	},
	
	fill : function(fields, values) {
			for (i=0; i<fields.length; i++) {
				if ($(fields[i]) && values[i]) { $(fields[i]).setValue(values[i]); }
			}
	},

	updateSelect : function(tgt, Obj, nextObj) {
		var found = false, curOpts = $(tgt).select('option'), val = Obj.value;
		if (curOpts) { curOpts.each(function(idx){if ($(idx).value==val) { found = true; } else { $(tgt).setValue(val); } });}
		if (!found) {
			var newOpt = Builder.node('option', {'value':val}, val);
			$(tgt).insert(newOpt);
		}
		Obj.setValue(''); Obj.hide();
		$(tgt).show();
		$(tgt).fire('form:change');
		if ($(nextObj)) { $(nextObj).focus(); } 
	},
	
	selectToValue : function(Obj, valObjID) {
		if (Obj.value=='mynum' && $($(valObjID))) {
			$(Obj).hide();
			$(valObjID).show(); $(valObjID).focus();
		}
	},

	webSafe : function (event) {
		var tgt = $($(Event.element(event)).tgt);
		if ($(tgt).disabled) { return; } // Handling Disabled Fields
		var nTxt = $(Event.element(event)).value;
		
		var separator = "-";
		if (separator != "-") { nTxt = nTxt.replace(/\_/g, separator); }
		else { nTxt = nTxt.replace(/\-/g, separator); }
		
		nTxt = nTxt.replace('/<(.*?)>/g', '');
		nTxt = nTxt.replace('/\&#\d+\;/g', '');
		nTxt = nTxt.replace('/\&\#\d+?\;/g', '');
		nTxt = nTxt.replace('/\&\S+?\;/g','');
		nTxt = nTxt.replace(/['\"\?\.\!*$\#@%;:,=\(\)\[\]]/g,'');
		nTxt = nTxt.replace(/\s+/g, separator);
		nTxt = nTxt.replace(/\//g, separator);
		nTxt = nTxt.replace(/[^a-zA-Z0-9-_]/g,'');
		nTxt = nTxt.replace(/\+/g, separator);
		nTxt = nTxt.replace(/[-_]+/g, separator);
		nTxt = nTxt.replace(/\&/g,'');
		nTxt = nTxt.replace(/-$/g,'');
		nTxt = nTxt.replace(/_$/g,'');
		nTxt = nTxt.replace(/^_/g,'');
		nTxt = nTxt.replace(/^-/g,'');
		
		$(tgt).setValue(nTxt.toLowerCase());
	},
	
	onEnter : function (event) {
		var code = event.keyCode || event.which;
		if (code==Event.KEY_RETURN)
		{
			var runFunc = $(Event.element(event)).onEnter;	
			eval(runFunc);
		}
	},
	
	formEvent : function (event) {
		if (event.memo.event_id) {
			var params = event.memo.params;
			switch (event.memo.event_id) {
				case "upload:complete":
					if (params.invokeFunc) { params.invokeFunc(event.memo.params); }
				break;
				case "file:Select":
					var fileName = (params.prefix) ? params.prefix : "";
					fileName += event.memo.val;
					if ($(event.memo.fieldName)) { $(event.memo.fieldName).setValue(fileName); }
					if (event.memo.width || event.memo.height) {
						if (event.memo.width && event.memo.params.calcW) { if ($(event.memo.params.calcW)) { $(event.memo.params.calcW).setValue(event.memo.width); }}
						if (event.memo.height && event.memo.params.calcH) { if ($(event.memo.params.calcH)) { $(event.memo.params.calcH).setValue(event.memo.height); } }
					} else {
						if (event.memo.params.invokeFunc) { event.memo.params.invokeFunc(event.memo.params); }
					}
				break;
			}
		}
	},
	
	showInfo : function(event) {
		var infoDiv, callingObj = Event.element(event);
		if (!$('formInfo')) {
			infoDiv = new Element('div', { id:'formInfo', style:'display:none;' }).update(callingObj.info);
			objParent = callingObj.infoParent || document.body;
			$(objParent).insert({bottom:infoDiv});
		}
		else infoDiv = $('formInfo').update(callingObj.info);
		infoDiv.clonePosition(callingObj, {setLeft:false, setWidth:false, setHeight:false});
		var infEff = new Effect.Appear(infoDiv, { duration: 0.2 });
	},
	hideInfo : function() { if ($('formInfo')) { $('formInfo').hide(); }}
};

var k2Form = { kui: {
	serialize: function(elements, getHash) { 
		var data = $(elements).select('div.kCtrl').inject({}, function(result, element) {
			if (element.name) { 
			    var key = element.name, value = $(element).value; 
			    result[key] = value;
			}
			return result;
		});
		return getHash ? data : Hash.toQueryString(data);
	}
}};
Object.extend(Form, k2Form);

document.observe("dom:loaded", function(){
	//Initialize
	klForms.validate();
	if($('formWrap'))  { $('formWrap').select('a.icn').each(function(idx){$(idx).writeAttribute({tabindex:'-1'});}); }
});

