/* This is the main javascript class embedded on each of the JSP pages
 * This page contains all the javascript functions to be used by naccrraware
 *
 * The methods listed below are for different Data Validations 
 * a) Email Validation 		    : validateEmail()
 * b) WholeNumebr Validations   : validateWholeNumber()
 * c) PhoneNumber Validation    : validatePhoneNumber()
 * d) DecimalNumber Validation  : validateDecimalNumber()
 * e) DateNumber Validation     : validateDate()
 * 
 * JavaScript Validations routnie hilite the Form field if the Dataentry is wrong or inconsistent
 */

// Highlight the text box to yellow If the data field is an error field
function hilite(field) {
	field.style.backgroundColor="yellow";
}

// Highlight the text box to whiter
function delite(field) {
	field.style.backgroundColor="white";
}

digitsReg = /^\d+$/;
PositiveNumberReg = /^0|[1-9]\d*$/;
//digitsReg.compile("\^\\d\+\$");
//digitsReg.compile("\d+");
alphaNumReg = /^[a-zA-Z\d]+$/;
 
// for Identifying of the data types
var PHONE_NUM 	= 0;
var DECIMAL_NUM = 1;
var WHOLE_NUM 	= 2;
var DATE_NUM 	= 3;
var EMAIL_NUM 	= 5;
var LONGITUDE   = 6;

/* called to validate email fields: 
 * Requires a user to enter at least one . and at least one @
 */
function validateEmail(field, fieldName, showAlert)
{
	if( field.value.length > 0 )
	{
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
		if (filter.test(field.value)){
			delite(field);
	 		return true;
	 	} else {
			if( showAlert ){
				alert(getEmailErrorMessage(fieldName));
				field.focus();
			}
			hilite(field);
			return false;
		}
	}
	delite(field);
	return true;
}

/* called to validate whole number fields: 
 * Requires a user to enter all Numbers digits
 */
function validateWholeNumber(numberField, fieldName, showAlert)
{
	if(numberField.value.length > 0)
	{
		checkNum = numberField.value;
		for(i = 0; i < checkNum.length; i++)
		{
			if(checkNum.charAt(i) < '0' || checkNum.charAt(i) > '9')
			{						
				if(showAlert)
				{
					alert(getWholeErrorMessage(fieldName));
					hilite(numberField);
					numberField.focus();
					return false;
				} else  { //if(validWholeNumber) {
					hilite(numberField);
					return false;
				}
				delite(numberField);
				return true;
			}
	 	}
	}
	delite(numberField);
	return true;
}
/*
 * called to validate all-digits fields
 */
function validateDigits(numField, fieldName, showAlert)
{
	if(! digitsReg.test(numField.value))
	{			
		if(showAlert)
		{
			alert(getWholeErrorMessage(fieldName));
			hilite(numField);
			numField.focus();
		}
		return false;
	}
	delite(numField);
	return true;
}

/*
 * called to validate alpha-numeric fields
 */
function validateAlphaNumeric(alphaNumField, fieldName, showAlert)
{
	if(! alphaNumReg.test(alphaNumField.value))
	{
		if(showAlert)
		{
			alert(getAlphaNumErrorMessage(fieldName));
			hilite(alphaNumField);
			alphaNumField.focus();
		}
		return false;
	}
	delite(alphaNumField);
	return true;
}
	
/* called to validate phone number fields: 
 * Requires a user to enter all Numbers digits
 */
function validatePhoneNumber(numberField, fieldName, showAlert) {
	if(numberField.value.length <= 0) {
		delite(numberField);
		return true;
	} else if(numberField.value.length != 8) {
		if(showAlert) {
			alert(getPhoneErrorMessage(fieldName));
			numberField.focus();
		} 
		hilite(numberField);
		return false;
	} else {
		checkNum = numberField.value;
		for(i=0; i<checkNum.length; i++) {
			if(i!=3 && (checkNum.charAt(i) < '0' || checkNum.charAt(i) > '9')) {
			   	if(showAlert) {
					alert(getPhoneErrorMessage(fieldName));
					hilite(numberField);
					numberField.focus();
					return false;
				} else {
					hilite(numberField);
					return false;
				}
				
			} else if(i == 3 && checkNum.charAt(i) != '-') {
				if(showAlert) {
					alert(getPhoneErrorMessage(fieldName));
					hilite(numberField);
					numberField.focus();
					return false;
				} else {
					hilite(numberField);
					return false;
				}
			}
	
		}
	}
	delite(numberField);
	return true;
}

 /*called to validate decimal number fields */
