function getObject(idString){
    if (document.getElementById) {
	    return document.getElementById(idString);
    } else if (document.getElementByName) {
	    return document.getElementByName(idString);
    } else if (document.all) {
	    return document.all[idString];
    } else if (document.layers) {
	    return document.layers(idString);
    } else if (eval('document.' + idString)) {
        return eval('document.' + idString);
    }
}

function showId(id){
    var obj = getObject(id);
    showObject(obj);
}

function showObject(obj){
    if (obj) {
        if (obj.style) {
            obj.style.visibility='visible';
        }
    }
}

function hideId(id){
    var obj = getObject(id);
    hideObject(obj)
}

function hideObject(obj){
    if (obj) {
        if (obj.style) {
            obj.style.visibility='hidden';
        }
    }
}

function enableId(id){
    var obj = getObject(id);
    enableObject(obj);
}

function enableObject(obj){
    if (obj) {
        obj.disabled = false;
    }
}
function disableId(id){
    var obj = getObject(id);
    disableObject(obj)
}

function disableObject(obj){
    if (obj) {
        obj.disabled = true;
    }
}

// mouse move / dragging from www.webreference.com
//call this on the bottom of the page on which you wish to use it
//var mousePos = null;
//document.onmousemove = mouseMove;

function mouseMove(ev){
	ev           = ev || window.event;
	mousePos = mouseCoords(ev);
}

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	
	if (ev.clientX || ev.clientY && document.body){
	    if (document.body.scrollLeft &&
	    document.body.scrollTop &&
	    document.body.clientLeft &&
	    document.body.clientTop) {
	        return {
		        x:(ev.clientX + document.body.scrollLeft - document.body.clientLeft),
		        y:(ev.clientY + document.body.scrollTop  - document.body.clientTop)
	        };
	    }
	}

	if (ev.clientX || ev.clientY){
	    return {
	        x:ev.clientX,
	        y:ev.clientY
        };
	}
	
	return null;
}

