//
// QUOSA Information Manager
// Copyright © 2000-2008 QUOSA, Inc.
// All Rights Reserved.
//
function xGetElementById(objId) {
    if (typeof(objId) == 'string')
        objId = document.getElementById(objId);
    return objId;
}

function xSetImageSource(objId, src) {
    if ((objId = xGetElementById(objId)))
        objId.src = src;
}

function xGetImageSource(objId) {
    if ((objId = xGetElementById(objId)))
        return objId.src;
    else
        return "";
}


function xSetClassName(objId, class_name) {
    if ((objId = xGetElementById(objId)))
        objId.className = class_name;
}

function xGetClassName(objId) {
    if ((objId = xGetElementById(objId)))
        return objId.className;
    return null;
}

function xIsNumeric() {
    for (var index = 0; index < arguments.length; ++index)
        if (isNaN(arguments[index]) || typeof(arguments[index])!='number') return false;    
    return true;
}

function xIsObject() {
    for (var index = 0; index < arguments.length; ++index)
        if (typeof(arguments[index])!='object') return false;   
    return true;    
}

function xIsDefined() {
    for (var index = 0; index < arguments.length; ++index)
        if (typeof(arguments[index]) == 'undefined') return false;
    return true;    
}

function xIsString() {
    for (var index = 0; index < arguments.length; ++index)
        if (typeof(arguments[index]) != 'string') return false;
    return true;    
}

function xCamelize(cssPropStr) {
    var i, c, a = cssPropStr.split('-');
    var s = a[0];
    for (i=1; i<a.length; ++i) {
        c = a[i].charAt(0);
        s += a[i].replace(c, c.toUpperCase());
    }
    return s;   
}

function xGetComputedStyle(objId, p, i) {
    if(!(objId=xGetElementById(objId))) return null;
    var s, v = 'undefined', dv = document.defaultView;
    if(dv && dv.getComputedStyle) {
        s = dv.getComputedStyle(objId,'');
        if (s) v = s.getPropertyValue(p);
    } else if(objId.currentStyle) {
        v = objId.currentStyle[xCamelize(p)];
    } else return null;
    return i ? (parseInt(v) || 0) : v;
}

function xGetClientWidth() {
    return document.body.clientWidth;
}

function xGetClientHeight() {
    return document.body.clientHeight;
}

function xGetClientSize() {
    return [xGetClientWidth(), xGetClientHeight()];
}

function xGetObjX(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return 0;
    var xObjX = 0; while (xObjId.offsetParent) {
        xObjX += xObjId.offsetLeft; xObjId = xObjId.offsetParent;
    }
    return xObjX;
}

function xSetObjX(xObjId, x) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xObjId.style.pixelLeft = x;
}

function xShiftObjX(xObjId, xShiftX) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xSetObjX(xObjId, xGetObjX(xObjId) + xShiftX);
}

function xGetObjY(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return 0;
    var xObjY = 0; while (xObjId.offsetParent) {
        xObjY += xObjId.offsetTop; xObjId = xObjId.offsetParent;
    }
    return xObjY;
}

function xSetObjY(xObjId, y) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xObjId.style.pixelTop = y;
}

function xShiftObjY(xObjId, xShiftY) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xSetObjY(xObjId, xGetObjY(xObjId) + xShiftY);
}

function xGetObjPos(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return [0, 0];
    var xObjX = 0, xObjY = 0; while (xObjId.offsetParent) {
        xObjX += xObjId.offsetLeft; xObjY += xObjId.offsetTop;
        xObjId = xObjId.offsetParent;
    }
    return [xObjX, xObjY];
}

function xSetObjPos(xObjId, x, y) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    if (x) xObjId.style.pixelLeft = x;
    if (y) xObjId.style.pixelTop  = y;
}

function xShiftObjPos(xObjId, xShiftX, xShiftY) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    if (xShiftX) xShiftObjX(xObjId, xShiftX);
    if (xShiftY) xShiftObjY(xObjId, xShiftY);
}

function xGetObjWidth(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return 0;
    var xObjW = xGetComputedStyle(xObjId, 'margin-left',  true)
              + xGetComputedStyle(xObjId, 'margin-right', true);
    return xObjW + xObjId.offsetWidth;
}

function xSetObjWidth(xObjId, xWid) {   
    if(!(xObjId=xGetElementById(xObjId))) return;
    if (parseInt(xWid) < 0) return;
    xObjId.style.width = xWid + 'px';   
}

function xGetObjHeight(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return 0;
    var xObjH = xGetComputedStyle(xObjId, 'margin-top', true) + 
                xGetComputedStyle(xObjId, 'margin-bottom', true);
    return xObjH + xObjId.offsetHeight;
}

function xSetObjHeight(xObjId, xHei) {
    if(!(xObjId=xGetElementById(xObjId))) return 0;
    xObjId.style.height = xHei + 'px';  
}

