//
// JavaScript Browser Sniffer
// Eric Krok, Andy King, Michel Plungjan Jan. 31, 2002
// see http://www.webreference.com/ for more information
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
// please send any improvements to aking@internet.com and we'll
// roll the best ones in
//
// adapted from Netscape's Ultimate client-side JavaScript client sniffer
// and andy king's sniffer
// Revised May 7 99 to add is.nav5up and is.ie5up (see below). (see below).
// Revised June 11 99 to add additional props, checks
// Revised June 23 99 added screen props - gecko m6 doesn't support yet - abk
//                    converted to var is_ from is object to work everywhere
// 990624 - added cookie forms links frames checks - abk
// 001031 - ie4 mod 5.0 -> 5. (ie5.5 mididentified - abk)
//          is_ie4 mod tp work with ie6+ - abk
// 001120 - ns6 released, document.layers false, put back in
//        - is_nav6 test added - abk
// 001121 - ns6+ added, used document.getElementById, better test, dom-compl
// 010117 - actual version for ie3-5.5 by Michel Plungjan
// 010118 - actual version for ns6 by Michel Plungjan
// 010217 - netscape 6/mz 6 ie5.5 onload defer bug docs - abk
// 011107 - added is_ie6 and is_ie6up variables - dmr
// 020128 - added link to netscape's sniffer, on which this is based - abk
//          updated sniffer for aol4-6, ie5mac = js1.4, TVNavigator, AOLTV,
//          hotjava
// 020131 - cleaned up links, added more links to example object detection
// 020131 - a couple small problems with Opera detection. First, when Opera
//          is set to be compatible with other browsers it will contain their
//          information in the userAgent strings. Thus, to be sure we have 
//          Opera we should check for it before checking for the other bigs.
//          (And make sure the others are !opera.) Also corrected a minor
//          bug in the is_opera6up assignment.
// 020214 - Added link for Opera/JS compatibility; added improvements for 
//          windows xp/2000 id in opera and aol 7 id (thanks to Les
//          Hill, Les.Hill@getronics.com, for the suggestion).
// 020531 - Added N6/7 and moz identifiers. 
// 020605 - Added mozilla guessing, Netscape 7 identification, and cleaner
//          identification for Netscape 6. (this comment added after code 
//          changes)
// 020725 - Added is_gecko. -- dmr
// 021205 - Added is_Flash and is_FlashVersion, based on Doc JavaScript code. 
//          Added Opera 7 variables. -- dmr
// 021209 - Added aol8. -- dmr
// 030110 - Added is_safari, added 1.5 js designation for Opera 7. --dmr
// 030128 - Added is_konq, per user suggestion (thanks to Sam Vilain).
//          Removed duplicate Opera checks left over after last revision. - dmr
// 031124 - Added is_fb and version. We report this right after the is_moz
//          report. - dmr
// 040325 - Added is_fx and version. We report this right after the is_moz
//          report. - dmr
// 040421 - Added Debian check to is_moz. Thanks to Patrice Bridoux for
//          reporting this.
// 040517 - Added is_fb/is_fx to plugins based flash detection. Thanks to 
//          Martin Bischoff for pointing out this omission.
// 040617 - On Mac IE, appVersion differs from the version in the ua, 
//          with the UA appearing to be more accurate. As an experiment, 
//          for Mac we'll pull is_minor from the ua instead.
// 040831 - Fixed Opera bug in flash detection logic; when Opera has
//          "enable plugins" unchecked in preferences, the "plugin" 
//          variable is still true, but the "description" property 
//          belonging to it is undefined.
// 051202 - Added ua check for higher versions of Firefox (1.5+), 
//          since vendor/vendorSub is no longer used and the sniffer 
//          was assuming Mozilla. Also belatedly added is_nav8 and 
//          is_nav8up.
// 060919 - Some catchup mods here; adding is_opera8, is_opera9, 
//          and IE7 (thanks to Jonathan Warrington)
// 061009 - Added is_macosx check and safari to Flash checking, per 
//          Michael Hopkins 
//
// Everything you always wanted to know about your JavaScript client
// but were afraid to ask. Creates "is_" variables indicating:
// (1) browser vendor:
//     is_nav, is_ie, is_opera
// (2) browser version number:
//     is_major (integer indicating major version number: 2, 3, 4 ...)
//     is_minor (float   indicating full  version number: 2.02, 3.01, 4.04 ...)
// (3) browser vendor AND major version number
//     is_nav2, is_nav3, is_nav4, is_nav4up, is_nav5, is_nav5up, 
//     is_nav6, is_nav6up, is_ie3, is_ie4, is_ie4up, is_ie5up, is_ie6...
// (4) JavaScript version number:
//     is_js (float indicating full JavaScript version number: 1, 1.1, 1.2 ...)
// (5) OS platform and version:
//     is_win, is_win16, is_win32, is_win31, is_win95, is_winnt, is_win98
//     is_os2
//     is_mac, is_mac68k, is_macppc
//     is_unix
//        is_sun, is_sun4, is_sun5, is_suni86
//        is_irix, is_irix5, is_irix6
//        is_hpux, is_hpux9, is_hpux10
//        is_aix, is_aix1, is_aix2, is_aix3, is_aix4
//        is_linux, is_sco, is_unixware, is_mpras, is_reliant
//        is_dec, is_sinix, is_freebsd, is_bsd
//     is_vms
//
// based in part on 
// http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
// The Ultimate JavaScript Client Sniffer
// and Andy King's object detection sniffer
//
// Note: you don't want your Nav4 or IE4 code to "turn off" or
// stop working when Nav5 and IE5 (or later) are released, so
// in conditional code forks, use is_nav4up ("Nav4 or greater")
// and is_ie4up ("IE4 or greater") instead of is_nav4 or is_ie4
// to check version in code which you want to work on future
// versions. For DOM tests scripters commonly used the 
// is_getElementById test, but make sure you test your code as
// filter non-compliant browsers (Opera 5-6 for example) as some 
// browsers return true for this test, and don't fully support
// the W3C's DOM1.
//

    // convert all characters to lowercase to simplify testing
    var agt=navigator.userAgent.toLowerCase();
    var appVer = navigator.appVersion.toLowerCase();

    // *** BROWSER VERSION ***

    var is_minor = parseFloat(appVer);
    var is_major = parseInt(is_minor);

    var is_opera = (agt.indexOf("opera") != -1);
    var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
    var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
    var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
    var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
    var is_opera6 = (agt.indexOf("opera 6") != -1 || agt.indexOf("opera/6") != -1); // 020128- abk
    var is_opera7 = (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1); // 021205- dmr
    var is_opera8 = (agt.indexOf("opera 8") != -1 || agt.indexOf("opera/8") != -1); // 09-19-2006 jonw 
    var is_opera9 = (agt.indexOf("opera 9") != -1 || agt.indexOf("opera/9") != -1); // 09-19-2006 jonw

    var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);
    var is_opera6up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5); // new020128
    var is_opera7up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5 && !is_opera6); // new021205 -- dmr
    var is_opera8up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5 && !is_opera6 && !is_opera7); // 09-19-2006 - jonw
    var is_opera9up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5 && !is_opera6 && !is_opera7 &&!is_opera8); // 09-19-2006 - jonw

    // Note: On IE, start of appVersion return 3 or 4
    // which supposedly is the version of Netscape it is compatible with.
    // So we look for the real version further on in the string
    // And on Mac IE5+, we look for is_minor in the ua; since 
    // it appears to be more accurate than appVersion - 06/17/2004

    var is_mac = (agt.indexOf("mac")!=-1);
    var iePos  = appVer.indexOf('msie');
    if (iePos !=-1) {
       if(is_mac) {
           var iePos = agt.indexOf('msie');
           is_minor = parseFloat(agt.substring(iePos+5,agt.indexOf(';',iePos)));
       }
       else is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';',iePos)));
       is_major = parseInt(is_minor);
    }

    // ditto Konqueror
                                      
    var is_konq = false;
    var kqPos   = agt.indexOf('konqueror');
    if (kqPos !=-1) {                 
       is_konq  = true;
       is_minor = parseFloat(agt.substring(kqPos+10,agt.indexOf(';',kqPos)));
       is_major = parseInt(is_minor);
    }                                 

    var is_getElementById   = (document.getElementById) ? "true" : "false"; // 001121-abk
    var is_getElementsByTagName = (document.getElementsByTagName) ? "true" : "false"; // 001127-abk
    var is_documentElement = (document.documentElement) ? "true" : "false"; // 001121-abk

    var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
    var is_khtml  = (is_safari || is_konq);

    var is_gecko = ((!is_khtml)&&(navigator.product)&&(navigator.product.toLowerCase()=="gecko"))?true:false;
    var is_gver  = 0;
    if (is_gecko) is_gver=navigator.productSub;

    var is_fb = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                 (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                 (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                 (is_gecko) && (navigator.vendor=="Firebird"));
    var is_fx = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                 (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                 (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                 (is_gecko) && ((navigator.vendor=="Firefox")||(agt.indexOf('firefox')!=-1)));
    var is_moz   = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
                    (agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
                    (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
                    (is_gecko) && (!is_fb) && (!is_fx) &&
                    ((navigator.vendor=="")||(navigator.vendor=="Mozilla")||(navigator.vendor=="Debian")));
    if ((is_moz)||(is_fb)||(is_fx)) {  // 032504 - dmr
       var is_moz_ver = (navigator.vendorSub)?navigator.vendorSub:0;
       if(is_fx&&!is_moz_ver) {
           is_moz_ver = agt.indexOf('firefox/');
           is_moz_ver = agt.substring(is_moz_ver+8);
           is_moz_ver = parseFloat(is_moz_ver);
       }
       if(!(is_moz_ver)) {
           is_moz_ver = agt.indexOf('rv:');
           is_moz_ver = agt.substring(is_moz_ver+3);
           is_paren   = is_moz_ver.indexOf(')');
           is_moz_ver = is_moz_ver.substring(0,is_paren);
       }
       is_minor = is_moz_ver;
       is_major = parseInt(is_moz_ver);
    }
   var is_fb_ver = is_moz_ver;
   var is_fx_ver = is_moz_ver;

    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)
                && (!is_khtml) && (!(is_moz)) && (!is_fb) && (!is_fx));

    // Netscape6 is mozilla/5 + Netscape6/6.0!!!
    // Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
    // Changed this to use navigator.vendor/vendorSub - dmr 060502   
    // var nav6Pos = agt.indexOf('netscape6');
    // if (nav6Pos !=-1) {
    if ((navigator.vendor)&&
        ((navigator.vendor=="Netscape6")||(navigator.vendor=="Netscape"))&&
        (is_nav)) {
       is_major = parseInt(navigator.vendorSub);
       // here we need is_minor as a valid float for testing. We'll
       // revert to the actual content before printing the result. 
       is_minor = parseFloat(navigator.vendorSub);
    }

    var is_nav2 = (is_nav && (is_major == 2));
    var is_nav3 = (is_nav && (is_major == 3));
    var is_nav4 = (is_nav && (is_major == 4));
    var is_nav4up = (is_nav && is_minor >= 4);  // changed to is_minor for
                                                // consistency - dmr, 011001
    var is_navonly      = (is_nav && ((agt.indexOf(";nav") != -1) ||
                          (agt.indexOf("; nav") != -1)) );

    var is_nav6   = (is_nav && is_major==6);    // new 010118 mhp
    var is_nav6up = (is_nav && is_minor >= 6); // new 010118 mhp

    var is_nav5   = (is_nav && is_major == 5 && !is_nav6); // checked for ns6
    var is_nav5up = (is_nav && is_minor >= 5);

    var is_nav7   = (is_nav && is_major == 7);
    var is_nav7up = (is_nav && is_minor >= 7);

    var is_nav8   = (is_nav && is_major == 8);
    var is_nav8up = (is_nav && is_minor >= 8);

    var is_ie   = ((iePos!=-1) && (!is_opera) && (!is_khtml));
    var is_ie3  = (is_ie && (is_major < 4));

    var is_ie4   = (is_ie && is_major == 4);
    var is_ie4up = (is_ie && is_minor >= 4);
    var is_ie5   = (is_ie && is_major == 5);
    var is_ie5up = (is_ie && is_minor >= 5);
    
    var is_ie5_5  = (is_ie && (agt.indexOf("msie 5.5") !=-1)); // 020128 new - abk
    var is_ie5_5up =(is_ie && is_minor >= 5.5);                // 020128 new - abk
	
    var is_ie6   = (is_ie && is_major == 6);
    var is_ie6up = (is_ie && is_minor >= 6);

    var is_ie7   = (is_ie && is_major == 7);
    var is_ie7up = (is_ie && is_minor >= 7);

// KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
    // or if this is the first browser window opened.  Thus the
    // variables is_aol, is_aol3, and is_aol4 aren't 100% reliable.

    var is_aol   = (agt.indexOf("aol") != -1);
    var is_aol3  = (is_aol && is_ie3);
    var is_aol4  = (is_aol && is_ie4);
    var is_aol5  = (agt.indexOf("aol 5") != -1);
    var is_aol6  = (agt.indexOf("aol 6") != -1);
    var is_aol7  = ((agt.indexOf("aol 7")!=-1) || (agt.indexOf("aol7")!=-1));
    var is_aol8  = ((agt.indexOf("aol 8")!=-1) || (agt.indexOf("aol8")!=-1));

    var is_webtv = (agt.indexOf("webtv") != -1);
    
    // new 020128 - abk
    
    var is_TVNavigator = ((agt.indexOf("navio") != -1) || (agt.indexOf("navio_aoltv") != -1)); 
    var is_AOLTV = is_TVNavigator;

    var is_hotjava = (agt.indexOf("hotjava") != -1);
    var is_hotjava3 = (is_hotjava && (is_major == 3));
    var is_hotjava3up = (is_hotjava && (is_major >= 3));

    // end new
	
    // *** JAVASCRIPT VERSION CHECK ***
    // Useful to workaround Nav3 bug in which Nav3
    // loads <SCRIPT LANGUAGE="JavaScript1.2">.
    // updated 020131 by dragle
    var is_js;
    if (is_nav2 || is_ie3) is_js = 1.0;
    else if (is_nav3) is_js = 1.1;
    else if ((is_opera5)||(is_opera6)) is_js = 1.3; // 020214 - dmr
    else if (is_opera7up) is_js = 1.5; // 031010 - dmr
    else if (is_khtml) is_js = 1.5;   // 030110 - dmr
    else if (is_opera) is_js = 1.1;
    else if ((is_nav4 && (is_minor <= 4.05)) || is_ie4) is_js = 1.2;
    else if ((is_nav4 && (is_minor > 4.05)) || is_ie5) is_js = 1.3;
    else if (is_nav5 && !(is_nav6)) is_js = 1.4;
    else if (is_hotjava3up) is_js = 1.4; // new 020128 - abk
    else if (is_nav6up) is_js = 1.5;

    // NOTE: In the future, update this code when newer versions of JS
    // are released. For now, we try to provide some upward compatibility
    // so that future versions of Nav and IE will show they are at
    // *least* JS 1.x capable. Always check for JS version compatibility
    // with > or >=.

    else if (is_nav && (is_major > 5)) is_js = 1.4;
    else if (is_ie && (is_major > 5)) is_js = 1.3;
    else if (is_moz) is_js = 1.5;
    else if (is_fb||is_fx) is_js = 1.5; // 032504 - dmr
    
    // what about ie6 and ie6up for js version? abk
    
    // HACK: no idea for other browsers; always check for JS version 
    // with > or >=
    else is_js = 0.0;
    // HACK FOR IE5 MAC = js vers = 1.4 (if put inside if/else jumps out at 1.3)
    if ((agt.indexOf("mac")!=-1) && is_ie5up) is_js = 1.4; // 020128 - abk
    
    // Done with is_minor testing; revert to real for N6/7
    if (is_nav6up) {
       is_minor = navigator.vendorSub;
    }

    // *** PLATFORM ***
    var is_win   = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
    var is_win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1));

    // is this a 16 bit compiled version?
    var is_win16 = ((agt.indexOf("win16")!=-1) ||
               (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) ||
               (agt.indexOf("windows 16-bit")!=-1) );

    var is_win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) ||
                    (agt.indexOf("windows 16-bit")!=-1));
	
	var is_winme = ((agt.indexOf("win 9x 4.90")!=-1));    // new 020128 - abk
    var is_win2k = ((agt.indexOf("windows nt 5.0")!=-1) || (agt.indexOf("windows 2000")!=-1)); // 020214 - dmr
    var is_winxp = ((agt.indexOf("windows nt 5.1")!=-1) || (agt.indexOf("windows xp")!=-1)); // 020214 - dmr

    // NOTE: Reliable detection of Win98 may not be possible. It appears that:
    //       - On Nav 4.x and before you'll get plain "Windows" in userAgent.
    //       - On Mercury client, the 32-bit version will return "Win98", but
    //         the 16-bit version running on Win98 will still return "Win95".
    var is_win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1));
    var is_winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1));
    var is_win32 = (is_win95 || is_winnt || is_win98 ||
                    ((is_major >= 4) && (navigator.platform == "Win32")) ||
                    (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1));

    var is_os2   = ((agt.indexOf("os/2")!=-1) ||
                    (navigator.appVersion.indexOf("OS/2")!=-1) ||
                    (agt.indexOf("ibm-webexplorer")!=-1));

    var is_mac    = (agt.indexOf("mac")!=-1);
    if (is_mac) { is_win = !is_mac; } // dmr - 06/20/2002
    var is_mac68k = (is_mac && ((agt.indexOf("68k")!=-1) ||
                               (agt.indexOf("68000")!=-1)));
    var is_macppc = (is_mac && ((agt.indexOf("ppc")!=-1) ||
                                (agt.indexOf("powerpc")!=-1)));
    var is_macosx = (is_mac && (agt.indexOf("os x")!=-1));

    var is_sun   = (agt.indexOf("sunos")!=-1);
    var is_sun4  = (agt.indexOf("sunos 4")!=-1);
    var is_sun5  = (agt.indexOf("sunos 5")!=-1);
    var is_suni86= (is_sun && (agt.indexOf("i86")!=-1));
    var is_irix  = (agt.indexOf("irix") !=-1);    // SGI
    var is_irix5 = (agt.indexOf("irix 5") !=-1);
    var is_irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1));
    var is_hpux  = (agt.indexOf("hp-ux")!=-1);
    var is_hpux9 = (is_hpux && (agt.indexOf("09.")!=-1));
    var is_hpux10= (is_hpux && (agt.indexOf("10.")!=-1));
    var is_aix   = (agt.indexOf("aix") !=-1);      // IBM
    var is_aix1  = (agt.indexOf("aix 1") !=-1);
    var is_aix2  = (agt.indexOf("aix 2") !=-1);
    var is_aix3  = (agt.indexOf("aix 3") !=-1);
    var is_aix4  = (agt.indexOf("aix 4") !=-1);
    var is_linux = (agt.indexOf("inux")!=-1);
    var is_sco   = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1);
    var is_unixware = (agt.indexOf("unix_system_v")!=-1);
    var is_mpras    = (agt.indexOf("ncr")!=-1);
    var is_reliant  = (agt.indexOf("reliantunix")!=-1);
    var is_dec   = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) ||
           (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) ||
           (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1));
    var is_sinix = (agt.indexOf("sinix")!=-1);
    var is_freebsd = (agt.indexOf("freebsd")!=-1);
    var is_bsd = (agt.indexOf("bsd")!=-1);
    var is_unix  = ((agt.indexOf("x11")!=-1) || is_sun || is_irix || is_hpux ||
                 is_sco ||is_unixware || is_mpras || is_reliant ||
                 is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);

    var is_vms   = ((agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1));
