// Author     : Balamurugan R

// Validate email format
function isEmailAddr(email) {
	var result = false;
	var theStr = new String(email);
	var index = theStr.indexOf("@");
	if (index > 0) {
	    var pindex = theStr.indexOf(".",index);
	    if ((pindex > index+1) && (theStr.length > pindex+1))
		result = true;
	}
	
	var commaIndex = theStr.indexOf(",");
	if(commaIndex>0){
	   result = false;
	}
	
  	return result;
}

 //for Number checking
 function checkNumber(t) {
 	var patt = /\d+$/;
 	var donepatt = /^\d+$/;
 	var str = t.value;
 	var result;
 	if (!str.match(donepatt)) {
 		result = str.match(patt);
 		if (result!= null) {
 			t.value = t.value.replace(/[^\d]/gi,'');
 			str = result[1]  + result[2] ;
			t.value = str;
		}
		else {
 		if (t.value.match(/[^\d]/gi))
 			t.value = t.value.replace(/[^\d]/gi,'');
 		}
	}		
}

 //for String checking
 function checkString(t) {
 	var patt = /[a-zA-Z]+$/;
 	var donepatt = /^[a-zA-Z]+$/;
 	var str = t.value;
 	var result;
 	if (!str.match(donepatt)) {
 		result = str.match(patt);
 		if (result!= null) {
 			t.value = t.value.replace(/[^a-zA-Z]/gi,'');
 			str = result[1]  + result[2] ;
			t.value = str;
		}
		else {
 		if (t.value.match(/[^a-zA-Z]/gi))
 			t.value = t.value.replace(/[^a-zA-Z]/gi,'');
 		}
	}		
}

// Date Validation DD-MMM-YYYY

// Digit characters which are allowed in ZIP Codes

var digits = "0123456789";

// characters which are allowed in date

var dateChar = digits + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

var iZIPCode = "This field must be a 5 or 9 digit U.S. ZIP Code (like 94043 or 94043-1234).\n Please reenter it now."

var iEmail = "This field must be a valid email address (like abc@abc.com).\n Please reenter it now."



// U.S. ZIP codes have 5 or 9 digits.They are formatted as 12345 or 12345-6789.

var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9


//If ZIPString is 9 digits, inserts separator hyphen

function reformatZIPCode (ZIPString)
{   
    if (ZIPString.length == 5) return ZIPString;
    else return (ZIPString.substring(0,5)+"-"+ZIPString.substring(5));
}


// takes DateString and inserts separator hyphens

function reformatDate (DateString)
{
   return (DateString.substring(0,2)+"-"+DateString.substring(2,5)+"-"+DateString.substring(5));
}

