// Global Variables
var printError, isNav4, isIE, isNav, isIE4, isIE50, isIE55, props

// ==INIT============
// Initialise varaibles
isNav4 = false
isIE4 = false
isIE = false
isIE50 = false
isIE55 = false


// ==GLOBAL==========
// Decide what browser is running
if (navigator.appName.indexOf("Microsoft") != -1) {
  isIE = true
  if (navigator.appVersion.indexOf(" 5.5") != -1) {
    isIE55 = true
  }
  if (navigator.appVersion.indexOf(" 5.0") != -1) {
    isIE50 = true
  }
  if (navigator.appVersion.indexOf(" 4.") != -1) {
    isIE4 = true
  }
}

if (navigator.appName.indexOf("Netscape") != -1) {
  isNav = true
  if (navigator.appVersion.indexOf("4.0") != -1) {
    isNav = true
  }
}

if (isIE==true) {
  range="all."
  styleObj=".style"
  shw="visible"
  hde="hidden"
  menuleft="10"
  menutop="106"
} else {
  range=""
  styleObj=""
  shw="show"
  hde="hide"
  menuleft="8"
  menutop="99"
}

if (isNav || isIE50 || isIE55) {
   window.focus()
}

function PopUp(url, name) {
  url = replaceParam(url,"POPUP","Y");
  
  // Close the popup window if it is currently open
  if (typeof(props)!='undefined')
    if (props.closed==false)
      props.close();

  if (name == '' || typeof(name) == 'undefined')
    name='PopUp';

  props=window.open(url,name,'scrollbars=yes,toolbar=no,location=no,status=yes,menubar=no,resizable=no,width=800,height=600,left=100,top=100')
}

function PopUpSmall(url, name) {
  url = url.toString();
  // Add Popup param unless already added
  if (url.indexOf("&POPUP=Y") <= 0) {
	url=url+'&POPUP=Y';
  }
  
  // Close the popup window if it is currently open
  if (typeof(props)!='undefined')
    if (props.closed==false)
      props.close();

  if (name == '' || typeof(name) == 'undefined')
    name='PopUpSmall';

  props=window.open(url,name ,'scrollbars=yes,toolbar=no,location=no,status=yes,menubar=no,resizable=no,width=300,height=200,left=100,top=100')
}

function PrintPage() {
  if (isIE4 == true) {
    alert('Your browser version cannot handle javascript printing...    To print using standard commands you should use your mouse to right-click on the webpage and select the print option from the menu.')
  } else {
    window.print()
  }
}

function swapMenus(sMenuIn) {
  // Hide All menus
  theObjInternet = eval("document." + range + "Internet" + styleObj);
  theObjAirlineExtranet = eval("document." + range + "AirlineExtranet" + styleObj);
  theObjGECASExtranet = eval("document." + range + "GECASExtranet" + styleObj);
  theObjGECATExtranet = eval("document." + range + "GECATExtranet" + styleObj);
  theObjEngineExtranet = eval("document." + range + "EngineExtranet" + styleObj);

  theObjInternet.visibility=hde
  theObjGECASExtranet.visibility=hde
  theObjAirlineExtranet.visibility=hde
  theObjGECATExtranet.visibility=hde
  theObjEngineExtranet.visibility=hde

  theObjToShow=eval("document." + range + sMenuIn + styleObj);

  theObjToShow.visibility=shw
}

// Form validation
var patternsDict = new Object();

