/**
 * $Header: /usr/local/cvsroot/DomeBase_UI/src/www/scripts/appMisc.js,v 1.1 2007/03/05 07:14:17 ravi Exp $
 *
 * Copyright &copy; 2003 Quadra Systems Inc. All Rights Reserved.
 *
 * Filename: AppMisc.js
 * Description:
 *  
 * ChangeLog
 * rj_02282005 - added setSelectedIndex
 * mg_08272004 - updated deleteCheckboxes and added validateDateStr
 * rd_08022004 - added writeHTML method.
 */

function deleteCheckboxes (formName, checkboxName) {
	
     for (var i = 0; i < document.forms[formName].length; i++) {
         var e = document.forms[formName].elements[i];
         if (e.type == "checkbox") {
		if (checkboxName != null && e.name != checkboxName) {
			continue;
		}
            if (e.checked) {
               return true; 
            }
         }
     }
	 alert(ERR_1027);
     return false;
}

// Method which checks for a vaild numerical entry in the text field.
function deleteCheckboxes (formName) {
	deleteCheckboxes (formName, "");
}

// Method which checks for a vaild numerical entry in the text field.
function validatePageNumber (formName, fieldName, totalPages) {

    var pageFieldValue = document.forms[formName].elements[fieldName].value;
    var numPage = parseInt (pageFieldValue);


    if (isNaN(numPage)) {
		// not a number
        alert (ERR_1001);
        setFocusTo (formName, fieldName);
        return false;
    } else {
        if (numPage <= 0 || numPage > totalPages ) {
			// beyond the valid range
			// add the total pages value to the alert
            alert (ERR_1055 + totalPages);
            setFocusTo (formName, fieldName);
            return false;
        } else {
            return true;
        }
    } // if page is not number
}

function validateNoOfRecords (formName, fieldName) {
    var fieldValue = document.forms[formName].elements[fieldName].value;
    var numRec = parseInt (fieldValue);
    if (isNaN(numRec)) {
        alert ('Please enter a valid number.');
        setFocusTo (formName, fieldName);
        return false;
    } else {
        return true;
    }
} 

function checkAll(formName, chk) {
	checkAll (formName, chk, null);
}

function checkAll(formName, chk, checkboxName) {

   for (var i=0;i < document.forms[formName].elements.length;i++) {
      var e = document.forms[formName].elements[i];

      if (e.type == "checkbox") { 
		if (checkboxName != null && e.name != checkboxName) {
			continue;
		}
          e.checked = chk.checked;
      }
   }
}

function isCheckboxChecked (formName, checkboxName) {
	var chk = document.forms [formName].elements [checkboxName];
	if (chk && chk.checked) {
		return true;
	}

	return false;
}

function deleteCheckboxes (formName, status, errMsg) {
	return deleteCheckboxes (formName, status, errMsg, null);
}

function deleteCheckboxes (formName, status, errMsg, checkboxName) {

     var flag = "false";
     
     for(var i = 0 ; i < document.forms[formName].length ; i++) {
         var e = document.forms[formName].elements[i];
            if (e.type == "checkbox") {
				if (checkboxName != null && e.name != checkboxName) {
					continue;
				}
                if (e.checked) {
                    flag = "true";
                    break;
                }
            }
     }

     if (flag.match("true")) { 
	  // show confirm only if specified
	 	if (status == null) {
			return true;
		} else {
		  if(confirm (status)) {
			 return true;
		  } else {
			 return false;
			}
		}
     } else {
        alert (errMsg);
        return false;
     }
}

// Simple validation for a textfield that accepts Currency values.
function isValidCurrency (currencyStr) {

	// Remove commas
	var inpStr = currencyStr.replace (",", "");

	// "$" position in input value
	var position = inpStr.indexOf ("$");

	// if "$" in first position then remove it from input
	if (position == 0) {
		inpStr = inpStr.substr (1, inpStr.length - 1);
	}

	if (inpStr.length > 0 && !isNaN (inpStr)) { 
		return true;
	} else {
		return false;
	}
}

// Check that a string contains only numbers
// ignoreWhiteSpace: if 'tre' string can contain white spaces
function isNumeric(string, ignoreWhiteSpace) {
	if (string.search) {
		if ((ignoreWhiteSpace && string.search(/[^\d\s]/) != -1) || (!ignoreWhiteSpace && string.search(/\D/) != -1)){
            return false;
        }
	}
	return true;
}

