/*
	Methods that add floating effect of a footer to content that is longer than browser's window height
	Greg Wolejko, Cognifide 2008
*/

/* determines browser height depending on kind of a browser */
function getClientHeight(){
	return typeof( window.innerHeight) !== "undefined" ? window.innerHeight : document.documentElement.clientHeight;
}
/* check for IE6. this variable is true only in IE6 */
var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;

function getElementsByClassName(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
        node = document;
    if ( tag == null )
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
};

/* main method for adding position:fixed to the footer*/
function floatFooter(){
	if (!document.getElementById) { return; }
	if (getElementsByClassName("home_no_flash").length) {return; }
	if (getElementsByClassName("our_agents").length) {return; }
	if (getElementsByClassName("home").length) {return; }
	

	//get elements and heights
	var headerHeight = document.getElementById("header").offsetHeight;
	var container = document.getElementById("container");
	var footer = document.getElementById("footer");
	
	//get browser's window height
	var clientHeight = getClientHeight();
	
	//if content is longer than the browser's window add floating footer. 
	//else, remove float and footer sticks to the content
//	if ( headerHeight + container.offsetHeight + footer.offsetHeight > clientHeight ) {

	if (!IE6) {
		if  ( footer.className !== "fixed" ) {
			footer.className = "fixed";
			container.style.marginBottom = footer.offsetHeight + "px";
		}
	}
	else {
		footer.className = "";
			container.style.marginBottom = "-12px";
	}
	if ( headerHeight + container.offsetHeight + footer.offsetHeight < clientHeight ) {
		container.style.height = (clientHeight - footer.offsetHeight - headerHeight) + "px";
		container.style.marginBottom = 0 + "px";
		var nav = getElementsByClassName("navigation");
		var navHeight = 0;
		if (nav && (nav.length === 1)) {
			navHeight= nav[0].offsetHeight;
		}
		var main = document.getElementById("content_2_col") ? document.getElementById("content_2_col") : document.getElementById("content_3_col") ;
		if (!main){
			main = document.getElementById("search");
		}
		if (main) {
			var contentHeight = clientHeight - headerHeight - footer.offsetHeight - 12 - navHeight;
			main.style.height = contentHeight + "px";
		}
	}
}

function tabFix() {
	if (!document.getElementById) { return; }
	var container = document.getElementById("container");
	if (container) {
		for (var i = 0; i < container.childNodes.length; i = i + 1) { 
	  		if ((container.childNodes[i].nodeName === "DIV") && (container.childNodes[i].className === "navigation")) {
				var tabs = container.childNodes[i];
				for (var j = 0; j < tabs.childNodes.length; j = j + 1) { 
			  		if (tabs.childNodes[j].nodeName === "UL") {
						var list = tabs.childNodes[j];
						var lenght = 0;
						for (var k = 0; k < list.childNodes.length; k = k + 1) { 
					  		if (list.childNodes[k].nodeName === "LI") {
					  			if (list.childNodes[k].offsetWidth == 0) {
					  				return false;
					  			}
								lenght += list.childNodes[k].offsetWidth;
							}
						}
						list.style.width = lenght + "px";
						break;
					}
				}
			}
		}
	}
	return true;
}

function footerFix() {
	if (!document.getElementById) { return; }
	if (!document.getElementById("page_wrapper")) { return; }
	
	var footer_priv = document.getElementById("footer_priv");
	var footer_nav = document.getElementById("footer_nav");
	var footer = document.getElementById("footer");
	
	if (footer && footer_nav && footer_priv) {
		footer_nav.style.width = (footer.offsetWidth - footer_priv.offsetWidth) + "px";
	}
	
	if (footer_nav) {
		for (var j = 0; j < footer_nav.childNodes.length; j = j + 1) { 
	  		if (footer_nav.childNodes[j].nodeName === "UL") {
				var list = footer_nav.childNodes[j];
				var lenght = 0;
				for (var k = 0; k < list.childNodes.length; k = k + 1) { 
			  		if (list.childNodes[k].nodeName === "LI") {
						lenght += list.childNodes[k].offsetWidth;
					}
				}
				list.style.width = lenght + "px";
				break;
			}
		}
	}
}

function ffLoader() {
	floatFooter();
	ffResetCount();
	footerFix();
}

window.onresize = floatFooter;

window.onload = ffLoader;

var ffInterval = false;

function ffResetCount() {
	if (ffInterval) {
		window.clearInterval(ffInterval);
	}
	if (!tabFix()) {
		ffInterval = window.setInterval('ffResetCount()', 200);
	}
}
