/********************************************************************
                         nts validator v1.0
						 
********************************************************************/


function NtsValidator(){

//vars
	var error="";
	this.error = error;
	
	var isValid=true;
	this.isValid = isValid;
	
	var dateFormat = "dd/mm/yyyy";
	this.dateFormat= dateFormat;
	
	var dateFormatUS = "yyyy-mm-dd";
	this.dateFormatUS = dateFormatUS;
	
//definitions
	this.validateDate = validateDate;
	this.validateDateMySQL = validateDateMySQL;
	this.validateIP = validateIP;
	this.validateEmail = validateEmail;
	this.validateWeb = validateWeb;
	this.validateNoWord = validateNoWord;
	this.validateNoCharacter = validateNoCharacter;
	this.validateEmpty= validateEmpty;
	this.validateLength= validateLength;
	this.validateExtensions = validateExtensions;//linea 247
	this.validateEqual = validateEqual;
	this.validateValue = validateValue;

	
	
//private func	
	this.testDateSeparators = testDateSeparators;
	this.testDateValues = testDateValues;
	this.testDateSemantics = testDateSemantics;
	
	function validateEqual(input,input2){
		
		if(input.value === input2.value)
		;
		else{
			this.error+=input.name+" and confirmation are not equal\n";
			this.isValid=false;
			return false;
		}
		
		return true;
	}
	
	function validateValue(input,v){
		//alert(input.value+" != "+v);
		if(input.value != v)
		;
		else{
			this.error+="please select your country\n";
			this.isValid=false;
			return false;
		}
		
		return true;
		
	}
	
	function validateEmpty(input,name){
		if(input.value==""){
			if(name){
				this.error+=name+" is empty!\n";
			}else{
				this.error+=input.name+" is empty!\n";
			}
			this.isValid=false;
			return false;
		}
		return true;
	}
	
	function validateLength(input,len){
		if(input.value.length<len){
			this.error+=input.name+": "+len+" characters min\n";
			this.isValid=false;
			return false;
		}
		
		return true;
	}
	
	function validateNoWord(input,word){
		
			if( (input.value == word) || (input.value.indexOf(" "+word+" ") != -1) ||
				(input.value.indexOf(word+" ") != -1) || (input.value.indexOf(word+" ") != -1) ){
				
				this.error += "el campo "+input.name+" no puede contener la palabra reservada " + word + "\n";
				this.isValid = false;	
			}

	}
	
	function validateNoCharacter(input,c){
		
		if(input.value.indexOf(c) != -1){
				this.error += "el campo "+input.name+" no puede contener el caracter reservado " + c + "\n";
				this.isValid = false;	
			
		}
		
	}
	
	//valid web address
	function validateWeb(input){
		
		/*
		var regexp = /^(http[\S\.\/:]*)">([\S\.\/: ]*)$/;
		
		if(!regexp.test(input.value)){
			this.error += "please introduce a valid internet addreess\n";
			this.isValid = false;						
		}
		*/
		
	}
	function validateEmail(input){

		//var regexp = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/; 
		var regexp = /^[^@ ]+@[^@ ]+.[^@ .]+/;
		
		if(!regexp.test(input.value)){
			this.error+="Incorrect email address\n";
			//this.error += "please introduce a valid email address. email addresses may only contain letters, numbers and '.' '_' '-'\n";
			this.isValid = false;
			
			return false;
		}
		
		return true;
		
	}// validate email
	
	//<255
	//155.155.155.155
	function validateIP (input) {

		var regexp=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
		
		if (!regexp.test(input.value)){

			this.error += "incorrect IP format. IP format is ddd.ddd.ddd.ddd \n";
			this.isValid = false;			
			return false;
						
		}
		
		var tab = input.value.split(".");
		var i=0;
		var non=true;
		
		for (i=0; i<=3; i++){
			var aux = parseInt(tab[i]);
			if (aux>255 || aux<0){
					
				this.error += "IP values must be between 0 and 255\n";
				this.isValid = false;			
				return false;
			}
		}
		
		return true;
	
	}//end validateIP
	
	//valid format: 31/01/2006
	function validateDate (input) {
		
      	var separator="/";
		
		var day= null;
		var month= null;
		var year=null;
		
		//SYNTAX
		var dateAux;
		//alert(input);
		//alert(input.value);
		if( (dateAux=this.testDateSeparators(input.value,separator)) != undefined){
			//get day month year values
			day =parseInt(dateAux[0]);
			//alert(dateAux[1]);
			month = parseInt(dateAux[1]);
			year = parseInt(dateAux[2]);
		}else
			return false;
		

		//test valid values
		if(!this.testDateValues(day,month,year,separator))
			return false;

		//SEMANTICS
		//alert("day: "+day);
		//alert("month: "+month);
		//alert("year: "+year);
		return this.testDateSemantics(day,month,year,separator);
	
	}//end validate date


	//valid format: 2006-01-31
	function validateDateMySQL (input) {
		
      	var separator="-";
		var day= null;
		var month= null;
		var year=null;
		
		//SINTAX
		var dateAux;
		if( (dateAux=this.testDateSeparators(input.value,separator)) != undefined){
			//get day month year values
			year =parseInt(dateAux[0]);
			//alert("What"+dateAux[1]);
			month = parseInt(dateAux[1]);
			day = parseInt(dateAux[2]);
		}else
			return false;

		
		//test valid values
		if(!this.testDateValues(day,month,year,separator))
			return false;
			
		//SEMANTICS
		return this.testDateSemantics(day,month,year,separator);		
	
	}//end validate dateUS
	
	function testDateSeparators(date,s){
		//alert("s: "+s);
		//test for two separators
		var dateAux = date.split(s);
		if(dateAux.length !=3){
			
			var format = (s == "/")?this.dateFormat:this.dateFormatUS;
				
			this.error += "incorrect date format please use "+ format + "\n";
			this.isValid = false;			
			return;
		}

		return dateAux;
		
	}
	
	function testDateValues(d,m,y,s){
		if( (isNaN(d)) || (isNaN(m)) || (isNaN(y)) ){
			var format = (s == "/")?this.dateFormat:this.dateFormatUS;
			
			this.error += "please enter only numbers use date format "+format+"\n";
			this.isValid = false;

			return false;
			
		}
		
		return true;	
	}
	
	function testDateSemantics(day,month,year,s){
		
		var minYear=1900;
      	var maxYear=2100; 
		
		//test valid year interval
		if( (year>maxYear)|| (year<minYear) ){
			var format = (s == "/")?this.dateFormat:this.dateFormatUS;
			this.error += "valid year range:"+minYear+"-"+maxYear+" please use date format "+format+"\n";
			this.isValid = false;
			return false;
		}
		
		//test valid date
		var testDate=new Date(year,month-1,day);
		var testDay=testDate.getDate();
		var testMonth=testDate.getMonth()+1;
		var testYear=testDate.getYear();
		
			//alert(day+" "+testDay+" "+month+" "+testMonth+" "+year+" "+testYear);
		//fix year 
		//if(testYear<=100)
			//alert(month);
			//testYear+=1900;
			//alert(testMonth);

		if ( (day!=testDay)||(month!=testMonth)||(year!=testYear) ) {
			//alert(day+" "+testDay+" "+month+" "+testMonth+" "+year+" "+testYear);
			var format = (s == "/")?this.dateFormat:this.dateFormatUS;
			this.error += "the date does not exist! please use date format "+format+"\n";

			this.isValid = false;
			return false;
		}		
		
		return true;
	}
	
	function validateExtensions(extensiones,archivo){
		
		//
		if(archivo.value!=""){
			var ext = archivo.value.split("\.");
			var existe = false;
			
			for(i=0; i < extensiones.length; i++){
				if(ext[ext.length-1]==extensiones[i]){
					existe = true;	
				}
			}
			if(!existe){
				this.isValid = existe;
				this.error+="El archivo "+archivo.value+" no tiene una de estas extensiones:\n";				
				for(i=0; i < extensiones.length; i++){
					this.error+="."+extensiones[i]+" ";
				}
				this.error+="\n";
			}
							
		}
	}

}//end of class