// additional checks, abk
	var is_anchors = (document.anchors) ? "true":"false";
	var is_regexp = (window.RegExp) ? "true":"false";
	var is_option = (window.Option) ? "true":"false";
	var is_all = (document.all) ? "true":"false";
// cookies - 990624 - abk
	document.cookie = "cookies=true";
	var is_cookie = (document.cookie) ? "true" : "false";
	var is_images = (document.images) ? "true":"false";
	var is_layers = (document.layers) ? "true":"false"; // gecko m7 bug?
// new doc obj tests 990624-abk
	var is_forms = (document.forms) ? "true" : "false";
	var is_links = (document.links) ? "true" : "false";
	var is_frames = (window.frames) ? "true" : "false";
	var is_screen = (window.screen) ? "true" : "false";

// java
	var is_java = (navigator.javaEnabled());

// Flash checking code adapted from Doc JavaScript information; 
// see http://webref.com/js/column84/2.html

   var is_Flash        = false;
   var is_FlashVersion = 0;

   if ((is_nav||is_opera||is_moz||is_fb||is_fx||is_safari)||
       (is_mac&&is_ie5up)) {
      var plugin = (navigator.mimeTypes && 
                    navigator.mimeTypes["application/x-shockwave-flash"] &&
                    navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) ?
                    navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0;
//      if (plugin) {
      if (plugin&&plugin.description) {
         is_Flash = true;
         is_FlashVersion = parseInt(plugin.description.substring(plugin.description.indexOf(".")-1));
      }
   }

   if (is_win&&is_ie4up)
   {
      document.write(
         '<scr' + 'ipt language=VBScript>' + '\n' +
         'Dim hasPlayer, playerversion' + '\n' +
         'hasPlayer = false' + '\n' +
         'playerversion = 10' + '\n' +
         'Do While playerversion > 0' + '\n' +
            'On Error Resume Next' + '\n' +
            'hasPlayer = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash." & playerversion)))' + '\n' +
            'If hasPlayer = true Then Exit Do' + '\n' +
            'playerversion = playerversion - 1' + '\n' +
         'Loop' + '\n' +
         'is_FlashVersion = playerversion' + '\n' +
         'is_Flash = hasPlayer' + '\n' +
         '<\/sc' + 'ript>'
      );
   }


