/* ***********************************************************
Copyright 2006 SolidWorks Corp.  
All Rights Reserved.
************************************************************ */

var _CSS, _W3C, _IE6CSS;

function initSWLib()
{
    _CSS = (document.body && document.body.style) ? true : false;
    _W3C = (_CSS && document.getElementById) ? true : false;
    _IE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
}

// if the objIn is element ID, return object 
// of that id, otherwise return the object.
function getElement(objIn)
{
    if (!_W3C)
        return objIn;
        
    if (typeof objIn == "string")
        return document.getElementById(objIn);    
        
    return objIn;    
}

// return the style of an object.
function getStyle(objIn)
{
    var obj = objIn; 
    if (typeof objIn == "string")
        obj = getElement(objIn);
        
    if (obj)
        return obj.style;
    
    return obj;
}

// move an element by a specified unit.
function moveBy(objIn, dx, dy, unitIn)
{
    var obj = getElement(objIn);
    if (obj) 
    {
        var objS = getStyle(objIn); 
        if (!unitIn)
            unitIn = 0;
            
        objS.left = getElementLeft(obj) + dx + unitIn;
        objS.top = getElementTop(obj) + dy + unitIn;
    }
}

// move an element by pixel.
function moveByPx(objIn, dx, dy)
{
    moveBy(objIn, dx, dy, "px");
    return;
}

function moveTo(objIn, x, y, unitIn)
{
    var objS = getStyle(objIn);
    if (objS) 
    {
        if (!unitIn)
            unitIn = 0;
            
        objS.left = x + unitIn;
        objS.top = y + unitIn;
    }
}

// move an element by pixel.
function moveToPx(objIn, x, y)
{
    moveTo(objIn, x, y, "px");
    return;
}

function moveToZ(objIn, zIndexIn) 
{
    var obj = getElement(obj);
    if (obj) 
    {
        obj.zIndex = zIndexIn;
    }
}

function getElementLeft(objIn)
{
    var obj = getElement(objIn);
    var intOut = 0;
    if (document.defaultView) 
    {
        intOut = document.defaultView.getComputedStyle(obj, "").getPropertyValue("left");
    } 
    else if (obj.currentStyle) 
    {
        intOut = obj.currentStyle.left;
    } 
    else if (obj.style) 
    {
        intOut = obj.style.left;
    } 

    return parseInt(intOut);

}

function getElementTop(objIn)
{
    var obj = getElement(objIn);
    var intOut = 0;
    if (document.defaultView) 
    {
        intOut = document.defaultView.getComputedStyle(obj, "").getPropertyValue("top");
    } 
    else if (obj.currentStyle) 
    {
        intOut = obj.currentStyle.top;
    } 
    else if (obj.style) 
    {
        intOut = obj.style.top;
    } 

    return parseInt(intOut);
}

function getViewportHeight()
{
    if (window.innerHeight)
    {
        return window.innerHeight
    }
    
    if (document.documentElement && document.documentElement.clientHeight)
    {
        return document.documentElement.clientHeight;
    }
    
    if (document.body.clientHeight)
    {
        return document.body.clientHeight;
    }
    
    return 0;
}

function getViewportWidth()
{
    if (window.innerWidth)
    {
        return window.innerWidth;
    }
    
    if (document.documentElement && document.documentElement.clientWidth)
    {
        return document.documentElement.clientWidth;
    }
    
    if (document.body.clientWidth)
    {
        return document.body.clientWidth;
    }
    
    return 0;
}

function getDocumentHeight()
{
    
}

function getDocumentWidth()
{
}

function getHorizontalScroll()
{
    if (window.pageXOffset)
    {
        return window.pageXOffset;
    }
    
    if (document.documentElement && document.documentElement.scrollLeft)
    {
        return document.documentElement.scrollLeft;
    }
    
    if (document.body.scrollLeft)
    {
        return document.body.scrollLeft;
    }
    
    return 0;
}

function getVerticalScroll()
{
    if (window.pageYOffset)
    {
        return window.pageYOffset;
    }
    
    if (document.documentElement && document.documentElement.scrollTop)
    {
        return document.documentElement.scrollTop;
    }
    
    if (document.body.scrollTop)
    {
        return document.body.scrollTop;
    }
    
    return 0;
}

