var digits = "0123456789";
var lowerCaseLetters = "abcdefghijklmnopqrstuvwxyz";
var upperCaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whiteSpace = " \t\n\r";
var decimalPointDelimiter = ".";
var phoneNumberDelimiters = "()- \t";
var validPhoneChars = digits + phoneNumberDelimiters;
var ssnDelimiters = "- \t";
var irsDelimiters = "- \t";
var canDelimiters = "- \t";
var validSsnChars = digits + ssnDelimiters;
var digitsInSocialSecurityNumber = 9;
var digitsInPhoneNumber = 10;
var creditCardDelimiters = " ";
var daysInMonth = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var childWindow;
var ZIPCodeDelimiters = "-";
var ZIPCodeDelimeter = "-"
var validZIPCodeChars = digits + ZIPCodeDelimiters
var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var digitsInIRS1 = 9
var digitsInIRS2 = 11
var digitsInCAN = 11
var currencyDelimiter = "$,";
var defaultEmptyOK = false
var sessionTimeout = 45; //45;
var timeOutRedirectTo = 'fbtimedout.aspx';
var currentPageLocation = '';
var ISF_APPENDIX_D = '016';
var ISF_PENALTY_AMT = '10000';
var CTB_ISF_PENALTY_AMT = '50000';
var ISF_STB_APPENDIX_D_PORT = '9900'; 
var ISF_CTB_APPENDIX_D_PORT = '9900';
var PRINTING_SAME_TYPE_ERROR_MSG = 'Printing Single Transaction Bonds and Single Transaction ISF Appendix D is not allowed. ';

//------------------------------------------------------------------------------
  function hidemenu_all(){
    if (document.getElementById("tblBond").style.visibility != "hidden") document.getElementById("tblBond").style.visibility = "hidden";
    if (document.getElementById("tblQuery").style.visibility != "hidden") document.getElementById("tblQuery").style.visibility = "hidden";
    if (document.getElementById("tblPrint").style.visibility != "hidden") document.getElementById("tblPrint").style.visibility = "hidden";
    if (document.getElementById("tblMaintain").style.visibility != "hidden") document.getElementById("tblMaintain").style.visibility = "hidden";
    if (document.getElementById("tblHelp").style.visibility != "hidden") document.getElementById("tblHelp").style.visibility = "hidden";
    return true;
  }
//------------------------------------------------------------------------------
  function moveover(Id,ImgName){
    document.getElementById(Id).src = "images/" + ImgName;
    return true;
  }
//------------------------------------------------------------------------------
  function moveback(Id,ImgName){
    document.getElementById(Id).src = "images/" + ImgName;
    return true;
  }
//------------------------------------------------------------------------------
  function showmenu(Id){
    hidemenu_all();
    document.getElementById(Id).style.visibility = "visible";
    return true;
  }
//------------------------------------------------------------------------------
  function hidemenu(Id){
    document.getElementById(Id).style.visibility = "hidden";
    return true;
  }
//------------------------------------------------------------------------------
  //function clickIE() {if (document.all) {(message);return false;}}
	//function clickNS(e) {if 
	//(document.layers||(document.getElementById&&!document.all)) {
	//if (e.which==2||e.which==3) {(message);return false;}}}
	//if (document.layers) 
	//{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
	//else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
	//document.oncontextmenu=new Function("return false")
//------------------------------------------------------------------------------
  function StripWhiteSpace (s) {
    return StripCharsInBag (s, whiteSpace);
  }
