//
// Global
//

window.name = "main";

ns4    = (document.layers);
ns6    = (!document.all && document.getElementById);
ie4    = (document.all && !document.getElementById && !window.opera);
ie5    = (document.all && !document.fireEvent && !window.opera);
op7    = (window.opera && document.createComment) ;
w3dom  = (document.getElementById || op7);

//
// Navigation
//
var MENU_COLLAPSED_IMAGE = "images/navPlus.gif";
var MANU_EXPANDED_IMAGE = "images/navMinus.gif";
var MENU_COLLAPSED_BGCOLOR = "#FFFFFF";
var MENU_EXPANDED_BGCOLOR = "#F0F0F0"; // ECECEC
var NAV_PERSIST_DELIM = "|";

function toggleSubMenu(id) {
    if (!ns4)
    {
        var row = document.getElementById(id);
        if (row == null) return;

        var image = row.getElementsByTagName("img")[0];
        var submenu = row.getElementsByTagName("div")[0];
        if (submenu.style.display == "block") {
            submenu.style.display = "none";
            image.src = MENU_COLLAPSED_IMAGE;
            row.style.backgroundColor = MENU_COLLAPSED_BGCOLOR;
        } else {
            submenu.style.display = "block";
            image.src = MANU_EXPANDED_IMAGE;
            row.style.backgroundColor = MENU_EXPANDED_BGCOLOR;
        }
    }
}

function enableSubMenu(id) {
    if (!ns4)
    {
        var row = document.getElementById(id);
        if (row == null) return;

        var image = row.getElementsByTagName("img")[0];
        var submenu = row.getElementsByTagName("div")[0];
        if (submenu.style.display != "block") {
            submenu.style.display = "block";
            image.src = MANU_EXPANDED_IMAGE;
            row.style.backgroundColor = MENU_EXPANDED_BGCOLOR;
        }
    }
}

function toggleAll(bool) {
    if (!ns4)
    {
        var nav = document.getElementById("nav");
        if (nav == null) return;

        var rows = nav.getElementsByTagName("tr");
        for (i = 0; i < rows.length; i++) {
            if (rows[i].className == "nav") {
                var image = rows[i].getElementsByTagName("img")[0];
                var submenu = rows[i].getElementsByTagName("div")[0];
                image.src = bool ? MANU_EXPANDED_IMAGE : MENU_COLLAPSED_IMAGE;
                submenu.style.display = bool ? "block" : "none";
                rows[i].style.backgroundColor = bool ? MENU_EXPANDED_BGCOLOR : MENU_COLLAPSED_BGCOLOR;
            }
        }
    }
}

function toggleSome(nums)
{
    for (i = 0; i < nums.length; i++)
    {
        toggleSubMenu("nav" + nums[i]);
    }
}

// Cookie functions
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}


function window_onAfterPrint() {
    window.close();
}