function getElementHeight(elem)
{
	if (!elem)
		return;
		
	if (elem.offsetHeight)
		return elem.offsetHeight;
	
	if (elem.clip && elem.clip.height)
		return elem.clip.height;
		
	if (elem.style && elem.style.pixelHeight)
		return elem.style.pixelHeight;
}

function getElementWidth(elem)
{
	if (!elem)
		return;
		
	if (elem.offsetWidth)
		return elem.offsetWidth;
		
	if (elem.clip && elem.clip.width)
		return elem.clip.width;

	if (elem.style && elem.style.pixelWidth)
		return elem.style.pixelWidth;
}

function setElementHeight(elem, ht)
{
	if (!elem)
		return;
		
	if (elem.offsetHeight)
	{
		elem.offsetHeight = ht;
		return;
	}
		
	if (elem.style && elem.style.pixelHeight)
	{
		elem.style.pixelHeight = ht;
	}
}

function setElementWidth(elem, wd)
{
	if (!elem)
		return;
		
	if (elem.offsetWidth)
	{
		elem.offsetWidth = wd;
		return;
	}
		
	if (elem.style && elem.style.pixelWidth)
	{
		elem.style.pixelWidth = wd;
	}
}

function setVisiblity(elem,flag)
{
    var stl = getStyle(elem);
    if (stl)
    {
		if (flag)
			stl.visibility = "visible";
		else
			stl.visibility = "hidden";
    }
}

function setVisiblity(id,flag)
{
	var elem = getElement(id);
    var stl = getStyle(elem);
    if (stl)
    {
		if (flag)
			stl.visibility = "visible";
		else
			stl.visibility = "hidden";
    }
}

function isVisible(id)
{
	var elem = getElement(id);
	if (!elem)
		return false;

    var stl = getStyle(elem);
    if (!stl)
		return false;
		
	var vis = stl.visibility;	
	return (vis == "visible") ? true : false;
}

function moveElementToCenter(yPos, elemid)
{
	var elem = getElement(elemid);
	var stl = getStyle(elem);
	
	var width = getElementWidth(elem);
	
	var vpWidth = getViewportWidth();
	var newX = Math.round((vpWidth/2) - (width/2)) + getHorizontalScroll();
	var newY = yPos + getVerticalScroll();
	
	moveToPx(elem, newX, newY);
}

function moveElementToParentsCenter(yPos, elemid, parentId)
{
	var elem = getElement(elemid);
	var parentElem = getElement(parentId)
	
	var width = getElementWidth(elem);
	var parentWidth = getElementWidth(parentElem);
	
	var newX = Math.round((parentWidth/2) - (width/2)) + getHorizontalScroll();
	var newY = yPos + getVerticalScroll();
	
	moveToPx(elem, newX, newY);
}

function getURLParamValue( param )
{
    var regex = new RegExp( "[\\?&]"+param+"=([^&#]*)" );
    var retVal = regex.exec( window.location.href );
    if( !retVal)
       return null;

    return retVal[1];
}

function getRequestObject()
{
	var request = null;
	try
	{
		request = new XMLHttpRequest();
	}
	catch (trymicrosoft)
	{
		try
		{
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(othermicrosoft)
		{
			try
			{
				request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (failed)
			{
				request = null;
			}
		}
	}
	return request;
}


function getAbsLeft(elem)
{
	var x = 0;
	while (elem)
	{
		x += elem.offsetLeft;
		elem = elem.offsetParent;
	}
	return x;
}

function getAbsTop(elem)
{
	var y = 0;
	while (elem)
	{
		y += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return y;
}

function swapVisibility(hideId,visibleId)
{
	setVisiblity(visibleId,true);
	setVisiblity(hideId,false);
}

function escapePrintPage(evt)
{
	evt = evt ? evt : event;
	if (evt)
	{
		var key = evt.keyCode;
		if (key == 27)
		{
			var fileName = getURLParamValue("file");
			window.location = "main.aspx?file=" + fileName;
		}
	}
}