//------------------------------------------------------------------------------
  function StripCharsInBag (s, bag) {
    var i;
    var returnString = "";
    if (IsEmpty(s)) return returnString;
    for (i = 0; i < s.length; i++) {   
      var c = s.charAt(i);
      if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
  }
//------------------------------------------------------------------------------
  function IsEmpty(s) {
    return ((s == null) || (s.length == 0));
  }
//------------------------------------------------------------------------------
  function IsFloat (s) {
  var i;
  var seenDecimalPoint = false;
    if (IsEmpty(s)) return false;
    if (s == decimalPointDelimiter) return false;
    var startPos = (s.charAt(0) == "-" || s.charAt(0) == "+") ? 1 : 0;
    for (i = startPos; i < s.length; i++) {   
      var c = s.charAt(i);
      if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
      else if (!(c >= "0" && c <= "9")) return false;
    }
    return true;
  }
//------------------------------------------------------------------------------
  function Reformat (s) {
    var arg;
    var sPos = 0;
    var resultString = "";
    for (var i = 1; i < Reformat.arguments.length; i++) {
      arg = Reformat.arguments[i];
      if (i % 2 == 1) resultString += arg;
      else {
        resultString += s.substring(sPos, sPos + arg);
        sPos += arg;
      }
    }
    return resultString;
  }
//------------------------------------------------------------------------------
  function ReformatSsn (s) {
    return Reformat(s, "", 3, "-", 2, "-", 4);
  }
//------------------------------------------------------------------------------
  function ReformatCan (s) {
    return Reformat(s, "", 6, "-", 5);
  }
//------------------------------------------------------------------------------
  function ReformatIrs (s) {
    if (s.length == 9) return Reformat(s, "", 2, "-", 7); else return Reformat(s, "", 2, "-", 9);
  }
//------------------------------------------------------------------------------
  function IsSsn (s) {
    if (IsEmpty(s)) return false;
    var normalizedSsn = StripCharsInBag(s, ssnDelimiters);
    if (!IsInteger(normalizedSsn) || normalizedSsn.length != digitsInSocialSecurityNumber) return false;
    return true;
  }
//------------------------------------------------------------------------------
  function IsCan (s) {
    if (IsEmpty(s)) return false;
    var normalizedCan = StripCharsInBag(s, canDelimiters);
    if (!IsInteger(normalizedCan) || normalizedCan.length != digitsInCAN) return false;
    return true;
  }
//------------------------------------------------------------------------------
  function IsIrs (s) {
    if (IsEmpty(s)) return false;
    var normalizedIrs = StripCharsInBag(s, irsDelimiters);
    return ((IsInteger(normalizedIrs) && (normalizedIrs.length == digitsInIRS1)) || (IsAlphaNumeric(normalizedIrs) && (normalizedIrs.length == digitsInIRS2)))
  }
//------------------------------------------------------------------------------
  function IsAlphaNumeric (s) {
    var i;
    if (IsEmpty(s)) return false;
    for (i = 0; i < s.length; i++) {
      var c = s.charAt(i);
      if (!((c >= "a" && c <= "z") || (c >= "A" && c <= "Z") || (c >= "0" && c <= "9"))) return false;
    }
    return true;
  }
//------------------------------------------------------------------------------
  function IsCAZip(s) {
    //var objRegExp  = /^([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\d[A-Za-z]\s?\d[A-Za-z]\d)$/;
    var objRegExp  = /^([AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz]\d[A-Za-z]\s?\d[A-Za-z]\d)$/;
    return objRegExp.test(s);
  }
  function IsUSZip(s) {
    var objRegExp  = /^((\d{5}-\d{4})|(\d{5}))$/;
    return objRegExp.test(s);
  }
//------------------------------------------------------------------------------
  function IsInteger (s) {
    var i;
    if (IsEmpty(s)) return false;
    var startPos = (s.charAt(0) == "-" || s.charAt(0) == "+") ? 1 : 0;
    for (i = startPos; i < s.length; i++) {   
      var c = s.charAt(i);
      if (!(c >= "0" && c <= "9")) return false;
    }
    return true;
  }
//------------------------------------------------------------------------------
  function NewWindow(url, width, height) {
    wLeft = screen.width / 2 - width / 2;
    wTop = screen.height / 2 - height / 2;
    if (opener != null && opener.childWindow != null && opener.childWindow.open) {
      opener.childWindow = window.open(url, 'childWindow', 'location=0,toolbar=0,menubar=0,resizable=0,status=1,scrollbars=0,width=' + width + ',height=' + height + ',left=' + wLeft + ',top=' + wTop);
    }
    else if (childWindow != null && childWindow.open) {
      childWindow.close();
      childWindow = window.open(url, 'childWindow', 'location=0,toolbar=0,menubar=0,resizable=0,status=1,scrollbars=0,width=' + width + ',height=' + height + ',left=' + wLeft + ',top=' + wTop);
    }
    else
      childWindow = window.open(url, 'childWindow', 'location=0,toolbar=0,menubar=0,resizable=0,status=1,scrollbars=0,width=' + width + ',height=' + height + ',left=' + wLeft + ',top=' + wTop);
  }
//------------------------------------------------------------------------------
  function FormatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if (isNaN(num)) num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    cents = num % 100;
    num = Math.floor(num / 100).toString();
    if (cents < 10) cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
      num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
    //return (((sign) ? '' : '-') + '$' + num + '.' + cents);
    return (((sign) ? '' : '-') + '$' + num);
  }
//------------------------------------------------------------------------------
  function filterNum(str) {
    re = /\n|\r|\t/g;
    return str.replace(re, "");
  }
