
RESPONSE.validation = function() {

	var errorArray = new Array();

	function validate(form,input,submit){

		var type = getType(input.className);	

		var responseSuccess = function(o){
			var check = checkError(input);
			var pos = o.responseText;
			var p = pos.indexOf("true");
			
			if(p>0){
				if(check != false){
					check.parentNode.removeChild(check);
					delete errorArray[input.id+"_error"];
					errorArray.length--;
				}
			}
			else{
				if(check == false){
					addError(input,type,o.responseText);
				}
				else{
					updateMessage(input,o.responseText);
				}
			}

			if(submit == true){
				
				if(errorArray.length == 0){
					document.getElementById(form).submit();
				}
			}

		}

		var responseFailure = function(o){

			
		}

		var callback =
		{
  			success:responseSuccess,
  			failure:responseFailure
		};
		YAHOO.util.Connect.asyncRequest('POST', '/validation/validate', callback, "type="+type+"&text="+input.value);

	}

	function addError(input,type,message){
		var error = document.createElement('div');
		error.id = input.id+"_error";
		error.className = "error";
		error.innerHTML = message;
		errorArray[input.id+"_error"] = error;
		errorArray.length++;
			
		var par = input.parentNode;
		RESPONSE.utilities.insertAfter(par,error,input);
	}

	function updateMessage(input,message){
		for (var i in errorArray) {
			if(i == input.id+"_error"){
				errorArray[i].innerHTML = "";
				errorArray[i].appendChild(document.createTextNode(message));
				
				
			}
			
		}
		
	}

	function checkError(input){
		for (var i in errorArray) {
			if(input.id+"_error" == i){
				return errorArray[i];
			}
		}
		return false;

	}

	function getMessage(type){
		var messageArray = new Array();
		messageArray['isAllowedChars'] = "Compulsory Field";
		messageArray['isAllowedHTMLChars'] = "Compulsory Field";
		messageArray['isEmailAddress'] = "Invalid Email Address";

		return messageArray[type];
	}

	function getType(cl){
		var types = new Array("isAllowedChars","isAllowedHTMLChars","isEmailAddress","isSalary","");
		for(var i=0; i<types.length; i++){
			if(cl.match(types[i])){
				return types[i];
			}
		}
	}

	function validateAll(form){
		
		var inputs = RESPONSE.utilities.getElementsByClassName(document, "input", "validate");
		
		for(i=0; i<inputs.length; i++){
			
			if(i==inputs.length-1){
				validate(form,inputs[i],true);
			}
			else{
				validate(form,inputs[i]);
			}
		}
		
		
	}

	function errorArrayLength()
	{
		length = 0;
		for (var object in errorArray) {
			length++;
		}
		return length;
	}
	

	return{
		validate:validate,
		validateAll:validateAll,
		errorArrayLength:errorArrayLength
	}
}();

