var IE = (document.all && !window.opera);
var switchableInputs=new Array();

function getMyDocumentElement(elementID)
{
    if(document.all)
        return document.all[elementID];
    else if(document.getElementById)
        return document.getElementById(elementID);
    return null;
}

function addSwitchableInput(inputName)
{
	switchableInputs.push(inputName);
}

function disableSwitchableInputs(formName)
{
	var element;
	var form;
	
    for(var i=0;i<switchableInputs.length;++i)
    {
    	form=document.forms[formName];
    	if(form!=null)
    	{
	    	element=form.elements[switchableInputs[i]];
	    	if(element!=null)
	    	{
	    		try
	    		{
	    		    element.disabled=true;
	    		}
	    		catch(e)
	    		{
	    		}	    		    
	    	}
    	}
    }	
}

function readonlySwitchableInputs(formName)
{
	var element;
	var form;
	
    for(var i=0;i<switchableInputs.length;++i)
    {
    	form=document.forms[formName];
    	if(form!=null)
    	{
	    	element=form.elements[switchableInputs[i]];
	    	if(element!=null)
	    	{
	    		try
	    		{
	    		    element.readOnly=true;
	    		}
	    		catch(e)
	    		{
	    		}	    		    
	    	}
    	}
    }	
}

function getLayerBody()
{
  return (window.document.compatMode == "CSS1Compat") ?
          window.document.documentElement : window.document.body || null;
}

function windowWidth()
{
    if(window.innerWidth)
	    return window.innerWidth;
    if(document.documentElement && document.documentElement.clientWidth)
        return document.documentElement.clientWidth;
    if(document.body && document.body.clientWidth)
        return document.body.clientWidth;
    /*
	if(document.body && document.body.offsetWidth)
	   return document.body.offsetWidth;
	*/
    return 0;
}

function windowHeight()
{
    if(window.innerHeight)
        return window.innerHeight;
    if(document.documentElement && document.documentElement.clientHeight)
        return document.documentElement.clientHeight;
    if(document.body && document.body.clientHeight)
        return document.body.clientHeight;
    /*
    if(document.body && document.body.offsetHeight)
        return document.body.offsetHeight;
    */
    return 0;
}

function setLayerVisible(layerID)
{
    var layer;

    if(IE)
        layer=document.all[layerID];
    else if(document.getElementById)
        layer=document.getElementById(layerID);
    
    if(layer!=null)
        layer.style.visibility="visible";        
}

function showLayerWithID(e,layerID,xOffset,yOffset)
{
	showLayerWithContent(e,layerID,xOffset,yOffset,null,null)	
}

function showLayerWithContent(e,layerID,xOffset,yOffset,contentID,content)
{
    var layer,contentTag;
    var xPos,yPos,newX,newY,layerWidth,layerHeight,scrollLeft,scrollTop;
    var body;

    if(IE)
    {
        body=getLayerBody();
        layer=document.all[layerID];
        if(contentID!=null)
            contentTag=document.all[contentID];
        else
        	contentTag=null;        
        xPos=e.clientX;
        yPos=e.clientY+body.scrollTop;
        scrollLeft=body.scrollLeft;
        scrollTop=body.scrollTop;
    }    
    else if(document.getElementById)
    {
    	body=document.body;
        layer=document.getElementById(layerID);
        if(contentID!=null)
            contentTag=document.getElementById(contentID);
        else
        	contentTag=null;        
        xPos=e.pageX;
        yPos=e.pageY;
        scrollLeft=window.pageXOffset;
        scrollTop=window.pageYOffset;
    }

    if(contentTag!=null && content!=null)
        contentTag.innerHTML=content;
    
    if(layer!=null)
    {
    	layerWidth=layer.offsetWidth;
    	layerHeight=layer.offsetHeight;
        if(layer.style.visibility=="hidden")
        {
        	newY=yPos+yOffset;
        	if(newY+layerHeight-scrollTop>windowHeight())
        		newY=newY-layerHeight-24;
        	
        	if(xOffset<=-10000) /* Right alignment */
        	{
        	    xOffset=xOffset+10000;
        	    newX=xPos+xOffset-layerWidth;
        	}
        	else
        	    newX=xPos+xOffset;
        	
        	if(newX+layerWidth>body.offsetWidth)
        		newX=body.offsetWidth-layerWidth+scrollLeft-24;
        	if(newX<scrollLeft)
        		newX=scrollLeft;
        	if(newX<10)
        		newX=10;
        	if(newY<10)
        		newY=10;
            layer.style.left=newX+"px";
            layer.style.top=newY+"px";
        }
        layer.style.visibility="visible";        
    }
}

function hideLayerWithID(layerID)
{
	hideLayerWithContent(layerID)	
}

function hideLayerWithContent(layerID)
{
    var layer;

    if(document.all)
        layer=document.all[layerID];
    else if(document.getElementById)
        layer=document.getElementById(layerID);

    if(layer!=null)
        layer.style.visibility="hidden";
}

function moveToHash(to)
{
    window.location.hash=to;
}

function getElementPosition(element)
{
	if(element==null)
		return null;

	var position =
	{
        x: 0,
        y: 0
    };

	try
	{
		while(element!=null)
		{
			position.x += element.offsetLeft;
			position.y += element.offsetTop;
			element=element.offsetParent;
		}
		//alert('Position '+position.x+'/'+position.y);
		return position;
	}
	catch(e)
	{
		return null;
	}
}

function getFormElementPosition(formElement)
{
	var elements;
	
	if(formElement==null)
	{
		return null;
	}
	elements=document.getElementsByName(formElement.name);
	if(elements!=null && elements.length>0)
		return getElementPosition(elements[0]);
	return null;
}

function isNodeList(obj)
{
	try
	{
		return (obj instanceof NodeList);
	}
	catch(e)
	{
		return false;
	}	
}

function isHTMLCollection(obj)
{
	try
	{
		return (obj instanceof HTMLCollection);
	}
	catch(e)
	{
		return false;
	}	
}

