﻿// used with **basic
var lock = false;
var url = "";
var sAlert = "";
var response = "";
var jsStr = "";
var turn_id = "";

// bag object code at **bag
var val_bag = new bag();

// vars for form loading and editing used at **formx
var info_list = new Array();
var nam_list = new Array();
var type_list = new Array();
var length_list = new Array();
var lite_list = new Array();

var val_bag = new bag();
var bx = new bag();
var formXcancel_next = "";
var formXsave_next = "";
var fxnextop = "";
var fx_new = true;
var isnew = true;
var fxidin;
var comm_id = "";
var ignore = false;
var last_id = 0;
var lstkey;
var detail_type = "";
var optot = 0;
var memid = new Array();
var memnum = new Array();

//  **basic

function getReq() 
{
    if (window.XMLHttpRequest) { req = new XMLHttpRequest(); } 	                        // code for non-IE browsers
    else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); } 	// code for IE browsers
    if (req)
    {
        try {
            req.open("POST", url, false);
            req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            var dt = new Date();
            send_data = "arg=" + val_bag.makeOut("true") + "&date=" + dt;
            //alert(send_data);
            req.send(send_data);
        }
        catch (err) {
            alert("HttpRequest Error\n" + err.description);
        }
        if (req.readyState == 4) {
            if (req.status == 200) { response = req.responseText; }                // if OK
        }
    }
}
function doGet() 
{
    //alert("Starting doGet()");
    if (lock) { return; }
    lock = true;
    response = null;
    sAlert = null;
    getReq();

    if (response) {
        jsStr = "";
        split(response);
        jsStr = trim(jsStr);
        if (jsStr != "") { eval(jsStr); }
        if (sAlert) { alert(sAlert); }
    }
    else { alert("SERVER NOT RESPONDING"); }
    lock = false;
}
function split(s) 
{
    jsStr = "";
    div = "";
    L = s.length;
    var sw = true;
    var n, b, e;
    var c;
    var jsbegin = "//JsBegin//";
    var jsend = "//JsEnd//";
    var divbegin = "//DivBegin//";
    var divend = "//DivEnd//";

    // extract divs
    for (n = 0; n < L; n++) {
        b = s.indexOf(divbegin, n);
        if (b >= 0) {
            b += divbegin.length;
            e = s.indexOf("$$", b);
            if (e > 0) {
                div_id = s.substring(b, e);
                b = e + 2;
                e = s.indexOf(divend, b);
                if (e > 0) {
                    div = s.substring(b, e);
                    n = e + divend.length;
                    document.getElementById(div_id).innerHTML = div;
                }
            }
        }
    }
    // extract js
    for (n = 0; n < L; n++) {
        b = s.indexOf(jsbegin, n);
        if (b >= 0) {
            b += jsbegin.length;
            e = s.indexOf(jsend, b);
            if (e > 0) {
                jsStr += s.substring(b, e);
                n = e + jsend.length;
            }
        }
    }
}
function trim(str) {
    if (str == null) { return; }
    var z = str;
    if (z == "") { return z; }
    while (z.charAt(0) == ' ') { z = z.substring(1); }
    while (z.charAt(z.length - 1) == ' ') { z = z.substring(0, z.length - 1); }
    return z;
}
function openMsgBox(text) {
    var oBox = document.getElementById("MsgBox");
    var sBox = oBox.style;
    var oLine = document.getElementById("MsgLine");
    oLine.innerHTML = text;
    cntrDiv(300, 200, "MsgBox")
    sBox.visibility = "visible";
}
function closeMsgBox() {
    var oBox = document.getElementById("MsgBox");
    var sBox = oBox.style;
    sBox.visibility = "hidden";
}
function openDelBox(text) {
    var oBox = document.getElementById("DelBox");
    var sBox = oBox.style;
    var oLine = document.getElementById("DelLine");
    oLine.innerHTML = text;
    cntrDiv(300, 200, "DelBox")
    sBox.visibility = "visible";
}
function closeDelBox(resp) {
    var oBox = document.getElementById("DelBox");
    var sBox = oBox.style;
    sBox.visibility = "hidden";
    if (resp == "YES") {formXdelete2(); }
}
function cntrDiv(Xwidth, Yheight, divid) {
    // First, determine how much the visitor has scrolled 
    var scrolledX, scrolledY;
    if (self.pageYOffset) {
        scrolledX = self.pageXOffset;
        scrolledY = self.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop) {
        scrolledX = document.documentElement.scrollLeft;
        scrolledY = document.documentElement.scrollTop;
    }
    else if (document.body) {
        scrolledX = document.body.scrollLeft;
        scrolledY = document.body.scrollTop;
    }

    // Next, determine the coordinates of the center of browser's window 
    var centerX, centerY;
    if (self.innerHeight) {
        centerX = self.innerWidth;
        centerY = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight) {
        centerX = document.documentElement.clientWidth;
        centerY = document.documentElement.clientHeight;
    }
    else if (document.body) {
        centerX = document.body.clientWidth;
        centerY = document.body.clientHeight;
    }

    //	Xwidth is the width of the div, 
    //	Yheight is the height of the div passed as arguments to the function: 
    var leftOffset = scrolledX + (centerX - Xwidth) / 2;
    var topOffset = scrolledY + (centerY - Yheight) / 2;
    // The initial width and height of the div can be set in the style sheet with display:none;
    // 		divid is passed as an argument to the function 
    var o = document.getElementById(divid);
    var r = o.style;
    r.position = 'absolute';
    r.top = topOffset + 'px';
    r.left = leftOffset + 'px';
}
function turn_on(idin) {
    turn_id = idin;
    if (document.getElementById(turn_id) == null){return;}
    var x = document.getElementById(turn_id);
    x.style.visibility = "visible";
    setTimeout("turn_off()", 6000);
}
function turn_off()
 {
    if (document.getElementById(turn_id) == null) { return; }
    var x = document.getElementById(turn_id);
    x.style.visibility = "hidden";
}
function getJs(fn) {
    var head_elem = document.getElementsByTagName('head').item(0);
    var js_elem = document.createElement('script');
    js_elem.src = fn;
    js_elem.type = 'text/javascript';
    js_elem.id = fn;
    js_elem.defer = true;
    head_elem.appendChild(js_elem);
    return false;
}