// Search through string's characters for a non-numeric character.
function isInteger (s) {   
    for (var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}

// Checks the input string as digit
function isDigit (c) {   
   return ((c >= "0") && (c <= "9"))
}


// Removes all characters which do not appear in string bag from string s.
function stripCharsNotInBag (s, bag) {   
    var returnString = "";

    // Search through string's characters one by one.
    // If character is in bag, append to returnString.

    for (var i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }
    return returnString;
}


// Notify user that contents of field theField are invalid.
function warnInvalid (theField, s) {   
    theField.focus()
    theField.select()
    return theField.value
}


// isZIPCode returns true if string s is a valid 5 or 9 digits zip.
function isZIPCode (s) {
   return (isInteger(s) && ((s.length == digitsInZIPCode1) || (s.length == digitsInZIPCode2))) 
}

function isEmail (s) {
    // there must be >= 1 character before @, so we start looking at 
    // character position 1 (i.e. second character)
   	var i = 1;
   
 	while ((i < s.length) && (s.charAt(i) != "@")){
 		i++ 
 	}
 
	 if ((i >= s.length) || (s.charAt(i) != "@")) return false;
	 else i += 2;
	
	    // look for .
	 while ((i < s.length) && (s.charAt(i) != ".")) {
	 	 i++ 
	 }
	
	// there must be at least one character after the .
	if ((i >= s.length - 1)|| (s.charAt(i) != ".")) return false;
	else return true;
}

var USStates = new Array("AA","AE","AP","AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","MP","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY")

// FUNCTIONS TO INTERACTIVELY CHECK VARIOUS FIELDS.

// Checks data for State
function CheckState(state) {  
  	if (state.value != "") {
		for (var i=0; i<62; i++) {  
			if (state.value.toUpperCase() != USStates[i]) {
				var value = false; 
			}
          else {
              value = true;
              return state.value.toUpperCase()
            }
          }
          if (i==62 && value==false) {
	           state.focus();	             
	           return state.value 
	      }  
      }
   else 
       return ""	
}

// Checks data for rating questions
function CheckRating(rating) {
	if (rating.value != "") {
		if (isNaN(rating.value) || rating.value > 5 || rating.value < 1) {
			rating.focus();
			rating.select();
		}
	}
}

// Checks input for comments
function CheckComments(comment) {
	if (comment.value.length > 900) {
	    comment.focus();
     }
}

// Check date validation
function CheckDateFormat(date) {
	var value = true;
	if(date.value != "")
	{
		if (value ==  true) {
			var DateString = stripCharsNotInBag(date.value, dateChar)
			var c = DateString.charAt(1);
			if (digits.indexOf(c) == -1){
      			var DateString = "0"+DateString;
    		}
		  for (var i=0; i<2; i++)
		    {
		     var c = DateString.charAt(i);
		     if (digits.indexOf(c) == -1)
		       value=false
		    }
		  if (value == false) {
		    //alert (DateString.substring(0,2)+ " is an invalid date")
		    date.focus();
		    date.select();
		    return false;
		   }
  		}
	if(value==true) {
		var month = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","")
		for (var i=0; i<13; i++) {
			if (DateString.substring(2,5).toUpperCase() != month[i])
				value = false;
			else {
				value = true;
				break; 
			}
		}
		if (i==13 && value==false) {
			date.focus();
			date.select();
			return false;
		}
	}
	var YearString = DateString.substring(5);
	if (value==true){
		for (var i=0; i<4; i++) {
			var c = YearString.charAt(i);
			if (digits.indexOf(c) == -1)
			value = false
		}
		if (YearString.length < 4)
			value = false
		if (value==false){
			date.focus();
			date.select();
			return false;
		}
	}
	if (value==true) {
		if (YearString >= 50 && YearString < 100)
			DateString = DateString.substring(0,5) + "19" + YearString ;
		else if (YearString < 50 && YearString >= 0)
			DateString = DateString.substring(0,5) + "20" + YearString ;
		else if (DateString.substring(5,7) > 20 || DateString.substring(5,7) < 19 || YearString.length < 4) {
			value = false; 
			date.focus();
			date.select();
			return false;
		}
	}
	if (value==true) {
		var newString = DateString.substring(2,5)
		var hyphen1=date.value.substring(2,3)
		var hyphen2=date.value.substring(6,7)
		if (newString.toUpperCase() == month[3] || newString.toUpperCase() == month[5] || newString.toUpperCase() == month[8] || newString.toUpperCase() == month[10]) {
			if (DateString.substring(0,2) > 30) {
				date.focus();
				date.select();
				return false;
			}
		}
		else if (newString.toUpperCase() == month[1] && ((YearString % 4 > 0) && (DateString.substring(0,2) > 28))) {
			date.focus();
			date.select();
			return false;
		}
		else if (newString.toUpperCase() == month[1] && (DateString.substring(0,2) > 29)) {
			date.focus();
			date.select();
			return false;
		}
		else if (DateString.substring(0,2) > 31) {
			date.focus();
			date.select();
			return false;
		}
		else if (DateString.substring(0,2) == 0) {
			date.focus();
			date.select();
			return false;
		}
		else if (hyphen1 != "-" || hyphen2 != "-") {
			date.focus();
			date.select();
			return false;
		}          
	}
	return true;
	}
 else return false;
}

// Test for positive integer
function isPosInteger(number) {
	inputStr = number.value.toString()
	for (var i=0; i<inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (digits.indexOf(oneChar) == -1) {
			var value = false;
		}
	}
	if (value == false) {
		number.focus();
		number.select();
	}
}

// checkZIPCode Check that string theField.value is a valid ZIP code.
function checkZIPCode (zipcode){
	if (zipcode.value != "") {
		var normalizedZIP = stripCharsNotInBag(zipcode.value, digits)
		if (!isZIPCode(normalizedZIP, false))
			return warnInvalid (zipcode, iZIPCode);
		else {
			zipcode.value = reformatZIPCode(normalizedZIP)
			return zipcode.value;
		}
	}
	else
	return ""
}

// Check email
function checkEmail (email) {
	if (email.value != "") {
		if (!isEmail(email.value, false)) 
			return warnInvalid (email, iEmail);
		else return email.value;
	}
	else return "";
}

// Validate ZIP code
function validateZIP(field) {
	var valid = "0123456789-";
	var hyphencount = 0;
	
	if (field.length< 5) {
		return false;
	}
	for (var i=0; i < field.length; i++) {
		temp = "" + field.substring(i, i+1);
		if (temp == "-") hyphencount++;
		if (valid.indexOf(temp) == "-1") {
		return false;
		}
	}
	return true;
}

