/*
 * Created by Mawisoft Ltd.
 * (c) 2000-2008 by Mawisoft Ltd. www.mawisoft.com
 */

ie = document.all ? true:false;

var agt=navigator.userAgent.toLowerCase();

var dontHide = (navigator.appName == "Opera" ||
                (navigator.appName == "Netscape" && navigator.appVersion >= "5.0") ||
                (agt.indexOf("msie 7.0") >= 0)
        );

var cX;
var cY;
var mX, mY;
document.onmousedown = beginDrag;
document.onkeydown = checkEscape;
var selectedItem = false;
var req;
var field;
var reqHandler;
var inpelm;
var timerIsStarted = false;

function falsefunc() { return false; } // used to block cascading events

function updateText(url, textId) {
    field = document.getElementById(textId);
    getXMLDOM(url, updateTextOnload);
}

function hideShadow() {
    var shad = document.getElementById('popupshadow');
    if(shad) {
        shad.style.display = 'none';
    }
}

function hideShadow1() {
    timerIsStarted = false;
    var shad = document.getElementById('popupshadow');
    if(shad) {
        if(ie) {
            shad.style.pixelLeft = shad.style.pixelLeft - 1;
            shad.style.pixelTop = shad.style.pixelTop - 1;
        } else {
            shad.style.top = shad.style.top - 1;
            shad.style.left = shad.style.left - 1;
        }
    }
    setTimeout("hideShadow()", 50);
}

function updateTexts(url) {
    getXMLDOM(url, updateTextOnload);
}

function updateHtml(url, textId) {
    field = document.getElementById(textId);
    getXMLDOM(url, updateHtmlOnload);
}

function updateHtmlOnload() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            placeResponseResult(field);
         } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
         }
    }
}

function updateTextOnload() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            var nnn =  req.responseXML.getElementsByTagName("value");
            if(nnn.length == 1) {
                var node = nnn[0];
                field.value = node.getAttribute("value");
            } else {
                for(i = 0; i < nnn.length; i++) {
                    var node = nnn[i];
                    var fld = document.getElementById(node.getAttribute("id"));
                    if(fld) {
                        fld.value = node.getAttribute("value");
                    }
                }
            }
         } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
         }
    }
}

function checkEscape(ev) {
    if(!ie) {
        event = ev;
    }
    if(event.keyCode == 27) {
        hidePopup();
        return;
    }
    if(event.keyCode == 13 && event.ctrlKey) {
        var frm = getEventSource(event).form;
        if(frm) {
            frm.submit();
        }
    }
}

function highlightSubmit(frm) {
	for(i = 0; i < frm.elements.length; i++) {
		if(frm.elements[i].type == "submit") {
			frm.elements[i].style.color = "red";
			break;
		}
	}
}

function hidePopup() {
    showSelects();
    document.getElementById('popup').style.display='none';
    pclndr = document.getElementById('popupCalendar');
    if(pclndr) {
        pclndr.style.display='none';
    }
    var shad = document.getElementById('popupshadow');
    if(shad) {
        shad.style.display = 'none';
    }
}

function hideSelects() {
    if(dontHide) return;
    selects = document.getElementsByTagName("select");
    for(i = 0; i < selects.length; i++) {
        selects[i].style.visibility = "hidden";
    }
}

function showSelects() {
    selects = document.getElementsByTagName("select");
    for(i = 0; i < selects.length; i++) {
        selects[i].style.visibility = "visible";
    }
}

function getEventSource(event) {
	if(ie) {
        return event.srcElement;
    }
	else {
		return event.target;
    }
}

function getPos(el) {
    var r = {x : el.offsetLeft, y : el.offsetTop};
    if (el.offsetParent) {
        var tmp = getPos(el.offsetParent);
        r.x += tmp.x;
        r.y += tmp.y;
    }
    return r;
}

function getEventX(event) {
	if(ie)
		return event.x + document.body.scrollLeft;
	else
		return event.pageX;
}