// **bag object code
function bag()
{
    this.key = new Array();
    this.val = new Array();
    this.len = 0;
}

// string str must be in the form "{key1:value1;key2:value2; ...keyn:valuen;}" with no spaces in key and value has each char as hex pair
bag.prototype.load = function(str) {
    // parse str into key and val arrays
    var s = str; // making sure there is no global "s"
    var j = 1; // index for string, position 0 should be a "{"
    var k = 0; // index for the arrays
    if (s == "new") { return; }
    //alert("Entered bag.load");
    while (true) {
        this.key[k] = "";
        this.val[k] = "";

        while (true) {
            if (s.charAt(j) == ":") { j++; break; }
            this.key[k] += s.charAt(j);
            j++;
        }
        while (true) {
            if (s.charAt(j) == ";") { j++; break; }
            this.val[k] += s.charAt(j);
            j++;
        }
        k++;
        if (s.charAt(j) == "}") { break; }
    }
    this.len = k;
    this.dehex();
}
bag.prototype.clear = function()
{
    this.key.length = 0;
    this.val.length = 0;
    this.len = 0;
}
bag.prototype.dehex = function()
{
	// dehex the val array;
	var k = 0;
	for (k = 0;k < this.len;k++)
	{
	    this.val[k] = this.unhex(this.val[k]);
	}
}
bag.prototype.put = function(keyin,valin)
{
    var j = 0;
    for (j = 0;j < this.len;j++){if(keyin == this.key[j]){this.val[j] = valin;return;}}
    this.key[this.len] = keyin;
    this.val[this.len] = valin;
    this.len ++;
}
bag.prototype.unhex = function(str)
{
    var hex = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
	var outstr = "";
    var hexint = 0;
    var j,i = 0;
    var ch = "";
    var s = str.toLowerCase();
    for(i=0;i<s.length;i++) // assumes the value is an even length ie, hex pairs
    {
        ch =s.substr(i,1)
        for (j=0;j<16;j++){if (ch == hex[j]){hexint  = j * 16;break;}}
        ch = s.substr(i+1,1)
        for (j=0;j<16;j++){if (ch == hex[j]){hexint += j;break;}}
        outstr += String.fromCharCode(hexint);
        i++;	        
    }
	return outstr;
}
bag.prototype.enhex = function(str)
{
    var hex = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
    var ret = "";
    var code = 0;
    var j = 0;
    for (j = 0;j < str.length;j++)
    {
        code = str.charCodeAt(j);
        ret += hex[parseInt(code/16)];
        ret += hex[code%16]; 
    }
    return ret;
}
bag.prototype.makeOut = function(hexsw)
{
    // hex is true for hex encoding of values is the output stri
    var ret = "{";
    var j = 0;
    if (hexsw == "true"){for (j = 0; j < this.len;j++){ret += this.key[j] + ":" + this.enhex(this.val[j]) + ";";}}
    else      {for (j = 0; j < this.len;j++){ret += this.key[j] + ":" + this.val[j] + ";";}}
    ret += "}";
    return ret;
}
bag.prototype.stringOut = function()
{
    var ret = "{";
    var j = 0;
    for (j = 0; j < this.len;j++){ret += this.key[j] + ":" + this.val[j] + ";";}
    ret = ret + "}";
    return ret;
}
bag.prototype.view = function()
{
    var jL = 0;
    var LL = this.key.length;
    var sL = "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5px\">";
    for (jL = 0; jL < LL; jL++){sL += "<tr><td>" + this.key[jL] + "</td><td>" + this.val[jL] + "</td></tr>";}
    sL += "</table>";
    openMsgBox(sL);
}
bag.prototype.get = function(k)
{
    var j = 0;
    for(j=0;j<this.len;j++){if(this.key[j] == k){return this.val[j];}}
    return "";
}

