/**
* Clears all values from the input form
*/
function clearForm(form) {

     // go through the entire Form Object
     for (var i = 0; i < form.length; i++) {

          // if the element isn't a button, hidden, submit, or reset then set the VALUE to ""
          if (form.elements[i].type != 'button' && form.elements[i].type != 'hidden' &&
               form.elements[i].type != 'submit' && form.elements[i].type != 'reset')
               form.elements[i].value = "";

          // if the element is a radio button or a checkbox then uncheck the Object if it is checked
          if (form.elements[i].type == 'radio' || form.elements[i].type == 'checkbox')
               form.elements[i].checked = false;

          // if the element is a select Object then assign it new text values
          if (form.elements[i].type == 'select-one' || form.elements[i].type == 'select-multiple') {
               for (var j = 0; j < form.elements[i].length; j++) {
                    form.elements[i].options[j].selected = false;
               }

               form.elements[i].options[0].selected = true;
         }
     }
}

/**
* Opens a pop-up window - for the purpose of order entry display windows.
*/
function openDetailsWindow(url) {

   var today = new Date();
   var num = today.getTime();
   var str = "width=650,height=550,toolbar=1,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1";
   var newWin = open(url, "DetailsWindow" + num, str);
   newWin.focus();
}

/**
* Opens a pop-up window - for the purpose of displaying Record Detail.
*/
function openRecordDetailsWindow(url) {

   var today = new Date();
   var num = today.getTime();
   var str = "width=450,height=600,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1";
   var newWin = open(url, "RecordDetails" + num, str);
   newWin.focus();
}

/**
 * removes the an matches with the given pattern from the given array.
 * A regular expression is supplied as a value.
 */
function removeValue(patternToRemove, valueArray) {

   var newArray = new Array();

   for (var i=0; i<valueArray.length; i++) {

      if (!regExMatch(patternToRemove, valueArray[i])) {

         newArray.push(valueArray[i]);
      }
   }

   return newArray;
}

/**
 * returns an array of values for the given form element
 */
function getValueArray(formElement) {
   var valueArray;
   if(formElement.length == null) {
      valueArray = new Array(1);
      valueArray[0] = formElement.value;
   } else {
      valueArray = new Array(formElement.length);
      for (var i=0; i<formElement.length; i++) {
         valueArray[i] = formElement[i].value;
      }
   }
   return valueArray;
}

/**
 * returns an array of selected values for the given form element
 */
function getSelectedValueArray(formElement) {

   var valueArray = new Array(formElement.length);
   if(formElement.length == null) {
      valueArray = new Array(1);
      valueArray[0] = formElement.value;
   } else {
      valueArray = new Array();
      for (var i=0; i<formElement.length; i++) {
         if (formElement[i].selected || formElement[i].checked) {
            valueArray.push(formElement[i].value);
         }
      }
   }
   return valueArray;
}

/**
 * Updates the given formElement with the values of the
 * valueArray.
 */
function updateSelection(formElement, valueArray) {
   if((valueArray.length == 1) && (valueArray[0] == "")) {
      formElement.length = 0;
   } else {
      formElement.length = valueArray.length;
      for (var i=0; i<valueArray.length; i++) {
         formElement[i].text=valueArray[i];
         formElement[i].value=valueArray[i];
         formElement[i].selected = true;
         formElement[i].disabled = true;
      }
   }
}

/**
 * Updates the given formElement with the values of the
 * valueArray. Doesnot disable the elements.
 */
function updateSelectionNoDis(formElement, valueArray) {

   formElement.length = valueArray.length;

   for (var i=0; i<valueArray.length; i++) {

      formElement[i].text=valueArray[i];
      formElement[i].value=valueArray[i];
      formElement[i].selected = true;
   }
}

function hasValidSelection(element) {

   for (var i=0; i<element.length; i++) {

      if (element.type == "select-one" ||
          element.type == "select-multiple" ||
          element.type == "select") {

         if (element[i].selected) {
            return true;
         }
      }
      else if (element[i].type == "radio" ||
               element[i].type == "checkbox") {

         if (element[i].checked) {
            return true;
         }
      }

   }
   return false;
}

/**
* Checks the given array for the given pattern.
* Returns a boolean as to whether or not the value was found
* in the array.  A regular expression is supplied as a pattern.
*/
function containsValue(array, pattern) {

   for (var i=0; i<array.length; i++) {

      if (regExMatch(pattern, array[i])) {
         return true;
      }
   }

   return false;
}

