//-----------------------------------------------------------------------------
// Copyright (c) 2007 AITG Inc.
// All rights reserved.
// Use of this code is subject to the terms and conditions listed at 
// http://www.aitg.com/legal/license.html and are subject to change
// without notice.
//-----------------------------------------------------------------------------

function $() {
	var elements = new Array();
	for (var i=0;i<arguments.length;i++) {
		var element = arguments[i];
		if (typeof element == 'string') element = document.getElementById(element);
		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
}

var BoxHeights = {
	maxh: 0,
	boxes: Array(),
	num: 0,
	equalise: function() {
		this.num = arguments.length;
		for (var i=0;i<this.num;i++) if (!$(arguments[i])) return;
		this.boxes = arguments;
		this.maxheight();
		for (var i=0;i<this.num;i++) $(arguments[i]).style.height = this.maxh+"px";
	},
	maxheight: function() {
		var heights = new Array();
		for (var i=0;i<this.num;i++) {
			if (navigator.userAgent.toLowerCase().indexOf('opera') == -1) {
				heights.push($(this.boxes[i]).scrollHeight);
			} else {
				heights.push($(this.boxes[i]).offsetHeight);
			}
		}
		heights.sort(this.sortNumeric);
		this.maxh = heights[this.num-1];
	},
	sortNumeric: function(f,s) {
		return f-s;
	}
}

// this function is needed to work around 
// a bug in IE related to element attributes
function hasClass(obj) {
    var result = false;
    if (obj.getAttributeNode("class") != null) {
        result = obj.getAttributeNode("class").value;
    }
    return result;
}   


function adjustHeaderSize() {

    var logo = document.getElementById("logo");
    if (! logo) { return; }
    var logoheight= logo.height;

    var el = YAHOO.util.Dom.get('speedbar');
    var sbheight = YAHOO.Tools.getHeight(el);
    
    var searchbox = document.getElementById("searchbox");
    if (! searchbox) { return; }
    var searchboxheight = logoheight - parseInt(sbheight) + 1;
    searchbox.style.height = searchboxheight+"px";
    
}

function setFooter() {

    var doc = YAHOO.util.Dom.get('doc3');
    var docheight = parseInt(YAHOO.Tools.getHeight(doc))+1;

    var vpheight = parseInt(YAHOO.util.Dom.getViewportHeight())+1;

    if (docheight < vpheight) {
        var marginTop = vpheight - docheight;
        var ft = YAHOO.util.Dom.get('ft');
        ft.style.marginTop = marginTop+"px";
    }
}

function stripe(id) {

    // the flag we'll use to keep track of 
    // whether the current row is odd or even
    var even = false;
  
    // if arguments are provided to specify the colours
    // of the even & odd rows, then use the them;
    // otherwise use the following defaults:
    var evenColor = arguments[1] ? arguments[1] : "#fff";
    var oddColor = arguments[2] ? arguments[2] : "#eee";
  
    // obtain a reference to the desired table
    // if no such table exists, abort
    var table = document.getElementById(id);
    if (! table) { return; }
    
    // by definition, tables can have more than one tbody
    // element, so we'll have to get the list of child
    // &lt;tbody&gt;s 
    var tbodies = table.getElementsByTagName("tbody");

    // and iterate through them...
    for (var h = 0; h < tbodies.length; h++) {
    
        // find all the &lt;tr&gt; elements... 
        var trs = tbodies[h].getElementsByTagName("tr");
      
        // ... and iterate through them
        for (var i = 0; i < trs.length; i++) {

            // avoid rows that have a class attribute
            // or backgroundColor style
            if (! hasClass(trs[i]) &&
                ! trs[i].style.backgroundColor) {
 		  
                // get all the cells in this row...
                var tds = trs[i].getElementsByTagName("td");
        
                // and iterate through them...
                for (var j = 0; j < tds.length; j++) {
        
                    var mytd = tds[j];

                    // avoid cells that have a class attribute
                    // or backgroundColor style
                    if (! hasClass(mytd) &&
                        ! mytd.style.backgroundColor) {
        
                        mytd.style.backgroundColor =
                        even ? evenColor : oddColor;
            
                    }
                }
            }
            // flip from odd to even, or vice-versa
            even =  ! even;
        }
    }
}

function visibleBox(id,skipOpenClose) {
	elm1 = document.getElementById("open"+id);
	elm2 = document.getElementById("close"+id);
	elm3 = document.getElementById("box"+id);

	if(!elm3)
		return false;

	if (skipOpenClose) {
		elm3.style.display = (elm3.style.display == "")?"none":"";
	} else if(elm1) {
		if (elm1.style.display == "") {
			elm1.style.display = "none";
			if(elm2)
				elm2.style.display = "";
			elm3.style.display = "none";
		} else {
			elm1.style.display = "";
			if(elm2)
				elm2.style.display = "none";
			elm3.style.display = "";
		}
	}
}

function urlEncode(url) {
	return url.replace(/\s/g, "+").replace(/&/, "&amp;").replace(/"/, "&quot;")
}

function substitute(lbl) {
var x, rg;
	for(x = 1; x < arguments.length; x+=2) {
		if(arguments[x] && arguments[x+1]) {
			rg = new RegExp("\\{\\{"+arguments[x]+"\\}\\}", "gi");
			lbl = lbl.replace(rg,  arguments[x+1]);
			rg = new RegExp('~~'+arguments[x]+'~~', "gi");
			lbl = lbl.replace(rg,  arguments[x+1]);
		}
	}
	return lbl;
}