// **formx
function checkown() 
{
    var chr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var alph = "";
    var kc = event.keyCode;
    var x, fld;
    
    x = document.getElementById("mem_lastname");
    fld = x.value;
    if (fld.length > 0) {return; }
    if (kc < 65 || kc > 90) { return; }
    kc = kc - 65;
    if (kc == lstkey) {return; }
    lstkey = kc;
    alph = chr.charAt(kc);
    //check if alph is first letter of any in the olast array
    //first remove rows from memeber table
    removeRows();
    var j = 0;
    var ocnt = 0;
    var ch = "";
 
    var nextrow = 1;
    var memtbl = document.getElementById("members");
    for (j = 1; j < oid.length; j++) 
    {
        ch = olast[j].charAt(0);
        ch = ch.toUpperCase();
        if (ch == alph) { ocnt++; addRow(j); }
    }
    if (ocnt == 0) { return; }
    cntrDiv(400, 500, "new_owner_sel");
    x = document.getElementById("new_mem_sel");
    x.style.visibility = "visible";
}
function selclick(idin) 
{
    var x = document.getElementById("new_mem_sel");
    x.style.visibility = "hidden";
    if (idin == "0") { return; }
    val_bag.put("op","_ownpropupdt");
    doGet();
}
function addRow(idin) 
{
    var txt;
    var tbl = document.getElementById('owners');
    var lastRow = tbl.rows.length;
    // insert row with id
    var row = tbl.insertRow(lastRow);
    row.onclick = function(){selclick(oid[idin]);};
    row.className = "fxselcell";
    // insert lastname td
    var tdlast = row.insertCell(0);
    txt = document.createTextNode(olast[idin]);
    tdlast.appendChild(txt);
    // insert firstname + middle td
    var tdfirst = row.insertCell(1);
    txt = document.createTextNode(ofirst[idin]);
    tdfirst.appendChild(txt);
    // insert address
    var tdadd = row.insertCell(2);
    txt = document.createTextNode(oadd[idin]);
    tdadd.appendChild(txt);
    // insert city
    var tdcity = row.insertCell(2);
    txt = document.createTextNode(ocity[idin]);
    tdcity.appendChild(txt);
}
function removeRows() 
{
    var tbl = document.getElementById('owners');
    do {
        var lastRow = tbl.rows.length;
        if (lastRow == 1) { break; }
        tbl.deleteRow(lastRow - 1);
    } while (true);
    return;
}
function formXinfo(idin)
{
    var j = idin.substr(2);
    j = j/1;
    var info = info_list[j];
    openMsgBox(info);
}
function formXsave(opin) 
{
    // check for error columns
    var L = lite_list.length;
    var red_cnt = 0;
    var k = 0;
    for (k = 0; k < L; k++){if(lite_list[k] == "red"){red_cnt++;}}
    if (red_cnt == 1){openMsgBox("There is a data item with errors. Please repair.");return;}
    if (red_cnt > 1){openMsgBox("There are " + red_cnt  + " data items with errors. Please repair.");return;}
    if (fx_new || isnew)
    {
        var black_cnt = 0;
        k = 0;
        for (k = 0; k < L; k++){if(lite_list[k] == "black"){black_cnt++;}}
        if (black_cnt == 1){openMsgBox("There is a required data item that must be entered. Please complete.");return;}
        if (black_cnt > 1){openMsgBox("There are " + black_cnt  + " data items that must be entered. Please complete.");return;}
    }
    // okay to save
    url = opin + ".aspx";
    doGet();
}
function formXdelete(idin)
{
    fxidin = idin;
    openDelBox("ARE YOU SURE YOU WANT TO DELETE THIS ITEM");
}
function formXdelete2()
{
    url = fxidin + ".aspx";
    doGet();
}
function formXcancel(idin) 
{
    url = idin + ".aspx";
    doGet()
    return;
}

