
function InputField(input){

	this.id = undefined; //input id
	this.name = undefined; //input name
	this.type = "text"; //text, password, select
	this.required = "no"; //yes, no
	this.errors = new Array();
	this.errors_container = undefined; //TD object where errors are alerted;
	this.validation_type = "normal"; /* data_day, data_year, 
										numeric, numeric_extended, 
										alphanumeric, alphanumeric_extended,
										alpha, alpha_extended,
										oldpassword, password, retypepassword,
										email, emails, normal(no validation) */
	this.validation_network_type = "normal"; //client, server, normal
	this.input = input; //input Object
	this.form = undefined; //input's form object
	this.error_div = undefined;
	this.data = new String(); //input value
	this.extentedChars = new Array();
	this.ajaxF = function(){};
	this.submit_ready = true;
	this.submitF = function(){};
	
	
	
	this.setId = _inputField_setId;
	this.setName = _inputField_setName;
	this.setInput = _inputField_setInput;
	this.setForm = _inputField_setForm;
	this.addErrors = _inputField_addErrors;
	this.setErrorsContainer = _inputField_setErrorsContainer;
	this.displayError = _inputField_displayError;
	this.hideError = _inputField_hideError;
	this.setType = _inputField_setInputType;
	this.setValidationType = _inputField_setValidationType;
	this.setValidationNetworkType = _inputField_setValidationNetworkType;
	this.setAJAXFunction = _inputField_setAJAXFunction;
	this.setRequired = _inputField_setRequired;
	this.addData = _inputField_addData;
	this.removeData = _inputField_removeData;
	this.addExtendedChars = _inputField_addExtendedChars;
	this.setReadySubmit = _inputField_setReadySubmit;
	this.setSubmitFunction = _inputField_setSubmitFunction;
	this.initActions = _inputField_initActions;

}

function _inputField_setId(Id){
	this.id = Id;
}

function _inputField_setName(Name){
	this.name = Name;
}

function _inputField_setInputType(InputType){
	this.type = InputType;	
}

function _inputField_setInput(InputObj){
	this.input = InputObj;
}

function _inputField_setForm(FormObj){
	this.form = FormObj;	
}

function _inputField_addErrors(ErrorsArray){
	for (var i=0; i<ErrorsArray.length; i++){
		this.errors.push(ErrorsArray[i]);
	}
}

function _inputField_setErrorsContainer(ContainerObj){
	this.errors_container = document.getElementById(ContainerObj);
}

function _inputField_displayError(Error){
	//create DIV where the errors will be posted
	if (this.error_div == undefined){
		this.error_div = document.createElement('div'); 
		this.error_div.setAttribute("width","100%");
		this.error_div.style.position = "relative";
		this.error_div.style.paddingBottom = "4px";
		this.errors_container.appendChild(this.error_div);
	}
	this.error_div.style.display = "block";
	this.error_div.innerHTML = "<span class='description_txt' style='color:#D50909'>&bull; "+ Error +"</span>";
	//this.errors_container.className = "error_bg";
	/*
	var sibling = this.errors_container.previousSibling;
	while (sibling && sibling.nodeType != 1) {
	sibling = sibling.previousSibling;
	}
	if (sibling){
		sibling.className = "error_bg";
	}*/
}

function _inputField_hideError(){
	if (this.error_div != undefined){
		this.error_div.style.display = "none";
	}
	this.errors_container.className = "";
	
	var sibling = this.errors_container.previousSibling;
	while (sibling && sibling.nodeType != 1) {
	sibling = sibling.previousSibling;
	}
	if (sibling){
		sibling.className = "";
	}
	
}

function _inputField_setValidationType(ValidType){
	this.validation_type = ValidType;
}

function _inputField_setValidationNetworkType(NetworkType){
	this.validation_network_type = NetworkType;
}

function _inputField_setRequired(RequiredType){
	this.required = RequiredType;
}

function _inputField_addData(Data){
	this.data = Data;
}

function _inputField_removeData(){
	this.data = "";
	this.input.value = "";
}