//------------------------------------------------------------------------------
    function PrintAndClose(){
      window.print();
      window.close();
    }
//------------------------------------------------------------------------------
  function compareDates(date1,date2, ctrl) {
    var date1_arr = date1.split("/");
    var date2_arr = date2.split("/");
    if (date1_arr[2].length != 4) 
      alert("Please enter year in following format : YYYY");
    else {
      d1 = new Date(date1_arr[2], date1_arr[0], date1_arr[1]);
      d2 = new Date(date2_arr[2], date2_arr[0], date2_arr[1]);
      var diff = d1 - d2;
      if (diff > 0) alert("Warning:Use of a date in the future may be cause for a bond rejection by CBP if CBP receives or processes a post-dated document.");
    }
  }
//------------------------------------------------------------------------------
  function IsDate (month, day, year) {
    var today = new Date();
    if (year == null || year.length == 0) year = "" + today.getYear();
    if (! (IsInteger(year) && (year.length == 2 || year.length == 4) && IsIntegerInRange(month, 1, 12) && IsIntegerInRange (day, 1, 31) ) ) return false;
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth - 1]) return false;
    if (intMonth == 2 && intDay > (!(year % 100 == 0) && (year % 4 == 0 || year % 400 == 0) ? 29 : 28)) return false;
    return true;
  }
//------------------------------------------------------------------------------
  function IsIntegerInRange (s, a, b) {
    if (IsEmpty(s)) return false;
    if (!IsInteger(s, false)) return false;
    var num = parseInt (s);
    return ((num >= a) && (num <= b));
  }
//------------------------------------------------------------------------------
	function SetCookie (name, value) {  
	  var argv = SetCookie.arguments;  
	  var argc = SetCookie.arguments.length;  
    var date = new Date();
		//date.setTime(date.getTime()+(days*24*60*60*1000));
		date.setTime(date.getTime()+(2*24*60*60*1000));
		var expires = "; expires=" + date.toGMTString();
	  //var expires = (argc > 2) ? argv[2] : null;  
	  var path = (argc > 3) ? argv[3] : null;  
	  var domain = (argc > 4) ? argv[4] : null;  
	  var secure = (argc > 5) ? argv[5] : false;  
	  document.cookie = name + "=" + escape (value) + expires + 
	  //((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
	  ((path == null) ? "" : ("; path=" + path)) +  
	  ((domain == null) ? "" : ("; domain=" + domain)) +    
	  ((secure == true) ? "; secure" : "");
	}
	function getCookieVal (offset) {  
	  var endstr = document.cookie.indexOf (";", offset);  
	  if (endstr == -1)    
	  endstr = document.cookie.length;  
	  return unescape(document.cookie.substring(offset, endstr));
	}
	function GetCookie (name) {  
	  var arg = name + "=";  
	  var alen = arg.length;  
	  var clen = document.cookie.length;  
	  var i = 0;  
	  while (i < clen) {    
		var j = i + alen;    
		if (document.cookie.substring(i, j) == arg)      
		return getCookieVal (j);    
		i = document.cookie.indexOf(" ", i) + 1;    
		if (i == 0) break;   
	  }  
	  return null;
	}
//------------------------------------------------------------------------------
  function TrimAll(sString) {
    while (sString.substring(0,1) == ' ') sString = sString.substring(1, sString.length);
    while (sString.substring(sString.length-1, sString.length) == ' ') sString = sString.substring(0,sString.length-1);
    return sString;
  }
