/**
 * @author ELeyva
 */
/** Global variables **/
var fldFocus = null;  //Field handle to focus after validation failure
var ACT_ADD_DOCID_REQ = "ADD_DOCID"
var ACT_ADD_BBL_REQ = "ADD_BBL"
/** End Global Variables **/
function isValidEmail1(strng) {
	var emailFilter=/^.+@.+\..{2,3,4,6}$/;
	alert(emailFilter.test(strng));
	if (!(emailFilter.test(strng))) { 
	       	return false;
	} else {
		return true;
	}
}
function hasIllegalChars(strng) {
	var illegalChars= /[\(\)\<\>\,\;\:\\\/\"\[\]]/
	if (strng.match(illegalChars)) {
   		return true;
	} else {
  		return false;
	}
}
function trim(aStr) {
	return aStr.replace(/^\s{1,}/, "").replace(/\s{1,}$/, "")
}
function isValidDocID(str) {
	var re16digit=/^\d{16}$/ //regular expression defining a 16 digit number
	if (str.search(re16digit)== -1) //if match failed
		return false;
	else
		return true;
}
function isValidEmail(email) {
    var mailPartArr = email.match("^(.+)@(.+)$");
    if(mailPartArr == null) return false;
    if(mailPartArr[1] != null )    {
      var rePartOne=/^\"?[\w-_\.]*\"?$/;
      if(mailPartArr[1].match(rePartOne) == null) return false;
    }
    if(mailPartArr[2] != null)    {
      var rePartTwo =/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(mailPartArr[2].match(rePartTwo) == null)  {
	    var reIPadd =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(mailPartArr[2].match(reIPadd) == null) return false;
      }// if
      return true;
    }
return false;
}
function setFocusField(fld,reset) {
	//if variable is already set then don't set it again
	if ( fldFocus == null)
		fldFocus = fld;
	//Reset variable to null if second arg is true
	if (reset == true)
		fldFocus = null;
}
function doFieldFocus() {
	if (!!fldFocus) fldFocus.focus();
}
function checkEmail(fEmail) {
	err = "";
	if (isValidEmail(fEmail.value) == false) {
		err += "Invalid Email: Enter a valid email address.\n";
		setFocusField(fEmail);
	}
	return err;
}
function checkIDs() {
	f = document.forms[0];
	err = "";
	did1 = f.doc_id1.value;
	if (!did1 || trim(did1) == "" ) {
		err += "Invalid Document ID: Enter a valid 16 digit document id\n";
		setFocusField(f.doc_id1);
		return err;
	}
	if (!isValidDocID(did1) ) {
		err += "Invalid Document ID: Enter a valid 16 digit document id at row 1\n";
		setFocusField(f.doc_id1);
	}
	did1 = f.doc_id2.value;
	if (!!did1 && trim(did1) != "" && (!isValidDocID(did1)) ) {
		err += "Invalid Document ID: Enter a valid 16 digit document id at row 2\n";
		setFocusField(f.doc_id2);
	}
	did1 = f.doc_id3.value;
	if (!!did1 && trim(did1) != "" && (!isValidDocID(did1)) ) {
		err += "Invalid Document ID: Enter a valid 16 digit document id at row 3\n";
		setFocusField(f.doc_id3);
	}
	did1 = f.doc_id4.value;
	if (!!did1 && trim(did1) != "" && (!isValidDocID(did1)) ) {
		err += "Invalid Document ID: Enter a valid 16 digit document id at row 4\n";
		setFocusField(f.doc_id4);
	}
	did1 = f.doc_id5.value;
	if (!!did1 && trim(did1) != "" && (!isValidDocID(did1)) ) {
		err += "Invalid Document ID: Enter a valid 16 digit document id at row 5\n";
		setFocusField(f.doc_id4);
	}
	return err;
}
function doValidationID() {
	setFocusField(null,true);
	var errTxt = "";
	errTxt += checkIDs();
	errTxt += checkEmail(document.forms[0].email_doc_id);
	if (errTxt != "") {
		alert(errTxt);
		doFieldFocus();
		return false;
	} else {
		return true;
	}
}
function doSubmitID() {
 f = document.forms[0];
 f.action.value = ACT_ADD_DOCID_REQ;
 if (doValidationID())
 	f.submit();
}
function isValidBoro(i){
	var	err = "";
	try{
	var f = document.forms[0];
	var index = f.elements["borough"+i].selectedIndex;
	if (index==0) {
		err = "Invalid Borough: Select a valid Borough at row "+i+"\n";
		setFocusField(f.elements["borough"+i]);
	}
	}catch(e){
		window.status="isValidBoro threw: "+e.message+" at row "+i;
		err = "Invalid Borough at row "+i+"\n";
	}
	return err;
}
function isValidBlock(i){
	var err = "";
	try{
	var f = document.forms[0];
	var block = trim(f.elements["block"+i].value);
	if (!block) {
		err = "Invalid Block: Enter a non-empty block number at row "+i+"\n";
		setFocusField(f.elements["block"+i]);
	}else{
		var re5digit=/^\d{1,5}$/; //regular expression defining a number upto 5 digits
		if (!re5digit.test(block)){
			err = "Invalid Block: Enter a block between 1 and 5 numeric digits at row "+i+"\n";
			setFocusField(f.elements["block"+i]);
		}
	}		
	}catch(e){
		window.status="isValidBlock threw: "+e.message+" at row "+i;
		err = "Invalid Block at row "+i+"\n";		
	}
	return err;	
}
function isValidLot(i){
	var err = "";
	try{
	var f = document.forms[0];
	var lot = trim(f.elements["lot"+i].value);
	if (!lot) {
		err = "Invalid Lot: Enter a non-empty lot number at row "+i+"\n";
		setFocusField(f.elements["lot"+i]);
	}else{
		var re4digit=/^\d{1,4}$/; //regular expression defining a number upto 4 digits
		if (!re4digit.test(lot)){
			err = "Invalid Lot: Enter a lot between 1 and 4 numeric digits at row "+i+"\n";
			setFocusField(f.elements["lot"+i]);			
		}
	}		
	}catch(e){
		window.status="isValidLot threw: "+e.message+" at row "+i;
		err = "Invalid Lot at row "+i+"\n";		
	}
	return err;	
}
//this flag tells us if a previous error was already recorded for the bbl optional fields.
//if a previous error was already recorded its value will be 1 otherwise 0. if it's value is
//0 the field focus is reset. if it is 1 it means an error was detected an the focus is not
//touch. we need it as global var since the setFocusField use global vars.
var prevBBLErrFlag=0;
function isValidBBL(i){
	var err1 = isValidBoro(i);
	var err2 = isValidBlock(i);
	var err3 = isValidLot(i);
	var err = err1+err2+err3;
	if (i>1){
		var empty = /non-empty/;
		if (err1 && empty.test(err2) && empty.test(err3)){
		//if this is true it means the three fields are empty since fields
		//after first one are optional we clear the error
			err = "";
			if (!prevBBLErrFlag) setFocusField(null,true);
		}else{
			prevBBLErrFlag=1;
		}
	}
	return err;
}
function checkBBLs() {
	var err = isValidBBL(1); //if the first element is invalid the whole thing is wrong
	if (err==""){
		for(var i=2; i<6; i++){ //this elements are optional
			err += isValidBBL(i);
		}	
	}
	return err;
}
function doValidationBBL() {
	prevBBLErrFlag=0;
	setFocusField(null,true);
	var errTxt = "";
	errTxt += checkBBLs();
	errTxt += checkEmail(document.forms[0].email_block);
	if (errTxt != "") {
		alert(errTxt);
		doFieldFocus();
		return false;
	} else {
		return true;
	}
}
function doSubmitBBL() {
 var f = document.forms[0];
 f.action.value = ACT_ADD_BBL_REQ;
 if (doValidationBBL())
 	f.submit();
}
