﻿//functions to support Ajax programming

function ClearPopup() {
    var p = document.getElementById("popup");
    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 = "GetContent.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) {
    var url = "GetContent.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(rt, "popup");

                if (icon) {
                    var iconid;
                    if (typeof (icon) == "string") iconid = icon; else iconid = icon.id;
                    PositionPopup("popup", iconid, anchor, top);
                }

                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;
function PositionPopup(popupID, iconID, anchor, absTop) {
    var popup = document.getElementById(popupID);
    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);
    }

    if (absTop) top = absTop;

    //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 PostPopup(componentName, params) {
    var formValues = GetDivFormValues("popup");
    var url = "PostContent.aspx?component=" + componentName;
    if (params && params.length > 0) url += ("&" + 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();
            } else {
                RenderDiv(xmlhttp.responseText, "popup");
                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();
}