var currPage;
var now=new Date();
var minutes=now.getMinutes();
var seconds=now.getSeconds();
seconds = minutes + seconds;

var popup_win;
var popup_params = "width=650,height=400,menubar=no,toolbar=no,status=no,scrollbars=yes,resizable=yes,left=100,top=100,screenX=100,screenY=100";

var popup_params2 = "width=650,height=400,menubar=yes,toolbar=yes,status=yes,location=yes,directories=yes,scrollbars=yes,resizable=yes,left=100,top=100,screenX=100,screenY=100";

var calendar_params = "width=180,height=220,menubar=no,toolbar=no,status=no,scrollbars=no,resizable=no,left=100,top=100,screenX=100,screenY=100";

function open_popup(url,winName) {
   var winName2 = Math.floor(Math.random()*20)+1;
   popup_win = window.open(url, winName2, popup_params);
   if (popup_win.opener == null) {popup_win.opener = self;}
}

function calendar(url,winName) {

   popup_win = window.open(url, winName,calendar_params);
   if (popup_win.opener == null) {popup_win.opener = self;}
}

function person_lookup (frm_name,ele_name,ele_email,ele_phone_area,ele_phone,ele_fax_area,ele_fax,ele_id_field,ele_agent_num,ele_mstr_agent_num,ele_company_id) {
   var object_type = escape(window.document.forms[frm_name].elements["p_object_type"].value);
   var object_id = escape(window.document.forms[frm_name].elements["p_object_id"].value);
   if (ele_company_id) {
      var company_id = escape(window.document.forms[frm_name].elements[ele_company_id].value);
      if(!company_id) {
         alert("You must select the company name first.");
         return;
      }
   } else {
      var company_id = "";
   }
   var name = escape(window.document.forms[frm_name].elements[ele_name].value);
   
   if (ele_company_id && company_id == "") {
      alert("You must select the company name first.");
   } else {
      var output_string = "/gift/person_srch.asp?p_name=" + ele_name + "&p_email=" + ele_email + "&p_phone_area=";
      output_string = output_string + ele_phone_area + "&p_phone=" + ele_phone + "&p_fax_area=" + ele_fax_area + "&p_fax=";
      output_string = output_string + ele_fax + "&p_object_type=" + object_type;
      output_string = output_string + "&p_object_id=" + object_id + "&p_calling_field=" + ele_id_field + "&p_company_id=" + company_id;
      output_string = output_string + "&p_agent_num=" + ele_agent_num + "&p_master_agent_num=" + ele_mstr_agent_num;
      if (ele_name == "p_loan_officer") {output_string = output_string + "&p_type=Mortgage";}
      popup_win = window.open(output_string, "Person"+seconds, popup_params);
      if (popup_win.opener == null) {popup_win.opener = self;}
   }
}

function addr_lookup (frm_name,ele_address,ele_city,ele_state,ele_zip,ele_id_field) {
   var object_type = escape(window.document.forms[frm_name].elements["p_object_type"].value);
   var object_id = escape(window.document.forms[frm_name].elements["p_object_id"].value);
   var address = escape(window.document.forms[frm_name].elements[ele_address].value);
   var city= escape(window.document.forms[frm_name].elements[ele_city].value);
   var state= escape(window.document.forms[frm_name].elements[ele_state].value);
   var zip= escape(window.document.forms[frm_name].elements[ele_zip].value);
   if (address) {
      var output_string = "/gift/address_srch.asp?p_address=" + address + "&p_city=" + city + "&p_state=" + state + "&p_zip=" + zip;
      output_string = output_string + "&p_object_type=" + object_type + "&p_object_id=" + object_id + "&p_calling_field=" + ele_id_field;
   popup_win = window.open(output_string, "Address"+seconds, popup_params);
   if (popup_win.opener == null) {popup_win.opener = self;}
   }
   else {
      alert ("You must specify a partial address.");
      window.document.forms[frm_name].elements[ele_address].focus();
   }

}

function comp_id_lookup (frm_name,ele_name,ele_address, ele_phone_area, ele_phone, ele_fax_area, ele_fax, ele_id_field, ele_type, ele_person_id, ele_person_name, ele_person_email, ele_operatingco) {
   var object_type,object_id
   if (ele_operatingco) {
      var operatingco = window.document.forms[frm_name].elements[ele_operatingco].value;
      if (operatingco == "undefined") {operatingco="";}
   } else {
      var operatingco = "";
   }
   if (ele_type) {
      var search_type= escape(window.document.forms[frm_name].elements[ele_type].value);
   } else {
      var search_type= "";
   }
   var output_string = "/gift/comp_srch.asp?p_name=" + ele_name + "&p_address=" + ele_address + "&p_phone_area=";
   output_string = output_string + ele_phone_area + "&p_phone=" + ele_phone + "&p_fax_area=" + ele_fax_area + "&p_fax=";
   output_string = output_string + ele_fax + "&p_object_type=" + object_type + "&p_type=" + search_type;
   output_string = output_string + "&p_object_id=" + object_id + "&p_calling_field=" + ele_id_field;
   if (ele_person_name == "p_escrow_city") {
      output_string = output_string + "&p_person_id=" + ele_person_id + "&p_city=" + ele_person_name;
      output_string = output_string + "&p_state=" + ele_person_email + "&p_operatingco=" + operatingco;
   } else {
      output_string = output_string + "&p_person_id=" + ele_person_id + "&p_person_name=" + ele_person_name;
      output_string = output_string + "&p_person_email=" + ele_person_email + "&p_operatingco=" + operatingco;
   }
   popup_win = window.open(output_string, "Company"+seconds, popup_params);
   if (popup_win.opener == null) {popup_win.opener = self;}
}

function regionid_lookup(frm_name,ele_id_field,ele_desc) {
   var output_string = "/gift/regionid_srch.asp?p_calling_field=" + ele_id_field + "&p_desc=" + ele_desc;
   popup_win = window.open(output_string, "Region"+seconds, popup_params);
   if (popup_win.opener == null) {popup_win.opener = self;}
}

