﻿/*

All code copyright 2003 CrossMedia Services, Inc. except where otherwise noted.

All rights reserved.

AKA you are not allowed to do anything with this code (including derivatives)
w/o express written permission from CrossMedia Services, Inc.

*/

// see bottom for initial calls

if (document.layers) document.captureEvents(Event.MOUSEMOVE);
if (!document.all) window.onmousemove=mouseTrack;

var isSpread = (window.location.search.indexOf("action=browsepagespread") > -1 ||
				window.location.search.indexOf("action=browsepagesingle") > -1);
var lastAlignment = 0;
var alignment;

var isNav4, isNav6, isIE4;
var mpX, mpY;

var popped = 'null';
           
function cmsrolloverhighlight(circimgdivname, rolloverid, a, b, c, d, u, t) {
	var x = 0, y = 0, o;
	
	if (document.getElementById){
		o = document.getElementById(circimgdivname);
	}
	else {
		if (document.all){
			o = document.all[circimgdivname];
		}
	}
	    
	while(o) {
		x += o.offsetLeft;
		y += o.offsetTop;
		o = o.offsetParent;
	}

	moveTo('cmshotspothighlight',a+x,b+y+1);
	sizeit('cmshotspothighlight',c-a+1,d-b);
	sizeit('cmshighlightimg',c-a+1,d-b);

    if (document.getElementById) {
        document.getElementById('cmshotspothighlight').style.visibility='visible';
        document.getElementById('cmshighlighthref').href = u;
        document.getElementById('cmshighlighthref').target = t;
    }
    else if (document.all) {
		if (document.all['cmshotspothighlight']){
			document.all['cmshotspothighlight'].style.visibility='visible';
			document.all['cmshighlighthref'].href = u;
			document.all['cmshighlighthref'].target = t;
        }
	}

	popped = rolloverid;
	showdiv(rolloverid, 0);
}


function cmsrolloverhighlightrollover() {
	showdiv(popped, 0);
}

function mouseTrack(e) {
	if (document.all) {
		oScrollCoords = getScrollCoords();
		mpX = event.clientX + oScrollCoords.x + 10;
		mpY = event.clientY + oScrollCoords.y + 20;
	}
	else {
		mpX = e.pageX + 10;
		mpY = e.pageY + 20;
	}
}		

function showdiv(id,isRightSide) {
	
	lastAlignment = 0;
	
	var oScrollCoords = getScrollCoords();	;
	var browseWidth;
	
	// calculate browser middle point
	if(document.layers||(document.getElementById&&!document.all))
		browseWidth=window.outerWidth / 2;
	else if(document.all)
	{
		browseWidth=document.body.clientWidth / 2;
		mpX = event.clientX + oScrollCoords.x;
	}
		
	// calculate alignment modifier	
	if(lastAlignment == 0)
		lastAlignment = (isRightSide || (mpX > browseWidth && !isSpread)) ? -(getWidth(id) + 13) : 10;				 			
	alignment = mpX + lastAlignment		
	
	// position div where the mouse pointer is and make it visible	
	var hotspot = (document.all) ? document.all[id] : document.getElementById(id);	
	if(hotspot)	{
		hotspot.style.left = alignment + "px";
		hotspot.style.top = ((document.all) ? event.clientY + oScrollCoords.y + 20 : mpY) + "px";				
		hotspot.style.visibility = 'visible';		
	}			
	popped = id;
}

function hidediv(id) { 
	if(document.getElementById(id)) {
		document.getElementById(id).style.visibility='hidden';
	}
	else if ((document.all)&&(document.all[id])) {
		document.all[id].style.visibility='hidden';
	}
	/*
	if(lid!=0 && document.getElementById('thumbrowimg' + -lid)) {
		document.getElementById('thumbrowimg' + -lid).style.border='1px solid white';
	}
	*/
	
	lastAlignment = 0;	
}

function hideall() {
	if(document.getElementById(popped)) {
		document.getElementById(popped).style.visibility='hidden';
	}
}
			
// generic functions

function getDiv(id) {
	var o;

	if(!id)
		return null;
		
    if (isNav6)
    {
        o = document.getElementById( id );
    }
    else if (isNav4)
    {
        o = document[id];
    }
    else
    {
        o = document.all[id];	
    }
    
    return o;
}

/*
 * Browser version snooper; determines your browser
 * (Navigator 4, Navigator 6, or Internet Explorer 4/5)
 */
function setBrowser()
{
    if (navigator.appVersion.charAt(0) == "4")
    {
        if (navigator.appName.indexOf("Explorer") >= 0)
        {
            isIE4 = true;
        }
        else
        {
            isNav4 = true;
        }
    }
    else if (navigator.appVersion.charAt(0) > "4")
    {
        isNav6 = true;
    }
}

/*
 *
 * Given a selector string, return a style object
 * by searching through stylesheets. Return null if
 * none found
 *
 */
function getStyleBySelector( selector )
{
    if (!isNav6)
    {
        return null;
    }
    var sheetList = document.styleSheets;
    var ruleList;
    var i, j;

    /* look through stylesheets in reverse order that
       they appear in the document */
    for (i=sheetList.length-1; i >= 0; i--)
    {
        ruleList = sheetList[i].cssRules;
        for (j=0; j<ruleList.length; j++)
        {
            if (ruleList[j].type == CSSRule.STYLE_RULE &&
                ruleList[j].selectorText == selector)
            {
                return ruleList[j].style;
            }   
        }
    }
    return null;
}

/*
 *
 * Given an id and a property (as strings), return
 * the given property of that id.  Navigator 6 will
 * first look for the property in a tag; if not found,
 * it will look through the stylesheet.
 *
 * Note: do not precede the id with a # -- it will be
 * appended when searching the stylesheets
 *
 */
