﻿//functions to support Ajax programming
var popupID = "popup";
var defaultPopupID = "popup";

function CleanParams(params) {
    if (!params || params.length == 0) return "";
    if (params.indexOf("?") >= 0) params = params.replace("?", "");
    return "&" + params;
}

function ClearPopup(caller) {
    var pID = popupID;

    if (caller) {
        var prnt = caller.parentNode;
        while (prnt) {
            if (prnt.className == "popup") {
                pID = prnt.id;
                break;
            } else {
                prnt = prnt.parentNode;
            }
        }
    }
    
    var p = document.getElementById(pID);
    p.style.visibility = "hidden";
    p.innerHTML = "";
}

//function DoFormPostback(paramName, paramValue) {
//    if (paramName && paramValue) {
//        var el = document.createElement("input");
//        el.type = "hidden";
//        el.name = paramName;
//        el.value = paramValue;
//        document.forms[0].appendChild(el);
//    }

//    document.forms[0].submit();
//}

function GetDivFormValues(divID) {
    var vals = "";
    var inputs = document.getElementById(divID).getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        if (inputs[i].id) {
            var v = "";
            var t = inputs[i].type.toLowerCase();

            if (t == "checkbox") {
                if (inputs[i].checked) { v = "1" } else { v = "0" }
            } else if (t == "radio") {
                if (inputs[i].checked) { v = inputs[i].value } else { continue }
            } else {
                v = encodeURIComponent(inputs[i].value)
            }

            vals += (inputs[i].name + "=" + v + "&");
        }
    }

    var tas = document.getElementById(divID).getElementsByTagName('textarea');
    for (var i = 0; i < tas.length;  i++) {
        if (tas[i].id) {
            vals += (tas[i].name + "=" + encodeURIComponent(tas[i].value) + "&");
        }
    }

    var selects = document.getElementById(divID).getElementsByTagName('select');
    for (var i = 0; i < selects.length;  i++) {
        vals += (selects[i].name + "=" + selects[i].value + "&");
    }

    return (vals + "postAjax=1");
}

function GetHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        return new ActiveXObject('Microsoft.XMLHttp');
    } else {
        alert('This browser is not supported.');
        return null;
    }
}

//function PopulateDiv(componentName, params, divID) {
//    var url = "AjaxContent.aspx?component=" + componentName;
//    if (params.length > 0) url += ("&" + params);
//    var xmlhttp = GetHttpRequestObject();
//    xmlhttp.open("POST", url, true);

//    xmlhttp.onreadystatechange = function() {
//        if (xmlhttp.readyState == 4) {

//            //alert(xmlhttp.responseText);

//            var rt = xmlhttp.responseText;
//            if (rt.length > 0) RenderDiv(xmlhttp.responseText, divID);
//        }
//    }

//    xmlhttp.send(null);
//}

function PopulatePopup(componentName, params, icon, anchor, top, left, popupDivID) {
    var url = "AjaxContent.aspx?component=" + componentName + CleanParams(params);
    var xmlhttp = GetHttpRequestObject();
    xmlhttp.open("POST", url, true);

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {

            var redirect = xmlhttp.getResponseHeader("AjaxRedirect");
            if (redirect && redirect.length > 0) {
                window.location = redirect;
                return;
            }

            var rt = xmlhttp.responseText;
            if (rt.length > 0) {
                var killed = xmlhttp.getResponseHeader("AjaxKill");
                if (killed == "1") return;

                var pID = popupID;
                if (popupDivID && popupDivID.length > 0) pID = popupDivID;
                RenderDiv(rt, pID);

                if (icon) {
                    var iconid;
                    if (typeof (icon) == "string") iconid = icon; else iconid = icon.id;
                    PositionPopup(pID, iconid, anchor, top, left);
                }

                SetFocus(xmlhttp.getResponseHeader("AjaxSetFocus"));
            }
        }
    }

    xmlhttp.send(null);
}