function fxOnly(s,which)
{
    var r = "";
    var Lst = "";
    var j;
    s = trim(s);
    if (s.length == 0){return s;}
    
    for (j = 0; j < s.length; j++) 
    { 
        if (s.substr(j,1) == "'") { r += "`"; } 
        else {if (s.charCodeAt(j) >= 0) { r += s.charAt(j); } }
    }
    s = r;
    r = "";
    switch (which)
    {
        case "alist":
            Lst = " -`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            break;
        case ("dlist"):
            Lst = "0123456789/-";
            break;
        case "elist":
            Lst = "+-.0123456789_abcdefghijklmnopqrstuvwxyz";
            break;
        case "plist":
            Lst = ' -_./:&`"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            break;
        case "llist":
            Lst = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            break;
        case "hlist":
            Lst = " -_<>=.,0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`";
            break;
        case "nlist":
            Lst = "\n\r -_=.,0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ()*:;`";
            break;
        case "domlist":
            Lst = "/:._-0123456789abcdefghijklmnopqrstuvwxyz";
            break;
        case ("nums"):
            Lst = "0123456789";
            break;
        case ("9plus"):
            Lst = ".0123456789";
            break;
        case ("numsdot"):
            Lst = ".0123456789";
            break;
        case ("tax"):
            Lst = "-0123456789";
            break;
        case ("ampm"):
            Lst = ":0123456789AMP";
            break;
    }
    for (j = 0; j < s.length; j++){if(Lst.indexOf(s.charAt(j)) >= 0){r += s.charAt(j);}}
    return r;
}
function formXrad(nam) 
{
    var v = "";
    var j = 0;
    var x = document.getElementsByName(nam);
    var ndx = x[0].ndx;
    ndx = (+ndx);
    for (j = 0; j < x.length; j++) { if (x[j].checked) { v = x[j].value; break; } }
    if (v == "" || v == "0") { openMsgBox("A Value must be selected other than SELECT"); liter(ndx, "red"); return; }
    liter(ndx, "green");
    val_bag.put(nam, v);
    return;
}
function formXver(idin)
{
    var ndx = (idin.substr(2));
        ndx = (+ndx);
    var nam = nam_list[ndx];
    var typ = type_list[ndx];
    var x = document.getElementById(nam);
    var v = x.value;
    v = trim(v);
    if (v == "") { putaway(v,nam,ndx);return; }
    switch (typ)
    {
            case "email":
                fx_email(nam,ndx);
                break;
            case "url":
                fx_url(nam,ndx);
                break;
            case "plain":
                fx_plain(nam,ndx);
                break;
            case "numonly":
                fx_numonly(nam,ndx);
                break;
            case "9plus":
                fx_9plus(nam,ndx);
                break;
            case "dec2":
                fx_dec2(nam,ndx);
                break;
            case "phone":
                fx_phone(nam,ndx);
                break;
            case "zip":
                fx_zip(nam,ndx);
                break;
            case "name":
                fx_name(nam,ndx);
                break;
            case "loginame":
                fx_loginame(nam,ndx);
                break;
            case "texarea":
                fx_texarea(nam,ndx);
                break;
            case "check":
                fx_check(nam,ndx);
                break;
            case "option":
                fx_option(nam,ndx);
                break;
            case "combo1":
                fx_combo1(nam, ndx);
                break;
            case "combo2":
                fx_combo2(nam, ndx);
                break;  
            case "yandn":
                fx_yandn(nam,ndx);
                break;
            case "date":
                fx_date(nam,ndx);
                break;
            case "9digits":
                fx_9digits(nam,ndx);
                break;
            case "taxid":
                fx_taxid(nam,ndx);
                break;
            case "dom":
                fx_dom(nam, ndx);
                break;
            case "tod":
                fx_tod(nam, ndx);
                break;
            case "radio":
                fx_radio(nam, ndx);
                break;
            case "json":
                fx_json(nam, ndx);
                break;
        }
    
    return;
}
function putaway(v, nam, ndx) 
{
    if ( v.length == 0 && fx_req(ndx) )
    {
        liter(ndx,"red");
        openMsgBox("Required field must not be blank");  
        return;
    }
    if(v.length <= length_list[ndx])
    {
        var x = document.getElementById(nam);
        x.value = v;
        liter(ndx,"green");
        val_bag.put(nam,v);
        return;
    }  
    liter(ndx,"red");
    openMsgBox("Length must not exceed " + length_list[ndx]);  
}
function fx_email(nam,ndx)
{                
    var tld =["biz","ca","cat","com","edu","gov","int","mil","net","org","pro","tel","aero","arpa","asia","coop","info","jobs","mobi","name","museum","travel"];
    var x = document.getElementById(nam);
    var v = x.value;
    v = v.toLowerCase();
    var a = v.lastIndexOf("@");
    if (a < 0){liter(ndx,"red");openMsgBox("Invalid Email address. Missing the @");return;}
    if (v.charAt(a-1) == "."){liter(ndx,"red");openMsgBox("Invalid Email address. Period before the @");return;}
    var add = fxOnly(v.substr(0,a),"elist");
    var dom = fxOnly(v.substr(a+1),"domlist");
    v = add + "@" + dom;
    // check for proper top level domain
    a = v.lastIndexOf(".");
    var t = v.substr(a + 1);
    var ok = false;
    var j;
    for(j = 0;j < tld.length;j++){if (tld[j] == t){ok = true;break;}}
    if (!ok){liter(ndx,"red");openMsgBox("Invalid Email address. Top Level Domain is not acceptable");return;}
    putaway(v,nam,ndx);
}
function fx_url(nam, ndx) {
    var tld = ["biz", "cat", "com", "edu", "gov", "int", "mil", "net", "org", "pro", "tel", "aero", "arpa", "asia", "coop", "info", "jobs", "mobi", "name", "museum", "travel"];
    var x = document.getElementById(nam);
    var v = x.value;
    v = v.toLowerCase();
    v = fxOnly(v, "domlist");
    // check for proper top level domain
    a = v.lastIndexOf(".");
    var t = v.substr(a + 1);
    var ok = false;
    var j;
    for (j = 0; j < tld.length; j++) { if (tld[j] == t) { ok = true; break; } }
    if (!ok) { liter(ndx, "red"); openMsgBox("Invalid URL. Top Level Domain is not acceptable"); return; }
    putaway(v, nam, ndx);
}
function fx_name(nam, ndx) {
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v, "alist");
    putaway(v, nam, ndx);
}
function fx_dom(nam, ndx) {
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v, "nums");
    v = v/1;
    if (v < 1 || v > 31) { liter(ndx, "red"); openMsgBox("Day of Month must be between 1 and 31"); return; }
    v = v.toString();
    putaway(v, nam, ndx);
}
function fx_tod(nam,ndx)// form of input should be HH:MM AM or PM
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = v.toUpperCase();
    v = fxOnly(v, "ampm");
    var mer = v.indexOf("AM");
    if (mer < 0) { mer = v.indexOf("PM"); if (mer < 0) { liter(ndx, "red"); openMsgBox("The Time of Day form is HH:MM AM or HH:MM PM<br />AM or PM are required"); return; } }
    var AMPM = v.substr(mer, 2);
    var colin = v.indexOf(":");
    var HH = v.substr(0, colin);
    HH = (+HH);
    if (HH < 1 || HH > 12) { liter(ndx, "red"); openMsgBox("The Time of Day form is HH:MM AM or HH:MM PM<br />The HH entered must be between 01 and 12"); return; }
    HH = HH.toString();
    var MM = v.substr(colin + 1, mer - colin - 1);
    MM = (+MM);
    if (MM > 59) { liter(ndx, "red"); openMsgBox("The Time of Day form is HH:MM AM or HH:MM PM<br />MM must be between 00 and 59"); return; }
    if (MM > 0 && MM < 10) { MM = "0" + MM.toString(); }
    if (MM == 0) {MM = "00"; }
    if (MM > 9) { MM = MM.toString(); }
    v = HH + ":" + MM + " " + AMPM;
    putaway(v,nam,ndx);
}
function fx_date(nam,ndx)
{
    var x = document.getElementById(nam);
    var v = x.value;
    var slcnt = 0;
    var c,j;
    var moyr = false;
    var moda = false;
    var modayr = false;
    var mm = "";
    var dd = "";
    var yy = "";
    var dt = new Date();
    var yr = dt.getFullYear();
    var yr1 = yr - 10;
    var yr2 = yr + 5;
    var dom = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    v = fxOnly(v, "dlist");
    var slcnt = 0;
    for (j = 0; j < v.length; j++) 
    {
        c = v.charAt(j);
        if(c == "/" || c == "-")  {slcnt++;continue;}
        if(slcnt == 0){mm += c;continue;}
        if(slcnt == 1){dd += c; continue;}
        if(slcnt == 2){yy += c; continue;}
    }
    if (slcnt < 1 || slcnt > 2){ liter(ndx, "red"); openMsgBox("The date format is in error.<br />Date form is MM/DD/YYY or MM/YYYY or MM/DD"); return; }
    if (slcnt == 1)     // this is MM/YYYY or MM/DD
    {
        if      (dd.length == 4){moyr = true;yy = dd;dd = "1";}
        else                    
        {
            if      (dd.length == 1 || dd.length == 2)  
            {
                moda = true;yy = yr;
            }
            else 
            {
                if      (dd.length == 3 || dd.length > 4 || dd.length < 1)
                {
                     liter(ndx, "red"); openMsgBox("The date format is in error.<br />Date form is MM/YYYY or MM/DD"); return; 
                }
            }
        }
    }
    else                // this must be MM/DD/YYYY
    { 
        if (yy.length != 4) { liter(ndx, "red"); openMsgBox("Year must have 4 digits.<br />Date form is MM/DD/YYYY"); return; }
        modayr = true;
    }
    
    dd = (+dd);
    mm = (+mm);
    yy = (+yy);
    // is this a leap year ?
    var ly = yy % 4;
    if (ly == 0) {dom[2] = 29; }   
    if (mm < 1 || mm > 12) { liter(ndx, "red"); openMsgBox("Valid Months are 1 thru 12<br />Date form is MM/DD/YYYY"); return;}
    var dm = dom[mm];
    if (dd < 1 || dd > dm){liter(ndx, "red"); openMsgBox("The month entered has only " + dm + " days.<br />Date form is MM/DD/YYYY"); return;}
    if (yy < yr1 || yy > yr2) {openMsgBox("Only years between 10 years ago and 5 years hence are being accepted.<br />Date form is MM/DD/YYYY"); return; }
    v = mm.toString() + "/" + dd.toString() + "/" + yy.toString();
    liter(ndx,"green");
    val_bag.put(nam,v);
    if (modayr) {x.value = mm.toString() + "/" + dd.toString() + "/" + yy.toString();return;}
    if (moyr)   {x.value = mm.toString() + "/" + yy.toString();return;}
    if (moda)   {x.value = mm.toString() + "/" + dd.toString();return;}
}
function fx_loginame(nam,ndx)
{
    var x = document.getElementById(nam);
    var y = x.value;
    y = y.toLowerCase();
    y = fxOnly(y,"alist");
    var typea = "assoc_login_name";
    var typeo = "owner_login_name";
    // check if this login_name exists for this type
    var bagx = new bag();
    // check type
    if (detail_type == "owner"){bagx.put("type",typeo);}
    else {bagx.put("type",typea);}
    bagx.put("value",y);
    bagx.put("pm_id","empty");
    op = "_checker";
    maxv = 1;
    v[1] = bagx.makeOut("true");
    //putinwin(v[1]);
    doGet();
    if (response == "OK")
    {
        x.value = v;putaway(y,nam,ndx);
    }
    else
    {
        liter(ndx,"red");
        openMsgBox("The Login Name currently is being used. Please choose a different one.");
    }
}
function fx_plain(nam,ndx)
{
    var x = document.getElementById(nam);              
    var v = x.value;
    //v = fxOnly(v,"plist");
    putaway(v,nam,ndx);
}
function fx_numonly(nam,ndx)
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v,"nums");
    putaway(v,nam,ndx);
}
function fx_9plus(nam,ndx)
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v, "9plus");
    var dcnt = 0;
    var j = 0;
    for (j = 0; j < v.length; j++) { if (v.charAt(j) == ".") { dcnt++; } }
    if (dcnt > 1) { openMsgBox("The number can have only 1 or none decimal point."); liter(ndx, "red"); return; }
    putaway(v, nam, ndx);
}
function fx_9digits(nam, ndx) 
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v, "nums");
    if (v.length != 9) { openMsgBox("Transfer Number must be 9 digits"); liter(ndx, "red"); return; }
    putaway(v, nam, ndx);
}
function fx_taxid(nam, ndx) {
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v, "tax");
    if (v.length == 10) {if(v.charAt(2) == "-"){putaway(v, nam, ndx);return;} }
    if (v.length == 11) { if (v.charAt(3) == "-" && v.charAt(6) == "-") { putaway(v, nam, ndx); return; } }
    openMsgBox("Tax Id Number must be either:<br />XXX-XX-XXXX for SSN or<br />XX-XXXXXXX for EIN."); 
    liter(ndx, "red"); 
    return;
}
function fx_dec2(nam,ndx)
{        
    var x = document.getElementById(nam);
    var v = x.value;
    var a = v.lastIndexOf(".");
    if (a < 0){v += ".00";}
    else {v += "00";}
    v = fxOnly(v,"numsdot");
    a = v.lastIndexOf(".");
    var b = v.substr(0,a);
    b = fxOnly(b,"nums");
    var f = v.substr(a+1,2);
    v = b + "." + f;
    putaway(v,nam,ndx);
}
function fx_phone(nam,ndx)
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v,"nums"); 
    if(v.length == 10){var vv = v.substr(0,3) + "-" + v.substr(3,3) + "-" + v.substr(6,4); putaway(vv,nam,ndx);return;} 
    liter(ndx,"red");
    openMsgBox("Phone number must be 10 digits");
}
function fx_zip(nam,ndx)
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v,"nums");
    var L = v.length;
    if (L == 5){x.value = v;putaway(v,nam,ndx);return;}
    else if(L == 9){var vv = v.substr(0,5)+"-" + v.substr(5,4);putaway(vv,nam,ndx);return;} 
    liter(ndx,"red");
    openMsgBox("Zip Code can be only 5 or 9 digits");
}
function fx_texarea(nam,ndx)
{
    var x = document.getElementById(nam);
    var v = x.value;
    var j = 0;
    var t = "";
    var p = "";
    var c = "";
    for (j = 0; j < v.length; j++) 
    {
        p = v.charAt(j);
        t = v.charCodeAt(j);
        if (t == 10) { p = "<br />"; }
        if (t == 39) { p = "`";}
        c += p; 
    }
    v = c;
    v = fxOnly(v, "hlist");
    putaway(v, nam, ndx);
}
function fx_yandn(nam,ndx)
{   
    var x = document.getElementById(nam);             
    var idx = x.selectedIndex;
    if (idx == 0)
    {
        if(fx_req(ndx))
        {
            liter(ndx,"red");
            openMsgBox("A selection is required");
        }
        return;
    }
    var v = x.options[idx].value;
    val_bag.put(nam,v);
    liter(ndx,"green");       
}
function fx_option(nam,ndx)
{   
    var x = document.getElementById(nam);                              
    var idx = x.selectedIndex;
    if (idx == 0)
    {
        if(fx_req(ndx))
        {
            liter(ndx,"red");
            openMsgBox("A selection is required");
        }
        return;
    }
    var v = x.options[idx].value;
    val_bag.put(nam,v);
    liter(ndx,"green");
}
function fx_combo1(nam, ndx) 
{
    var x = document.getElementById(nam);
    var v = x.value;
    v = fxOnly(v, "9plus");
    var dcnt = 0;
    var j = 0;
    for (j = 0; j < v.length; j++) { if (v.charAt(j) == ".") { dcnt++; } }
    if (dcnt > 1) { openMsgBox("The number can have only 1 or none decimal point."); liter(ndx, "red"); return; }
    if (v.length > 10) { openMsgBox("The number can have only 9 digits with decimal or 10 without."); liter(ndx, "red"); return; }
    val_bag.put(nam, v);
    fx_combo_check(ndx);
}
function fx_combo2(nam, ndx) 
{
    var x = document.getElementById(nam);
    var idx = x.selectedIndex;
    if (idx == 0) {if (fx_req(ndx - 1)) {liter(ndx - 1, "red");openMsgBox("A selection is required");}return;}
    var xval = x.options[idx].value;
    //alert(" nam=" + nam + "\n ndx=" + ndx + "\n xval=" + xval + "\n");
    val_bag.put(nam, xval);
    fx_combo_check(ndx - 1);
}
function fx_combo_check(ndx) 
{
    var nam1 = nam_list[ndx];
    var nam2 = nam_list[ndx + 1];
    var v1 = val_bag.get(nam1);
    var v2 = val_bag.get(nam2);
    if (v1 != "" && v2 != "") { liter(ndx, "green"); }
}
function fx_check(nam, ndx) 
{
    var x = document.getElementById(nam);                              
    if ( ! x.checked){val_bag.put(nam,"false");}
    if (x.checked) {val_bag.put(nam,"true");}
}
function fx_radio(nam, ndx) {
    alert(" nam=" + nam + "\n ndx=" + ndx);
    var x = document.getElementsByName(nam);
    var v = "";
    ndx = x[0].ndx;
    ndx = ndx * 1;
    for (var k = 0; k < x.length; k++){if (x[k].checked){v = x[k].value;break;}}
    if (v == ""){liter(ndx, "red");openMsgBox("A selection is required");return;}
    putaway(v, nam, ndx);
}
function fx_json(nam, ndx) {
    var x = document.getElementById(nam);
    var q = x.value;
    if (q == "none" || q == "") { putaway(q, nam, ndx); return; }
    var mustbe = ":";
    var mustnot = ";";
    var t = "";
    var j = 0;
    if (q.charAt(0) != "{" || q.charAt(q.length - 1) != "}") { openMsgBox("Braces must be at beginning and end of json"); liter(ndx, "red"); return; }
    q = fxOnly(q, "jlist");
    for (j = 1; j < q.length - 2; j++) {
        if (j == q.length - 2) {
            if (q.charAt(j) != ";") { openMsgBox("The json doesn't parse properly"); liter(ndx, "red"); return; }
            else {
                if (mustbe != ";") { openMsgBox("The json doesn't parse properly"); liter(ndx, "red"); return; }
                else { putaway(q, nam, ndx); return; } 
            }
        }
        if (q.charAt(j) == mustbe) { t = mustbe; mustbe = mustnot; mustnot = t; continue; }
        if (q.charAt(j) == mustnot) { openMsgBox("The json doesn't parse properly"); liter(ndx, "red"); return; }
    }
}

