/*
 * General purpose Javascript functions.
 *
 * Change Revision
 * ---------------
 * Date       Version S/N    Author              Remarks
 * Aug 2001   1.40    -      Jeyaram Gurusamy    First Release
 * Aug 2001   1.40    1      Cheo Kiat Yian      Message not reflective accurately.
 * Aug 2001   1.40    2      Jeyaram Gurusamy    showCustomUserResponse() added.
 * Aug 2001   1.50    1      Jeyaram Gurusamy    clearAllFields() added.
 * Sep 2001   1.52    1      Vijaya Meyyappan    Focus the alert message when multiple windows are open.
 * Oct 2001   1.52    2      Vijaya Meyyappan    Date Validation
 * Oct 2001   1.52    3      Vijaya Meyyappan    Time Validation
 * Nov 2001   1.53    1      Vijaya Meyyappan    Name to be displayed in the format 'LastName, FirstName MiddleName'
 * Dec 2001   1.53    2      Cheo Kiat Yian      fixeddatamandatory validation.
 * Dec 2001   1.53    3      Cheo Kiat Yian      Added a function that replaces URL + with PLUS.
 * Dec 2001   2.00    1      Cheo Kiat Yian      Added Check for valid characters.
 * Dec 2001   2.00    2      Cheo Kiat Yian      Added showAlert(), showResponse(), isMsgBoxOKClicked(),
 *                                               isMsgBoxYesClicked() and isMsgBoxNoClicked().
 * Dec 2001   2.00    3      Ham Lee Lian        Added trim() function.
 * Jan 2002   2.00    4      Jeyaram Gurusamy    Added showPopup(), submitToPopup(), and
 *                                               showIncidentProblemInquiryPopup() added.
 * Mar 2002   2.00    5      Ham Lee Lian        Added validateInt() for validating the value entered is a number.
 * Jun 2003   2.5.0  jai14   Jeyaram Gurusamy    chisel.date.format used in all functions.
 */

function getParameter(queryString, paramName) {
  //var queryString = location.search;
  queryString = unescape(queryString);
  queryString = queryString.substring(1);

  var queryArray = queryString.split("&");

  for (var i = 0; i < queryArray.length; i++) {
    var paramArray = queryArray[i].split("=");
    var pName = paramArray[0];
    if (pName == paramName) {
      return paramArray[1];
    }
  }
}


//2.00-1
function hasValidCharacters(msg) {
  var str = msg.toUpperCase();
  var vc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';

  for (var i = 0; i < str.length; i++) {
    if (vc.indexOf(str.substring(i,i+1)) < 0) {
      return false;
    }
  }
  return true;
}

//2.00-2 Start
function showAlert(header, msg, callingPageName, callerFunctionSeed ) { //LQD-061123
  top.showDivAlert(header, msg, false, callingPageName, callerFunctionSeed); //LQD-061123
}

function showResponse(header, msg, callingPageName, callerFunctionSeed) { //LQD-061123
  top.showDivAlert(header, msg, true, callingPageName, callerFunctionSeed); //LQD-061123
}

function isMsgBoxOKClicked() {
  return top.isMsgBoxBtn1Clicked();
}

function isMsgBoxNoClicked() {
  return top.isMsgBoxBtn2Clicked();
}
function isMsgBoxYesClicked() {
  return top.isMsgBoxBtn1Clicked();
}
//2.00-2 End

//Common Popup Start
function showPopup(width, height, theCallerFrame, src) {
  top.showPopup(width, height, theCallerFrame, src);
}

function submitToPopup(width, height, theCallerFrame, src, theForm) {
  top.submitToPopup(width, height, theCallerFrame, src, theForm);
}

function showIncidentProblemInquiryPopup(theCallerFrame, targetFrame, callingJSP) {
  top.showPopup(670, 340, theCallerFrame, "common/incident_prob_pop.jsp?targetFrame="+targetFrame+"&callingJSP="+callingJSP);
}

function getCurrentPopUpCallingFrame() {
  return top.getCallerFrame();
}

function closeTopMostPopUp() {
  return top.closePopup();
}
//Common Popup End

//1.53-3
function urlParser(url) {
  url = url.replace("+","<PLUS>");
  return url;
}

/*return true for pass, else false*/
function checkMandatoryFields(frm) {
  var emptyElements = "";
  for (var i = 0; i < frm.elements.length; i++) {
    var element = frm.elements[i];
    if ((element.className == "datamandatory" ||
         element.className == "fixeddata1mandatory" ||
         element.className == "datamandatoryvarlength" ||
         element.className == "timemandatory" ||
         element.className == "datamandatory2" ||
         element.className == "fixeddatamandatory") && trim(element.value) == "") { //1.53-2

      //alert(element.id + " : [" + element.value + "]");

      //1.40-1 if (emptyElements != "") emptyElements += ",";
      //1.40-1 emptyElements += element.name;
      emptyElements = "fails";                                                                        //1.40-1
      break;                                                                                          //1.40-1
    }
  }

  if (emptyElements != "") {
    //1.40-1 showAlert(emptyElements + "<br>" + " are empty.");
    //ERROR, WARNING and INFORMATION
    //showAlert("INFORMATION", "Mandatory fields are not completely entered.", "index");
    return false;
  }
  return true;
}