// checks whether given date is a proper date
function validateDate (day, month, year) {
    if (month < 1 || month > 12 || day < 1 || day > 31 || year < 0) {
        return false;
    }
    if (day==31 && (month==4 || month==6 || month==9 || month==11)) {
        return false;
    }
    if (month==2) {
        if ((year%4==0) && (year%100!=0 || year%400==0)) {
            if (day>29) {
                return false;
            }
        } else {
            if (day>28) {
                return false;
            }
        }
    }
    return true;
}

// checks whether given date is less than lowerLimit date
// lowerLimit - date in millis against which day,month,year are checked
function validateDateAgainst (day, month, year, lowerLimit) {

	now = new Date (lowerLimit);

    var currentYr = now.getFullYear ();
    var currentMonth = now.getMonth () + 1;
    var currentDate = now.getDate ();

    if (year > currentYr) {
        return false;
    }

    if (year == currentYr) {
    	if (month > currentMonth) {
        	return false;
	    }
        if (month == currentMonth) {
            if (day > currentDate) {
                return false;
            }
        }
    }
    return true;
}  

// select the option based on fieldValue in a select Box
function initSelect (formName, fieldName, fieldValue) { 
	if (document.forms[formName].elements[fieldName]) {
		for (i = 0; i < document.forms [formName].elements[fieldName].length; i++) {
			if (document.forms [formName].elements[fieldName] [i].value == fieldValue) {
				document.forms [formName].elements[fieldName].selectedIndex = i;
				break;
			}
		}
	}
}

function initSelectWithLabel (formName, fieldName, fieldLabel) { 
	if (document.forms[formName].elements[fieldName]) {
		for (i = 0; i < document.forms [formName].elements[fieldName].length; i++) {
			if (document.forms [formName].elements[fieldName] [i].text == fieldLabel) {
				document.forms [formName].elements[fieldName].selectedIndex = i;
				break;
			}
		}
	}
}

function setSelectedIndex (formName, fieldName, selIndex) {
	if (document.forms [formName].elements[fieldName]) {
		if (document.forms[formName].elements[fieldName].options.length >= selIndex) {
			document.forms [formName].elements[fieldName].selectedIndex = selIndex;
		}
	}
}

function getSelectedIndex (formName, fieldName) {

	if (document.forms [formName].elements[fieldName]) {
		return document.forms [formName].elements[fieldName].selectedIndex;
	}
	return -2;
}

function getSelectedText (formName, fieldName) {
	var ix = getSelectedIndex (formName, fieldName);

	if (document.forms [formName].elements[fieldName]) {
		return document.forms [formName].elements[fieldName][ix].text;
	}
	return null;
}

function getSelectedValue (formName, fieldName) {
	var ix = getSelectedIndex (formName, fieldName);
	if (document.forms [formName].elements[fieldName]) {
		return document.forms [formName].elements[fieldName][ix].value;
	} 
	return -2;
}

// select the options based on fieldValue in a multiple/non-multiple select Box
function initMultiSelect (formName, fieldName, fieldValue) { 
	if (document.forms[formName].elements[fieldName]) {
		for (i = 0; i < document.forms [formName].elements[fieldName].length; i++) {
			if (document.forms [formName].elements[fieldName] [i].value == fieldValue) {
				document.forms [formName].elements[fieldName].options[i].selected = true;
				break;
			}
		}
	}
}

function setReadOnly (formName, fieldName, readonly) {
	if (document.forms[formName].elements[fieldName]) {
		document.forms[formName].elements[fieldName].readonly = readonly;
	}
}

function showCal () {
	encShowLayer ('popupCal');
}

// Parses a String into an Array containing the month, day and year.
// param: date string in MM/DD/YYYY format
// return: an Array with [1] = month, [2] = day, [3] = year
// return: null if not a valid date.
function parseDate (dateStr) {

	// Parse in mm/dd/yyyy format
	// month: 0 followed by 1-9 or 1 followed by 0, 1, 2
	// day: 3 followed by 0 or 1, 0 followed by 1-9, or 1,2 followed by any digit
	// year: 4 digits
	var re = /^(0[1-9]|1[012])\/(3[01]|0[1-9]|[12]\d)\/(\d{4})$/;
	if (re.test (dateStr) == true) {
		dateArray = re.exec (dateStr);
		// alert (dateArray[1] + "|" + dateArray[2] + "|" + dateArray[3]);
		return dateArray;
	} else {
		return null;
	}
}

function encParseDate (dateStr) {

	// Parse in mm/dd/yyyy format
	// month: 0 followed by 1-9 or 1 followed by 0, 1, 2
	// day: 3 followed by 0 or 1, 0 followed by 1-9, or 1,2 followed by any digit
	// year: 4 digits
	var re = /^(0[1-9]|1[012])\/(3[01]|0[1-9]|[12]\d)\/(\d{4})$/;
	if (re.test (dateStr) == true) {
		dateArray = re.exec (dateStr);
		return dateArray;
	} else {
		return null;
	}
}


