
/**
 * Validate the input of a user if it is a valid email address
 * @param src; HTMLInputObject
 */
function validateEmail ( src ) {
	var emailreg = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,5}$/;
	return emailreg.test(src.value);
}

function validatePostcode ( src ) {
	var postcodereg = /^[0-9]{4}[a-zA-Z]{2}$/;
	return postcodereg.test(src.value);
}

function validateRadio ( src ) {
	var radios = collectRadios ( src.form );
	for(var name in radios) {
		if ( name == src.name ) {
			for ( var i = 0 ; i < radios[name].length ; i++ ) {
		  		if(radios[name][i].checked) {
		  			return true;
		  		}
		  	}
  		}
	}
	return false;
}
function validateDate ( src ) {
	// dd-mm-yyyy
	var datereg = /^[0-3]{1}\d{1}-[0-1]\d{1}-\d{4}$/;
	return datereg.test(src.value);
}
function validateString ( src ) {
	return ( src.value.length > 0 );
}
function validateNumber ( src ) {
	if ( validateString ( src ) ) {
		return !isNaN(src.value);
	}else{
		return false;
	}
}
function validateCheckbox (src) {
	return ( src.checked );
}
function checkValidation(method,obj) {
	return method.apply(this,[obj])
}
function handleVisualError(obj , result , error ) {
	if ( result ) {
		e='';
		document.getElementById('e'+obj.name).style.display = 'none'
		obj.className = obj.className.split(' ')[0];
		obj.validated = '1';
	}else{
		e = error;
		document.getElementById('e'+obj.name).style.display = ''
		obj.className = obj.className+' error';
		obj.validated = '0';
	}
	document.getElementById('e'+obj.name).innerHTML = e;
}
var checks = new Array();
function setRequiredFields(required) {
	checks = required;
}
function hasValidation(obj) {
	for ( var i = 0 ; i < checks.length ; i++ ) {
		if( obj.name == checks[i] ) {
			return true;
		}
	}
	return false;
}

function collectRadios (fObj) {
	var radios = new Object();
	for ( var i = 0 ; i < fObj.elements.length ; i++ ) {
		var obj = fObj.elements[i];
		if ( obj.type == 'radio' ) {
			if ( typeof ( radios[obj.name] ) != 'object'  ) {
				radios[obj.name] = new Array ();
			}
			radios[obj.name].push ( obj );
		}
	}
	return radios;
}

function submitAjaxForm ( fObj , ajaxFrame , direction ) {
	if (direction == 1 ) {
		if ( _submitForm ( fObj ) ) {
			new Ajax.Updater(ajaxFrame, fObj.action,{evalScripts:true,asynchronous:true,parameters:Form.serialize(fObj),method:fObj.method})
		}
	}else{
		new Ajax.Updater(ajaxFrame, fObj.action,{evalScripts:true,asynchronous:true,parameters:Form.serialize(fObj),method:fObj.method})
	}
	return false;
}

function pagebackAjaxForm ( fObj , ajaxFrame ) {
	new Ajax.Updater(ajaxFrame, fObj.action,{evalScripts:true,asynchronous:true,parameters:Form.serialize(fObj),method:fObj.method})
	return false;
}

function _submitForm ( fObj ) {
	var _validated = true;
	var radios = collectRadios(fObj);
	for ( var i = fObj.elements.length -1 ; i >= 0  ; i-- ) {
		var obj = fObj.elements[i];
		if ( hasValidation(obj) ) {

			switch ( obj.type ) {
				case "radio":
					var checked = false;
					if ( typeof ( radios[obj.name] ) == 'object' ) {
						for ( var u = 0 ; u < radios[obj.name].length ; u++ ) {
							if ( radios[obj.name][u].checked ) {
								checked = true;
							}
						}
						if ( ! checked ) {
							if ( typeof ( obj.onblur ) == 'function' ) {
								obj.onblur();
								if ( obj.validated == '0' ) {
									_validated = false;
								}
							}
						}
						delete radios[obj.name];
					}
					break;
                default:
				case "text":
				case "checkbox":
					if ( typeof ( obj.onblur ) == 'function' ) {
						obj.onblur();

						if ( obj.validated == '0' ) {
							_validated = false;
						}
					}
					break;
			}
		}
	}

	if ( _validated ) {
		return true
	}else{
		return false;
	}
}
function submitForm ( fObj , direction ) {
	if (direction == 1 ) {
		if ( _submitForm ( fObj ) ) {
			document.getElementById('submiterror').style.display = "none";
			fObj.submit();
		}else{
			document.getElementById('submiterror').style.display = "block";
			return false;
		}
	}else{
		return true;
	}
}
function setRadioValue( element , value ) {
	for (var i = 0 ; i < element.length ; i ++ ) {
		if ( element[i].value == value ) {
			element[i].checked = true;
		}
	}
}
function setSelectValue( element , value ) {
	for (var i = 0 ; i < element.length ; i ++ ) {
		if ( element[i].value == value ) {
			element.selectedIndex = i;
		}
	}
}


function findPos(obj) {
	var curleft = curtop = 0;
	
	if (obj.offsetParent) {
		tmp = obj.offsetLeft;
		if (tmp>0) {
			curleft = obj.offsetLeft;
		}

		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			
			tmp = obj.offsetLeft;
			if (tmp>0) {
				curleft += obj.offsetLeft;
			}
			
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}

function setBorderColor(obj,state) {
    if (state=='active') {obj.style.borderColor = "#82aef1";}
    if (state=='default') {obj.style.borderColor = "#c8c5bf";}
}

function handleVisualErrorFloater (obj , result , error ) {

	var error_div = document.getElementById('error');
	pos=findPos(obj);

	if ( result ) {
		/* valid */
		error_div.style.display = 'none'
		obj.validated = '1';
		
		obj.style.borderColor = "#d0359d";
		obj.style.backgroundColor = "#fee3ed";
	} else {
		/* invalid */
		error_div.style.display = 'block'
		obj.validated = '0';
		
		error_div.innerHTML = "<span>"+error+"</span>";
		
		obj.style.borderColor = "#ccafc1";
		obj.style.backgroundColor = "#f6ecf2";
	}

	
	
	var x = parseInt( pos[0] , 10 ) + parseInt(obj.offsetWidth,10) - 40;
	var y = parseInt( pos[1] , 10 ) - parseInt(obj.offsetHeight,10);

	error_div.style.left = x+"px";
	error_div.style.top = y+"px";
	
}