// JavaScript Document

function jly_clear(vaArray){
	vaArray.each(function(element, i){
		$(element).value='';
	});
}

function jly_hide_all(vaArray){
	// pass array of element ids to hide them all
	vaArray.each(function(element, i){
		$(element).addClass('hidden');
	});
	
}

function jly_show_single(voSender,vaArray){
	jly_hide_all(vaArray);
	if($type(voSender) == "element")  {
		var lsHref = String(voSender.href);
		var lsElementId = lsHref.split("#")[1];
		voSender.addClass("on");
	} else {
		var lsElementId = voSender;
	}
	var loElement = $(lsElementId);
	
	loElement.removeClass('hidden');
}


function jly_toggle(voSender){
	if($type(voSender) == "element")  {
		var lsHref = String(voSender.href);
		var lsElementId = lsHref.split("#")[1];
	} else {
		var lsElementId = voSender;
	}
	var loElement = $(lsElementId);
	
	loElement.toggleClass('hidden');
}

function jly_print_page(){
	window.print();
}	


function  jly_validate_postcode( vsString ) {
	var loRegExp  =  /(\d\d\d\d$)/;
	return loRegExp.test(vsString);
}

function  jly_validate_time( vsString ) {
	var loRegExp  =  /^\d\d:\d\d$/;
	return loRegExp.test(vsString);
}
function  jly_validate_numeric( vsString ) {
	var loRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	return loRegExp.test(vsString);
	/*
	required: {type: "required", re: /[^.*]/, msg: "This field is required."},
	alpha: {type: "alpha", re: /^[a-z ._-]+$/i, msg: "This field accepts alphabetic characters only."},
	alphanum: {type: "alphanum", re: /^[a-z0-9 ._-]+$/i, msg: "This field accepts alphanumeric characters only."},
	integer: {type: "integer", re: /^[-+]?\d+$/, msg: "Please enter a valid integer."},
	real: {type: "real", re: /^[-+]?\d*\.?\d+$/, msg: "Please enter a valid number."},
	date: {type: "date", re: /^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$/, msg: "Please enter a valid date (mm/dd/yyyy)."},
	email: {type: "email", re: /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i, msg: "Please enter a valid email."},
	phone: {type: "phone", re: /^[\d\s ().-]+$/, msg: "Please enter a valid phone."},
	url: {type: "url", re: /^(http|https|ftp)\:\/\/[a-z0-9\-\.]+\.[a-z]{2,3}(:[a-z0-9]*)?\/?([a-z0-9\-\._\?\,\'\/\\\+&amp;%\$#\=~])*$/i, msg: "Please enter a valid url."},
	*/
}

function  jly_validate_email( vsString ) {
	var loRegExp  =  /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i;
	return loRegExp.test(vsString);
}


function jly_set_list(voElementId,voSender,vsSelectStatement){
	if(vsSelectStatement==undefined){
		lsSelectStatement = 'Select...';
	} else {
		lsSelectStatement = vsSelectStatement;
	}
	var parent = $(voSender);
	var child = $(voElementId);
	child.empty();
	var option = new Element('option', {'value': ''}).setHTML('Please wait...').inject(child);
	
	var group_id = parent.getValue();
	if(child.hasClass('hide')){child.setStyle('display', group_id==''?'none':'inline'); }
	var url = '/_inc/modules/aia/_optionlist.asp?group_id='+group_id+'&select='+lsSelectStatement;
	var request = new Json.Remote(url, {
		onComplete: function(jsonObj) {
			jly_add_options(jsonObj.optionList, child);
		}
	}).send();
	if (child.onchange) child.onchange(); 
}

function jly_add_options(optionsvalues, voChild) {
	voChild.empty();
	optionsvalues.each(function(optionvalue) {
		var option = new Element('option', {'value': optionvalue.value}).setHTML(optionvalue.text).inject(voChild);
	});
}

function jly_get_human_field_name( vsName) {
	var lsReturnValue = String(vsName);
	lsReturnValue = lsReturnValue.replace(new RegExp('_id','gi'),''); // remove _id
	lsReturnValue = lsReturnValue.replace(new RegExp('_','gi'),' '); // replace underscore
	return (lsReturnValue.capitalize());
}

function jly_validator(voElement, vsMessage){
	this.element = voElement;
	this.message = vsMessage;
}

function jly_remove_validators() {
	//var divs = $$('div').filterByClass('validator');
	var divs = $$('div.validator','div.success');
	divs.each(function(element) {
		element.remove();
	});
}

function jly_validate_form(vsForm){
	var lbReturnValue = true;
	var f = $(vsForm);
	var laValidateFields = [];
	jly_remove_validators();
	var fields = f.getElements('*[class^=val_]');
	fields.each(function(element) {
		var lsElementName = jly_get_human_field_name(element.name);
		if((element.hasClass('val_checked'))){	
			if (element.checked != 1){
				laValidateFields.push(new jly_validator(element,'You must select at least one '+lsElementName+'.\n'));
				lbReturnValue = false;
			}
		} else {
			var lsElementValue = (element.getValue()).trim();
		}
		if(element.hasClass('editor')){	
			//do this first - assign html content from tinymce
			element.value=tinyMCE.getContent(element.name);
			lsElementValue = element.value;
		}
		
		if((element.hasClass('val_required')) && (lsElementValue=='')){	
			laValidateFields.push(new jly_validator(element,lsElementName+' is required.\n'));
			lbReturnValue = false;
		}
		if((element.hasClass('val_time')) && (lsElementValue!='')){	
			if(jly_validate_time(lsElementValue)==false){
				laValidateFields.push(new jly_validator(element,lsElementName+' must be in 24 hour time format, e.g. HH:MM.\n'));
				lbReturnValue = false;
			}
		}		
		if((element.hasClass('val_numeric')) && (lsElementValue!='')){	
			if(jly_validate_numeric(lsElementValue)==false){
				laValidateFields.push(new jly_validator(element,lsElementName+' must be numeric.\n'));
				lbReturnValue = false;
			}
		}
		if((element.hasClass('val_email')) && (lsElementValue!='')){	
			if(jly_validate_email(lsElementValue)==false){
				laValidateFields.push(new jly_validator(element,lsElementName+' must be a valid email address.\n'));
				lbReturnValue = false;
			}
		}
		if(element.hasClass('val_length')){		
			var maxlength = element.getAttribute('maxlength').toInt();
			var element_length = element.getValue().length;
			if(element_length>maxlength) {
				//laValidateFields.push(element);
				laValidateFields.push(new jly_validator(element,lsElementName+' has a maximum length of ' + String(maxlength) + ' characters. You have entered '+ String(element_length)+' characters (including HTML).\n'));
				lbReturnValue = false;
			}
		}
		if((element.hasClass('val_confirm'))){	
			var en = String(element.name);
			var element_to_match = $(en.substr(0,en.indexOf("_confirm")));
			if(element.getValue()!=element_to_match.getValue()){
				laValidateFields.push(new jly_validator(element,lsElementName+' must match '+ jly_get_human_field_name(element_to_match.name)+'.\n'));
				lbReturnValue = false;
			}
		}


	});
	
	if(!lbReturnValue){
		var n = $('notification');
		laValidateFields.reverse().each(function(validator, index){				 
			var msgContainer = new Element("div", {"id": validator.element.name + "_msg", "class": "validator"});
			msgContainer.setHTML(validator.message);
			if($chk(n))	msgContainer.injectTop(n);
			msgContainer.clone().injectAfter(validator.element);
			//window.scroll(0,0);
		}); 
	}

	return lbReturnValue;
}