//1.50-1
/* Clears all the form elements */
function clearAllFields(theForm) {
  for (var i = 0; i < theForm.elements.length; i++) {
    var element = theForm.elements[i];
    element.value = "";
  }
}

function y2k(number) { return (number < 1000) ? number + 1900 : number; }                             //1.52-2 START

function isValidDate (myDate,sep) {
// checks if date passed is in valid dd/mm/yyyy format
    var reason = '';

    if (myDate.length == 10) {
        //2.5.0-jai14 if (myDate.substring(2,3) == sep && myDate.substring(5,6) == sep) {
            /* 2.5.0-jai14
            var date  = myDate.substring(0,2);
            var month = myDate.substring(3,5);
            var year  = myDate.substring(6,10);
            */
            //2.5.0-jai14 BEGIN
            var dayMonthYear = top.getDayMonthYear(myDate);
            var date  = dayMonthYear['day'];
            var month = dayMonthYear['month'];
            var year  = dayMonthYear['year'];
            //2.5.0-jai14 END

            var test = new Date(year,month-1,date);

            if (year == y2k(test.getYear()) && (month-1 == test.getMonth()) && (date == test.getDate())) {
                reason = 'Valid Date';
                return true;
            }
            else {
                reason = 'Valid format but an invalid date';
                return false;
            }
        //2.5.0-jai14 }
        //2.5.0-jai14 else {
        //2.5.0-jai14     reason = 'Invalid separators';
        //2.5.0-jai14     return false;
        //2.5.0-jai14 }
    }
    else {
        reason = 'Invalid length';
        return false;
    }
}                                                                                                      //1.52-2 END

function isValidTime (myTime,sep) {                                                                    //1.52-3 START
var reason = '';
var splitTime = new Array();
var ctr = 0;
var test = '';

// checks if time passed is in valid hh:mm:ss format or hh:mm format or h:mm format or hh:m format

    if (myTime.length >= 4 && myTime.length <= 8 ) {
      splitTime = myTime.split(":");
      ctr = splitTime.length;
      if (ctr < 2 || ctr > 3) {
        reason = 'Not a valid time format';
        return false;
        }

      var hr = splitTime[0];
      var min = splitTime[1];
      if (hr == "" || min == "") {
        reason = 'Hours or Minutes is null. Invalid Time.';
        return false;
      }
      if (ctr == 3) {
        var sec = splitTime[2];
        if (sec == "") {
          reason = 'Seconds is null. Invalid Time.';
          return false;
        }
      }
      if (ctr == 2) {
        test = new Date('2001','10','22',hr,min);
        if (hr == test.getHours() && min == test.getMinutes()) {
             reason = '';
             return true;
          } else {
              reason = 'valid format but an invalid time';
              return false;
            }//end else
      }//end if ctr=2
       if (ctr == 3) {
        test = new Date('2001','10','22',hr,min,sec);
        if (hr == test.getHours() && min == test.getMinutes() && sec == test.getSeconds()) {
          reason = '';
          return true;
        } else {
            reason = 'valid format but an invalid time';
            return false;
          }//end else
      } //end if ctr=3
    } //end if length
    else {
      reason = 'Invalid Time length';
      return false;
    }
}                                                                                                     //1.52-3 END

function formatName(firstName, middleName, lastName) {                                                //1.53-1 START

  //FullName BEGIN
  //REQUIRED FORMAT: lastName, firstName middleName
  var requesterName = "";
  //lastName
  if (lastName != null && lastName != ("")) {
    requesterName += lastName;
  }

  //lastName,
  if ( (lastName != null && lastName != ("")) &&
       ( (firstName != null && firstName != ("")) ||
         (middleName != null && middleName != (""))
       )
     ) {
    requesterName += ",";
  }

  //lastName,<SPACE>
  if ( (firstName != null && firstName != ("")) &&
       (lastName != null && lastName != ("")) ) {
    requesterName += " ";
  }

  //lastName,<SPACE>firstName
  if (firstName != null && firstName != ("")) {
    requesterName += firstName;
  }

  //lastName,<SPACE>firstName<SPACE>
  if ( (firstName != null && firstName != ("")) &&
       (middleName != null && middleName != ("")) ){
    requesterName += " ";
  }

  //lastName,<SPACE>firstName<SPACE>middleName
  if (middleName != null && middleName != ("")) {
    requesterName += middleName;
  }
  //FullName END
  return requesterName;
}                                                                                                     //1.53-1 END