function liter(idin,color)
{
    var z = "lite" + idin;
    lite_list[idin] = color;
    var x = document.getElementById(z);
    x.src = "../images/" + color + "lite.gif";
    return;
}
function get_fx_lite(ndx) {
    var ty = type_list[ndx];
    if (ty == "check" || ty =="combo2" || ty == "readonly") { return "white"; }
    var xn = "lite" + ndx;    
    var x = document.getElementById(xn);
    if (x.alt == "REQUIRED"){return "black";}
    return "white";
}
function fx_req(ndx)
{
    var xn = "lite" + ndx;    
    var x = document.getElementById(xn);
    if (x.alt == "REQUIRED"){return true;}
    return false;
}
function formXload()
{
    var j,x,y,z;
    var typ, val, nam;
    var L = nam_list.length;
    var fxid = "";
    lite_list.length = 0;
    j = 0;
    for(j = 0; j < L; j++) {
        typ = type_list[j];
        nam = nam_list[j]; 
        val = val_bag.get(nam);
        val = trim(val);
        if (typ == "radio") 
        {
            var rads = document.getElementsByName(nam);
            //alert("rads.length=" + rads.length);
            for (var k = 0; k < rads.length; k++) { if (val == rads[k].value) { rads[k].checked = true;}} 
        }
        else { x = document.getElementById(nam); }
        
        //alert(" val=" + val + "\n nam=" + nam + "\n typ=" + typ);
        if(typ == "check" || typ == "combo2"){lite_list[j] = "white";}
        else { lite_list[j] = get_fx_lite(j); liter(j, lite_list[j]); }
        
        switch (typ) {
            case "readonly":
                // set at server
                break;
            case "radio":
                // already set above
                break;
            case "check":
                if(val == "" || val == "false"){x.checked = false;}
                if (val == "true"){x.checked = true;}
                break;
            case "option":
            case "combo2":
                y = x.options;
                var vv = "";
                if (val == "") { val = "0"; y[0].selected = true; x.selectedIndex = 0; }
                else 
                {
                    for (z = 1; z < y.length; z++)
                    {
                        vv = trim(y[z].value);
                        if (vv == val) { y[z].selected = true; x.selectedIndex = z; break; }
                    }
                }
                break;
            case "yandn":
                y = x.options;
                if(val == "" || val == "0"){y[0].selected = "selected";}
                if(val == "false"){y[2].selected = "selected";}
                if(val == "true") {y[1].selected = "selected";}
                break;
            default:
                if (nam == "date_grad"){val = moyr(val);}
                x.value = val;
                break;
        }
    }
}
function moyr(dd)
{
    var my, j, k;
    j = dd.indexOf("/");
    my = dd.substr(0, j + 1);
    k = dd.indexOf("/", j + 1);
    my += dd.substr(k + 1);
    return my;
}
function checkaccess()
{
    var x = document.getElementById("access_code");
    var access_code = x.value;
    val_bag.put("access_code",access_code);
    url = "_login.aspx";
    doGet();
}
function gotofunc(idin)
{
    switch(idin)
    {
        case "func":
            val_bag.put("null","null");
            url = "_functions.aspx";
            break;
        case "grad":
            val_bag.put("null","null");
            url = "_gradlist.aspx";
            break;
        case "event":
            val_bag.put("null","null");
            url = "_eventedit.aspx";
            break;
    }
    doGet();
}
function ln_getevents(idin)
{
    val_bag.put("sort",idin);
    url = "_getevents.aspx";
    doGet();
}
function eventselect(idin)
{
    val_bag.put("event_id",idin);
    url = "_eventselect.aspx";
    doGet();
}
function getpdf(idin)
{
    var z = new bag();
    if (idin == "event"){
        var event_id = val_bag.get("event_id");
        z.put("recid",event_id);
        z.put("table","Events");
        }
    if (idin == "grad"){
        var grad_id = val_bag.get("grad_id");
        z.put("recid",grad_id);
        z.put("table","Graduates");
        }
    z.put("dir","pdf");
    z.put("type","pdf");
    var zout = z.makeOut('true');
    var uploadwin = window.open("upload.aspx?arg=" + zout,"uploadwin","width=580,height=230");
}
function pdfbutton(idin)
{
    var x = document.getElementById("uploadpdf");
    x.style.visibility = "hidden";
    if(idin == "on"){x.style.visibility = "visible";}
}
function if_cr(e) 
{
    var keynum;
    if (window.event) { keynum = e.keyCode; }       // check if IE
    else { if (e.which) { keynum = e.which; } }     // check if Netscape/Firefox/Opera
    if (keynum == 13) { checkaccess(); }
    return false;
}
function getgrads(idin)
{
    val_bag.put("sort",idin);
    url = "_getgrads.aspx";
    doGet();
}
function gradsel(idin)
{
    val_bag.put("grad_id",idin);
    url = "_gradsel.aspx";
    doGet();
}
function verstate() {
    var x = document.getElementById("state");
    var state = x.value;
    state = state.toUpperCase();
    state = state.substr(0, 2);
    x.value = state;
    alert("state=" + state);
    formXver('fx3');
}