/**
* Disables and unchecks all checkbox elements in the given form
* with the name - elementName
*/
function disableCheckbox(form, elementName) {

   for (var i=0; i<form.length; i++) {

      if (form[i].name == elementName &&
          form[i].type == "checkbox") {

         form[i].disabled = true;
         form[i].checked = false;
      }
   }
}

/**
* Inables all checkbox elements in the given form
* with the name - elementName
*/
function inableCheckbox(form, elementName) {

   for (var i=0; i<form.length; i++) {

      if (form[i].name == elementName &&
          form[i].type == "checkbox") {

         form[i].disabled = false;
      }
   }
}


/**
* returns the given string stripped of leading and trailing spaces
*/
function trim(a) {
   return a.replace(/^\s+/,'').replace(/\s+$/,'');
}

/**
* returns a boolean indicating whether or not the input string matches the
* input regular expression pattern
*/
function regExMatch(pattern, subject) {

   var regEx, m;

   regEx = new RegExp(pattern);
   if(regEx == null) {
      alert("You entered an Invalid Pattern");
   } else {
         return regEx.test(subject);
   }
}


/**
* Checks all checkbox elements in the given form
* with the name - elementName
*/
function checkCheckbox(form, elementName) {

   for (var i=0; i<form.length; i++) {

      if (form[i].name == elementName &&
          ((form[i].type == "checkbox")||(form[i].type == "radio"))) {

         form[i].checked = true;
      }
   }
}

/**
* Unchecks all checkbox elements in the given form
* with the name - elementName
*/
function uncheckCheckbox(form, elementName) {

   for (var i=0; i<form.length; i++) {

      if (form[i].name == elementName &&
          ((form[i].type == "checkbox")||(form[i].type == "radio"))) {

         form[i].checked = false;
      }
   }
}

function disableRadio(form, elementName) {

   for (var i=0; i<form.length; i++) {

      if (form[i].name == elementName &&
          form[i].type == "radio") {

         form[i].disabled = true;
         form[i].checked = false;
      }
   }
}

function inableRadio(form, elementName) {

   for (var i=0; i<form.length; i++) {

      if (form[i].name == elementName &&
          form[i].type == "radio") {

         form[i].disabled = false;
      }
   }
}

/**
* Selects all elements of lists
*/
function selectAll(element) {
   for (var i=0; i<element.length; i++) {

         element[i].selected = true;
   }
}

/**
* Inables all elements of lists
*/
function inableAll(element) {
   for (var i=0; i<element.length; i++) {

         element[i].disabled = false;
   }
}

//
// Returns the rule plan id
//
function getRulePlan(rulePlanId) {

   for (i = 0; i < rulePlans.length; i++) {

      var rulePlan = rulePlans[i];

      if (rulePlan.id == rulePlanId) {
         return rulePlan;
      }

   }

   return null;
}

//
// Defines a RulePlan and its versions
//
function RulePlan(id, versions) {
   this.id = id;
   this.versions = versions;
}

function setRelatedVersion(element) {

   //
   // clean the version selectBox options
   //
   var selectRulePlanVersion = element.form.elements['rulePlanVersion'];
   selectRulePlanVersion.options.length = 0;

   //
   // load the first option for the version selectBox
   //
   selectRulePlanVersion.options[0] = new Option("ALL VERSIONS", "", true, true);

   //
   // Obtain the rulePlan.
   //
   var rulePlanId = element.options[element.selectedIndex].value;
   var rulePlan = getRulePlan(rulePlanId);

   if (rulePlan == null) {
      return;
   }

   //
   // set the new options
   //
   for (var i = 0; i < rulePlan.versions.length; ++i) {
      selectRulePlanVersion.options[i + 1] = new Option(rulePlan.versions[i], i, false, false);
   }

}

function submitUpdate(submitBtn) {

   var controlTypeElement = submitBtn.form.elements["controlType"];
   controlTypeElement.value = submitBtn.value;
   return true;
}


//
// Returns the rule plan id
//
function getDestination(dest) {

   for (i = 0; i < destArray.length; i++) {

      var destConfig = destArray[i];

      if (destConfig.destination == dest.value) {
         return destConfig;
      }

   }

   return null;
}


//
// Defines a RulePlan and its versions
//
function DestConfig(destination, grpParamName1, grpParamName2, grpParamName3, grpParamName4) {
   this.destination = destination;
   this.grpParamName1 = grpParamName1;
   this.grpParamName2 = grpParamName2
   this.grpParamName3 = grpParamName3;
   this.grpParamName4 = grpParamName4;
}