function getEventY(event) {
	if(ie)
		return event.y + document.body.scrollTop;
	else
		return event.pageY;
}

function getXMLDOM(str, onload){
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = onload;
        req.open("GET", str, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        ie = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = onload;
            req.open("GET", str, true);
            req.send();
        }
    }
}

function stateChange() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            reqHandler();
         } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
         }
    }
}

function emptyFunc() {
}

function beginDrag(ev) {
    var rv = true;
    if(!ie) {
        event = ev;
    }
    ee = getEventSource(event);
    if (ee.id.indexOf("DRAG") != -1) {
        if(selectedItem) {
            if(ie) {
                cX = selectedItem.style.pixelLeft;
                cY = selectedItem.style.pixelTop;
            } else {
                cX = selectedItem.offsetLeft;
                cY = selectedItem.offsetTop;
            }
            mX = getEventX(event);
            mY = getEventY(event);
            document.onmouseup = clearItem;
            if(ee.id.indexOf("DRAG_MOVE") != -1) {
                document.onmousemove = moveDrag;
            }
            if(ee.id.indexOf("DRAG_RESIZE") != -1) {
                document.onmousemove = moveResize;
            }
            var shad = document.getElementById("popupshadow");
            if(shad) {
                var shadc = document.getElementById("popupshadowcontent");
                shadc.width = selectedItem.offsetWidth;
                shadc.style.height = selectedItem.offsetHeight;
                if(ie) {
                    shad.style.pixelLeft = selectedItem.style.pixelLeft;
                    shad.style.pixelTop = selectedItem.style.pixelTop;
                } else {
                    shad.style.top = selectedItem.style.top;
                    shad.style.left = selectedItem.style.left;
                }
                shad.style.display = 'inline';
            }
            rv = false;
        }
    }
    if(popupid) {
      while(ee) {
        if(ee.id == 'popupCalendar') {
            return rv;
        }
        ee = ee.parentNode;
      }
      var pc = document.getElementById('popupCalendar');
      if(pc) {
        pc.style.display='none';
      }
    }
    return rv;
}

function moveDrag(ev) {
    if(!ie) {
        event = ev;
    }
    if (selectedItem) {
		Left = cX + (getEventX(event) - mX);
		Top = cY + (getEventY(event) - mY);
        var shad = document.getElementById("popupshadow");
        if(ie) {
            selectedItem.style.pixelLeft = Left;
            selectedItem.style.pixelTop = Top;
            shad.style.pixelLeft = Left + 2;
            shad.style.pixelTop = Top + 2;
        } else {
            selectedItem.style.top = Top + "px";
            selectedItem.style.left = Left + "px";
            shad.style.top = (Top + 2) + "px";
            shad.style.left = (Left + 2) + "px";
        }
        return false;
	}
}
function moveResize() {
	if (selectedItem) {
		delta = getEventX(event) - mX;
        i = selectedItem.offsetWidth;
        selectedItem.style.width = i + delta;
        mX = getEventX(event);
		return false
	}
}

var popupid;

function showPopup(event, divid, url) {
    popupid = document.getElementById(divid);
    popupid.style.display = "none";
	document.body.style.cursor = "wait";
	popupid.style.left = getEventX(event);
	popupid.style.top = getEventY(event);
    reqHandler = showPopupOnload;
    getXMLDOM(url, stateChange);
}

function centerPopup(event, divid, url) {
    popupid = document.getElementById(divid);
    popupid.style.display = "none";
	document.body.style.cursor = "wait";
    reqHandler = centerPopupOnload;
    if(popupid.style.left == 0) {
        popupid.style.left = document.body.offsetWidth / 2 - 50 + document.body.scrollLeft;
        if(ie) {
            popy = document.body.offsetHeight / 2 - 50 + document.body.scrollTop;
        } else {
            popy = document.body.clientHeight / 2 - 50 + document.body.scrollTop;
        }
    }
    getXMLDOM(url, stateChange);
}