//
// Standard DW Functions
//
function MM_swapImgRestore() { //v3.0
    var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preload() { //v3.0
    var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImage() { //v3.0
    var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
    if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function moveLayerToMouseLoc(theLayer, offsetH, offsetV)
{
  var obj;
  if ((MM_findObj(theLayer))!=null)
  {
    if (document.layers)  //NS
    {
      document.onMouseMove = getMouseLoc;
      obj = document.layers[theLayer];
      obj.left = mLoc.x + offsetH;
      obj.top  = mLoc.y + offsetV;
    }
    else if (document.all)//IE
    {
      getMouseLoc();
      obj = document.all[theLayer].style;
      obj.pixelLeft = mLoc.x + offsetH;
      obj.pixelTop  = mLoc.y + offsetV;
    }
    else
    {
       obj = document.getElementById(theLayer).style;
       obj.left = mLoc.x + offsetH + "px";
       obj.top = mLoc.y + offsetV+ "px";
    }
    //alert("move: " + theLayer + " x:" + (mLoc.x + offsetH) + " y:" + (mLoc.y + offsetV));
    MM_showHideLayers(theLayer,'','show');
  }
}

function moveLayerToLoc(theLayer, offsetH, offsetV)
{
  var obj;
  if ((MM_findObj(theLayer))!=null)
  {
    if (document.layers)  //NS
    {
      obj = document.layers[theLayer];
      obj.left = offsetH;
      obj.top  = offsetV;
    }
    else if (document.all)//IE
    {
      obj = document.all[theLayer].style;
      obj.pixelLeft = offsetH;
      obj.pixelTop  = offsetV;
    }
    else
    {
       obj = document.getElementById(theLayer).style;
       obj.left = offsetH + "px";
       obj.top = offsetV+ "px";
    }
    //alert("move: " + theLayer + " x:" + offsetH + " y:" + offsetV);
    MM_showHideLayers(theLayer,'','show');
  }
}

// get mouse location
function Point(x,y) {  this.x = x; this.y = y; }
mLoc = new Point(200,200);

function getMouseLoc(e)
{
  if(!document.all)  //NS
  {
    mLoc.x = e.pageX;
    mLoc.y = e.pageY;
  }
  else               //IE
  {
    mLoc.x = event.x + document.body.scrollLeft;
    mLoc.y = event.y + document.body.scrollTop;
  }
  return true;
}

//NS init:
if(document.layers) { document.captureEvents(Event.MOUSEMOVE); document.onMouseMove = getMouseLoc; }

function showLayerAtMouse(lname, visible) {
    if (visible)
       moveLayerToMouseLoc(lname, 10, 10);
    else
      MM_showHideLayers(lname, "", "hide");
}


//
// Popup Funtions
//
var printWindow;

function popPrintWindow (popupUrl)
{

    if (typeof printWindow == 'undefined')
    {
        printWindow = window.open(popupUrl, 'printWindow','width=660,height=620,status=yes,toolbars=yes,menubar=no,location=no,scrollbars=yes,resizable=yes');
        if (!printWindow)
            alert('It appears that your popup blocking software is preventing us from displaying a printable window. \n\nPlease disable any popup blocking funtionality, or if applicable add www.avastin.com to the allowed list.');
    }
    else
    {
        if (printWindow.closed)
        {
            printWindow = window.open(popupUrl,'printWindow','width=590,height=620,status=yes,toolbars=yes,menubar=no,location=no,scrollbars=yes,resizable=yes');
            if (!printWindow)
                alert('It appears that your popup blocking software is preventing us from displaying a printable window. \n\nPlease disable any popup blocking funtionality, or if applicable add www.avastin.com to the allowed list.');
        }
        else
            printWindow.location = popupUrl;

    }

    if (printWindow)
        printWindow.focus();

}


//
// Glossary Functions
//
var glossaryEnabled = true;
var page_timer = null;
var glossaryFrameName = 'frameData';
var glossaryLayerName = 'glossaryLayer';

function pageManager()
{
    var args = pageManager.arguments;

    switch(args[0])
    {

        case "load_page" :
            //alert("load_page: " + args[1]);

            // ns4
            if (ns4)
            {
                //alert("load_page (ns4): " + args[1]);
                document[glossaryLayerName].load(args[1], 300);
            }

            // ns6
            else if (document.getElementById(glossaryFrameName).contentDocument)
            {
                //alert("load_page (ns6): " + args[1]);
                document.getElementById(glossaryFrameName).contentDocument.location.replace(args[1]);
            }

            // ie4
            else if (ie4)
            {
                //alert("load_page (ie4): " + args[1]);
                document.frames[glossaryFrameName].document.location = args[1];
            }

            // ie5
            else if (ie5)
            {
                //alert("load_page (ie5): " + args[1]);
                document.getElementById(glossaryFrameName).src = args[1];
            }

            // ie5.5 / ie6
            else if (document.getElementById(glossaryFrameName).contentWindow)
            {
                //alert("load_page (ie5.5/ie6): " + args[1]);
                document.getElementById(glossaryFrameName).contentWindow.document.location.replace(args[1]);
            }

            // all dom compat (safari, opera)
            else if (w3dom)
            {
                //alert("load_page (w3dom): " + args[1]);
                document.getElementById(glossaryFrameName).document.location.replace(args[1]);
            }

//            if (ie4)
//                document.frames[glossaryFrameName].document.location = args[1];
//            if (w3dom)
//                document.getElementById(glossaryFrameName).src = args[1];
//            if (ns4)
//                document[glossaryLayerName].load(args[1], 300);
            break;

        case "page_is_loaded" :
            //alert("page_is_loaded");
            if (ns4)
                document[glossaryLayerName].clip.bottom = document[glossaryLayerName].document.height;
            clearTimeout(page_timer);
            page_timer = setTimeout("pageManager('display_page')", 200);
            break;

       case "display_page" :
           //alert("display_page");
           if (ie4)
               document.all[glossaryLayerName].innerHTML = document.frames[glossaryFrameName].document.body.innerHTML;
           else if (w3dom)
               document.getElementById(glossaryLayerName).innerHTML = window.frames.frameData.document.getElementById('body').innerHTML;
           break;

       case "hide_page" :
           //alert("hide_page");
           MM_showHideLayers(glossaryLayerName, '', 'hide');
           if (ie4)
               document.all[glossaryLayerName].innerHTML = "";
           else if (w3dom)
               document.getElementById(glossaryLayerName).innerHTML = "";
           break;
    }
}

function queryGlossary (e, word)
{
    if (glossaryEnabled)
    {

        pageManager('load_page', 'glossary.m?word=' + word);

        var left;
        var top;
        if (ns4 || ns6)
        {
            left = e.pageX - 50;
            top = e.pageY + 20;
        }
        else
        {
            left = (e.x + document.body.scrollLeft) - 50;
            top = (e.y + document.body.scrollTop) + 20;
        }

        moveLayerToLoc('glossaryLayer', left, top);

    }

    return false;
}

function enableGlossary(b)
{
    this.glossaryEnabled = b;
}


//
// Util Functions
//
var contentLayer;
function setLayerContent(layerName, value)
{
    if (ns4)
    {

        if (!contentLayer)
        {
            var layer1Obj;
            layer1Obj = document.layers[layerName];
            layer1Obj.document.open();
            layer1Obj.document.write('');
            layer1Obj.document.close();
            contentLayer = new Layer(457, layer1Obj);
            contentLayer.visibility = "inherit";
        }
        contentLayer.document.open();
        contentLayer.document.write('<span class="mediumText1">' + value + '</span>');
        contentLayer.document.close();
    }
    else if (ie4)
        document.all[layerName].innerHTML = value;
    else if (w3dom)
        document.getElementById(layerName).innerHTML = value;

    return false;
}


var activeSS;
function setActiveSS(title) {
    var i, a, main;
    for (i=0; (a = document.getElementsByTagName("link")[i]); i++) {
        if (a.getAttribute("rel") && a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
            a.disabled = true;
            if(a.getAttribute("title") == title)
                a.disabled = false;
        }
    }
    activeSS = title;
}

// maps stylesheet names to corresponding text size buttons
var ss2btn = {
    "" : "btnTextSizeSmall",
    "global2" : "btnTextSizeMed",
    "global3" : "btnTextSizeLarge"
};

function isActiveTextSizeButton(btnName)
{
    return (document.images[btnName].src.indexOf("On.gif") != -1);
}

function setActiveTextSizeButton()
{
    var args = setActiveTextSizeButton.arguments;
    var btnSrc = document.images[args[0]].src;
    document.images[args[0]].src = btnSrc.replace("Off.gif", "On.gif");
    
    for (var i = 1; i < args.length; i++)
    {
        btnSrc = document.images[args[i]].src;
        document.images[args[i]].src = btnSrc.replace("On.gif", "Off.gif");
    }
}


function setActiveHighlightButton()
{
    var args = setActiveHighlightButton.arguments;
    var btnSrc = document.images[args[0]].src;
    document.images[args[0]].src = btnSrc.replace("Off.gif", "On.gif");

    for (var i = 1; i < args.length; i++)
    {
        btnSrc = document.images[args[i]].src;
        document.images[args[i]].src = btnSrc.replace("On.gif", "Off.gif");
    }
}


function enablePiHighlights()
{
    setStyleByClass('SPAN','piHighlight','backgroundColor','#d8f1f4');
    setStyleByClass('TD','piTableHighlight','backgroundColor','#D8F1F4');
    setActiveHighlightButton('btnPIHighlightYes', 'btnPIHighlightNo');
    return false;
}


function disablePiHighlights()
{
    setStyleByClass('SPAN','piHighlight','backgroundColor','white');
    setStyleByClass('TD','piTableHighlight','backgroundColor','#C4DADD');
    setActiveHighlightButton('btnPIHighlightNo', 'btnPIHighlightYes');
    return false;
}

function jumpTo(select)
{
    var val = select.options[select.selectedIndex].value;
    if (val)
    {
        location = val;
        select.selectedIndex = 0;
    }
}

//
// Constructor
//
function init()
{

    // init nav
    if (!ns4)
    {
        toggleAll(false);
        var navToggle = document.getElementById("navToggle");
        if (navToggle) navToggle.style.display = "block";

        if (navPersist = readCookie("navPersist"))
        {
            toggleSome(navPersist.split("|"));
        }

        var fontSizeToggle = document.getElementById("fontSizeToggle");
        if (fontSizeToggle) fontSizeToggle.style.display = "block";

        var piHighlightToggle = document.getElementById("piHighlightToggle");
        if (piHighlightToggle) piHighlightToggle.style.display = "block";

        if (activeSS = readCookie("activeSS"))
        {
            setActiveSS(activeSS);
        }
        
        var btn = ss2btn[activeSS] || ss2btn[""];
        setActiveTextSizeButton(btn);
    }
}

var navPersist = new Array();

//
// Destructor
//
function destroy()
{
    if (!ns4)
    {
        // save active SS
        createCookie("activeSS", activeSS);
        createCookie("navPersist", navPersist.join(NAV_PERSIST_DELIM));
    }
}


function saveNavState()
{
    if (!ns4)
    {
        navPersist = new Array();
        var nav = document.getElementById("nav");
        if (nav == null) return;

        var rows = nav.getElementsByTagName("tr");
        for (i = 0; i < rows.length; i++) {
            if (rows[i].className == "nav") {
                var submenu = rows[i].getElementsByTagName("div")[0];
                if (submenu.style.display == "block") {
                    navPersist[navPersist.length] = rows[i].id.substring(3, 4);
                }
            }
        }
    }
}

window.onunload = destroy;


/*
 * FlashObject embed
 */

var FlashObject = function(swf, id, w, h, ver, c) {
	this.swf = swf;
	this.id = id;
	this.width = w;
	this.height = h;
	this.version = ver;
	this.align = "middle";

	this.params = new Object();
	this.variables = new Object();

	this.redirect = "";
	this.sq = document.location.search.split("?")[1] || "";
	this.bypassTxt = "<p>Already have Macromedia Flash Player? <a href='?detectflash=false&"+ this.sq +"'>Click here if you have Flash Player "+ this.version +" installed</a>.</p>";
	
	if (c) this.color = this.addParam('bgcolor', c);
	this.addParam('quality', 'high'); // default to high
	this.doDetect = getQueryParamValue('detectflash');
	this.addParam('wmode', 'opaque'); // default to opaque
	this.addParam('embed', 'transparent'); // default embed to transparent
	this.addParam('menu', 'false'); // set menu to false
}

var FOP = FlashObject.prototype;

FOP.addParam = function(name, value) { this.params[name] = value; }

FOP.getParams = function() { return this.params; }

FOP.getParam = function(name) { return this.params[name]; }

FOP.addVariable = function(name, value) { this.variables[name] = value; }

FOP.getVariable = function(name) { return this.variables[name]; }

FOP.getVariables = function() { return this.variables; }

FOP.getParamTags = function() {
    var paramTags = "";
    for (var param in this.getParams()) {
        paramTags += '<param name="' + param + '" value="' + this.getParam(param) + '" />';
    }
    return (paramTags == "") ? false:paramTags;
}

FOP.getHTML = function() {
    var flashHTML = "";
    if (navigator.plugins && navigator.mimeTypes.length) { // netscape plugin architecture
        flashHTML += '<embed scale="noscale" salign="LT" type="application/x-shockwave-flash" src="' + this.swf + '" width="' + this.width + '" height="' + this.height + '" id="' + this.id + '" align="' + this.align + '"';
        for (var param in this.getParams()) {
            flashHTML += ' ' + param + '="' + this.getParam(param) + '"';
        }
        if (this.getVariablePairs()) {
            flashHTML += ' flashVars="' + this.getVariablePairs() + '"';
        }
        flashHTML += '></embed>';
    } else { // PC IE
        flashHTML += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + this.width + '" height="' + this.height + '" id="' + this.id + '" align="' + this.align + '">';
        flashHTML += '<param name="salign" value="LT" />';
	flashHTML += '<param name="scale" value="noscale" />';
	flashHTML += '<param name="movie" value="' + this.swf + '" />';
        if (this.getParamTags()) {
            flashHTML += this.getParamTags();
        }
        if (this.getVariablePairs() != null) {
            flashHTML += '<param name="flashVars" value="' + this.getVariablePairs() + '" />';
        }
        flashHTML += '</object>';
    }
    return flashHTML;	
}

FOP.getVariablePairs = function() {
    var variablePairs = new Array();
    for (var name in this.getVariables()) { 
    	variablePairs.push(name + "=" + escape(this.getVariable(name))); 
    }
    return (variablePairs.length > 0) ? variablePairs.join("&"):false;
}

FOP.write = function(elementId) {
	if(detectFlash(this.version) || this.doDetect=='false') {
		if (elementId) {
			document.getElementById(elementId).innerHTML = this.getHTML();
		} else {
			document.write(this.getHTML());
		}
	} else {
		if (this.redirect != "") {
			document.location.replace(this.redirect);
		} else if (this.altTxt) {
			if (elementId) {
				document.getElementById(elementId).innerHTML = this.altTxt +""+ this.bypassTxt;
			} else {
				document.write(this.altTxt +""+ this.bypassTxt);
			}
		}
	}		
}

/* ---- detection functions ---- */
function getFlashVersion() {
	var flashversion = 0;
	if (navigator.plugins && navigator.mimeTypes.length) {
		var x = navigator.plugins["Shockwave Flash"];
		if(x && x.description) {
			var y = x.description;
   			flashversion = y.charAt(y.indexOf('.')-1);
		}
	} else {
		result = false;
	    for(var i = 15; i >= 3 && result != true; i--){
   			execScript('on error resume next: result = IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.'+i+'"))','VBScript');
   			flashversion = i;
   		}
	}
	return flashversion;
}

function detectFlash(ver) {	return (getFlashVersion() >= ver) ? true:false; }

// get value of query string param
function getQueryParamValue(param) {
	var q = document.location.search || document.location.href.split("#")[1];
	if (q) {
		var detectIndex = q.indexOf(param +"=");
		var endIndex = (q.indexOf("&", detectIndex) > -1) ? q.indexOf("&", detectIndex) : q.length;
		if (q.length > 1 && detectIndex > -1) {
			return q.substring(q.indexOf("=", detectIndex)+1, endIndex);
		} else {
			return "";
		}
	}
}

/* add Array.push if needed */
if(Array.prototype.push == null){
	Array.prototype.push = function(item) { this[this.length] = item; return this.length; }
}

/*
 * End FlashObject embed
 */