function _inputField_addExtendedChars(charsArray){
	for (var i=0; i<charsArray.length; i++){
		this.extentedChars.push(charsArray[i]);
	}
}

function _inputField_setReadySubmit(bool){
	this.submit_ready = bool;
}

function _inputField_setSubmitFunction(innerFunction){
	this.submitF = innerFunction;
}

function _inputField_initActions(){
	this.input.JSObject = this;
	this.input.onkeypress = _inputField_onKeyPress;
	this.input.onkeyup = _inputField_onKeyUp;
	this.input.onblur = _inputField_onKeyBlur;
	this.input.onchange = _inputField_onChange;
}

function _inputField_onKeyPress(){
	switch (this.JSObject.validation_type){
		case "normal":
			return;
			break;	
			
		case "retypepassword":
			if (_array_inputs['password'].data.length <6 || _array_inputs['password'].data.length >32 ){
				return false;
			}
					
			break;
			
		default: break;
	}
}
function _inputField_onKeyUp(evt){
	switch (this.JSObject.validation_type){
		case "normal":
			return;
			break;	
			
		case "password":
			this.JSObject.addData(this.value);
			
			break;
			
		case "retypepassword":
			this.JSObject.addData(this.value);
					
			break;
			
		default: break;
	}
	
	if (evt){
		var Event = evt;
	}
	else{
		var Event = event;
	}
	if (Event.keyCode == 13){
		formsubmit = true;
		this.blur();
	}
}