function setGrpParams(destinationParam) {

    var dest = getDestination(destinationParam);

        if (dest == null) {
           destinationParam.form.elements["grpParamName1"].value = "";
           destinationParam.form.elements["grpParamName2"].value = "";
           destinationParam.form.elements["grpParamName3"].value = "";
           destinationParam.form.elements["grpParamName4"].value = "";
        } else {
           destinationParam.form.elements["grpParamName1"].value = dest.grpParamName1;
           destinationParam.form.elements["grpParamName2"].value = dest.grpParamName2;
           destinationParam.form.elements["grpParamName3"].value = dest.grpParamName3;
           destinationParam.form.elements["grpParamName4"].value = dest.grpParamName4;
   }

}

function isDate (year, month, day)
{
	// Original post: Dan Osborne <dano@specialist.co.uk>
	//                4/26/1999
	//                JavaScript <javascript@LaTech.edu>
	// Modified by:   Walter Torres <walter@torres.ws>
	//                4/29/2001

	// This is an interesting way to do validation of dates!

	// First, decrement the given month;
	// since humans think in base ONE and
	// JavaScript dates for months think in base ZERO.
	//      Human month range : 1 - 12
	// JavaScript month range : 0 - 11
	month--;

	// Then, create a new JS Date Object based upon given values.
	// NOTICE: This will convert 2/32/2000 to 3/3/2000
	//         JavaScript 'helps' you like this.
	var objTempDate = new Date(year,month,day);

	// Now, tear that new Data Object apart and see if the
	// values it gives back matches what we gave it.
	return	( ( objTempDate.getFullYear() == year  ) &&
			  ( objTempDate.getMonth()    == month ) &&
			  ( objTempDate.getDate()     == day)  )  ? true : false

	// Very nice method Dan!
}

function isTime (intHour, intMinute, intSecond)
{
	// Based upon:   Dan Osborne <dano@specialist.co.uk>
	//                4/26/1999
	//                JavaScript <javascript@LaTech.edu>
	// Modified by:   Walter Torres <walter@torres.ws>
	//                4/29/2001

	// This is an interesting way to do validation of Time!

	// Create a new JS Date Object based upon given values.
	var objTempTime = new Date( 0, 0, 1, intHour, intMinute, intSecond );

	// Now, tear that new Data Object apart and see if the
	// values it gives back matches what we gave it.
	return	( ( objTempTime.getHours()   == intHour   )  &&
			  ( objTempTime.getMinutes() == intMinute ) &&
			  ( objTempTime.getSeconds() == intSecond ) ) ? true : false
}

function checkDate(dateStr) {
   // Date format is MM/DD/YYYY HH:MI:SS
   month=dateStr.substring(0,2);
   day=dateStr.substring(3,5);
   year=dateStr.substring(6,10);

   validDate = isDate(year,month,day);

   if (validDate == true) {
        if ( dateStr.length>10 && dateStr.length<14 ) {
           alert("Invalid HH:mm");
           return false;
        } else if (dateStr.length>14 && dateStr.substring(13,14) != ":" ) {
           alert("Invalid HH:mm");
           return false;
        } else {
           	if (dateStr.length >10) {
          		hour=dateStr.substring(11,13);
        	} else {
           		hour="00";
        	}
        	if (dateStr.length >13) {
           		minute=dateStr.substring(14,16);
        	} else {
           		minute="00";
        	}
        	if (dateStr.length >16) {
           		second=dateStr.substring(17,19);
        	} else {
           		second="00";
        	}
        	validTime = isTime(hour,minute,second);
        	if (validTime == true) {
           		return true;
        	} else {
           		alert("Invalid HH:MM  : " + hour + ":" + minute);
           		return false;
        	}
        }
   } else {
        alert("Invalid Date : " + dateStr );
        return false;
   }
}

function checkWithToday(yr,mon,day,hh,mi,ss){
  today=new Date();
  enteredDate=new Date(yr,mon,day,hh,mi,ss);
  if (today.getTime() > enteredDate.getTime()) {
    alert('Please enter a future date!!');
  }
}

function isDateStale(dateObj) {
  dateStr = dateObj.value;
   if (checkDate(dateStr)) {
      month=dateStr.substring(0,2);
	  day=dateStr.substring(3,5);
      year=dateStr.substring(6,10);
      if (dateStr.length >10) {
        hour=dateStr.substring(11,13);
      } else {
        hour="00";
      }
      if (dateStr.length >13) {
        minute=dateStr.substring(14,16);
      } else {
        minute="00";
      }
      if (dateStr.length >16) {
        second=dateStr.substring(17,19);
      } else {
        second="00";
      }
      checkWithToday(year,month,day,hour,minute,second);
   }
}