function validateDecimalNumber(numberField, fieldName, showAlert) {
           
	if(numberField.value.length > 0) {
		checkNum = numberField.value;
		
		for(i = 0; i < checkNum.length; i++) {
			if((checkNum.charAt(i) < '0' || checkNum.charAt(i) > '9') && checkNum.charAt(i) != '.' ) {
			    	if(showAlert) {
			    		alert(getDecimalErrorMessage(fieldName));
			    		numberField.focus();
			    	}
					hilite(numberField);
			    	return false;
			}
		}
	} 
	delite(numberField);
	return true;
}

/*--ezlocategeocoding--called to validate Longitude field */
function validateLongitude(numberField, fieldName, showAlert) {
 
 	if(numberField.value.length > 0) {
		checkNum = numberField.value;
		
		for(i = 0; i < checkNum.length; i++) {
		
			if((checkNum.charAt(i) < '0' || checkNum.charAt(i) > '9') && (checkNum.charAt(i) != '.' && checkNum.charAt(i) != '-')) {
			    	if(showAlert) {
			    		alert(getDecimalErrorMessage(fieldName));
			    		numberField.focus();
			    		alert("longitude not correct value");
			    	}
					hilite(numberField);
			    	return false;
			}
		}
	} 
	delite(numberField);
	return true;
}
/* --ezlocategeocoding---*/



