// Determine browser and version.
function Browser() 
{
    var ua, s, i;

    this.isIE    = false;
    this.isNS    = false;
    this.version = null;

    ua = navigator.userAgent;

    s = "MSIE";
    if ((i = ua.indexOf(s)) >= 0) 
    {
        this.isIE = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
    }

    s = "Netscape6/";
    if ((i = ua.indexOf(s)) >= 0) 
    {
        this.isNS = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
    }

    // Treat any other "Gecko" browser as NS 6.1.
    s = "Gecko";
    if ((i = ua.indexOf(s)) >= 0) 
    {
        this.isNS = true;
        this.version = 6.1;
        return;
    }
}

// To make an object draggable, put a onmousedown="DragDrop_dragStart(event)" attribute for that object.
// To drag an object using another object, put onmousedown="dragStart(event, 'objectid_tomove')" on the object that the user
// clicks on to move the second object.
// To call another function when the user releases the object, use: ...
var Global_Browser = new Browser();
var Global_dragObj = new Object();
Global_dragObj.zIndex = 0;

function DragDrop_dragStart(event, id, callback, movecallback) 
{
    if (event.button != 1) return;
    
    var el;
    var x, y;

    // If an element id was given, find it. Otherwise use the element being
    // clicked on.
    if (id)
        Global_dragObj.elNode = document.getElementById(id);
    else 
    {
        if (Global_Browser.isIE)
            Global_dragObj.elNode = window.event.srcElement;
            
        if (Global_Browser.isNS)
            Global_dragObj.elNode = event.target;

        // If this is a text node, use its parent element.
        if (Global_dragObj.elNode.nodeType == 3)
            Global_dragObj.elNode = dragObj.elNode.parentNode;
    }
    
    // Save the callback functions
    Global_dragObj.callback = callback;
    Global_dragObj.movecallback = movecallback;
    
    // Save the z-index
    Global_dragObj.zIndex = Global_dragObj.elNode.style.zIndex;
    Global_dragObj.elNode.style.zIndex = 1000;
    
    // Get cursor position with respect to the page.
    if (Global_Browser.isIE) 
    {
        x = window.event.clientX + document.documentElement.scrollLeft
          + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop
          + document.body.scrollTop;
    }
    if (Global_Browser.isNS) 
    {
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }

    // Save starting positions of cursor and element.
    Global_dragObj.cursorStartX = x;
    Global_dragObj.cursorStartY = y;
    Global_dragObj.elStartLeft  = parseInt(Global_dragObj.elNode.style.left, 10);
    Global_dragObj.elStartTop   = parseInt(Global_dragObj.elNode.style.top,  10);

    if (isNaN(Global_dragObj.elStartLeft)) Global_dragObj.elStartLeft = 0;
    if (isNaN(Global_dragObj.elStartTop))  Global_dragObj.elStartTop  = 0;

    // Update element's z-index.
    //Global_dragObj.elNode.style.zIndex = ++Global_dragObj.zIndex;

    // Capture mousemove and mouseup events on the page.
    if (Global_Browser.isIE) 
    {
        document.attachEvent("onmousemove", DragDrop_dragGo);
        document.attachEvent("onmouseup",   DragDrop_dragStop);
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    if (Global_Browser.isNS) 
    {
        document.addEventListener("mousemove", DragDrop_dragGo,   true);
        document.addEventListener("mouseup",   DragDrop_dragStop, true);
        event.preventDefault();
    }
}

function DragDrop_dragGo(event) 
{
    var x, y;

    // Get cursor position with respect to the page.
    if (Global_Browser.isIE) 
    {
        x = window.event.clientX + document.documentElement.scrollLeft
          + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop
          + document.body.scrollTop;
    }
    
    if (Global_Browser.isNS) 
    {
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }

    // Move drag element by the same amount the cursor has moved.
    Global_dragObj.elNode.style.left = (Global_dragObj.elStartLeft + x - Global_dragObj.cursorStartX) + "px";
    Global_dragObj.elNode.style.top  = (Global_dragObj.elStartTop  + y - Global_dragObj.cursorStartY) + "px";

    if (Global_Browser.isIE) 
    {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    
    if (Global_Browser.isNS)
        event.preventDefault();
    
    // Call callback function
    if (Global_dragObj.movecallback)
        Global_dragObj.movecallback(x - Global_dragObj.cursorStartX, y - Global_dragObj.cursorStartY, Global_dragObj.elStartLeft, Global_dragObj.elStartTop, Global_dragObj.elNode);
}

function DragDrop_dragStop(event) 
{
    // Get cursor position of upper-left hand corner.
    var x, y;

    // Get cursor position with respect to the page.
    if (Global_Browser.isIE) 
    {
        x = window.event.clientX + document.documentElement.scrollLeft
          + document.body.scrollLeft;
        y = window.event.clientY + document.documentElement.scrollTop
          + document.body.scrollTop;
    }
    
    if (Global_Browser.isNS) 
    {
        x = event.clientX + window.scrollX;
        y = event.clientY + window.scrollY;
    }
    
    // Stop capturing mousemove and mouseup events.
    if (Global_Browser.isIE) 
    {
        document.detachEvent("onmousemove", DragDrop_dragGo);
        document.detachEvent("onmouseup",   DragDrop_dragStop);
    }
    
    if (Global_Browser.isNS) 
    {
        document.removeEventListener("mousemove", DragDrop_dragGo,   true);
        document.removeEventListener("mouseup",   DragDrop_dragStop, true);
    }
    
    if (Global_dragObj.callback)
        Global_dragObj.callback(x - Global_dragObj.cursorStartX, y - Global_dragObj.cursorStartY, Global_dragObj.elStartLeft, Global_dragObj.elStartTop, Global_dragObj.elNode);
        
    // Set the z-index
    Global_dragObj.elNode.style.zIndex = Global_dragObj.zIndex;
}

function SubmitForm(id, cmd, param, hasupload, view, obj)
{
    var frm = document.getElementById(id);

    // Setup form
    if (hasupload == true)
    {
        frm.enctype = "multipart/form-data";
        frm.encoding = "multipart/form-data";
    }
    // frm.name = frm.id;
    frm.method = "post";

    var blockid = document.createElement("input");
    blockid.type = "hidden";
    blockid.id = "txt_" + id + "_blockid";
    blockid.name = "blockid";
    blockid.value = id;
    frm.appendChild(blockid);

    var command = document.createElement("input");
    command.type = "hidden";
    command.id = "txt_" + id + "_command";
    command.name = "command";
    command.value = cmd;
    frm.appendChild(command);

    var params = document.createElement("input");
    params.type = "hidden";
    params.id = "txt_" + id + "_params";
    params.name = "params";
    params.value = param == null ? "" : param;
    frm.appendChild(params);

    if (hasupload == true)
    {
        var prev_view = document.createElement("input");
        prev_view.type = "hidden";
        prev_view.id = "txt_" + id + "_prev_view";
        prev_view.name = "prev_view";
        prev_view.value = view == null ? "" : view;
        frm.appendChild(prev_view);

        var obj_backup = document.createElement("input");
        obj_backup.type = "hidden";
        obj_backup.id = "txt_" + id + "_obj_backup";
        obj_backup.name = "obj_backup";
        obj_backup.value = obj == null ? "" : obj;
        frm.appendChild(obj_backup);
    }

    frm.submit(); 
    return false;
}

function CauseEvent(id, cmd, param)
{
    var frm = document.getElementById("MainPageForm");
    frm.name = "MainPageForm";
    frm.method = "post";
    
    var blockid = document.createElement("input");
    blockid.type = "hidden";
    blockid.id = "txt_" + id + "_blockid";
    blockid.name = "blockid";
    blockid.value = id;
    frm.appendChild(blockid);

    var command = document.createElement("input");
    command.type = "hidden";
    command.id = "txt_" + id + "_command";
    command.name = "command";
    command.value = cmd;
    frm.appendChild(command);

    var params = document.createElement("input");
    params.type = "hidden";
    params.id = "txt_" + id + "_params";
    params.name = "params";
    params.value = param == null ? "" : param;
    frm.appendChild(params);

    frm.submit();
    return false;
}

// Skip leading and trailing whitespace and return the rest
String.prototype.trim = function(chr) 
{
	var ret = this;

	ret = ret.replace(/^\s*(\b.*\b|)\s*$/, "$1");

	if (chr != null)
    {
        while (true)
        {
            if (ret.charAt(0) == chr)
                ret = ret.substring(1);
            else
                break;
        }
        
        while (true)
        {
            if (ret.charAt(ret.length - 1) == chr)
                ret = ret.substring(0, ret.length - 1);
            else
                break;
        }            
    }
        
	ret = ret.replace(/^\s*(\b.*\b|)\s*$/, "$1");

	if (ret == "undefined")
		ret = "";
        
	return ret;
}

// Calls overlib to specify the default display
function tooltip(txt)
{
    return overlib(txt, CSSCLASS, FGCLASS, "tooltip_area", BGCLASS, "tooltip_border", TEXTFONTCLASS, "tooltop_text", RIGHT, ABOVE, BORDER, 1, DELAY, 200);
}

function getCookie(name) 
{
    var start = document.cookie.indexOf(name + '=');
    var len = start + name.length + 1;

    if ((!start) && (name != document.cookie.substring(0, name.length)))
        return null;

    if (start == -1)
        return null;

    var end = document.cookie.indexOf(';', len);
    if (end == -1) end = document.cookie.length;

    return unescape(document.cookie.substring(len, end));
}

function setCookie(name, value, expires, path, domain, secure) 
{
    document.cookie = 
        name + '=' + escape(value) +
            ( (expires) ? ';expires=' + expires.toGMTString() : '') +
            ( (path) ? ';path=' + path : '') + 
            ( (domain) ? ';domain=' + domain : '') +
            ( (secure) ? ';secure' : '');
}

function deleteCookie(name, path, domain) 
{
    if (getCookie(name))
        document.cookie =
            name + '=' +
            ( (path) ? ';path=' + path : '') +
            ( (domain) ? ';domain=' + domain : '') +
            ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}