// tooltip based on a script developed by www.texsoft.it
function tooltipGetX(obj) 
{
  var curleft = 0;
  if (obj.offsetParent) 
  {
    while (obj.offsetParent) 
        {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function tooltipGetY(obj) 
{
    var curtop = 0;
    if (obj.offsetParent) 
    {
        while (obj.offsetParent) 
        {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}

function tooltipShowBelowParent(id, parentId){
    var parent = getObject(parentId);
    
    tooltipShowParent(id, parentId, 15, parent.offsetHeight + 15);
}

var tooltipShowTimeoutID = null;

function tooltipShowBelowParentDelayed(id, parentId, msDelay){
    var parent = getObject(parentId);
    tooltipShowParentDelayed(id, parentId, 15, parent.offsetHeight + 15, msDelay);
}

function tooltipShowParentDelayed(id, parentId, offsetX, offsetY, msDelay)
{
    if (tooltipShowTimeoutID){
        clearTimeout(tooltipShowTimeoutID);
    }
    if (!(msDelay >0)){
        msDelay=250;
    }

    var tooltip = 'tooltipShowParent("' + id + '", "' + parentId + '", ' + offsetX + ', ' + offsetY + ')';
    tooltipShowTimeoutID = setTimeout(tooltip, msDelay);
}

function tooltipShowParent(id, parentId, offsetX, offsetY)
{
    tooltipShowTimeoutID = null;
    var tooltip = getObject(id);
    var parent = getObject(parentId); 
    if (tooltip && parent && tooltip.style){
        if ((tooltip.style.top == '' || tooltip.style.top == 0) 
            && (tooltip.style.left == '' || tooltip.style.left == 0))
        {
            tooltip.style.width = tooltip.offsetWidth + 'px';
            tooltip.style.height = tooltip.offsetHeight + 'px';
            
            // if tooltip is too wide, shift left to be within parent 
            if (offsetX + tooltip.offsetWidth > parent.offsetWidth) offsetX = parent.offsetWidth - tooltip.offsetWidth;
            if (offsetX < 0 ) offsetX = 0; 
            
            x = tooltipGetX(parent) + offsetX;
            y = tooltipGetY(parent) + offsetY;
            
            tooltip.style.top = y + 'px';
            tooltip.style.left = x + 'px';
        }
        
        tooltip.style.visibility = 'visible'; 
    }
}
function tooltipHideDelayed(id, msDelay){
    setTimeout('tooltipHide("' + id + '")', msDelay);
}
function tooltipHide(id)
{
    if (tooltipShowTimeoutID){
        clearTimeout(tooltipShowTimeoutID);
    }
    tooltipShowTimeoutID = null;
    var tooltip = getObject(id);
    if (tooltip && tooltip.style) {
        tooltip.style.visibility = 'hidden';
    }
}

function IsImageOk(img) {
    // During the onload event, IE correctly identifies any images that
    // weren't downloaded as not complete. Others should too. Gecko-based
    // browsers act like NS4 in that they report this incorrectly.
    if (!img.complete) {
        return false;
    }

    // However, they do have two very useful properties: naturalWidth and
    // naturalHeight. These give the true size of the image. If it failed
    // to load, either of these should be zero.
    if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) {
        return false;
    }

    // No other way of checking: assume it's ok.
    return true;
}

function insertIntoTextArea(taObject, textToInsert) {
    if (document.selection) {
        taObject.focus();
        sel = document.selection.createRange();
        sel.text = textToInsert;
    }
    else 
    if (taObject.selectionStart || taObject.selectionStart == '0') {
        var startPos = taObject.selectionStart;
        var endPos = taObject.selectionEnd;
        var scrollTop = taObject.scrollTop;
        taObject.value = taObject.value.substring(0, startPos)
        + textToInsert
        + taObject.value.substring(endPos, taObject.value.length);
        taObject.selectionStart = startPos + textToInsert.length;
        taObject.selectionEnd = startPos + textToInsert.length;
        taObject.focus();
        taObject.scrollTop = scrollTop;
    } else {
        taObject.value += textToInsert;
        setFocus();
    }
}

function addEvent(eventObject, eventType, eventFunction)
{
    if(eventObject.attachEvent)
    {
        eventObject['e'+eventType+eventFunction] = eventFunction;
        eventObject[eventType+eventFunction] = function(){eventObject['e'+eventType+eventFunction](window.event);}
        eventObject.attachEvent('on'+eventType,eventObject[eventType+eventFunction]);
    }
    else
    {
        if(eventObject.addEventListener) eventObject.addEventListener(eventType,eventFunction,false);
    }
}

function positionIdMouse(thisObjectId,offsetX, offsetY)
{
    positionObjectMouse(getObject(thisObjectId), offsetX, offsetY);
}

function positionObjectMouse(thisObject,offsetX,offsetY)
{
    thisObject.style.left = (mousePos.x + offsetX) + 'px';
    thisObject.style.top = (mousePos.y + offsetY) + 'px';
}

function positionObjectFromReference(thisObject,referenceObject,offsetX,offsetY)
{
    thisObject.style.left = (tooltipGetX(referenceObject) + offsetX) + 'px';
    thisObject.style.top = (tooltipGetY(referenceObject) + offsetY) + 'px';
}

function positionObjectFromXY(thisObject,baseX, baseY,offsetX,offsetY)
{
    thisObject.style.left = (baseX + offsetX) + 'px';
    thisObject.style.top = (baseY + offsetY) + 'px';
}



function retrieveData(dataURL){

    if(window.XMLHttpRequest){
        transport = new XMLHttpRequest();
    }
    else{
        try{transport = new ActiveXObject("MSXML2.XMLHTTP.6.0"); }catch(e){}
        try{transport = new ActiveXObject("MSXML2.XMLHTTP"); }catch(e){}
    }
    
    if(transport){
        transport.open('GET', dataURL,true);
        transport.send(null);
        
        try{
            transport.onreadystatechange = function(){
                
                if(transport.readyState == 4){
                    return transport.responseXML.documentElement;
                }
            }
        }catch(e){
            return null;
        }
    }
}