
var formElementArray = new Array();
var validationElements = new Array();
var validationMasks = new Array();

validationMasks['email'] = /\b[A-Z0-9._+%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;
validationMasks['numeric'] = /^[0-9\s]+$/gi;
validationMasks['url'] = /\b[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;
validationMasks['credit'] = /\b[0-9\s-]{14,19}$\b/gi;
validationMasks['phone'] = /^\+?[0-9]*\-[0-9]+$/gi;

function validateForm(formElement, formMethod){
	var i = 0;
	var notValid = false;
	var reqMessage;
	
	for (i=0;i<validationElements.length;i++){
		validateInput(false,validationElements[i]);
	}

	for (i=0;i<getEbc('invalid').length;i++){
		if (getEbc('invalid')[i].form.name == formElement){
			notValid = true;
			reqMessage = getEbi(left(getEbc('invalid')[i].id, getEbc('invalid')[i].id.length - 6)).getAttribute('message');
		}
	}

	if (notValid){
		alert(reqMessage);
		return false;
	} else if (getEbi(formElement).encoding == 'multipart/form-data' && getEbi('file').value.length > 0){
		getEbi(formElement).action = '/includes/form/upload/upload.asp';
		return true;
	} else{
		getEbi(formElement).encoding = 'application/x-www-form-urlencoded';
		return true;
	}

	return true; 
}

function validateDiv(divElement, formMethod){
	var i = 0;
	var notValid = false;
	
	for (i=0;i<validationElements.length;i++){
		validateInput(false,validationElements[i]);
	}
	
	for (i=0;i<getEbc('invalid').length;i++){
		if (getEbc('invalid')[i].parentNode.id == divElement){
			notValid = true;
			reqMessage = getEbc('invalid')[i].nextSibling.getAttribute('message');
		}
	}
	
	if (notValid){
		alert(reqMessage);
		return false;
	} else if (formMethod.length > 0){
		return eval(formMethod);
	}

	return true; 
}

function validateInput(e,validationElement){
	var elementValidates = true;

	if(!validationElement) validationElement = this;		
	
	if(validationElement.getAttribute('required') == 'text' && validationElement.tagName == 'INPUT' && validationElement.value.length == 0)elementValidates = false;
	if(validationElement.getAttribute('required') == 'check' && validationElement.tagName == 'INPUT' && validationElement.checked == false)elementValidates = false;
	if(validationElement.getAttribute('required') == 'passwordconfirm' && validationElement.tagName == 'INPUT' && validationElement.value != document.getElementById('password').value || validationElement.value.length == 0)elementValidates = false;
	if(validationElement.getAttribute('required') == 'emailconfirm' && validationElement.tagName == 'INPUT' && validationElement.value != document.getElementById('email').value || validationElement.value.length == 0)elementValidates = false;

	if (validationElement.getAttribute('required') == 'radio' && validationElement.tagName == 'INPUT') {
		var isSelected = false;
		var radioList = eval("validationElement.form."+validationElement.name);
		for (var i=0; i<radioList.length; i++) 
			if (!isSelected) 
				isSelected = radioList[i].checked;
		elementValidates = isSelected;
		validationElement.id = validationElement.name;		
	}
	if(/text|check|radio|passwordconfirm|emailconfirm/.test(validationElement.getAttribute('required'))==false) {
		var elementMask = validationMasks[validationElement.getAttribute('required')];
		if(!validationElement.value.match(elementMask)) elementValidates = false;
	}

	if(elementValidates){
		if (document.getElementById(validationElement.id + '_label')) {
			getEbi(validationElement.id + '_label').className = 'valid';
		}
	}else{
		if (document.getElementById(validationElement.id + '_label')) {
			getEbi(validationElement.id + '_label').className = 'invalid';
		}
	}
	
}

function initFormValidation(formName){
	var formElement = eval('document.' + formName);
	var o;
	
	for(i=0;i<formElement.elements.length;i++){
		if (formElement.elements[i].getAttribute('required') != 'none'){
			validationElements[validationElements.length] = formElement.elements[i];
			if (formElement.elements[i].getAttribute('required') == 'credit') formElement.elements[i].setAttribute("autocomplete","off")
		}
	}
	
	for(var x=0;x<validationElements.length;x++){
		o = getEbi(validationElements[x].id + '_label');
		if (o!=null) o.className = 'blank';
	
		validationElements[x].onblur = validateInput;
		validationElements[x].onchange = validateInput;
		validationElements[x].onpaste = validateInput;
		validationElements[x].onkeyup = validateInput;
		
		var reservedWords = new Array('break','for','import','new','this','void','case','default','else','function','in','return','typeof','while','comment','delete','export','if','label','switch','var','with','continue','do','abstract','boolean','byte','char','double','false','final','float','goto','implements','instanceOf','int','interface','long','native','null','package','private','protected','public','short','static','synchronized','throws','transient','true','catch','enum','throw','class','extends','try','const','finally','debugger','super','alert','eval','Link','outerHeight','scrollTo','Anchor','FileUpload','location','outerWidth','Select','Area','find','Location','Packages','self','arguments','focus','locationbar','pageXoffset','setInterval','Array','Form','Math','pageYoffset','setTimeout','assign','Frame','menubar','parent','status','blur','frames','MimeType','parseFloat','statusbar','Boolean','Function','moveBy','parseInt','stop','Button','getClass','moveTo','Password','String','callee','Hidden','name','personalbar','Submit','caller','history','NaN','Plugin','sun','captureEvents','History','navigate','print','taint','Checkbox','home','navigator','prompt','Text','clearInterval','Image','Navigator','prototype','Textarea','clearTimeout','Infinity','netscape','Radio','toolbar','close','innerHeight','Number','ref','top','closed','innerWidth','Object','RegExp','toString','confirm','isFinite','onBlur','releaseEvents','unescape','constructor','isNan','onError','Reset','untaint','Date','java','onFocus','resizeBy','unwatch','defaultStatus','JavaArray','onLoad','resizeTo','valueOf','document','JavaClass','onUnload','routeEvent','watch','Document','JavaObject','open','scroll','window','Element','JavaPackage','opener','scrollbars','Window','escape','length','Option','scrollBy');

		for (i=0;i<reservedWords.length;i++){	
			if(validationElements[x].id == reservedWords[i]){
				alert(validationElements[x].id + ' is a reserved javascript keyword, please change it!');
			}
		}
	}	
}

function resetFormValidation(){
	for(var no=0;no<validationElements.length;no++){
		getEbi(validationElements[no].id + '_label').className = 'blank';
	}
}

function attachPhoneEvents(phoneElement){
	var phoneAreaElement = document.getElementById(phoneElement + '_area');
	var phoneMainElement = document.getElementById(phoneElement + '_phone');
	var phoneHiddenElement = document.getElementById(phoneElement);
	
	getEbi(phoneHiddenElement.id + '_label').className = 'blank';

	phoneAreaElement.onblur = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	phoneAreaElement.onchange = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	phoneAreaElement.onpaste = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	phoneAreaElement.onkeyup = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};	
	
	phoneMainElement.onblur = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	phoneMainElement.onchange = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	phoneMainElement.onpaste = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	phoneMainElement.onkeyup = function(){updateHiddenPhone(phoneHiddenElement, phoneAreaElement, phoneMainElement);};
	
	validationElements[validationElements.length] = phoneHiddenElement;
}

function updateHiddenPhone(hiddenElement, areaElement, phoneElement){
	hiddenElement.value = areaElement.value + '-' + phoneElement.value;
	validateInput(this, hiddenElement);
}
