// $Id: api.js,v 1.3.2.6 2006/01/28 09:11:19 sslotnick Exp $

/* ***********************************************************
Example 4-3 (DHTMLapi.js)
"Dynamic HTML:The Definitive Reference"
2nd Edition
by Danny Goodman
Published by O'Reilly & Associates  ISBN 1-56592-494-0
http://www.oreilly.com
Copyright 2002 Danny Goodman.  All Rights Reserved.
************************************************************ */
// DHTMLapi.js custom API for cross-platform
// object positioning by Danny Goodman (http://www.dannyg.com).
// Release 2.0. Supports NN4, IE, and W3C DOMs.

// Global variables
var isCSS, isW3C, isIE4, isNN4;
// initialize upon load to let all browsers establish content objects
function initDHTMLAPI() {
    if (document.images) {
        isCSS = (document.body && document.body.style) ? true : false;
        isW3C = (isCSS && document.getElementById) ? true : false;
        isIE4 = (isCSS && document.all) ? true : false;
        isNN4 = (document.layers) ? true : false;
        isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
	initMaizeWebAPI(); // assume this was included
    }
}

 var t;
 function fixheight(ids) {
 var maxH = 0;
 // find the highest column
 for (var i=0;i<ids.length;i++) {
  var d = document.getElementById(ids[i]);
  if (d == null) continue;
   d.style.height = ""; // important, set it to empty (mozilla, ie)
   if (d.offsetHeight > maxH) maxH = d.offsetHeight;
 }
 maxH += 7;
 // set them all to be that height
 for (var i=0;i<ids.length;i++) {
  var d=document.getElementById(ids[i]);
  if (d == null) continue;
  d.style.height = maxH+"px";
 }
 var after = document.getElementById("c-nav");
 if(after) {
  after.className = "afterload";  
 }
 var after_quicklinks = document.getElementById("quicklinks");
 if(after_quicklinks) {
  after_quicklinks.className = "afterload";
 }
}

function increaseHeight()
{
 var ids = ["c-inner","c-nav","c-x","c-m"];
 var maxH = 0;
 // find the highest column
 for (var i=0;i<ids.length;i++) {
  var d = document.getElementById(ids[i]);
  if (d == null) continue;
   d.style.height = ""; // important, set it to empty (mozilla, ie)
   if (d.offsetHeight > maxH) maxH = d.offsetHeight;
 }

 // set them all to be that height
 for (var i=0;i<ids.length;i++) {
  var d=document.getElementById(ids[i]);
  if (d == null) continue;
  d.style.height = maxH+"px";
 }
}

// set event handler to initialize API
window.onload = initDHTMLAPI;

// Seek nested NN4 layer from string name
function seekLayer(doc, name) {
    var theObj;
    for (var i = 0; i < doc.layers.length; i++) {
        if (doc.layers[i].name == name) {
            theObj = doc.layers[i];
            break;
        }
        // dive into nested layers if necessary
        if (doc.layers[i].document.layers.length > 0) {
            theObj = seekLayer(document.layers[i].document, name);
        }
    }
    return theObj;
}

// Convert object name string or object reference
// into a valid element object reference
function getRawObject(obj) {
    var theObj;
    if (typeof obj == "string") {
        if (isW3C) {
            theObj = document.getElementById(obj);
        } else if (isIE4) {
            theObj = document.all(obj);
        } else if (isNN4) {
            theObj = seekLayer(document, obj);
        }
    } else {
        // pass through object reference
        theObj = obj;
    }
    return theObj;
}

// Convert object name string or object reference
// into a valid style (or NN4 layer) reference
function getObject(obj) {
    var theObj = getRawObject(obj);
    if (theObj && isCSS) {
        theObj = theObj.style;
    }
    return theObj;
}

// Position an object at a specific pixel coordinate
function shiftTo(obj, x, y) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isCSS) {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0 
            theObj.left = x + units;
            theObj.top = y + units;
        } else if (isNN4) {
            theObj.moveTo(x,y)
        }
    }
}

// Move an object by x and/or y pixels
function shiftBy(obj, deltaX, deltaY) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isCSS) {
            // equalize incorrect numeric value type
            var units = (typeof theObj.left == "string") ? "px" : 0 
            theObj.left = getObjectLeft(obj) + deltaX + units;
            theObj.top = getObjectTop(obj) + deltaY + units;
        } else if (isNN4) {
            theObj.moveBy(deltaX, deltaY);
        }
    }
}

// Set the z-order of an object
function setZIndex(obj, zOrder) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.zIndex = zOrder;
    }
}

// Set the background color of an object
function setBGColor(obj, color) {
    var theObj = getObject(obj);
    if (theObj) {
        if (isNN4) {
            theObj.bgColor = color;
        } else if (isCSS) {
            theObj.backgroundColor = color;
        }
    }
}

// Set the visibility of an object to visible
function show(obj) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "visible";
    }
}