//------------------------------------------------------------------------------
  function hidemenus() {
	 hidemenu('tblBond');
	 hidemenu('tblQuery');
	 hidemenu('tblPrint');
	 hidemenu('tblMaintain');
	 hidemenu('tblHelp');  
  }
  //------------------------------------------------------------------------------
  function beforeTimeout() {
      currentPageLocation = window.location.href;
      setTimeout('checkSession()', (sessionTimeout - 5) * 60 * 1000);      
  }
  //--------------------------------------------------------------------------------------
  function checkSession() {
      //Pablo Jacome
      //This function tries to keep track of the session on the client and alert user that it is about to expire
      var time = new Date();
      time.setTime(time.getTime() + (5 * 60 * 1000));
      var hour = time.getHours();
      var minute = time.getMinutes();
      var second = time.getSeconds();
      var temp = "" + ((hour > 12) ? hour - 12 : hour);
      if (hour == 0) temp = "12";
      if (temp.length == 1) temp = " " + temp;
      temp += ((minute < 10) ? ":0" : ":") + minute;
      temp += ((second < 10) ? ":0" : ":") + second;
      temp += (hour >= 12) ? " PM" : " AM";
      var msg = 'Your current FastBond session is about to expire. Please, submit the form to save changes. \nFor your security, application sessions automatically end after 45 minutes of inactivity. \nYour session will expire in 5 min. at ' + temp;
      alert(msg);
      /*var flag = confirm(msg);        
      if (flag) {
            //alert(currentPageLocation);
            window.location.href = currentPageLocation;
            window.onload = beforeTimeout;
        } else {
            window.location.href = timeOutRedirectTo;
        }*/
    }
    //---------------------------------------------------------------------------------------
    String.prototype.trim = function() {
	    return this.replace(/^\s+|\s+$/g,"");
    }
    //--------------------------------------------------------------------------------------
    String.prototype.ltrim = function() {
	    return this.replace(/^\s+/,"");
    }
    //--------------------------------------------------------------------------------------
    String.prototype.rtrim = function() {
	    return this.replace(/\s+$/,"");
    }
    //--------------------------------------------------------------------------------------
    function setSelectedIndex(obj, value) {
        for ( var i = 0; i < obj.options.length; i++ ) {
            if ( obj.options[i].value == value ) {
                 obj.options[i].selected = true;
                 return;
            }
        }
    }
    //---------------------------------------------------------------------------------------
    function IsIsfTxnNumber(value){                
         var objRegExp  = /^[A-Za-z0-9\s\-]{3,4}\d{11}$/;
        if (value.length == 15) {
          return objRegExp.test(value);
        } else {
          return false;
        }        
    }
    //----------------------------------------------------------------------------------------
    //--------------------------------------------------------------------------------------
    function resetddl(sid)        
        {
            //This function resets drop down lists
            //Issue: Some pages were having problems when drop down list actions when using back button
            //Solution: Reset all drop down list actions in page
            var el = document.getElementsByTagName('select');            
            for(i=0;i < el.length; i++)
            {
                var ddl = document.getElementById(el[i].id);
                if (ddl != undefined)
                {
                    if(el[i].id!=sid)
                    {document.getElementById(el[i].id).selectedIndex = 0;}
                }
            }
        }
     //---------------------------------------------------------------------------------------------    
     function isValidUserId(value){
        var regExp = /^[A-Za-z0-9\-\_\.]*$/;
        return regExp.test(value);     
     }   
     //----------------------------------------------------------------------------------------------
     function isValidZip(zip, country)
     {    
        var objRegExp;
        
        if (country == 'MX')
        {
            objRegExp = /^\d{5}$/;
        }        
        
        return objRegExp.test(zip);
     
     }
     //------------------------------------------------------------------------------------------------
     function getCheckedValue(radioObj)
     {
        if(!radioObj)
		    return "";
	    var radioLength = radioObj.length;
	    if(radioLength == undefined)
		    if(radioObj.checked)
			    return radioObj.value;
		    else
			    return "";
	    for(var i = 0; i < radioLength; i++) {
		    if(radioObj[i].checked) {
			    return radioObj[i].value;
		    }
	    }
	    return "";

     }
     //-------------------------------------------------------------------------------------------------
     function formatDate(value) {
        var EffDateLength
        var NewEffDate
        EffDateLength = value.trim().length;
        var EffDate = value.trim();
        var SlashPosition
        SlashPosition = value.trim().indexOf('/');
        if (SlashPosition == -1) {
            if (EffDateLength == 8) {
                NewEffDate = value.trim().substring(0, 2) + '/' +
                  value.trim().substring(2, 4) + '/' +
                  value.trim().substring(4, 8);
                  return NewEffDate;
            }
            if (EffDateLength == 6) {
                NewEffDate = value.trim().substring(0, 2) + '/' +
                  value.trim().substring(2, 4) + '/' +
                  '20' +
                  value.trim().substring(4, 6);
                  return NewEffDate;
            }
        }
        if (SlashPosition > 0) {
            if (value.trim().substring(2, 3) == '/' && value.trim().substring(5, 6) == '/') {
                VarYear = value.trim().substring(6)
                if (VarYear.length == 2) {
                    NewEffDate = value.trim().substring(0, 6) +
                  '20' +
                  value.trim().substring(6);
                  return NewEffDate.trim();
                }
            }
        }
        return value;
    }
    //--------------------------------------------------------------------------------------------------
    function isValidDateFormat(value) {
       var regExp = /^\d{2}\/{\d{2}\/d{4}$/;       
       return regExp.test(value);    
    }