function xGetObjSize(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return [0, 0];
    return [xGetObjWidth(xObjId), xGetObjHeight(xObjId)];
}

function xSetObjSize(xObjId, xWid, xHei) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    if (!xIsDispMode(xObjId)) return;
    if (xWid) xSetObjWidth (xObjId, xWid);
    if (xHei) xSetObjHeight(xObjId, xHei);
}

function xGetObjRect(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return [0,0,0,0];
    var xObjPos = xGetObjPos(xObjId);
    return [xObjPos[0], xObjPos[1], 
            xGetObjWidth(xObjId), xGetObjHeight(xObjId)];
}

function xSetObjRect(xObjId, xRect) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xSetObjPos (xObjId, xRect[0], xRect[1]);
    xSetObjSize(xObjId, xRect[2], xRect[3]);
}

function xGetObjClientSize(xObjId, xWithMrs) {
    if (!(xObjId = xGetElementById(xObjId))) return [0,0];
    var xMrsW = 0, xMrsH = 0; if (xWithMrs) {
        var xMrsSize = xGetObjMrsSize(xObjId);
        xMrsW = xMrsSize[0]; xMrsH = xMrsSize[1];
    }
    return [xObjId.clientWidth - xMrsW, xObjId.clientHeight - xMrsH];
}

function xShiftObjSize(xObjId, xShiftW, xShiftH) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    if (xShiftW) xSetObjWidth (xObjId, xGetObjWidth (xObjId) + xShiftW);
    if (xShiftH) xSetObjHeight(xObjId, xGetObjHeight(xObjId) + xShiftH);
}

function xMoveToScrCenter(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    var xClientSize = xGetClientSize(); var xObjSize = xGetObjSize(xObjId);
    xSetObjPos(xObjId,
        Math.round((xClientSize[0] / 2) - (xObjSize[0] / 2)),
        Math.round((xClientSize[1] / 2) - (xObjSize[1] / 2)));
}

function xGetInnerHtml(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return '';
    return xObjId.innerHTML;
}

function xSetInnerHtml(xObjId, xInnerHtml) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xObjId.innerHTML = xInnerHtml;
}

function xAppendInnerHtml(xObjId, xInnerHtml) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xObjId.innerHTML += xInnerHtml;
}

function xGetObjMrsSize(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return [0, 0];
    return [xGetComputedStyle(xObjId, 'margin-left',   true) + 
            xGetComputedStyle(xObjId, 'margin-right',  true),
            xGetComputedStyle(xObjId, 'margin-top',    true) + 
            xGetComputedStyle(xObjId, 'margin-bottom', true)];  
}

function xGetDispMode(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return '';
    return xObjId.style.display;
}

function xSetDispMode(xObjId, xDispMode) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xObjId.style.display = (xIsString(xDispMode)) ? 
        xDispMode : ((xDispMode) ? 'block' : 'none');
}

function xIsDispMode(xObjId) {
    xDispMode = xGetDispMode(xObjId);
    if (xDispMode == '') return true;
    return (xDispMode != 'none');
}

function xShowDisp(xObjId) {
    xSetDispMode(xObjId, true);
}

function xHideDisp(xObjId) {
    xSetDispMode(xObjId, false);
}

function xGetVisMode(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return '';
    return xObjId.style.visibility;
}

function xSetVisMode(xObjId, xVisMode) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xObjId.style.visibility = (xIsString(xVisMode)) ? 
        xVisMode : ((xVisMode) ? 'visible' : 'hidden');
}

function xIsVisMode(xObjId) {
    return xGetVisMode(xObjId) == 'visible' ? true : false;
}

function xShow(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xShowDisp(xObjId); xSetVisMode(xObjId, true);
}

function xHide(xObjId) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    xHideDisp(xObjId); xSetVisMode(xObjId, false);  
}

function xSubObjMrs(xObjId, xSizeW, xSizeH) {
    if (!(xObjId = xGetElementById(xObjId))) return;
    var xObjMrs = xGetObjMrsSize(xObjId);
    return [xSizeW - xObjMrs[0], xSizeH - xObjMrs[1]];
}

function xGetEvent() {
    return window.event;
}

function xCleanElement(xElement) {
    if (!xIsObject(xElement) || xElement == null) return ;
    var xAttributes = xElement.attributes;
    if (xAttributes) {
        var nNumElements = xAttributes.length;      
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex) {
            var sName = xAttributes[iIndex].name;           
            if (typeof xElement[sName] == 'function') {
                xElement[sName] = null;
            }
        }
    }
    
    var xChildNodes = xElement.childNodes;
    if (xChildNodes) {
        var nNumElements = xChildNodes.length;
        for (var iIndex = 0; iIndex < nNumElements; ++iIndex)
            xCleanElement(xElement.childNodes[iIndex]);
    }
}