function use_selection(frm_name,ele_selection,ele_field1,ele_field2,ele_field3,ele_field4,ele_field5,ele_field6,ele_field7,ele_field8,ele_field9,ele_field10,ele_field11,ele_field12,ele_field13,ele_field14,ele_field15) {
   if(typeof window.document.forms[frm_name].elements[ele_selection].length == "undefined") {var ele_length = 0; var checked = 0;}
   else {var ele_length = window.document.forms[frm_name].elements[ele_selection].length;}
   for (i=0;i<ele_length;i++){
      if (window.document.forms[frm_name].elements[ele_selection][i].checked==true)
      var checked =i;
   }
if (checked > 0) {
   var id = window.document.forms[frm_name].elements[ele_selection][checked].value;

   if (ele_field1.length > 0) {var value1 = ele_field1 + "_" + id; opener.document.forms[1].elements[ele_field1].value = document.forms[frm_name].elements[value1].value;}
   if (ele_field2.length > 0) {var value2 = ele_field2 + "_" + id; opener.document.forms[1].elements[ele_field2].value = document.forms[frm_name].elements[value2].value;}
   if (ele_field3.length > 0) {var value3 = ele_field3 + "_" + id; opener.document.forms[1].elements[ele_field3].value = document.forms[frm_name].elements[value3].value;}
   if (ele_field4.length > 0) {var value4 = ele_field4 + "_" + id; opener.document.forms[1].elements[ele_field4].value = document.forms[frm_name].elements[value4].value;}
   if (ele_field5.length > 0) {var value5 = ele_field5 + "_" + id; opener.document.forms[1].elements[ele_field5].value = document.forms[frm_name].elements[value5].value;}
   if (ele_field6.length > 0) {var value6 = ele_field6 + "_" + id; opener.document.forms[1].elements[ele_field6].value = document.forms[frm_name].elements[value6].value;}
   if (ele_field7.length > 0) {var value7 = ele_field7 + "_" + id; opener.document.forms[1].elements[ele_field7].value = document.forms[frm_name].elements[value7].value;}
   if (ele_field8.length > 0) {var value8 = ele_field8 + "_" + id; opener.document.forms[1].elements[ele_field8].value = document.forms[frm_name].elements[value8].value;}
   if (ele_field9.length > 0) {var value9 = ele_field9 + "_" + id; opener.document.forms[1].elements[ele_field9].value = document.forms[frm_name].elements[value9].value;}
   if (ele_field10.length > 0) {var value10 = ele_field10 + "_" + id; opener.document.forms[1].elements[ele_field10].value = document.forms[frm_name].elements[value10].value;}
   if (ele_field11.length > 0) {var value11 = ele_field11 + "_" + id; opener.document.forms[1].elements[ele_field11].value = document.forms[frm_name].elements[value11].value;}
   if (ele_field12.length > 0) {var value12 = ele_field12 + "_" + id; opener.document.forms[1].elements[ele_field12].value = document.forms[frm_name].elements[value12].value;}
   if (ele_field13.length > 0) {var value13 = ele_field13 + "_" + id; opener.document.forms[1].elements[ele_field13].value = document.forms[frm_name].elements[value13].value;}
   if (ele_field14.length > 0) {var value14 = ele_field14 + "_" + id; opener.document.forms[1].elements[ele_field14].value = document.forms[frm_name].elements[value14].value;}
   if (ele_field15.length > 0) {
      if (ele_field15=="ratechange") {
         var tmpval = "p_rate_code_" + id; opener.document.forms[1].p_rate_code.value = document.forms[frm_name].elements[tmpval].value;
         opener.document.forms[1].rateCodeDisp.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateDP_N_" + id; opener.document.forms[1].p_rateDP_N.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateDD_N_" + id; opener.document.forms[1].p_rateDD_N.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateMP_N_" + id; opener.document.forms[1].p_rateMP_N.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateMD_N_" + id; opener.document.forms[1].p_rateMD_N.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_criteria_N_" + id; opener.document.forms[1].p_criteria_N.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateDP_R_" + id; opener.document.forms[1].p_rateDP_R.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateDD_R_" + id; opener.document.forms[1].p_rateDD_R.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateMP_R_" + id; opener.document.forms[1].p_rateMP_R.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_rateMD_R_" + id; opener.document.forms[1].p_rateMD_R.value = document.forms[frm_name].elements[tmpval].value;
         var tmpval = "p_criteria_R_" + id; opener.document.forms[1].p_criteria_R.value = document.forms[frm_name].elements[tmpval].value;
         calc_rate(opener.document.forms[1],'SaleType');
      } else {
         var value15 = ele_field15 + "_" + id; opener.document.forms[1].elements[ele_field15].value = document.forms[frm_name].elements[value15].value;
      }
   }
   if (ele_field2=="p_opco_name" && opener.document.forms[1].name=="frmSubmission") {
      var arrElement = new Array(28);
      arrElement[0]= "p_regionid";
      arrElement[1]= "p_regionid_desc";
      arrElement[2]= "p_mortgage_comp_id";
      arrElement[3]= "p_mortgage_office";
      arrElement[4]= "p_mortgage_phone_area";
      arrElement[5]= "p_mortgage_phone";
      arrElement[6]= "p_mortgage_fax_area";
      arrElement[7]= "p_mortgage_fax";
      arrElement[8]= "p_loan_officer_id";
      arrElement[9]= "p_loan_officer";
      arrElement[10]= "p_loan_off_email";
      arrElement[11]= "p_settl_office_id";
      arrElement[12]= "p_settl_office";
      arrElement[13]= "p_settl_phone_area";
      arrElement[14]= "p_settl_phone";
      arrElement[15]= "p_settl_fax_area";
      arrElement[16]= "p_settl_fax";
      arrElement[17]= "p_settl_agent_id";
      arrElement[18]= "p_settl_agent";
      arrElement[19]= "p_settl_agent_email";
      arrElement[20]= "p_escrow_name";
      arrElement[21]= "p_escrow_address";
      arrElement[22]= "p_escrow_phone_area";
      arrElement[23]= "p_escrow_phone";
      arrElement[24]= "p_escrow_fax_area";
      arrElement[25]= "p_escrow_fax";
      arrElement[26]= "p_escrow_comp_id";
      arrElement[27]= "p_builder_id";
      arrElement[28]= "p_builder_name";
      for (var i=0; i<arrElement.length; i++) {
            opener.document.frmSubmission.elements[arrElement[i]].value = "";
      } // end for
   }
   window.close();
   }
   else
   {alert("Nothing was selected.");}
}

function nvl(arg,replacement) {
  if (arg == null && arg == "NaN") { return replacement;}
  else { return arg;}
}

function validateNumber(control){
if (!isNumber(control.value)){
      alert("This field must contain numbers only.");
      control.value="";
      control.focus();
   }
}

function isNumber(arg) {
   var ValidChars = "0123456789.";
   var IReturn=true;
   var Char;
   for (i = 0; i < arg.length && IReturn == true; i++) { 
      Char = arg.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) {IReturn= false;}
   }
   return IReturn;
}