//anchor: 1 = top left, 2 = top right, 3 = bottom right, 4 = bottom left; 5 = top middle; 6 = right middle; 7 = bottom middle; 8 = left middle; 9 = center
function PositionPopup(pID, iconID, anchor, absTop, absLeft) {
    var popup = document.getElementById(pID);
    var icon = document.getElementById(iconID);

    var obj = icon;
    var posX = obj.offsetLeft;
    var posY = obj.offsetTop;

    while (obj.offsetParent) {
        if (obj == document.getElementsByTagName('body')[0]) {
            break;
        }
        else {
            posX = posX + obj.offsetParent.offsetLeft;
            posY = posY + obj.offsetParent.offsetTop;
            obj = obj.offsetParent;
        }
    }

    //default anchor = 1
    var left = posX + 8;
    var top = posY + 8;

    if (anchor == 2) {
        left = (posX - popup.offsetWidth) + 8;
    }
    else if (anchor == 3) {
        left = (posX - popup.offsetWidth) + 8;
        top = (posY - popup.offsetHeight) + 8;
    }
    else if (anchor == 4) {
        top = (posY - popup.offsetHeight) + 8;
    }
    else if (anchor == 5) {
        left = posX - (popup.offsetWidth / 2);
    }
    else if (anchor == 6) {
        left = (posX - popup.offsetWidth) + 8;
        top = posY - (popup.offsetHeight / 2);
    }
    else if (anchor == 7) {
        left = posX - (popup.offsetWidth / 2);
        top = (posY - popup.offsetHeight) + 8;
    }
    else if (anchor == 8) {
        top = posY - (popup.offsetHeight / 2);
    }
    else if (anchor == 9) {
        left = posX - (popup.offsetWidth / 2);
        top = posY - (popup.offsetHeight / 2);
    }

    if (absTop && absTop > 0) top = absTop;
    if (absLeft && absLeft > 0) left = absLeft;

    //prevent box from dropping off top or left of browser window
    if (left < 10) left = 10;
    if (top < 10) top = 10;

    popup.style.left = left + "px";
    popup.style.top = top + "px";

    popup.style.visibility = "visible";
    popup.style.display = "block";
}

function PostForm() {
    document.forms[0].submit();
}

function PostPopup(componentName, params, caller) {
    var pID = popupID;

    if (caller) {
        var prnt = caller.parentNode;
        while (prnt) {
            if (prnt.className == "popup") {
                pID = prnt.id;
                break;
            } else {
                prnt = prnt.parentNode;
            }
        }
    }

    var formValues = GetDivFormValues(pID);
    var url = "AjaxContent.aspx?component=" + componentName + CleanParams(params);
    var xmlhttp = GetHttpRequestObject();
    xmlhttp.open("POST", url, true);

    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", formValues.length);
    xmlhttp.setRequestHeader("Connection", "close");

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            var redirect = xmlhttp.getResponseHeader("AjaxRedirect");
            if (redirect && redirect.length > 0) {
                window.location = redirect;
                return;
            }

            var callback = xmlhttp.getResponseHeader("AjaxCallback");
            if (callback && callback.length > 0) {
                eval(callback);
            }

            var code = xmlhttp.getResponseHeader("AjaxReturnCode");
            if (code && code == "1") {
                ClearPopup(caller);
            } else {
                var killed = xmlhttp.getResponseHeader("AjaxKill");
                if (killed == "1") return;
                RenderDiv(xmlhttp.responseText, pID);
                SetFocus(xmlhttp.getResponseHeader("AjaxSetFocus"));
            }
        }
    }

    xmlhttp.send(formValues);
}

function ReloadPage() {
    document.location.href = document.location.href;
}

function RenderDiv(content, divID) {
    var p = 0;
    var q = 0;
    var scr = "";

    p = content.indexOf("<!--script-->");
    if (p >= 0) {
        q = content.indexOf("<!--script-->", p + 1);
        if (q > p) {
            p += 13;
            scr = content.substr(p, q - p);
        }
    }

    p = content.indexOf("<!--content-->");
    if (p == -1) {
        p = 0
        q = content.length;
    } else {
        p += 14
        q = content.indexOf("<!--content-->", p);
        if (q == -1) return;
    }

    document.getElementById(divID).innerHTML = content.substr(p, q - p);

    if (scr.length > 0) eval(scr);
}

function SetDeleteButton(cbox, buttonID) {
    if (cbox.checked) {
        document.getElementById(buttonID).innerHTML = 'Delete';
    } else {
        document.getElementById(buttonID).innerHTML = 'Save';
    }
}

function SetFocus(focus) {
    if (focus && focus.length > 0) document.getElementById(focus).focus();
}

function SetPostbackValue(name, val) {
    var el = document.createElement("input");
    el.type = "hidden";
    el.name = name;
    el.value = val;
    document.forms[0].appendChild(el);
}


