﻿/****************************************************************************
/* Validator Framework Helper Functions 1.1 */
/****************************************************************************
 * Form Submit and Validation *
 ****************************************************************************/
//associative array of form-id and linked validators
//receives constructed validators on load
var validators = {}; 
//associative array of form-ids and linked validatorContructors
//initialize ValidatorConstructors Object, to be extended in specific case.
var validatorConstructors = {};
//array of ids, set in XHTML-page
//e.g. serverMessages.push("login-error-no-matching-login");
var serverMessages = new Array();

//build validators from array of validatorConstructors
function setValidators()
{
	// loop creates following statement for each validatorConstructor
	// if($('form-id') && validatorConstructors['form-id']) validators['form-id'] = validatorConstructors['form-id']();
	
	if (typeof validatorConstructors == 'undefined') return;
	for(var i = 0; i < document.forms.length; i++){
		if(document.forms[i].id && validatorConstructors[document.forms[i].id]) {
			validators[document.forms[i].id] = validatorConstructors[document.forms[i].id]();
		}
	}
}

function resetValidators()
{
	for (var i = 0; i < document.forms.length; i++) {
		if(document.forms[i].id && validatorConstructors[document.forms[i].id])
			validators[document.forms[i].id].resetMarks();
	}
}

function resetServerMessages()
{
	for (var i = 0; i < serverMessages.length; i++) {
		$("#"+serverMessages[i]).hide();
	}
}

//functions to submit and validate a form
function validate(formId)
{
	resetValidators();
	resetServerMessages();
	if(formId && validators[formId])
	{
		var result = validators[formId].validate();
		return (result == null);
	}
	return true;
}

function validateOnSubmit(formId){
	if(!validate(formId)) {
		setFocus(formId);
		return false;
	}
	return true;
}

function submitFormOnClick(formId, skipValidation){
	var formObj = document.getElementById(formId);
	if (!formObj || !formObj.submit) return false;

	var skipValidation = (skipValidation === undefined) ? false : skipValidation; //Default to false
	
	if(skipValidation){
		formObj.submit();
		return true;
	} else	{
		if(validateOnSubmit(formId)){
			formObj.submit();
			return true;
		}
		return false;
	}
}

function submitFormOnEnter(formId, e)
{
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;

	if (keycode == 13) {
		return submitFormOnClick(formId);
	} else {
		return false;
	}
}

function clearForm(formId){
	if (!document.getElementById(formId)) return false;
	document.getElementById(formId).reset();
}

//sets focus on first input which did not validate
function setFocus(formId){
	if(!document.getElementById(formId)) return;
	
	var formObj = document.getElementById(formId);
	var inputSelector;

	var inputSelectors = getElementsByClass('validator-highlight-shown', formObj);
	if(inputSelectors.length>0) inputSelector = inputSelectors[0];
	
	if(inputSelector) {
		inputSelector.focus();
	}
}

/**** helpers *****/
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}


/**** exchange with onDOMready function in your project *****/
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

jQuery(document).ready(function(){
setValidators();
});