// Set the visibility of an object to hidden
function hide(obj) {
    var theObj = getObject(obj);
    if (theObj) {
        theObj.visibility = "hidden";
    }
}

// Retrieve the x coordinate of a positionable object
function getObjectLeft(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("left");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.left;
    } else if (elem.style) {
        result = elem.style.left;
    } else if (isNN4) {
        result = elem.left;
    }
    return parseInt(result);
}

// Retrieve the y coordinate of a positionable object
function getObjectTop(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (document.defaultView) {
        var style = document.defaultView;
        var cssDecl = style.getComputedStyle(elem, "");
        result = cssDecl.getPropertyValue("top");
    } else if (elem.currentStyle) {
        result = elem.currentStyle.top;
    } else if (elem.style) {
        result = elem.style.top;
    } else if (isNN4) {
        result = elem.top;
    }
    return parseInt(result);
}

// Retrieve the rendered width of an element
function getObjectWidth(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetWidth) {
        result = elem.offsetWidth;
    } else if (elem.clip && elem.clip.width) {
        result = elem.clip.width;
    } else if (elem.style && elem.style.pixelWidth) {
        result = elem.style.pixelWidth;
    }
    return parseInt(result);
}

// Retrieve the rendered height of an element
function getObjectHeight(obj)  {
    var elem = getRawObject(obj);
    var result = 0;
    if (elem.offsetHeight) {
        result = elem.offsetHeight;
    } else if (elem.clip && elem.clip.height) {
        result = elem.clip.height;
    } else if (elem.style && elem.style.pixelHeight) {
        result = elem.style.pixelHeight;
    }
    return parseInt(result);
}


// Return the available content width space in browser window
function getInsideWindowWidth() {
    if (window.innerWidth) {
        return window.innerWidth;
    } else if (isIE6CSS) {
        // measure the html element's clientWidth
        return document.body.parentElement.clientWidth
    } else if (document.body && document.body.clientWidth) {
        return document.body.clientWidth;
    }
    return 0;
}
// Return the available content height space in browser window
function getInsideWindowHeight() {
    if (window.innerHeight) {
        return window.innerHeight;
    } else if (isIE6CSS) {
        // measure the html element's clientHeight
        return document.body.parentElement.clientHeight
    } else if (document.body && document.body.clientHeight) {
        return document.body.clientHeight;
    }
    return 0;
}

function getXmlHttpObject() {
  var xmlhttp;

  /*@cc_on

  @if (@_jscript_version >= 5)

    try {

      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e) {

      try {

        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (E) {

        xmlhttp = false;

      }

    }

  @else

  xmlhttp = false;

  @end @*/

  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {

    try {

      xmlhttp = new XMLHttpRequest();

    } catch (e) {

      xmlhttp = false;

    }

  }

  return xmlhttp;

}


function pw() {
        return window.innerWidth != null? window.innerWidth: document.body.clientWidth != null? document.body.clientWidth:null;
}

function mouseX(evt) {
        if (evt.pageX) 
                return evt.pageX; 
        else if (evt.clientX)
                return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return null;
}

function mouseY(evt) {
        if (evt.pageY) 
                return evt.pageY; 
        else if (evt.clientY)
                return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); 
        else return null;
}

function helpPopUp(event, hid) {
        var wp = pw(); 
        divObject = getRawObject(hid);
        divStyle = divObject.style;
        visi = divStyle.visibility; 

        if (divObject.offsetWidth) 
                ew = divObject.offsetWidth;
        else if (divObject.clip.width) 
                ew = divObject.clip.width; 

        if (visi == "visible" || visi == "show") { 
                hideLayerFrame(hid, 'helpHiderFrame');
        } 
        else {
                tv = mouseY(event) + 20;
                lv = mouseX(event) - (ew/4); 
                if (lv < 2)  lv = 2; 
                else if (lv + ew > wp) 
                        lv -= ew/2; 
                lv += 'px';
                tv += 'px';

                divStyle.left = lv; 
                divStyle.top = tv; 
                showLayerFrame(hid, 'helpHiderFrame');
        }
}

function showLayerFrame(layerId,frameId) {
    // show layer
    var layer = getRawObject(layerId);
    layer.style.visibility = 'visible';
    // show IFRAME
    var iframe = getRawObject(frameId);
    iframe.style.width = getObjectWidth(layer) + "px";
    iframe.style.height = getObjectHeight(layer) + "px";
    iframe.style.left = getObjectLeft(layer) + "px";
    iframe.style.top = getObjectTop(layer) + "px";
    iframe.style.visibility = 'visible';
}

function hideLayerFrame(layerId,frameId) {
    // hide IFRAME
    var iframe = getRawObject(frameId);
    iframe.style.visibility = 'hidden';
    // hide layer
    var layer = getRawObject(layerId);
    layer.style.visibility = 'hidden';
}
