
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') != 'text' && validationElement.getAttribute('required') != 'check' && validationElement.getAttribute('required') != 'passwordconfirm' && validationElement.getAttribute('required') != 'emailconfirm'){
		var elementMask = validationMasks[validationElement.getAttribute('required')]
		if(!validationElement.value.match(elementMask)) elementValidates = false
	}

	if(elementValidates){
		getEbi(validationElement.id + '_label').className = 'valid';
	}else{
		getEbi(validationElement.id + '_label').className = 'invalid';
	}
	
}

function initFormValidation(formName){
	var formElement = eval('document.' + formName);

	for(i=0;i<formElement.elements.length;i++){
		if (formElement.elements[i].getAttribute('required') != 'none'){
			validationElements[validationElements.length] = formElement.elements[i];
		}
	}
	
	for(var no=0;no<validationElements.length;no++){
		getEbi(validationElements[no].id + '_label').className = 'blank';
	
		validationElements[no].onblur = validateInput;
		validationElements[no].onchange = validateInput;
		validationElements[no].onpaste = validateInput;
		validationElements[no].onkeyup = validateInput;
	}	
}

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);
}