function showEvent(ndx){alert("Index of Event List is " + ndx);}

function DJCprevButt(){
    DJCmo = +DJCmo;
    DJCyr = +DJCyr;
    if(DJCmo == 1){DJCmo = 12; DJCyr = DJCyr - 1;}
    else{DJCmo  = DJCmo - 1;}
    DJCday1 = DJCmo + "/1/" + DJCyr;
    val_bag.put('rdate',DJCday1);
    url = "DJCgetCal.aspx";
    //alert(val_bag.get("rdate"));
    doGet();
}
function DJCnextButt(){
    DJCmo = +DJCmo;
    DJCyr = +DJCyr;
    if(DJCmo == 12){DJCmo = 1; DJCyr = DJCyr + 1;}
    else{DJCmo = DJCmo + 1;}
    //alert("Month After Add="+DJCmo);
    DJCday1 = DJCmo + "/1/" + DJCyr;
    //alert("DJCday1="+DJCday1);
    val_bag.put('rdate',DJCday1);
    url = "DJCgetCal.aspx";
    //alert(val_bag.get("rdate"));
    doGet();
}
function DJCon(ndx){
    DJCstatus[ndx] = "wait";
    setTimeout('DJCwait('+ndx+')',500);
}
function DJCwait(ndx){
    if(DJCstatus[ndx] == 'show'){return;}
    if(DJCstatus[ndx] == 'wait'){DJCshow(ndx);return;}
}
function DJCshow(ndx){
    var x;
    var x = document.getElementById('DJCboxCont');
    x.innerHTML = DJCarr[ndx] + "<br /><br /><a href=\"http://www.lightnews.org/Events\" >More details and other Events.</a><br /><br />";
    x = document.getElementById('DJCboxOut');
    x.style.visibility = 'visible';
    DJCstatus[ndx] = "show";
    DJConNow = ndx;
}
function DJCoff(ndx){
    switch(DJCstatus[ndx]){
        case 'wait':
            DJCstatus[ndx] = 'off';
            break;
        case 'show':
            DJCstatus[ndx] = 'off';
            if(ndx == DJConNow){setTimeout("DJCisBox('" + ndx + "')",1000);}
            break;
    }
    return;
}
function DJCisBox(ndx){
    if(DJCboxStatus == 'on'){return;}
    if(ndx == DJConNow){DJConNow = 0;DJCboxOff2();}
}
function DJCboxOn(ndx)
{
    DJCboxStatus = 'on';
}
function DJCboxOff(){
    setTimeout('DJCboxOff2();',1000);
}
function DJCboxOff2(){
    DJCboxStatus = 'off';
    var x = document.getElementById('DJCboxOut');
    x.style.visibility = 'hidden';
}

var DJCarr = new Array();
var DJCstatus = new Array();
var DJConNow = 0;
var todayIs = new Date();
var DJCmo = todayIs.getMonth() + 1;
var DJCyr = todayIs.getFullYear();
var DJCday1 = DJCmo + "/1/" + DJCyr;
var DJCboxStatus = 'off';
var ndx = 0;
val_bag.put("rdate",DJCday1);
url = "DJCgetCal.aspx";


    