// Optional - zero length string valid
patternsDict.optfloatPat=/^[-+]?\d*\.?\d*$/;
patternsDict.optintPat=/^[-+]?\d*$/;
patternsDict.optposfloatPat=/^\d*\.?\d*$/;
patternsDict.optposintPat=/^\d*$/;
patternsDict.optstringPat=/^([a-zA-Z0-9!@#$%^&*()-_=+;:'"|~`<>?/{}\s]{0,})$/; 
patternsDict.optpureStringNumPat=/^([a-zA-Z0-9()\-\/\\\'\,\.\&\s]{0,})$/;          // A string with either upper,lower or numbers, + space    [optional]
patternsDict.optyearPat=/^(\d{4})?$/;

// Required
patternsDict.floatPat=/^[-+]?\d+\.?\d*$/;
patternsDict.intPat=/^[-+]?\d+$/;
patternsDict.posfloatPat=/^\d+\.?\d*$/;
patternsDict.posintPat=/^\d+$/;
patternsDict.stringPat=/^([a-zA-Z0-9!@#$%^&*()-_=+;:'"|~`<>?/{}\s]{1,})$/; 
patternsDict.currencyPat=/^\d{1,10}$|^\d{1,10}.\d{1,2}$/;
patternsDict.daymonthPat=/^\d{1,2}-\D{3}$/;
patternsDict.datePat=/^\d{1,2}-\D{3}-\d{4}$/;                  // Date informat dd-Mon-yyyy
patternsDict.monthyearPat=/^\D{3}-\d{4}$/;
patternsDict.percentagePat=/^\d{1,3}$/;
patternsDict.pureStringPat=/^[a-zA-Z]+$/;
patternsDict.pureStringNumPat=/^([a-zA-Z0-9()\-\/\\\'\,\.\&\s]{1,})$/;          // A string with either upper,lower or numbers, + space
patternsDict.yearPat=/^\d{4}?$/;

function validateForm(theForm) {
  var elArr=theForm.elements;
  for(var i=0; i<elArr.length; i++)
    with(elArr[i]) {
      var v=elArr[i].validator;
      var help=elArr[i].help;
      var controltype=elArr[i].type;
      var datalength=elArr[i].maxlength;
      
      // DKEN 07-Nov-2003 Validate length of textarea     
      if (type=='textarea' && datalength!=0 && typeof  datalength!='undefined')  
       if (!validMaxLength(elArr[i],datalength,help))
          return false;

      if(!v) continue;
      var thePat=patternsDict[v];
      var gotIt=thePat.exec(value);
      if (!gotIt) {
        alert("Error: Invalid data entered into " + help + " field." );
 	// START: RSTE: 11-Oct-2002
      elArr[i].focus();
	// END: RSTE
	return false;


    }


  }


  return true;
}

// DKEN, 29-May-2003
// On a keypress event checks to see if the "Backspace" key was pressed, if so returns false, cancelling the event
// Used to stop IE from going back a page if a user presses backspace.  
// To use: put the following into your body tag onkeydown="cancelBack()"
// NB: This will not override the backspace event when a form object has focus
function cancelBack() {    
  if ((event.keyCode == 8 || (event.keyCode == 37 && event.altKey) || (event.keyCode == 39 && event.altKey)) && (event.srcElement.form == null || event.srcElement.isTextEdit == false)) {
    event.cancelBubble = true;        
    event.returnValue = false;    
  } 
}

// RSTE, 01-Aug-2002
// Returns number of CR + LF sequences in a string
// Required in order to select correct length with textrange object
function countCRLF(str) {
	var end = false, count = 0, i = 0;
	var crlf;
	crlf = String.fromCharCode(13) + String.fromCharCode(10);
	do {
		i = str.indexOf(crlf);
		if (i>0) {
			str = str.substr(i + 1);
			count++;
		} else {
			end = true;
		}
	} while (!end);
	return count;
}

// RSTE, 01-Aug-2002
// Checks if a TEXTAREA field (fld, name=help) contains > max chars
function validMaxLength(fld,max,help) {
	var rng, i;
	if (fld.value.length > max) {
		i = max - countCRLF(fld.value);
		rng = fld.createTextRange();
		rng.moveStart('character',i);
		rng.select();
		alert("Error: " + help + " field is too long.");
		return false;
	}
	return true;
}

// RSTE, 11-Oct-2002
// Check string and ensure all characters are alphanumeric
// 0-9,a-z,A-Z only, no punctuation
function toAlphanumeric(checkString) {
    newString = "";    // REVISED/CORRECTED STRING
    count = 0;         // COUNTER FOR LOOPING THROUGH STRING

    // LOOP THROUGH STRING CHARACTER BY CHARACTER
    for (i = 0; i < checkString.length; i++) {
        ch = checkString.substring(i, i+1);

        // ENSURE CHARACTER IS AN ALPHANUMERIC CHARACTER
        if ((ch >= "0" && ch <= "9")||(ch >="A" && ch <= "Z")||(ch >= "a" && ch <= "z")) {
            newString += ch;
        }
    }
	return newString;
}

// RSTE, 11-Oct-2002
// Replace CR + LF combinations in TEXTAREA with null string
function replaceCRLF(str){
	str = str.replace(/\x0D\x0A/g, "")
    return str;
}

// RSTE, 11-Oct-2002
// Same as VB Trim function
function stripSpaces(str) {
    while (str.substring(0,1) == ' ') str = str.substring(1);
    while (str.substring(str.length-1,str.length) == ' ') str = str.substring(0,str.length-1);
	return str
}

// RSTE, 09-Nov-2002: Returns a number from a field which
// may contain a currency (or null string if blank or NaN)
// E.g. 1,234.90 returns 1234.90
// RSTE, 29-May-2003: Bug with Nulls, so convert to float, then check NaN
// RSTE, 13-Jul-2004: Added nullval optional param to use if NaN or empty, e.g. to give NVL(x,0) functionality
// RSTE, 06-Jan-2005: Used Round to round float to avoid strane arithmetic!
// Returns empty string if NaN
function readCurr(num,nullval) {
	var sepString=",.";
	if (arguments.length < 2) {
		nullval = "";
	}
 
	while (num.indexOf(sepString.charAt(0))>-1) {

		num=num.substr(0,num.indexOf(sepString.charAt(0)))+num.substr(num.indexOf(sepString.charAt(0))+1);
	}
	if (num.indexOf(sepString.charAt(1))>-1)
		num=num.substr(0,num.indexOf(sepString.charAt(1)))+'.'+num.substr(num.indexOf(sepString.charAt(1))+1);
	
	num = parseFloat(num);
	if (isNaN(num)) {
		return nullval;
	} else {
		num = Math.round(num*100)/100;
		return num;
	}
}

// RSTE, 11-Nov-2002: Returns a formatted string from a number
// E.g. 1234.9 returns 1,234.90 if dp = 2
// RSTE, 29-May-2003: Bug fixed, format error for some negative numbers
// E.g. -100,000 displayed as -,100,000 - extra comma
function writeCurr(num,dp) {
	var sepString=",."	// thousand_separator,decimal_point
	var sign;
	if (num == "") return "";
	if (arguments.length < 2) {
		dp = 0;	// Set default, 0 dec places
	} else if (dp < 0) {
		dp = 0;
	}
	num=Math.round(num*Math.pow(10,dp));
	if (num < 0) {
		sign = "-";
		num = num * -1;
	} else {
		sign = "";
	}
	num=num.toString();
	if (dp > 0) {
		str=sepString.charAt(1)+num.substr(num.length-dp);
	} else {
		str = "";
	}
	num=num.substr(0,num.length-dp);
	while (num.length>3) {
		str=sepString.charAt(0)+num.substr(num.length-3)+str;
		num=num.substr(0,num.length-3);
	}
	str=sign+num+str;
	return str;
}

// RSTE, 26-May-2003: Used to set a browser cookie
// NOTE, Do not use special chars in name (e.g. no underscore)
function setCookie(name,value) {
	var theCookie = name;
	var expires = new Date();
	
	theCookie += "=" + escape(value);
	expires.setMonth(expires.getMonth() + 1);
	theCookie += ";expires=" + expires.toGMTString();
	theCookie    += ";path=/";
	document.cookie = theCookie;
}

// DKEN 04-Jul-2003 Changed function to give the control focus if the date is invalid...
function CheckDate(CONTROL){ 
  // var strFormat = theForm.DateFormats.options[theForm.DateFormats.selectedIndex].value; 
  var strFormat = 'dd-mmm-yyyy'; 
  if(!isDate(CONTROL.value)){ 
    alert("Error: An Invalid Date format has been entered - Please try a different format (e.g. dd/mm/yyyy or dd-Mon-yyyy)") 
    CONTROL.focus();
    return; 
  } 
  CONTROL.value = FormatDate(CONTROL.value,strFormat); 
} 


function isDate(DateToCheck){
  if(DateToCheck==""){return true;}
    var m_strDate = FormatDate(DateToCheck);
  if(m_strDate==""){
    return false;
  }
  var m_arrDate = m_strDate.split("/");
  var m_DAY = m_arrDate[0];
  var m_MONTH = m_arrDate[1];
  var m_YEAR = m_arrDate[2];
  
  if(m_YEAR.length > 4){return false;}
  m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;
  var testDate=new Date(m_strDate);
  if(testDate.getMonth()+1==m_MONTH){
    return true;
  } else {
    return false;
  }
}//end function

function FormatDate(DateToFormat,FormatAs){
  if(DateToFormat==""){return"";}
  if(!FormatAs){FormatAs="dd/mm/yyyy";}

  var strReturnDate;
  FormatAs = FormatAs.toLowerCase();
  DateToFormat = DateToFormat.toLowerCase();
  var arrDate
  var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  var strMONTH;
  var Separator;
//	SCLA 22-Jan-04 Changed to Handle dates depending on Timezone;
//  var tdte = new Date();
//  var ivdt = tdte.getTimezoneOffset();

  while(DateToFormat.indexOf("st")>-1){
    DateToFormat = DateToFormat.replace("st","");
  }

  while(DateToFormat.indexOf("nd")>-1){
    DateToFormat = DateToFormat.replace("nd","");
  }

  while(DateToFormat.indexOf("rd")>-1){
    DateToFormat = DateToFormat.replace("rd","");
  }

  while(DateToFormat.indexOf("th")>-1){
    DateToFormat = DateToFormat.replace("th","");
  }

  if(DateToFormat.indexOf(".")>-1){
    Separator = ".";
  }

  if(DateToFormat.indexOf("-")>-1){
    Separator = "-";
  }

  if(DateToFormat.indexOf("/")>-1){
    Separator = "/";
  }

  if(DateToFormat.indexOf(" ")>-1){
    Separator = " ";
  }

  arrDate = DateToFormat.split(Separator);
  DateToFormat = "";
  for(var iSD = 0;iSD < arrDate.length;iSD++){
    if(arrDate[iSD]!=""){
      DateToFormat += arrDate[iSD] + Separator;
    }
  }
  DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
  arrDate = DateToFormat.split(Separator);

  if(arrDate.length < 3){
    return "";
  }

  var DAY = arrDate[0];
  var MONTH = arrDate[1];
  var YEAR = arrDate[2];

//  if(ivdt > 0)
//	{ DAY = arrDate[1];
//	  MONTH = arrDate[0];
//	}

  if(parseFloat(arrDate[1]) > 12){
    DAY = arrDate[1];
    MONTH = arrDate[0];
  }

  if(parseFloat(DAY) && DAY.toString().length==4){
    YEAR = arrDate[0];
    DAY = arrDate[2];
    MONTH = arrDate[1];
  }

  for(var iSD = 0;iSD < arrMonths.length;iSD++){
    var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
    var MonthPosition = DateToFormat.indexOf(ShortMonth);
    if(MonthPosition > -1){
      MONTH = iSD + 1;
      if(MonthPosition == 0){
        DAY = arrDate[1];
        YEAR = arrDate[2];
      }
      break;
    }
  }

  var strTemp = YEAR.toString();
  if(strTemp.length==2){
    if(parseFloat(YEAR)>40){
	YEAR = "19" + YEAR;
    }	else {
	YEAR = "20" + YEAR;
    }
  }

if(strTemp.length==1){

	if(parseFloat(YEAR)>40){
	YEAR = "190" + YEAR;
	}
	else{

	YEAR = "200" + YEAR;
	}

}


  if(parseInt(MONTH)< 10 && MONTH.toString().length < 2){
    MONTH = "0" + MONTH;
  }
  if(parseInt(DAY)< 10 && DAY.toString().length < 2){
    DAY = "0" + DAY;
  }
  switch (FormatAs){
    case "dd/mm/yyyy":
      return DAY + "/" + MONTH + "/" + YEAR;
    case "mm/dd/yyyy":
	return MONTH + "/" + DAY + "/" + YEAR;
    case "dd/mmm/yyyy":
	return DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
    case "mmm/dd/yyyy":
	return arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
    case "dd/mmmm/yyyy":
	return DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
    case "mmmm/dd/yyyy":
	return arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
    case "dd-mmm-yyyy":
	return DAY + "-" + arrMonths[MONTH -1].substring(0,3) + "-" + YEAR;
    }

    return DAY + "/" + strMONTH + "/" + YEAR;;

} //End Function

// RSTE, 02-Dec-2004. Popup EDSS Insert Doc
// sParams: Querystring param list (e.g. "ID=2345&SOURCE=GECAS.COM&TID=123&PSN=456")
function addEDSSDoc(sParams) {
	var page = "/Extranet/EDSS/InsertDoc.asp?";
	page = page + sParams;
	if (confirm("Click OK to Browse for documents or\nCancel to add documents from your EDSS Queue.")) {
		page = page + "&AddDoc=Y&LoadQueue=N";
	} else {
		page = page + "&AddDoc=N&LoadQueue=Y";
	}
	PopUp(page,"ADDDOC");
}

function hover(ID) {
document.getElementById(ID).className = "menuHover";
  return true;
}

function hoveroff(ID, sClassName) {
document.getElementById(ID).className = sClassName;
  return true;
}

// RSTE, 23-Feb-2005. Replaces a querystring parameter
function replaceParam(url,param,value) {
	var sParams, sPage, sParam;
	var pos = url.indexOf("?");
	if (pos < 0) {
		sPage = "";
		sParams = url;
	} else {
		sPage = url.substring(0,pos + 1);
		sParams = url.substr(pos + 1);
	}
	var arrParams = sParams.split("&");
	if (sParams.substring(0,1) == "&") {
		// Partial query string, starting with ampersand
		sParams = "&";
	} else {
		sParams = "";
	}
	for (var i=0;i<arrParams.length;i++) {
		sParam = arrParams[i].toUpperCase();
		if (sParam.indexOf(param.toUpperCase()) < 0  && arrParams[i] != "") {
			// Not this one
			sParams = sParams + arrParams[i] + "&";
		}
	}
	return (sPage + sParams + param + "=" + value);
}