/*called to validate date fields*/
 function validateDate(dateField, fieldName, showAlert) {
 	if( dateField.value.length > 0) {
		dt = new Date(dateField.value);
		if(isNaN(dt)) {
			if(showAlert) {
				alert(getDateErrorMessage(fieldName));
				dateField.focus();
			}
			hilite(dateField);
			return false;
		} else if(dt.getFullYear() < 1960) {
			str = dateField.value;
			newStr = "";
			monthHit = false;
			for(i=0; i<str.length; i++) {
				newStr = newStr + str.charAt(i);
				if(str.charAt(i) == '-' || str.charAt(i) == '/') {
					if(monthHit) {
						years = str.length - newStr.length;
						dtStr = str.substring(i + 1, str.length);
						if(years == 4) { //dt is fine
						} else if(years == 2) {
							dt = new Date(newStr + "20" + dtStr);
						} else if(years == 1) {
							dt = new Date(newStr + "200" + dtStr);
						} else {
							if(showAlert) {
								alert(fieldName + " is an Invalid Date: Year must be Four Digits");
								hilite(dateField);
								dateField.focus();
								return false;			

							}
						}
					} else {
						monthHit = true;
					}
				}
			}
			dateField.value = (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
		} else {
			dateField.value = (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
		}
	}
	delite(dateField);
	return true;
}

function getEmailErrorMessage(fieldName) {
	return "The " + fieldName + " must be in the format userid@emailplace.extension";
}
function getWholeErrorMessage(fieldName) {
	return "The " + fieldName + " must be Numeric";
}
function getPhoneErrorMessage(fieldName) {
	return "The " + fieldName + " must be in the format DDD-DDDD";
}
function getDecimalErrorMessage(fieldName) {
	return "The " + fieldName + " must be a Decimal Number";
}
function getDateErrorMessage(fieldName) {
	return "The " + fieldName + " Must Be in the Format MM/DD/YYYY";
}
function getAlphaNumErrorMessage(fieldName) {
	return "The " + fieldName + " must be Alpha-Numeric";
}

/*
 * Called When A Form Is submitted from the JSP Page
 * Generic Method to be used  By all JSP pages
 * If there are any other data validations to be done, 
 * then a seperate custom method has to be written in the JSP page
 * and this method has to be called.
 */
function validateDataFields( arrayCheckData )
{
	eMsg = "";
	if( arrayCheckData == null || arrayCheckData.length==0 )
		return eMsg;
		
	for(checkField = 0; checkField < arrayCheckData.length; checkField++) {
		if(arrayCheckData[checkField][2] == WHOLE_NUM) {
			if(!validateWholeNumber(arrayCheckData[checkField][0], arrayCheckData[checkField][1], false)) 
				eMsg = eMsg + getWholeErrorMessage(arrayCheckData[checkField][1]) + "\n";
		} else if(arrayCheckData[checkField][2] == DECIMAL_NUM) {
			if(!validateDecimalNumber(arrayCheckData[checkField][0], arrayCheckData[checkField][1], false)) 
				eMsg = eMsg + getDecimalErrorMessage(arrayCheckData[checkField][1]) + "\n";
		} else if(arrayCheckData[checkField][2] == DATE_NUM) {
			if(!validateDate(arrayCheckData[checkField][0], arrayCheckData[checkField][1], false)) 
				eMsg = eMsg + getDateErrorMessage(arrayCheckData[checkField][1])  + "\n";
		} else if(arrayCheckData[checkField][2] == PHONE_NUM) {
			if(!validatePhoneNumber(arrayCheckData[checkField][0], arrayCheckData[checkField][1], false)) 
				eMsg = eMsg + getPhoneErrorMessage(arrayCheckData[checkField][1])  + "\n";
		} else if(arrayCheckData[checkField][2] == EMAIL_NUM) {
			if(!validateEmail(arrayCheckData[checkField][0], arrayCheckData[checkField][1], false)) 
				eMsg = eMsg + getEmailErrorMessage(arrayCheckData[checkField][1])  + "\n";
		}else if(arrayCheckData[checkField][2] == LONGITUDE) {
			if(!validateLongitude(arrayCheckData[checkField][0], arrayCheckData[checkField][1], false)) 
				eMsg = eMsg + getDecimalErrorMessage(arrayCheckData[checkField][1]) + "\n";
		}
		//alert(eMsg+':'+ arrayCheckData[checkField][0])
	}	
	return eMsg;
}

function validateMandatoryFields( mandatoryCheckData )
{
	eMsg = "";
	if( mandatoryCheckData == null || mandatoryCheckData.length==0 )
		return eMsg;
		
	for(checkField = 0; checkField < mandatoryCheckData.length; checkField++)
	{
		checkNum = mandatoryCheckData[checkField][0].value.length;
		if(checkNum==0){ 
			eMsg = eMsg + "Field : " + mandatoryCheckData[checkField][1] + " is a required field and cannot be blank. \n";
			hilite(mandatoryCheckData[checkField][0]);			
		 }else if ( checkNum < mandatoryCheckData[checkField][2] ) {	
			eMsg = eMsg + "Field : " + mandatoryCheckData[checkField][1] + " is a required field and the number of characters/Digits is "+ mandatoryCheckData[checkField][2] +"\n";
			hilite(mandatoryCheckData[checkField][0]);			
		}	
	}
	return eMsg;
}
/*
 * validate length of field
 */
function validateLength(field, fieldName, showAlert, op, length)
{
	if (! PositiveNumberReg.test(length))  {
		alert("javascript function validateLength was called with wrong parameter: length param needs to be an integer >= 0");
		return false
	}
	if (op != ">" && op != ">=" && op != "==" && op != "<" && op != "<=")  {
		alert("javascript function validateLength was called with wrong parameter: op param needs to be one of the following '>', '>=', '==', '<', or '<='");
		return false;
	}
	
	lengthOK = false;
	
	if (op == ">" && field.value.length > length)
		lengthOK = true;
	if (op == ">=" && field.value.length >= length)
		lengthOK = true;
	if (op == "==" && field.value.length == length)
		lengthOK = true;
	if (op == "<" && field.value.length < length)
		lengthOK = true;
	if (op == "<=" && field.value.length <= length)
		lengthOK = true;
	
	if (lengthOK)  {
		delite(field);
		return true;
	}
	
	//length is wrong
	if(showAlert)
	{
		alert("The " + fieldName + " must be of length " + op + " " + length);
		hilite(field);
		field.focus();
	}
	
	return false;
}


//make sure at least one box is checked
function validateCheckBox(checkBoxGrp)
{
	checked = false;
	for (i=0; i<checkBoxGrp.length; i++)  {
		if (checkBoxGrp[i].checked==true)  {
			checked = true;
			break;
		}
	}
	
	return checked;
}

// Deselect the  MultiSelect Entry from the Data Entry Screen
function deSelect(object)
{
   	var numberOfOptions = object.length;
	for (c=0; c < numberOfOptions; c++)
		  object.options[c].selected=false;
} 

// Unchecks all the radio buttons
function unCheck(object)
{
   	var numberOfOptions = object.length;
	for (c=0; c < numberOfOptions; c++)
		object[c].checked=false;
}

function checkForMove(e,object1, object2, varName)
{
	if (e.type == "keypress")
	{ 
		var whichCode = e.keyCode;
  		var input = String.fromCharCode (whichCode);
		if (object1.value.length == 3)
		{
			object2.focus();
			window.event.returnValue = true; // type input in next field
			validateWholeNumber(object1, varName, true);
            return true;
        }
        return true;
	}
}

function showStatusBar(pageName)
{
	if(pageName==null)
		pageName="Opening Page....";

	urlstr=self.location;
	var ie = (navigator.appName.indexOf("Explorer") > -1) ? true : false;
	var url = '';
	var centerX = screen.availWidth / 2;
	var centerY = screen.availHeight / 2;
	var faqWinLeft = parseInt(centerX - (350/2)) ;
	var faqWinTop = parseInt(centerY - (250/2));
	if (ie){
		var innerWidth = document.body.clientWidth;
		innerHeight = document.body.clientHeight;
	} else {
		var innerWidth = window.innerWidth;
		var innerHeight = window.innerHeight;
	}
	editusr= window.open('','loadbar','height=50,width=300,toolbar=no,directories=no,status=no,scrollbars=no,menubar=no,resizable=no')
	editusr.moveTo(faqWinLeft,faqWinTop)
	editusr.document.write("<html><head><title>OPENING PAGE</title></head><body bgcolor=ffffff onBlur=\"close()\"><table align=center width=100% height=100%><tr><td valign=center align=center><nobr><B>"+pageName+"&nbsp;</B> <img  src=/naccrra/images/hourglass2.gif height=32 width=30 align=absmiddle></nobr></td></tr></table></body></html>");
	editusr.document.close();
	editusr.focus();
}

	
function otherSelected(fieldID, otherFieldID)
{ 
	var lsVal = fieldID.value;
	lsVal = lsVal.toUpperCase();
	if(lsVal == "OTHER") {
		otherFieldID.readOnly=false;
	} else {
		otherFieldID.readOnly=true;
		otherFieldID.value="";
	}
}

function getOtherFieldValue(fieldID, otherFieldID)
{ 
	var lsVal = fieldID.value;
	lsVal = lsVal.toUpperCase();
	if(lsVal == "OTHER" || lsVal == "")
	{
		lsVal = otherFieldID.value
	} 
	else
	{
		lsVal = fieldID.value;
	}
	
	return lsVal;
}

function selectAll(componentName, value)
{
	var chkBoxes = document.getElementsByName(componentName);

	if(chkBoxes != null)
	{
		var len = chkBoxes.length;

		if(len == null)
		{
			if(chkBoxes != null)
			{
				chkBoxes.checked = value;
			}
		}
		else
		{
			for (i=0; i<len; i++)
			{
				chkBoxes[i].checked = value;
			}
		}
	}
	else
	{
		if(value == true)
		{
			alert('No file to select.');
		}
		else
		{
			alert('No file to unselect.');
		}
	}
}

function deleteFiles(componentName, delTyp)
{
	var chkBoxes = document.getElementsByName(componentName);

	if(chkBoxes != null)
	{
		var len = chkBoxes.length;
		var fileSelected = false;

		if(len != null)
		{
			for (i=0; i<len; i++)
			{
				if(chkBoxes[i].checked == true)
				{
					fileSelected = true;
				}
			}
		}
		else
		{
			if(chkBoxes.checked == true)
			{
				fileSelected = true;
			}
		}

		if(fileSelected == false)
		{
			alert('Please select file to delete');
			return false;
		}
		else
		{
			if(confirm("Do you really want to delete selected file(s)?") == true)
			{
				var act = document.deleteForm.action;
				document.deleteForm.action = act + '?delTag=' + componentName + '&delTyp=' + delTyp;
				document.deleteForm.submit();
			}
		}
	}
	else
	{
		alert('No file exist on server to delete.');
	}
}

function transferValue(fieldID, otherFieldID)
{ 
	var lsVal = fieldID.value;
	lsVal = lsVal.toUpperCase();
	if(lsVal != "OTHER") {		
		if(lsVal == "")
		{
			otherFieldID.value = "";
			fieldID.value="";
		}
		else
		{
			otherFieldID.value=fieldID.value;
			fieldID.value="";
		}
	}
}