function _inputField_onKeyBlur(){
	switch (this.JSObject.validation_type){
		
		case "normal":
			return;
			break;	
		
		
		case "alpha_extended":
			this.JSObject.addData(this.value);
			var valid = this.JSObject.data.isAlphaExtended(this.JSObject.extentedChars);
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				this.JSObject.hideError();
				if (this.JSObject.required == "no"){
					this.JSObject.setReadySubmit(true);
				}
				else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
					this.JSObject.setReadySubmit(true);
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
		
		
		case "alphanumeric_extended":
			this.JSObject.addData(this.value);
			var valid = this.JSObject.data.isAlphaNumericExtended(this.JSObject.extentedChars);
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				
				//AJAX Validation
				if (this.JSObject.validation_network_type == "server"){
					this.JSObject.ajaxF(String(this.JSObject.data));
					
				}
				else{ 
					this.JSObject.hideError();
					if (this.JSObject.required == "no"){
						this.JSObject.setReadySubmit(true);
					}
					else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
						this.JSObject.setReadySubmit(true);
					}
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
		
		case "alphanumeric":
			this.JSObject.addData(this.value);
			var valid = this.JSObject.data.isAlphaNumeric();
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				this.JSObject.hideError();
				if (this.JSObject.required == "no"){
					this.JSObject.setReadySubmit(true);
				}
				else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
					this.JSObject.setReadySubmit(true);
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
		
		case "numeric":
			this.JSObject.addData(this.value);
			var valid = this.JSObject.data.isNumeric();
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				this.JSObject.hideError();
				if (this.JSObject.required == "no"){
					this.JSObject.setReadySubmit(true);
				}
				else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
					this.JSObject.setReadySubmit(true);
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
		
		
		case "numeric_extended":
			this.JSObject.addData(this.value);
			var valid = this.JSObject.data.isNumericExtended(this.JSObject.extentedChars);
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				this.JSObject.hideError();
				if (this.JSObject.required == "no"){
					this.JSObject.setReadySubmit(true);
				}
				else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
					this.JSObject.setReadySubmit(true);
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
		
		
		case "email":
			this.JSObject.addData(this.value);
			var valid = this.JSObject.data.isEmail();
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				//AJAX Validation
				if (this.JSObject.validation_network_type == "server"){
					this.JSObject.ajaxF(String(this.JSObject.data));
					
				}
				else{ 
					this.JSObject.hideError();	
					if (this.JSObject.required == "no"){
						this.JSObject.setReadySubmit(true);
					}
					else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
						this.JSObject.setReadySubmit(true);
					}
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
		case "emails":
			this.JSObject.addData(this.value);
			var valid = true;
			var re = /[\s]/g;
			this.JSObject.data = this.JSObject.data.replace(re,"");
			var emails = this.JSObject.data.split(";");
			for (var i=0; i<emails.length; i++){
				valid = emails[i].isEmail();
				if (valid == false) break;
			}
			
			if (valid==false){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				//AJAX Validation
				if (this.JSObject.validation_network_type == "server"){
					this.JSObject.ajaxF(String(this.JSObject.data));
					
				}
				else{ 
					this.JSObject.hideError();	
					if (this.JSObject.required == "no"){
						this.JSObject.setReadySubmit(true);
					}
					else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
						this.JSObject.setReadySubmit(true);
					}
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
		
		case "oldpassword":
			this.JSObject.addData(this.value);
			this.JSObject.hideError();
			if (this.JSObject.required == "no"){
				this.JSObject.setReadySubmit(true);
			}
			else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
				this.JSObject.setReadySubmit(true);
			}
			
			break;
		
		case "password":
			this.JSObject.addData(this.value);
			
			if ((this.JSObject.data.length > 0 && this.JSObject.data.length < 6) || this.JSObject.data.length > 32){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				this.JSObject.hideError();	
				if (this.JSObject.required == "no"){
					this.JSObject.setReadySubmit(true);
				}
				else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
					this.JSObject.setReadySubmit(true);
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
		
		case "retypepassword":
			this.JSObject.addData(this.value);
			
			if (_array_inputs['password'].data != this.JSObject.data){
				this.JSObject.displayError(this.JSObject.errors[1]);
				this.JSObject.setReadySubmit(false);
			}
			else{
				this.JSObject.hideError();	
				if (this.JSObject.required == "no"){
					this.JSObject.setReadySubmit(true);
				}
				else if	(this.JSObject.required == "yes" && this.JSObject.data.length !=0){
					this.JSObject.setReadySubmit(true);
				}
			}
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
		
		case "data_day": 
		case "data_year":
			this.JSObject.addData(this.value);
			
			var month = _array_inputs['birthday_month'].data;
			var day = _array_inputs['birthday_day'].data;
			var year = _array_inputs['birthday_year'].data;
			
			if (parseInt(month) == 0 || String(day) == "day" || String(year) == "year") break;
			
			var valid = _array_inputs['birthday_day'].data.isDate(month,day,year);
			if (valid==false){
				_array_inputs['birthday_day'].displayError(_array_inputs['birthday_day'].errors[1]);
				this.JSObject.setReadySubmit(false);
				break;
			}
						
			_array_inputs['birthday_day'].hideError();
			this.JSObject.setReadySubmit(true);
			
			if (this.JSObject.data.length == 0){
				if (this.JSObject.required == "yes"){
					this.JSObject.setReadySubmit(false);
				}
				else{
					this.JSObject.hideError();
					this.JSObject.setReadySubmit(true);
				}
			}
			
			break;
			
			
		default:
			break;
	}
	
	if (formsubmit == true){
		this.JSObject.submitF(this.JSObject.form);	
	}
	
}


function _inputField_onChange(){
	switch (this.JSObject.type){
		
		case "select":
			if (this.JSObject.validation_type == "data_month"){
				this.JSObject.addData(this.value);
			
				var month = _array_inputs['birthday_month'].data;
				var day = _array_inputs['birthday_day'].data;
				var year = _array_inputs['birthday_year'].data;
				
				if (String(day) == "day" || String(year) == "year") break;
				
				var valid = _array_inputs['birthday_day'].data.isDate(month,day,year);
				if (valid==false){
					_array_inputs['birthday_day'].displayError(_array_inputs['birthday_day'].errors[1]);
					this.JSObject.setReadySubmit(false);
					break;
				}
							
				_array_inputs['birthday_day'].hideError();
				this.JSObject.setReadySubmit(true);
				
			}
			break;
	}
}



function _inputField_setAJAXFunction(innerFunction){
	this.ajaxF = innerFunction;
	this.ajaxReturn = true;
	
}