function addValidation() {
	for(var q=0; q < 3; q++) {
		if(q == 0) el = document.getElementsByTagName("input");
		if(q == 1) el = document.getElementsByTagName("textarea");
		if(q == 2) el = document.getElementsByTagName("select");
		
		for(var i = 0; i < el.length; i++) {
			if(el[i].type != "submit" && el[i].type != "button" && el[i].type != "hidden") {
				ar = el[i].name.split(":", 2);
				if(ar[0] != "optional" && ar.length==2) {
					el[i].onvalidateresponse = function(e) { if(e != null && e != "") { $(this.id+'_validation').innerHTML = e; $(this.id+'_validation').style.visibility = 'visible'; } else { $(this.id+'_validation').innerHTML = ''; $(this.id+'_validation').style.visibility = 'hidden'; } };
					el[i].validateAs = ar[0];
					if(q==2) {
						$(el[i].id).addEvent('change',function(){validate_rpc(this.validateAs, this, "onvalidateresponse", Array(this.value));});
					} else if(ar[0] == "mand_tick_one" || ar[0] == "mand_tick_one_two" || ar[0] == "mand_tick_one_four") {
						// Added for IE's checkbox change onblur bug
					
						$(el[i].id).addEvent(el[i].type == 'checkbox' ? 'click' : 'change',function(){
							
							//get all the ticked checkboxes in the group
							group_ticks = new Array();
							id = this.id.substring(0,this.id.lastIndexOf("_"));
							this.onvalidateresponse = function(e) { if(e != null && e != "") { $(id+'_validation').innerHTML = e; $(id+'_validation').style.visibility = 'visible'; } else { $(id+'_validation').innerHTML = ''; $(id+'_validation').style.visibility = 'hidden'; } };
							inputs = document.getElementsByTagName("input");
							for(var j=0; j<inputs.length; j++) {
								if(inputs[j].type=="checkbox") {
									if(inputs[j].checked==true) {
										if(inputs[j].id.match(eval('/^'+id+'_[0-9]+$/g'))) {
											group_ticks[group_ticks.length] = inputs[j].id;
										}
									}
								}
							}
							//show err - do ajax call to get the error msg
							validate_rpc(this.validateAs, this, "onvalidateresponse", Array(group_ticks));
						;});
						
					} else if(el[i].type == "checkbox") {
						$(el[i].id).addEvent('change',function(){validate_rpc(this.validateAs, this, "onvalidateresponse", Array(this.checked));});
					} else {
						if(ar[0] == "password" || ar[0] == "opt_password") {
							//this section is for checking passwords match, password fields must be called password1 and password2 and there should be one validation message field which is called 'password_validation'
							el[i].onvalidatepasswordresponse = function(e) { if($('password1').hasHadFocus && $('password2').hasHadFocus) { if(e != null && e != "") { $('password_validation').innerHTML = e; $('password_validation').style.visibility = 'visible'; } else { $('password_validation').innerHTML = ''; $('password_validation').style.visibility = 'hidden'; } } };
							$(el[i].id).addEvent('blur',function(){validate_rpc(this.validateAs, this, "onvalidatepasswordresponse", Array($('password1').value, $('password2').value));});
						} else if(ar[0] == "unique_sku" || ar[0] == "unique_country_iso" || ar[0] == "unique_under_weight" || ar[0] == "unique_tracking_ref") {
							current_unique_key = $('current_unique_key').value;
							$(el[i].id).addEvent('blur',function(){validate_rpc(this.validateAs, this, "onvalidateresponse", Array(this.value, current_unique_key));});
						} else {
							$(el[i].id).addEvent('blur',function(){validate_rpc(this.validateAs, this, "onvalidateresponse", Array(this.value));});
						}
					}
				}
			}
		}
	}
}


function do_focuses() {
	if($('password1')) {
		$('password1').hasHadFocus=false;
		$('password1').addEvent('blur', function() { this.hasHadFocus=true; });
	}
	if($('password2')) {
		$('password2').hasHadFocus=false;
		$('password2').addEvent('blur', function() { this.hasHadFocus=true; });
	}
}


function validate_rpc(validation_type,listener,method,parameters) {
	var jsonRequest = new Request.JSON({url: "/inc/forms-module/ajax.php", onSuccess: function(result){
	    listener[method](result.message);
	}}).post({'validation_type': validation_type, 'params': parameters});
}

window.addEvent('domready', function() {
	addValidation();
	do_focuses();
});