// Returns true if earlierDate is earlier than 'laterDate'
function compareDates (earlierDate, laterDate) {

	if (earlierDate != null && laterDate != null) {

		var arr1 = parseDate (earlierDate);
		var arr2 = parseDate (laterDate);
		if (arr1 == null || arr2 == null) {
			return false;
		}

		var y1 = arr1 [3];
		var y2 = arr2 [3];

		if (y1 > y2) {
			// Year 1 is greater than Year 2
			// alert ('later date');
			return false;
		} else if (y1 == y2) {
			// Year is the same; Compare months.
			var m1 = arr1 [1];
			var m2 = arr2 [1];
			if (m1 > m2) {
				// alert ('month');
				return false;
			} else if (m1 == m2) {
				// Months are the same; compare dates
				var d1 = arr1 [2];
				var d2 = arr2 [2];
				if (d1 > d2) {
					// alert ('day');
					return false;
				} else {
					return true;
				}
			} else {
				return true;
			}
		} else {
			return true;
		}
	}
}

// returns true if given date is valid
function isValidDate (dateStr) {
	var arr1 = parseDate (dateStr);
	if (arr1 != null && validateDate (arr1 [2], arr1 [1], arr1 [3])) {
			return true;
	}
	return false;
}

function validateDateStr (formName, fieldName, errMsg, allowEmpty) {

	var dateVal = getFieldValue (formName, fieldName);

	if (dateVal.length == 0) {
		if (allowEmpty) {
			return true;
		} else {
			alert ('Please enter a Date');
			setFocusTo (formName, fieldName);
			return false;
		}
	}

	if (dateVal.length > 0) {
		if (parseDate (dateVal) == null) {
			alert (errMsg);
			setFocusTo (formName, fieldName);
			return false;
		}
	} else {
		return false;
	}

	return true;
}


// redirects the browser to specified url
function addNew (hrefUrl) {
	location.href = hrefUrl;
	return false;
}


// Rounds the input float to two decimal points. returns a float.
function getRoundedFloatValue (formName, fieldName) {

	var fieldVal = "0.00";
	if (document.forms [formName].elements [fieldName]) {
		fieldVal = document.forms [formName].elements [fieldName].value;
	}

	var floatVal = parseFloat (fieldVal);
	
	// check if the input is valid. return 0.00 otherwise.
	if (isNaN (floatVal)) {
		document.forms [formName].elements [fieldName].value = "0.00";
		return 0.00;
	}

	var roundVal = roundFloat (floatVal);

	return roundVal;
}

function formatCurrency (inpVal) {

	var sVal = new String (inpVal);
	var sIx = sVal.indexOf ('.');
	if (sIx == -1) {
		sVal = sVal + ".00";
	} else {
		
		// check the number of digits following the decimal.
		var sSub = sVal.substring (sIx + 1, sVal.length);
		if (sSub.length == 1) {
			sVal = sVal + "0";
		}
		if (sSub.length > 2) {
			sVal = sVal.substring (0, sIx + 1) + sSub.substring (sIx + 1, sIx + 3);
		}
	}

	return sVal;
}

function setFieldValue (formName, fieldName, fieldValue) {
	if (document.forms[formName].elements[fieldName]) {
		document.forms[formName].elements[fieldName].value = fieldValue;
	}
}

function getFieldValue (formName, fieldName) {
	if (document.forms[formName].elements[fieldName]) {
		return document.forms[formName].elements[fieldName].value;
	}

	return null;
}

function roundFloatImpl (inpFloat, places) {

    // round to 2 places by default.
    if (places == null) {
        places = 2;
    }

    var mult = Math.pow (10, places);
    var roundedVal = Math.round (inpFloat * mult) / mult;
    
    // convert back into a float to be safe.
    return parseFloat (roundedVal);
}

function roundFloat (inpFloat) {
	return roundFloatImpl (inpFloat, 2);
}


function writeHTML (elID, str) {
	var el = document.getElementById (elID);

	if (el) {
		if (document.layers) {
			// NN, Moz
			var elDoc = el.document;
			elDoc.open ();
			elDoc.write (str);
			elDoc.close ();
		} else if (el.innerHTML) {
			// IE.
			el.innerHTML = str;
		}
	}
}

/*
function setCheckedInGroup (formName, checkboxGroupName, value) {
	if (document.forms[formName].checkboxGroupName) {
		for (
		document.forms[formName].elements[fieldName].checked = true;
	}
}
*/