function round(number,X) {
// rounds number to X decimal places, defaults to 2
X = (!X ? 2 : X);
return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

function resort(fldName) {
   if (fldName == window.document.giftSummary.p_order_by.value) {
      if (window.document.giftSummary.p_ascdesc.value == "desc") {
         window.document.giftSummary.p_ascdesc.value = "";
      }
      else {
         window.document.giftSummary.p_ascdesc.value = "desc";
      }
   }
   else {
      window.document.giftSummary.p_order_by.value = fldName;
      window.document.giftSummary.p_ascdesc.value = "";
   }
   window.document.giftSummary.submit();
}

function change_image(frmName,eleName,imgLoc) {
   window.document.forms[frmName].elements[eleName].src = imgLoc;
}
function rollover(eleNum,num) {
   var eleName = "navbar" + eleNum;
   if (eleNum == currPage) {return false;}   
   if (num=="1") {var imgLoc = "/gift/images/nav/" + eleName + "_over.gif";}
   else {var imgLoc = "/gift/images/nav/" + eleName + ".gif";}
   window.document.images[eleName].src = imgLoc;
}
function rollover_reset() {
   for (var i=0;i<7;i++) {
      var eleName = "navbar" + i;
      var imgLoc = "/gift/images/nav/navbar" + i + ".gif";
      window.document.images[eleName].src = imgLoc;
   }
}

function highlight_page() {
   var title = window.document.title;
   var dashLoc = InStr(title,'-');
   if (dashLoc > 0) {
      var PageName = title.substring(dashLoc+1,title.length)
      i=0;
      if (PageName == "Downpayment Assistance"){var i=0;}
      if (PageName == "Members") {var i=1;}
      if (PageName == "Services") {var i=2;}
      if (PageName == "Information") {var i=3;}
      if (PageName == "Downloads") {var i=4;}
      if (PageName == "About Us") {var i=5;}
      if (PageName == "Contact Us") {var i=6;}
      currPage = i;
      rollover_reset();
      var eleName = "navbar" + i;
      var imgLoc = "/gift/images/nav/navbar" + i + "_over.gif";
      window.document.images[eleName].src = imgLoc;
   }
}
function InStr(strSearch, charSearchFor) {

	for (i=1; i < strSearch.length; i++) {
           var newSearch = strSearch.substring(i,i-1);
	   if (charSearchFor == newSearch) {return i;}
	}
	return -1;
}

function clear_field(frmName,ele_value1,ele_value2,ele_value3,ele_value4,ele_value5,ele_value6,ele_value7,ele_value8,ele_value9,ele_value10) {
   if (ele_value1) {window.document.forms[frmName].elements[ele_value1].value = "";}
   if (ele_value2) {window.document.forms[frmName].elements[ele_value2].value = "";}
   if (ele_value3) {window.document.forms[frmName].elements[ele_value3].value = "";}
   if (ele_value4) {window.document.forms[frmName].elements[ele_value4].value = "";}
   if (ele_value5) {window.document.forms[frmName].elements[ele_value5].value = "";}
   if (ele_value6) {window.document.forms[frmName].elements[ele_value6].value = "";}
   if (ele_value7) {window.document.forms[frmName].elements[ele_value7].value = "";}
   if (ele_value8) {window.document.forms[frmName].elements[ele_value8].value = "";}
   if (ele_value9) {window.document.forms[frmName].elements[ele_value9].value = "";}
   if (ele_value10) {window.document.forms[frmName].elements[ele_value10].value = "";}
}
function today() {
   var d = new Date()
   var month = d.getMonth() + 1;
   month += '';
   var day =  d.getDate();
   day += '';
   var year = d.getFullYear();
   year += '';
   var output_str = month + "/" + day + "/" + year;
   return output_str;
}

function add_favorite () {
   var url="http://www.ezdownpayments.com";
   var title = "Homes For All Program - Downpayment Assistance";
   window.external.AddFavorite(url,title);
}

function ShowDD() {
   if (is_ie4up) {
      if (document.forms[0].page.value=="gift_order.asp") {DivStatus.style.visibility="visible";}
      if (document.forms[0].page.value=="person.asp") {DivType.style.visibility="visible";}
      if (document.forms[0].page.value=="region.asp"){DivRegion.style.visibility="visible";}
      if (document.forms[0].page.value=="company.asp"){DivType.style.visibility="visible"; DivRate.style.visibility="visible";}
      if (document.forms[0].page.value=="home.asp"){DivDate.style.visibility="visible"; DivStatus.style.visibility="visible";}
   }
}

function HideDD() {
   if (is_ie4up) {
      if (document.forms[0].page.value=="gift_order.asp") {DivStatus.style.visibility="hidden";}
      if (document.forms[0].page.value=="person.asp") {DivType.style.visibility="hidden";}
      if (document.forms[0].page.value=="region.asp") {DivRegion.style.visibility="hidden";}
      if (document.forms[0].page.value=="company.asp"){DivType.style.visibility="hidden"; DivRate.style.visibility="hidden";}
      if (document.forms[0].page.value=="home.asp"){DivDate.style.visibility="hidden"; DivStatus.style.visibility="hidden";}
   }
}

function showTandC(fldControl) {
   if(fldControl.checked) {
      var output_text="Terms and Conditions:\n\nBy checking the 'Forms Signed' box, you are certifying that all applicable forms have\nbeen received and signed by the respective parties.\n\nAs the submitter of this gift order, you will take responsibility for the safe keeping of\nthe aforementioned documents.\nSignatures will be required by settlement agent to receive gift funds.";
      alert(output_text);
   }
}

function calc_rate(frmObj, changedField) {
   var saleType = frmObj.p_sale_type.value;
   var tmpField = "p_rateDP_" + saleType;
   var defaultPct = frmObj.elements[tmpField].value;
   tmpField = "p_rateDD_" + saleType;
   var defaultDollar = frmObj.elements[tmpField].value;
   tmpField = "p_rateMP_" + saleType;
   var maxPct = frmObj.elements[tmpField].value;
   tmpField = "p_rateMD_" + saleType;
   var maxDollar = frmObj.elements[tmpField].value;
   tmpField = "p_criteria_" + saleType;
   var criteria = frmObj.elements[tmpField].value;
   var rateCode = frmObj.p_rate_code.value;
   var giftAmt = nvl(frmObj.p_gift_amt.value,0);
   //var giftPct = frmObj.p_gift_pct.options[frmObj.p_gift_pct.selectedIndex].value;
   var giftPct = nvl(frmObj.p_gift_pct.value,0);
   var sellPrice = nvl(frmObj.p_sell_price.value,0);
   var serviceFee = 0;
   var rate = 0;
   var net = 0;
   var fee = 0;
   var contrib = 0;

   //if(defaultPct) {rate = maxPct;}
   //if(defaultDollar) {rate = maxDollar;}  
   if(changedField == "p_sell_price") {
      if(isNumber(sellPrice)) {
         if(giftPct) {giftAmt = sellPrice * (giftPct/100);}
         if(giftAmt) {giftPct = parseFloat(giftAmt/sellPrice) * 100;}
      } else {
         alert ("Sell Price must be a numeric value.");
         frmObj.p_sell_price.value = "";
         return;
      }
   }
   if(changedField == "p_gift_amt") {
      if(!isNumber(giftAmt)) {
         alert ("Gift Amount must be a numeric value.");
         frmObj.p_gift_amt.value = "";
         return;
      }
      giftPct = parseFloat(giftAmt/sellPrice) * 100;
      contrib = parseFloat(giftAmt) + parseFloat(net);
   }
   if(changedField == "p_gift_pct") {
      if(!isNumber(giftPct)) {
         alert ("Gift Percent must be a numeric value.");
         frmObj.p_gift_pct.value = "";
         return;
      }
      giftAmt = sellPrice * (giftPct/100);
   }
   if(changedField == "p_fee") {
      if(!isNumber(fee)) {
         alert ("Rate must be a numeric value.");
         frmObj.p_fee.value = "";
         return;
      }
      if(parseFloat(frmObj.p_fee.value) < 100) {
         maxPct = frmObj.p_fee.value;
         net = sellPrice * (maxPct/100);
      } else {
         maxDollar = frmObj.p_fee.value;
         net = maxDollar;
      }
   }
   if(rateCode == "A" || rateCode == "C") {
      if(giftAmt && sellPrice) {
         serviceFee = parseFloat(giftAmt) + parseFloat(sellPrice * (maxPct/100));
         rate=maxPct;
      }
   }
   if(rateCode == "B" || rateCode == "D" || rateCode == "F") {
      if(sellPrice && giftAmt) {
         if((sellPrice * (maxPct/100)) < maxDollar) {
            serviceFee = parseFloat(giftAmt) + parseFloat(sellPrice * (maxPct/100));
            rate=maxPct;
         } else {
            serviceFee = parseFloat(giftAmt) + parseFloat(maxDollar);
            rate=maxDollar;
         }
      }
   }
   if(rateCode == "E") {
      if(giftAmt && sellPrice) {
         serviceFee = parseFloat(giftAmt) + parseFloat(maxDollar);
         rate=maxDollar;
      }
   }
   
   net = serviceFee - giftAmt;
   frmObj.p_gift_amt.value = nvl(round(giftAmt,2),0);
   frmObj.p_gift_pct.value = round(giftPct,1);
   frmObj.p_net.value = round(net,2);
   frmObj.p_contrib.value = round(serviceFee,2);
   frmObj.p_fee.value = rate;
   if(parseFloat(rate) > 100) {
      frmObj.p_rate_uom.value = "$";
      var uom = "$";
   } else {
      frmObj.p_rate_uom.value = "%";
      var uom = "%";
   }
}


function process_gift(frmName,profile) {
   return_val = checkReqFields(frmName,profile);
   document.forms[frmName].p_status.value = "New";
   if(return_val == true){document.forms[frmName].submit();}
}

function write_date(frmName,fldName,fldValue) {
   opener.document.forms[frmName].elements[fldName].value = fldValue;
   window.close();
}

function link_to_company(frmName,fldCompanyId) {
   var companyid = document.forms[frmName].elements[fldCompanyId].value;
   if(companyid > 0) {
      open_popup("/gift/members/company.asp?p_companyid=" + companyid + "&p_popup=0","newwin");
   } else {
      alert("There is no company information entered.");
   }
}

function forgot_my_password(frmName,fldUserName) {
   if (window.document.forms[frmName].elements[fldUserName].value) {
      window.location.href="/gift/members/forgot_my_password.asp?p_userid=" + window.document.forms[frmName].elements[fldUserName].value;
   } else {
      alert("Please enter a valid username or account number.");
      window.document.forms[frmName].elements[fldUserName].focus();
   }
}

function checkReqFields(frmName,profile) {
   if (frmName == "frmSubmission") {// GIFT ORDER FORM
//*************************** UNSUBMITTED ***********************************
      if (window.document.frmSubmission.p_status.value == "Unsubmitted" || window.document.frmSubmission.p_status2.value == "Unsubmitted") {
         var arrFldNames = new Array(26);
         arrFldNames[0] = "p_buy1_f_name";
         arrFldNames[1] = "p_buy1_l_name";
         arrFldNames[2] = "p_buy1_ssn";
         arrFldNames[3] = "p_buy1_sex";
         arrFldNames[4] = "p_buy1_race";
         arrFldNames[5] = "p_builder_name";
         arrFldNames[6] = "p_property_addr";
         arrFldNames[7] = "p_property_city";
         arrFldNames[8] = "p_property_state";
         arrFldNames[9] = "p_property_zip";
         arrFldNames[10] = "p_property_county";
         arrFldNames[11] = "p_sell_price";
         arrFldNames[12] = "p_gift_pct";
         arrFldNames[13] = "p_gift_amt";
         arrFldNames[14] = "p_mortgage_office";
         arrFldNames[15] = "p_mortgage_phone_area";
         arrFldNames[16] = "p_mortgage_phone";
         arrFldNames[17] = "p_mortgage_fax_area";
         arrFldNames[18] = "p_mortgage_fax";
         arrFldNames[19] = "p_loan_officer";
         arrFldNames[20] = "p_settl_office";
         arrFldNames[21] = "p_settl_phone_area";
         arrFldNames[22] = "p_settl_phone";
         arrFldNames[23] = "p_settl_fax_area";
         arrFldNames[24] = "p_settl_fax";
         arrFldNames[25] = "p_settl_agent";
         arrFldNames[26] = "p_regionid";

         if (document.frmSubmission.p_sell1_f_name.value != "" && document.frmSubmission.p_sell1_f_name.value != "undefined"){arrFldNames[5] = "p_sell1_f_name";}
         
         for (var i=0; i<arrFldNames.length; i++) {
            if (window.document.forms[frmName].elements[arrFldNames[i]].value == "") { 
               window.document.frmSubmission.p_dirty_flag.value = "1";
            } // end if
         } // end for
         var arrFldNames = new Array(6);
         arrFldNames[0] = "p_buy1_f_name";
         arrFldNames[1] = "p_buy1_l_name";
         arrFldNames[2] = "p_property_addr";
         arrFldNames[3] = "p_property_city";
         arrFldNames[4] = "p_property_state";
         arrFldNames[5] = "p_property_zip";
         arrFldNames[6] = "p_property_county";
         var arrFldValues = new Array(6);
         arrFldValues[0] = "Buyer First Name";
         arrFldValues[1] = "Buyer Last Name";
         arrFldValues[2] = "Address";
         arrFldValues[3] = "City";
         arrFldValues[4] = "State";
         arrFldValues[5] = "Zip";
         arrFldValues[6] = "County";
      } // END UNSUBMITTED
//*************************** NEW ***********************************
      if (window.document.frmSubmission.p_status.value == "New") {
         var arrFldNames = new Array(26);
         arrFldNames[0] = "p_buy1_f_name";
         arrFldNames[1] = "p_buy1_l_name";
         arrFldNames[2] = "p_buy1_ssn";
         arrFldNames[3] = "p_buy1_sex";
         arrFldNames[4] = "p_buy1_race";
         arrFldNames[5] = "p_builder_name";
         arrFldNames[6] = "p_property_addr";
         arrFldNames[7] = "p_property_city";
         arrFldNames[8] = "p_property_state";
         arrFldNames[9] = "p_property_zip";
         arrFldNames[10] = "p_property_county";
         arrFldNames[11] = "p_sell_price";
         arrFldNames[12] = "p_gift_pct";
         arrFldNames[13] = "p_gift_amt";
         arrFldNames[14] = "p_mortgage_office";
         arrFldNames[15] = "p_mortgage_phone_area";
         arrFldNames[16] = "p_mortgage_phone";
         arrFldNames[17] = "p_mortgage_fax_area";
         arrFldNames[18] = "p_mortgage_fax";
         arrFldNames[19] = "p_loan_officer";
         arrFldNames[20] = "p_settl_office";
         arrFldNames[21] = "p_settl_phone_area";
         arrFldNames[22] = "p_settl_phone";
         arrFldNames[23] = "p_settl_fax_area";
         arrFldNames[24] = "p_settl_fax";
         arrFldNames[25] = "p_settl_agent";
         arrFldNames[26] = "p_regionid";
         var arrFldValues = new Array(26);
         arrFldValues[0] = "Buyer1 First Name";
         arrFldValues[1] = "Buyer1 Last Name";
         arrFldValues[2] = "Buyer1 SSN";
         arrFldValues[3] = "Buyer1 Sex";
         arrFldValues[4] = "Buyer1 Race";
         arrFldValues[5] = "Builder/Co. OR Seller";
         arrFldValues[6] = "Address";
         arrFldValues[7] = "City";
         arrFldValues[8] = "State";
         arrFldValues[9] = "Zip";
         arrFldValues[10] = "County";
         arrFldValues[11] = "Selling Price";
         arrFldValues[12] = "Gift Percent";
         arrFldValues[13] = "Gift Amount";
         arrFldValues[14] = "Mortgage Office";
         arrFldValues[15] = "Mortg. Office Phone Area Code";
         arrFldValues[16] = "Mortg. Office Phone #";
         arrFldValues[17] = "Mortg. Office Fax Area Code";
         arrFldValues[18] = "Mortg. Office Fax #";
         arrFldValues[19] = "Loan Officer";
         arrFldValues[20] = "Closing Office";
         arrFldValues[21] = "Closing Office Area Code";
         arrFldValues[22] = "Closing Office Phone #";
         arrFldValues[23] = "Closing Office Fax Area Code";
         arrFldValues[24] = "Closing Office Fax #";
         arrFldValues[25] = "Closing Agent";
         arrFldValues[26] = "Bank Name";
      } // END NEW

//*************************** PENDING ***********************************
      if (window.document.frmSubmission.p_status.value == "Pending" && profile == "ADMIN") {
         var arrFldNames = new Array(26);
         arrFldNames[0] = "p_buy1_f_name";
         arrFldNames[1] = "p_buy1_l_name";
         arrFldNames[2] = "p_buy1_ssn";
         arrFldNames[3] = "p_buy1_sex";
         arrFldNames[4] = "p_buy1_race";
         arrFldNames[5] = "p_builder_name";
         arrFldNames[6] = "p_property_addr";
         arrFldNames[7] = "p_property_city";
         arrFldNames[8] = "p_property_state";
         arrFldNames[9] = "p_property_zip";
         arrFldNames[10] = "p_property_county";
         arrFldNames[11] = "p_sell_price";
         arrFldNames[12] = "p_gift_pct";
         arrFldNames[13] = "p_gift_amt";
         arrFldNames[14] = "p_mortgage_office";
         arrFldNames[15] = "p_mortgage_phone_area";
         arrFldNames[16] = "p_mortgage_phone";
         arrFldNames[17] = "p_mortgage_fax_area";
         arrFldNames[18] = "p_mortgage_fax";
         arrFldNames[19] = "p_loan_officer";
         arrFldNames[20] = "p_settl_office";
         arrFldNames[21] = "p_settl_phone_area";
         arrFldNames[22] = "p_settl_phone";
         arrFldNames[23] = "p_settl_fax_area";
         arrFldNames[24] = "p_settl_fax";
         arrFldNames[25] = "p_settl_agent";
         arrFldNames[26] = "p_regionid";
         var arrFldValues = new Array(26);
         arrFldValues[0] = "Buyer1 First Name";
         arrFldValues[1] = "Buyer1 Last Name";
         arrFldValues[2] = "Buyer1 SSN";
         arrFldValues[3] = "Buyer1 Sex";
         arrFldValues[4] = "Buyer1 Race";
         arrFldValues[5] = "Builder/Co. OR Seller";
         arrFldValues[6] = "Address";
         arrFldValues[7] = "City";
         arrFldValues[8] = "State";
         arrFldValues[9] = "Zip";
         arrFldValues[10] = "County";
         arrFldValues[11] = "Selling Price";
         arrFldValues[12] = "Gift Percent";
         arrFldValues[13] = "Gift Amount";
         arrFldValues[14] = "Mortgage Office";
         arrFldValues[15] = "Mortg. Office Phone Area Code";
         arrFldValues[16] = "Mortg. Office Phone #";
         arrFldValues[17] = "Mortg. Office Fax Area Code";
         arrFldValues[18] = "Mortg. Office Fax #";
         arrFldValues[19] = "Loan Officer";
         arrFldValues[20] = "Closing Office";
         arrFldValues[21] = "Closing Office Area Code";
         arrFldValues[22] = "Closing Office Phone #";
         arrFldValues[23] = "Closing Office Fax Area Code";
         arrFldValues[24] = "Closing Office Fax #";
         arrFldValues[25] = "Closing Agent";
         arrFldValues[26] = "Bank Name";
      } // END PENDING

//*************************** CANCELED ***********************************
      if (window.document.frmSubmission.p_status.value == "Canceled" && profile == "ADMIN") {
         var arrFldNames = new Array(6);
         arrFldNames[0] = "p_buy1_f_name";
         arrFldNames[1] = "p_buy1_l_name";
         arrFldNames[2] = "p_property_addr";
         arrFldNames[3] = "p_property_city";
         arrFldNames[4] = "p_property_state";
         arrFldNames[5] = "p_property_zip";
         arrFldNames[6] = "p_property_county";
         var arrFldValues = new Array(6);
         arrFldValues[0] = "Buyer1 First Name";
         arrFldValues[1] = "Buyer1 Last Name";
         arrFldValues[2] = "Address";
         arrFldValues[3] = "City";
         arrFldValues[4] = "State";
         arrFldValues[5] = "Zip";
         arrFldValues[6] = "County";
      } // END CANCELED

//*************************** GIFTED,FUNDED,DISPUTE ***********************************
      if ((window.document.frmSubmission.p_status.value == "Gifted" || window.document.frmSubmission.p_status.value == "Funded" || window.document.frmSubmission.p_status.value == "Dispute") && profile == "ADMIN") {
         var arrFldNames = new Array(32);
         arrFldNames[0] = "p_buy1_f_name";
         arrFldNames[1] = "p_buy1_l_name";
         arrFldNames[2] = "p_buy1_ssn";
         arrFldNames[3] = "p_buy1_sex";
         arrFldNames[4] = "p_buy1_race";
         arrFldNames[5] = "p_builder_name";
         arrFldNames[6] = "p_property_addr";
         arrFldNames[7] = "p_property_city";
         arrFldNames[8] = "p_property_state";
         arrFldNames[9] = "p_property_zip";
         arrFldNames[10] = "p_property_county";
         arrFldNames[11] = "p_sell_price";
         arrFldNames[12] = "p_gift_pct";
         arrFldNames[13] = "p_gift_amt";
         arrFldNames[14] = "p_mortgage_office";
         arrFldNames[15] = "p_mortgage_phone_area";
         arrFldNames[16] = "p_mortgage_phone";
         arrFldNames[17] = "p_mortgage_fax_area";
         arrFldNames[18] = "p_mortgage_fax";
         arrFldNames[19] = "p_loan_officer";
         arrFldNames[20] = "p_settl_office";
         arrFldNames[21] = "p_settl_phone_area";
         arrFldNames[22] = "p_settl_phone";
         arrFldNames[23] = "p_settl_fax_area";
         arrFldNames[24] = "p_settl_fax";
         arrFldNames[25] = "p_settl_agent";
         arrFldNames[26] = "p_regionid";
         arrFldNames[27] = "p_escrow_name";
         arrFldNames[28] = "p_escrow_name";
         arrFldNames[29] = "p_escrow_aba";
         arrFldNames[30] = "p_escrow_account";
         arrFldNames[31] = "p_gift_wired_date";
         arrFldNames[32] = "p_gift_wired_date";
         var arrFldValues = new Array(32);
         arrFldValues[0] = "Buyer1 First Name";
         arrFldValues[1] = "Buyer1 Last Name";
         arrFldValues[2] = "Buyer1 SSN";
         arrFldValues[3] = "Buyer1 Sex";
         arrFldValues[4] = "Buyer1 Race";
         arrFldValues[5] = "Builder/Co. OR Seller";
         arrFldValues[6] = "Address";
         arrFldValues[7] = "City";
         arrFldValues[8] = "State";
         arrFldValues[9] = "Zip";
         arrFldValues[10] = "County";
         arrFldValues[11] = "Selling Price";
         arrFldValues[12] = "Gift Percent";
         arrFldValues[13] = "Gift Amount";
         arrFldValues[14] = "Mortgage Office";
         arrFldValues[15] = "Mortg. Office Phone Area Code";
         arrFldValues[16] = "Mortg. Office Phone #";
         arrFldValues[17] = "Mortg. Office Fax Area Code";
         arrFldValues[18] = "Mortg. Office Fax #";
         arrFldValues[19] = "Loan Officer";
         arrFldValues[20] = "Settlement Office";
         arrFldValues[21] = "Closing Office Area Code";
         arrFldValues[22] = "Closing Office Phone #";
         arrFldValues[23] = "Closing Office Fax Area Code";
         arrFldValues[24] = "Closing Office Fax #";
         arrFldValues[25] = "Closing Agent";
         arrFldValues[26] = "Bank Name";
         arrFldValues[27] = "Bank Name";
         arrFldValues[28] = "Bank Name";
         arrFldValues[29] = "ABA Routing#";
         arrFldValues[30] = "Account#";
         arrFldValues[31] = "Gift Wired Date";
         arrFldValues[32] = "Gift Wired Date";
         if (window.document.frmSubmission.p_status.value == "Funded") {
            arrFldNames[32] = "p_funding_date";
            arrFldValues[32] = "Funded Date";
         }
      } // END GIFTED,FUNDED,DISPUTE

//*************************** VOIDED ***********************************
      if (window.document.frmSubmission.p_status.value == "Voided" && profile == "ADMIN") {
            var arrFldNames = new Array(1);
            arrFldNames[0] = "p_void_date";
            var arrFldValues = new Array(1);
            arrFldValues[0] = "Voided Date";
         } // END VOIDED
            
      if (document.frmSubmission.p_buy1_race.length > 0){
         if (document.frmSubmission.p_buy1_race.value == "OTHER" && (window.document.frmSubmission.p_status.value != "Canceled" || window.document.frmSubmission.p_status.value != "Unsubmitted")) {
            arrFldNames[4] = "p_buy1_other";
            arrFldValues[4] = "Buyer's Race (Other)";
         }
      }
      if (document.frmSubmission.p_sell1_f_name.value != "" && document.frmSubmission.p_sell1_f_name.value != "undefined" && (window.document.frmSubmission.p_status.value != "Canceled" || window.document.frmSubmission.p_status.value != "Unsubmitted")) {
         arrFldNames[5] = "p_sell1_f_name";
         arrFldValues[5] = "Seller Name";
      }
      if ((document.frmSubmission.p_builder_id.value == "undefined" || document.frmSubmission.p_builder_id.value == "NULL" || document.frmSubmission.p_builder_id.value == "") && (document.frmSubmission.p_sell1_f_name.value == "undefined" || document.frmSubmission.p_sell1_f_name.value == "")){
         alert("Either the 'Builder/Comp' or the 'Seller' field must be filled in to save the record.");
         return false;
       }
  } // end if

  if (frmName == "frmPerson") {
         // Person FORM
         var arrFldNames = new Array(9);
         arrFldNames[0] = "p_first_name";
         arrFldNames[1] = "p_last_name";
         arrFldNames[2] = "p_status";
         arrFldNames[3] = "p_comp_name";
         arrFldNames[4] = "p_regionid_desc";
         arrFldNames[5] = "p_email";
         arrFldNames[6] = "p_phone_area";
         arrFldNames[7] = "p_phone";
         arrFldNames[8] = "p_fax_area";
         arrFldNames[9] = "p_fax";

         var arrFldValues = new Array(9);
         arrFldValues[0] = "First Name";
         arrFldValues[1] = "Last Name";
         arrFldValues[2] = "Status";
         arrFldValues[3] = "Company Name";
         arrFldValues[4] = "Region";
         arrFldValues[5] = "Email";
         arrFldValues[6] = "Phone Area Code";
         arrFldValues[7] = "Phone Number";
         arrFldValues[8] = "Fax Area Code";
         arrFldValues[9] = "Fax Number";
         if(profile != "ADMIN") {
            arrFldNames[4] = "p_comp_name";
            arrFldValues[4] = "Company Name";
         }
         if(window.document.frmPerson.p_type.value != "Mortgage") {
            arrFldNames[5] = "p_first_name";
            arrFldValues[5] = "First Name";
         }
   } // end if
   
   if (frmName == "frmCompany") {
         // Company FORM
         var arrFldNames = new Array(11);
         arrFldNames[0] = "p_type";
         arrFldNames[1] = "p_name";
         arrFldNames[2] = "p_rate_code";
         arrFldNames[3] = "p_regionid";
         arrFldNames[4] = "p_phone_area";
         arrFldNames[5] = "p_phone";
         arrFldNames[6] = "p_fax_area";
         arrFldNames[7] = "p_fax";
         arrFldNames[8] = "p_address1";
         arrFldNames[9] = "p_city";
         arrFldNames[10] = "p_state";
         arrFldNames[11] = "p_zip";

         var arrFldValues = new Array(11);
         arrFldValues[0] = "Type";
         arrFldValues[1] = "Name";
         arrFldValues[2] = "Rate";
         arrFldValues[3] = "Region";
         arrFldValues[4] = "Phone Area Code";
         arrFldValues[5] = "Phone Number";
         arrFldValues[6] = "Fax Area Code";
         arrFldValues[7] = "Fax Number";
         arrFldValues[8] = "Address";
         arrFldValues[9] = "City";
         arrFldValues[10] = "State";
         arrFldValues[11] = "Zip";
         if(window.document.frmCompany.p_type.value == "Escrow") {
            arrFldNames[4] = "p_regionid";
            arrFldNames[5] = "p_regionid";
            arrFldNames[6] = "p_regionid";
            arrFldNames[7] = "p_regionid";
            arrFldNames[8] = "p_city";
            arrFldNames[11] = "p_city";
            arrFldValues[4] = "Region";
            arrFldValues[5] = "Region";
            arrFldValues[6] = "Region";
            arrFldValues[7] = "Region";
            arrFldValues[8] = "City";
            arrFldValues[11] = "City";
         }
   } // end if

   if (frmName == "frmRegister") {
         // Registration FORM
         var arrFldNames = new Array(14);
         arrFldNames[0] = "p_f_name";
         arrFldNames[1] = "p_l_name";
         arrFldNames[2] = "p_phone_area";
         arrFldNames[3] = "p_phone";
         arrFldNames[4] = "p_fax_area";
         arrFldNames[5] = "p_fax";
         arrFldNames[6] = "p_email_addr";
         arrFldNames[7] = "p_comp_name";
         arrFldNames[8] = "p_comp_addr";
         arrFldNames[9] = "p_comp_city";
         arrFldNames[10] = "p_comp_state";
         arrFldNames[11] = "p_comp_zip";
         arrFldNames[12] = "p_login";
         arrFldNames[13] = "p_password";
         arrFldNames[14] = "p_password2";

         var arrFldValues = new Array(14);
         arrFldValues[0] = "First Name";
         arrFldValues[1] = "Last Name";
         arrFldValues[2] = "Phone Area Code";
         arrFldValues[3] = "Phone Number";
         arrFldValues[4] = "Fax Area Code";
         arrFldValues[5] = "Fax Number";
         arrFldValues[6] = "Email Address";
         arrFldValues[7] = "Company Name";
         arrFldValues[8] = "Company Address";
         arrFldValues[9] = "Company City";
         arrFldValues[10] = "Company State";
         arrFldValues[11] = "Company Zip";
         arrFldValues[12] = "User Login";
         arrFldValues[13] = "Password";
         arrFldValues[14] = "Confirmation Password";
   } // end if

   for (var i=0; i<arrFldValues.length; i++) {
   // alert("Checking " + arrFldValues[i] + "...");
      if (window.document.forms[frmName].elements[arrFldNames[i]].value == "") { 
         var output_text = "Field '" + arrFldValues[i] + "' is required before you can save the record."
         alert (output_text);
         // Cannot set focus to hidden fields
         if ((arrFldNames[i] != "p_regionid") && (arrFldNames[i] != "p_fee" && profile == "ADMIN")) {
            window.document.forms[frmName].elements[arrFldNames[i]].focus();
         }
         return false;
      } // end if
   } // end for
   return true;
} // end function

function person_save(frmName,ele_value1,ele_value2,profile) {
   if(checkReqFields(frmName,profile) == false) {return false;}

   if(profile == "ADMIN") {
      if(frmName=="frmUserProfile"){
         var return1 = validate_password(frmName,ele_value1,ele_value2);
         var return2 = checkReqFields(frmName,profile);
         if (return1 && return2) {return true;}
         else {return false;}
      }
      if(frmName=="frmPerson" && document.frmPerson.p_login.value.length > 0){
         var return1 = validate_password(frmName,ele_value1,ele_value2);
         var return2 = checkReqFields(frmName,profile);
         if (return1 && return2) {return true;}
         else {return false;}
      }
   }
}

function register_save(frmName,ele_value1,ele_value2,profile) {
   if(checkReqFields(frmName,profile) == false) {return false;}
   if(validate_password(frmName,ele_value1,ele_value2) == false) {return false;}
   return true;
}

function validate_password(frmName,ele_value1,ele_value2) {
   var pwd1 = window.document.forms[frmName].elements[ele_value1].value;
   var pwd2 = window.document.forms[frmName].elements[ele_value2].value;
   if (pwd1 != pwd2) {
      alert ("The passwords entered do not match. Please verify that they are the same.");
      window.document.forms[frmName].elements[ele_value1].value = "";
      window.document.forms[frmName].elements[ele_value2].value = "";
      window.document.forms[frmName].elements[ele_value1].focus();
      return false;
   } else {
      if (pwd1.length < 6 || pwd1.length > 20) {
         alert ("Passwords must be between 6 and 20 characters.");
         window.document.forms[frmName].elements[ele_value1].value = "";
         window.document.forms[frmName].elements[ele_value2].value = "";
      window.document.forms[frmName].elements[ele_value1].focus();
         return false;
      }
      if (InStr(pwd1,"'") > 0) {
         alert ("Your password cannot contain apostrophes (').");
         window.document.forms[frmName].elements[ele_value1].value = "";
         window.document.forms[frmName].elements[ele_value2].value = "";
      window.document.forms[frmName].elements[ele_value1].focus();
         return false;
      }
      return true;
   }

}

function ValidateReqFields() {
// alert("ValidateReqFields");
   for (var i=1; i<20; i++) {
      var tmpFld="req" + i;
      //alert(tmpFld + ":" + document.getElementById(tmpFld).value + "*");

      if (document.getElementById(tmpFld).value =="" || document.getElementById(tmpFld).value == null) {
         alert ("The required field " + document.getElementById(tmpFld).label + " is not filled in.");
         //document.getElementById(tmpFld).style = "background-color:red";
         document.getElementById(tmpFld).select();
         document.getElementById(tmpFld).focus();
         return false; 
      }
   }
   return true;
}

       function AutoFillAddress() {
          //var frm = window.document.forms.cust_form;
          if (window.document.forms.cust_form.fillDelivAddr.checked) {
             window.document.forms.cust_form.Dadd1.value = window.document.forms.cust_form.Badd1.value;
             window.document.forms.cust_form.Dadd2.value = window.document.forms.cust_form.Badd2.value;
             window.document.forms.cust_form.Dcity.value = window.document.forms.cust_form.Bcity.value;
             window.document.forms.cust_form.Dstate.value = window.document.forms.cust_form.Bstate.value;
             window.document.forms.cust_form.Dzip.value = window.document.forms.cust_form.Bzip.value;
          } else {
             window.document.forms.cust_form.Dadd1.value = "";
             window.document.forms.cust_form.Dadd2.value = "";
             window.document.forms.cust_form.Dcity.value = "";
             window.document.forms.cust_form.Dstate.value = "";
             window.document.forms.cust_form.Dzip.value = "";
          }
       }


function CalcOverage(CtrlminRentTime, CtrlmaxRentTime, CtrladditionalCost, CtrlelapseTime, Ctrloverage) {
    var minRentTime = parseFloat(document.getElementById(CtrlminRentTime).value);
    var maxRentTime = parseFloat(document.getElementById(CtrlmaxRentTime).value);
    var additionalCost = parseFloat(document.getElementById(CtrladditionalCost).value);
    var elapseTime = parseFloat(document.getElementById(CtrlelapseTime).value);
    
    if(elapseTime < 0 ) {
    document.getElementById(Ctrloverage).value = 0;
    } else {
       overage = Math.round(additionalCost * (elapseTime - maxRentTime),0);
       if (overage < 0) { overage = 0;}
       document.getElementById(Ctrloverage).value = overage;

       //alert ("min:" + minRentTime + " max:" + maxRentTime + " add:" + additionalCost + " elapse:" + elapseTime );
       if(elapseTime < minRentTime) {
       //Does not meet minimum time req
       alert("The duratrion of your event is less than the minimum required rental period.  Please increase your event duration.");
       return false;
       }

       if(elapseTime > maxRentTime) {
       //Calc overage and alert
       hoursOver = parseFloat(elapseTime) - parseFloat(maxRentTime);
       var answer = confirm ("You have exceeded the maximum rental period by " + hoursOver + " hour(s).  There will be an additional charge of $" + overage + " applied to this product. Press 'OK' to continue with the additional charge or 'Cancel' to change your reservation.");
       if (answer) {
       return true;}
       else {
       return false;
       }
       }
    }
}


function ValidateDateTime(CtrlSDate, CtrlSHr, CtrlSMin, CtrlSAMPM, CtrlEDate, CtrlEHr, CtrlEMin, CtrlEAMPM, CtrlelapseTime, CtrlminRentTime, CtrlmaxRentTime, CtrladditionalCost, CtrlelapseTime, Ctrloverage) {
    var SDate = document.getElementById(CtrlSDate).value;    	
    var EDate =  document.getElementById(CtrlEDate).value;
    var SHr = document.getElementById(CtrlSHr).value; 	
    var EHr =  document.getElementById(CtrlEHr).value;  
    var SMin = document.getElementById(CtrlSMin).value;    	
    var EMin =  document.getElementById(CtrlEMin).value;
    var elapseTime =  document.getElementById(CtrlelapseTime).value;    
    var alertReason1 =  'End Date/time must be greater than Start Date/time.'; 
    var alertReason2 =  'End Date/time can not be less than Current Date/time.';
    var endDate = new Date(EDate);
    var startDate= new Date(SDate);

    if(document.getElementById(CtrlSAMPM).value == "PM" && SHr !="12") {
       SHr = parseFloat(SHr) + 12;
       if (parseFloat(SHr) > 23) {
          parseFloat(SHr) = 12;}
    }
 	 
    if(document.getElementById(CtrlEAMPM).value == "PM" && EHr !="12") {
       EHr = parseFloat(EHr) + 12;
       if (parseFloat(EHr) > 23) {
          parseFloat(EHr) = 12;}
    }

    if(document.getElementById(CtrlSAMPM).value == "AM" && SHr == "12") {
       SHr = "0";
    }
 	 
    if(document.getElementById(CtrlEAMPM).value == "AM" && EHr == "12") {
       EHr = "0";
    }

   
//alert("SHr " + SHr + " EHr " + EHr);
     
    if(SDate != '' && SHr != '' && SMin != '' && EDate != '' && EHr != '' && EMin != '')

    {
       endDate.setHours(EHr,EMin);   
       startDate.setHours(SHr,SMin);
//alert("End Date:" + endDate     + " " + endDate.getFullYear() +" " + (parseFloat(endDate.getMonth())+1) +" " + endDate.getDate() +" " + endDate.getHours() +" " + endDate.getMinutes());
//alert("Start Date:" + startDate + " " + startDate.getFullYear() +" " + (parseFloat(startDate.getMonth())+1) +" " + startDate.getDate() +" " + startDate.getHours() +" " + startDate.getMinutes());
      //UTC(y, m, d, h, m, s)
      elapseTime = Date.UTC(endDate.getFullYear(), (parseFloat(endDate.getMonth())+1), endDate.getDate(),endDate.getHours(), endDate.getMinutes(),0) - Date.UTC(startDate.getFullYear(), (parseFloat(startDate.getMonth())+1), startDate.getDate(), startDate.getHours(), startDate.getMinutes(),0);
//alert("End UTC:" + Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate(), endDate.getHours(), endDate.getMinutes(),0) + " - Start UTC:" + Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(),0) + "=" + elapseTime );
      elapseTime = parseFloat(elapseTime)/ (1000*60*60); //milliseconds to hours
      document.getElementById(CtrlelapseTime).value = elapseTime;
       if (startDate > endDate)
       {
	    alert(alertReason1);
	    document.getElementById(CtrlEDate).value = document.getElementById(CtrlSDate).value;
            document.getElementById(CtrlEHr).value = document.getElementById(CtrlSHr).value;
            document.getElementById(CtrlEMin).value = document.getElementById(CtrlSMin).value;
            document.getElementById(CtrlEAMPM).value = document.getElementById(CtrlSAMPM).value;
	    return false;
       }

    }
    else if(SDate == '' || SHr == '' || SMin == '')	
    {
        alert("Please enter Start Date and time");
        return false;
    }
    else if(EDate == '' || EHr == '' || EMin == '')	
    {
        alert("Please enter End Date and time");
        return false;
    }	
    if (CalcOverage(CtrlminRentTime, CtrlmaxRentTime, CtrladditionalCost, CtrlelapseTime, Ctrloverage) == false) {
    return false;}
}


function ValidateDate(CtrlSDate,CtrlEDate)
    {
    var SDate = document.getElementById(CtrlSDate).value;    	
    var EDate =  document.getElementById(CtrlEDate).value;
       
          
    var alertReason1 =  'End Date must be greater than or equal to  Start Date.' 
    var alertReason2 =  'End Date can not be less than Current Date.';
	
    var endDate = new Date(EDate);    	
    var startDate= new Date(SDate);
     
       if(SDate != '' && EDate != '' && startDate > endDate)
    {
	    alert(alertReason1);
	    document.getElementById(CtrlEDate).value = "";
	    return false;
    }
    else if(SDate == '')	
    {
        alert("Please enter Start Date");
        return false;
    }
else if(EDate == '')	
    {
        alert("Please enter End Date");
        return false;
    }	    
}



function DONOTUSEvalidateDate(fld) {
    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    var errorMessage = 'Please enter valid date as month, day, and four digit year.\nYou may use a slash, hyphen or period to separate the values.\nThe date must be a real date. 2-30-2000 would not be accepted.\nFormay mm/dd/yyyy.';
    if ((fld.value.match(RegExPattern)) && (fld.value!='')) {
        alert('Date is OK'); 
    } else {
        alert(errorMessage);
        fld.focus();
    } 
}


function startTime()
{
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
// add a zero in front of numbers<10
m=checkTime(m);
s=checkTime(s);
document.getElementById('txt').innerHTML=h+":"+m+":"+s;
t=setTimeout('startTime()',500);
}


function checkTime(i)
{
if (i<10)
  {
  i="0" + i;
  }
return i;
}