function placeResponseResult(elm) {
    var nnn =  req.responseXML.getElementsByTagName("html");
    if(nnn.length > 0) {
        var node = nnn[0];
        var nodes = node.childNodes;
        for(i = 0; i < nodes.length; i++){
            node = nodes.item(i);
            if(node.nodeName == "#cdata-section") {
                elm.innerHTML = node.data;
            }
        }
	}
}

function centerPopupOnload() {
    hideSelects();
    placeResponseResult(popupid);
    document.body.style.cursor = "auto";
    popupid.style.visibility = "hidden";
    popupid.style.display = "inline";
    popupid.style.left = document.body.offsetWidth / 2 - popupid.offsetWidth / 2 + document.body.scrollLeft;
    if(ie) {
        popy = document.body.offsetHeight / 2 - popupid.offsetHeight / 2 + document.body.scrollTop;
    } else {
        popy = document.body.clientHeight / 2 - popupid.offsetHeight / 2 + document.body.scrollTop;
    }
    if(popy < 0) {
        popy = 0;
    }
    popupid.style.top = popy;
    popupid.style.visibility = "visible";
    selectFirstInput(popupid);
}

function showPopupOnload() {
    hideSelects();
    placeResponseResult(popupid)
    document.body.style.cursor = "auto";
    popupid.style.display = "inline";
    selectFirstInput(popupid);
}

function selectFirstInput(pp) {
    var frms = pp.getElementsByTagName("form");
    if(frms) {
        if(!frms[0]) {
            return;
        }
        var c = frms[0].elements;
        if(c) {
            for(i = 0; i < c.length; i++) {
                if(c[i].tagName == "TEXTAREA") {
                    c[i].focus();
                    return;
                }
                if(c[i].tagName == "INPUT" && c[i].type == "text") {
                    c[i].focus();
                    return;
                }
            }
        }
    }
}

function clearItem() {
    selectedItem = false
    document.onmousedown = beginDrag;
    var shad = document.getElementById('popupshadow');
    if(shad) {
        hideShadow1();
//        setTimeout("hideShadow1()", 200);
    }
}

function selectItem(itemid) {
    selectedItem = document.getElementById(itemid);
}

function selectDate(inp, dt) {
    document.getElementById(inp).value=dt;
    document.getElementById('popupCalendar').style.display='none';
}

function showCalendar(inp, url, att) {
    popupid = document.getElementById('popupCalendar');
    inpelm = document.getElementById(inp);
	document.body.style.cursor = "wait";
    reqHandler = showCalendarOnload;
    getXMLDOM(url, stateChange);
}

function showCalendarOnload() {
    placeResponseResult(popupid)
    var ps = getPos(inpelm);
    if(popupid.style.display == "none") {
        popupid.style.display = "inline";
        popupid.style.left = ps.x;
        var y = ps.y - popupid.offsetHeight + 1;
        if(y >= 0) {
            popupid.style.top = y;
        } else {
            popupid.style.top = ps.y + inpelm.offsetHeight-1;
        }
    }
    document.body.style.cursor = "auto";
}

function formValues(frm) {
    var returnString = "";
    var formElements = frm.elements;
    for ( var i = 0; i < formElements.length; i++) {
        var elm = formElements[i];
        if(elm.name == "" || (elm.type == "checkbox" && !elm.checked)) {
            continue;
        }
        if(elm.type == "select-one") {
            returnString = returnString + "&" + escape(elm.name) + "=" + escape(elm.options[elm.selectedIndex].value);
        } else {
            if(elm.type != "radio") {
                returnString = returnString + "&" + escape(elm.name) + "=" + encodeURIComponent(elm.value);
            }
        }
    }
    return returnString.substring(1);
}

function loadUrl(frm, divid) {
    var url = frm.action + "?" + formValues(frm);
    updateHtml(url, divid);
    return false;
}

function loadPage(frmId, divid, pg) {
    var frm = document.getElementById(frmId);
    var url = frm.action + "?" + formValues(frm) + "&page=" + pg;
    updateHtml(url, divid);
    return false;
}