function trim(text) {
  //Remove leading spaces of the message
  while (text.substring(0,1) == ' ')
    text = text.substring(1, text.length);
  //Remove trailing spaces
  while (text.substring(text.length-1,text.length) == ' ')
    text = text.substring(0, text.length-1);

  return text;
}

function validateInt(string) {
  for (var i=0;i < string.length;i++)
      if ((string.substring(i,i+1) < '0') || (string.substring(i,i+1) > '9'))
          return false;

  return true;
}
  
//RTVE-070221
//LQD-060703-PRF
function jsutils_changeClassName(element,className){
	if(element.className!='hidefield' && element.className!='fixeddata1'){
		element.className = className;
	}
}
//LQD-060703-PRF
//RF-060908-01
function jsutils_disabledElement(element,status){
	if(status){
		if(typeof(element.type)!='undefined' && element.type=='text'){
			element.readOnly = true;
		}else{
			element.setAttribute('disabled','disabled');
		}
	}else{
		if(typeof(element.type)!='undefined' && element.type=='text'){
			element.readOnly = false;
		}else{
			element.removeAttribute('disabled');
		}
	}
}

function jsutils_loadGenericList(selectObj,dataObj,dataDisplayObj,defaultSelected){
	if(selectObj && dataObj){
		var selectOptions = selectObj.options;
		selectOptions.length = 0;
		selectOptions[selectOptions.length] = new Option("","");
		
		for(var i in dataObj){
			var option;
			if(dataDisplayObj){
				option = new Option(dataDisplayObj[i],dataObj[i]);
			}else{
				option = new Option(dataObj[i],dataObj[i]);
			}
			selectOptions[selectOptions.length] = option;
		}
		
		if(typeof(defaultSelected)!="undefined"){
			if(selectOptions.length>=defaultSelected){
				selectOptions.selectedIndex = defaultSelected;
			}
		}
	}
}

//LQD-070111-PE
function jsutils_setSelectByValue(selectElement, value){
	 for (var x=0; x<selectElement.options.length; x++) {
	    if (selectElement.options[x].value == value) {
	      selectElement.options[x].selected = true;
	      break;
	    }
	  }
}
//LQD-070111-PE

function jsutils_enableElement(elementID,status){
	var element = document.getElementById(elementID);
	if(status){
		element.style.visibility = 'visible';
	}else{
		element.style.visibility = 'hidden';
	}
}

//RF-060908-01

//LQD-061017
	function jsutils_activeBtn(id, status){
		var element = document.getElementById(id);
		if(typeof(element)!='undefined'){
			jsutils_disabledElement(element,!status);
			if(status){
				jsutils_changeClassName(element,jsutils_getBtnClass(element.className,'normal'));
			}else{
				jsutils_changeClassName(element,jsutils_getBtnClass(element.className,'disable'));
			}
		}
	}
	
	function jsutils_getBtnClass(name, type){
		var tmp = name;
		if(typeof(name)!='undefined'){
			if(tmp.indexOf('OffBtn')>0) tmp = tmp.substr(0,tmp.indexOf('OffBtn'));
			if(tmp.indexOf('OverBtn')>0) tmp = tmp.substr(0,tmp.indexOf('OverBtn'));
			if(tmp.indexOf('Btn')>0) tmp = tmp.substr(0,tmp.indexOf('Btn'));
			
			if(type=='normal') tmp = tmp+'Btn';
			if(type=='over') tmp = tmp+'OverBtn';
			if(type=='disable') tmp = tmp+'OffBtn';
		}
		return tmp;
	}
//LQD-061017
//LQD-061030-ADD-02
function jsutils_replaceValues(template,element){
	var newValue = template;
	if(newValue!=''){
		for(k in element){
			var name = '<$' + k.toUpperCase() + '$>';
			newValue = newValue.replace(name,element[k]);
		}
	}
	
	return newValue;
}
//LQD-061030-ADD-02

//LQD-061220-ADD
function jsutils_getWebPath(src){
	var http = document.location.host;
	var index = src.indexOf(http);
	var webPath = src;
	if(index>=0){
		webPath = src.substring(index + http.length ,src.length);
	}
	return webPath;
}
//LQD-061220-ADD
//RTVE-070221

//LQD-080409
function jsutils_recursiveShow (el, state){
		if(typeof(el)!='undefined'){
				var a = el.childNodes, i, l;
				if (a) {
					l = a.length;
					for (i = 0; i < l; i++) {
						if(a[i].nodeName == 'DIV'){
							if(state){
								a[i].style.visibility='visible';
							}else{
								a[i].style.visibility='hidden';
							}
						}
						jsutils_recursiveShow(a[i], state);
					}
				}
			}
	}
//LQD-080409