function getIdProperty( id, property )
{
    if (isNav6)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            if (styleObject[property])
            {
                return styleObject[ property ];
            }
        }
        styleObject = getStyleBySelector( "#" + id );
        return (styleObject != null) ?
            styleObject[property] :
            null;
    }
    else if (isNav4)
    {
        return document[id][property];
    }
    else
    {
        return document.all[id].style[property];
    }
}

/*
 *
 * Given an id and a property (as strings), set
 * the given property of that id to the value provided.
 *
 * The property is set directly on the tag, not in the
 * stylesheet.
 *
 */
function setIdProperty( id, property, value )
{
    if (isNav6)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            styleObject[ property ] = value;
        }
        
        /*
        styleObject = getStyleBySelector( "#" + id );
        if (styleObject != null)
        {
            styleObject[property] = value;
        }
        */
    }
    else if (isNav4)
    {
        document[id][property] = value;
    }
    else if (isIE4)
    {
         document.all[id].style[property] = value;
    }
}


function sizeit(id, w, h)
{
    if (isNav4)
    {
	    setIdProperty( id, "height", h );
   		setIdProperty( id, "width", w );
  	}
  	else if (isNav6 || isIE4 )
    {
	    setIdProperty( id, "height", h + "px" );
   		setIdProperty( id, "width", w + "px" );
    }
    
}

/*
 *
 * Move a given id.  If additive is true,
 * then move it by xValue dots horizontally and
 * yValue units vertically.  If additive is
 * false, then move it to (xValue, yValue)
 *
 * Note: do not precede the id with a # -- it will be
 * appended when searching the stylesheets
 *
 * Note also: length units are preserved in Navigator 6
 * and Internet Explorer. That is, if left is 2cm and
 * top is 3cm, and you move to (4, 5), the left will
 * become 4cm and the top 5cm.
 *
 */
function generic_move( id, xValue, yValue, additive )
{
	var left = getIdProperty(id, "left");
	var top = getIdProperty(id, "top");
	var leftMatch, topMatch;

	if (isNav4)
	{
		leftMatch = new Array( 0, left, "");
		topMatch = new Array( 0, top, "");
	}
	else if (isNav6 || isIE4 )
	{
		var splitexp = /([-0-9.]+)(\w+)/;
		leftMatch = splitexp.exec( left );
		topMatch = splitexp.exec( top );
		if (leftMatch == null || topMatch == null)
		{
			leftMatch = new Array(0, 0, "px");
			topMatch = new Array(0, 0, "px");
		}
	}
	left = ((additive) ? parseFloat( leftMatch[1] ) : 0) + xValue;
	top = ((additive) ? parseFloat( topMatch[1] ) : 0) + yValue;
	setIdProperty( id, "left", left + leftMatch[2] );
	setIdProperty( id, "top", top + topMatch[2] );
}

/*
 *
 * Move a given id to position (xValue, yValue)
 *
 */
function moveTo( id, x, y )
{
 	setIdProperty( id, "left", x + "px" );
	setIdProperty( id, "top", y + "px" );   
}

/*
 *
 * Move a given id to (currentX + xValue, currentY + yValue)
 *
 */
function moveBy( id, x, y)
{
    generic_move( id, x, y, true );
}

/*
 *
 * Function used when converting rgb format colors
 * from Navigator 6 to a hex format
 *
 */ 
function hex( n )
{
    var hexdigits = "0123456789abcdef";
    return ( hexdigits.charAt(n >> 4) + hexdigits.charAt(n & 0x0f) );
}

/*
 *
 * Retrieve background color for a given id.
 * The value returned will be in hex format (#rrggbb)
 *
 */ 
function getBackgroundColor( id )
{
    var color;

    if (isNav4)
    {
        color = document[id].bgColor;
    }
    else if (isNav6)
    {
        var parseExp = /rgb.(\d+),(\d+),(\d+)./;
        var rgbvals;
        color = getIdProperty( id, "backgroundColor" );
        if (color)
        {
            rgbvals = parseExp.exec( color );
            if (rgbvals)
            {
                color = "#" + hex( rgbvals[1] ) + hex( rgbvals[2] ) +
                    hex( rgbvals[3] );
            }
        }
        return color;
    }
    else if (isIE4)
    {
        return document.all[id].backgroundColor;
    }
    return "";
}

/*
 *
 * Return a division's document
 * 
 */
function getDocument( divName )
{
    var doc;

    if (isNav4)
    {
        doc = window.document[divName].document;
    }
    else if (isNav6)
    {
        doc = document;
    }
    else if (isIE4)
    {
        doc = document;
    }
    return doc;
}

setBrowser();


function getScrollCoords () {
  if (typeof window.pageXOffset != 'undefined')
    return {x: window.pageXOffset, y: window.pageYOffset};
  else if ((!document.compatMode || document.compatMode == 'BackCompat')
           && document.body && typeof document.body.scrollLeft != 'undefined')
    return {x: document.body.scrollLeft, y: document.body.scrollTop};
  else if (document.compatMode == 'CSS1Compat' &&
           document.documentElement && typeof document.documentElement.scrollLeft != 'undefined')
    return {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};
  else
    return null;
}

function getWidth(id) { 
    var x = 0;
    if (document.getElementById) // IE5+/NS6 
    {
		if(document.getElementById(id))
			x = document.getElementById(id).offsetWidth;         
    }
    else if (document.layers) // NS4 
    {
		if(document.layers[id])
			x = document.layers[id].clip.width;     
    }
    else if (document.all)  // IE4 
    {
		if(document.all[id])
			x = document.all[id].offsetWidth;         
    }
        
	return x;
} 
