var loadEventHandlers = new Array();

function getInnerHeight() {
  if (self.innerHeight) {
 	  return self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) {
	  return document.documentElement.clientHeight;
  } else if (document.body) {
	  return document.body.clientHeight;
  }	
}

function getInnerWidth() {
  if (self.innerWidth) {
 	  return self.innerWidth;
  } else if (document.documentElement && document.documentElement.clientWidth) {
	  return document.documentElement.clientWidth;
  } else if (document.body) {
	  return document.body.clientWidth;
  }	
}

function registerLoadEventHandler(handler) {
	loadEventHandlers.push(handler);
}

function searchBoxFocus(state, obj, defaultText) {
  if(state && obj.value == defaultText) {
		obj.value = '';
	} else if(!state && obj.value == '') {
		obj.value = defaultText;
	}
}

SCROLL_LEFT = 1;
SCROLL_RIGHT = 2;
SCROLL_DURATION = 80;

var scrollObj = {};
scrollObj.startX = 0;
scrollObj.currX = 0;
scrollObj.destX = 0;
scrollObj.currFrame = 0;
scrollObj.busy = false;

var scrollBoxObj;

var scrollObjs = Array();

function easeInOutCubic(t, b, c, d) {
	t /= d / 2;
	if (t < 1) {
	  return c / 2 * t * t * t + b;
	}
	t -= 2;
	return c / 2 * (t * t * t + 2) + b;
};

function orderScrollBox(left) {
	if (left && scrollObjs[scrollObjs.length - 1].offsetLeft >= scrollBoxObj.offsetWidth) {
		var tempObj = scrollObjs[scrollObjs.length - 1];
		tempObj.style.left = scrollObjs[0].offsetLeft - tempObj.offsetWidth + 'px';
		scrollObjs.splice(scrollObjs.length - 1, 1);
		scrollObjs = new Array(tempObj).concat(scrollObjs);
		scrollObj.startX -= tempObj.offsetWidth;
  } else if (!left && scrollObjs[0].offsetLeft + scrollObjs[0].offsetWidth <= 0) {
		var tempObj = scrollObjs[0];
		tempObj.style.left = scrollObjs[scrollObjs.length - 1].offsetLeft + scrollObjs[scrollObjs.length - 1].offsetWidth + 'px';
		scrollObjs.splice(0, 1);
		scrollObjs.push(tempObj);
		scrollObj.startX += tempObj.offsetWidth;
  }
}

function animateScrollBox() {
	if (Math.abs(scrollObj.currX - scrollObj.destX) > 0) {
    scrollObj.currX = Math.round(easeInOutCubic(scrollObj.currFrame, scrollObj.currX, scrollObj.destX - scrollObj.currX, SCROLL_DURATION));
	  scrollObj.currFrame++;
		
		var accumulatedWidths = 0;
		
		for (var i = 0; i < scrollObjs.length; i++) {
		  scrollObjs[i].style.left = scrollObj.startX + accumulatedWidths - scrollObj.currX + 'px';
			accumulatedWidths += scrollObjs[i].offsetWidth;
		}
		
		orderScrollBox(scrollObj.destX < 0);
		
    window.setTimeout('animateScrollBox();', 10);
	} else {
	  scrollObj.busy = false;	
	}
}

function scrollBtnClick(direction) {
	if (scrollObj.busy) {
	  return;
	}
	scrollBoxObj = document.getElementById('scrollbox');
	scrollObj.startX = scrollObjs[0].offsetLeft;
  if (direction == SCROLL_LEFT) {
	  scrollObj.destX = - scrollBoxObj.offsetWidth + 2
		scrollObj.currX = 0;
		scrollObj.currFrame = 0;
		scrollObj.busy = true;
		
		animateScrollBox();
	} else {
	  scrollObj.destX = scrollBoxObj.offsetWidth - 2;
		scrollObj.currX = 0;
		scrollObj.currFrame = 0;
		scrollObj.busy = true;

    animateScrollBox();
	}
}

function initScrollBox() {
	var scrollBoxObj = document.getElementById('scrollbox');
	var numElements = 0;	
	var currLeft = 0;
	for (var i = 0; i < scrollBoxObj.childNodes.length; i++) {
		if (scrollBoxObj.childNodes[i].nodeType == 1) {
			scrollBoxObj.childNodes[i].style.position = 'absolute';
			scrollBoxObj.childNodes[i].style.left = currLeft + 'px';
			currLeft += scrollBoxObj.childNodes[i].offsetWidth; 
			scrollObjs.push(scrollBoxObj.childNodes[i]);
		}
	}
	
	var scrollLeftBtnObj = document.getElementById('scrollleftbtn');
	var scrollRightBtnObj = document.getElementById('scrollrightbtn');
	
	if (scrollObjs.length > 2) {
  	scrollLeftBtnObj.onclick = function () { scrollBtnClick(SCROLL_LEFT); };
  	scrollRightBtnObj.onclick = function () { scrollBtnClick(SCROLL_RIGHT); };
	} else {
  	scrollLeftBtnObj.style.cursor = 'default';
  	scrollRightBtnObj.style.cursor = 'default';
	}
}

function updateFlashZOrder(flashInFront) {
	var flashContainerObj = document.getElementById('flashcontainer');
	var footerContainerObj = document.getElementById('footercontainer');
	
	if (flashInFront) {
	  flashContainerObj.style.zIndex = 2;
	  footerContainerObj.style.zIndex = 1;
	} else {
	  flashContainerObj.style.zIndex = 1;
	  footerContainerObj.style.zIndex = 2;		
	}
}

(d=document).write('<style id="_" type="text/css">object{display:none}</style>');function flashborders(){a=d.getElementsByTagName('object');for(c=0;c<a.length;c++){i=a[c];h=i.outerHTML;g='';b=i.childNodes;for(e=0;e<b.length;e++){f=b[e];if(f.tagName=='PARAM')g+=f.outerHTML}if(d.all)i.outerHTML=h.split('>')[0]+'>'+g+i.innerHTML+'</object>'}d.getElementById('_').disabled=true};v=0;b=(c='Shockwave')+'Flash.';try{v=parseInt(navigator.plugins[c+' Flash'].description.match(/[0-9]+/))}catch(e){c=3;try{while(new ActiveXObject(b+b+c))v=c++}catch(e){}}

window.onload = function() {
	flashborders();
	// Show or hide the default text in the search box
	var searchBoxObj = document.getElementById('searchbox');
	if (searchBoxObj) {
  	var searchInput = searchBoxObj.firstChild;
  	while(searchInput.nodeType == 3) {
		  searchInput = searchInput.nextSibling;
  	}
	  var searchDefaultText = searchInput.value;
  	searchInput.onfocus = function() { searchBoxFocus(true, searchInput, searchDefaultText); };
	  searchInput.onblur = function() { searchBoxFocus(false, searchInput, searchDefaultText); };
	}
	
  // Resize the navigation footer
	var navFooterObj = document.getElementById('navfooter');
	if (navFooterObj) {
	  var mainObj = document.getElementById('main');
		var clearerObj = document.getElementById('clearer');
		var leftNavObj = document.getElementById('leftnav');
		var navFooterHeight = (mainObj.offsetHeight - navFooterObj.offsetTop - clearerObj.offsetHeight);
		var docInnerHeight = getInnerHeight();
	  	if (navFooterHeight < docInnerHeight - navFooterObj.offsetTop - leftNavObj.offsetTop - 1) {
	 	   navFooterHeight = docInnerHeight - navFooterObj.offsetTop - leftNavObj.offsetTop - 1;
	  	}
    	navFooterObj.style.height = navFooterHeight + 'px';
	}
	
	if (document.getElementById('scrollbox')) {
		initScrollBox();
	}
	
  // Call onLoad event handlers
  for (i in loadEventHandlers) {
	  loadEventHandlers[i]();  
	}
}

buildFlash = function(uri, width, height, style, wmode) {
	if (typeof wmode == "undefined") {
		wmode = "transparent";
	}
	
	var flashCode = "<object style=\"" + style + "\" classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" width=\"" + width + "\" height=\"" + height + "\">";
	flashCode += "<param name=\"allowScriptAccess\" value=\"sameDomain\" />";
	flashCode += "<param name=\"movie\" value=\"" + uri + "\" />";
	flashCode += "<param name=\"quality\" value=\"high\" />";
	flashCode += "<param name=\"wmode\" value=\"" + wmode + "\" />";
	flashCode += "<embed style=\"" + style + "\" src=\"" + uri + "\" quality=\"high\" width=\"" + width + "\" height=\"" + height + "\" allowScriptAccess=\"sameDomain\" type=\"application/x-shockwave-flash\" wmode=\"" + wmode + "\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" />";
	flashCode +=" </object>";
	
	document.write(flashCode);
}
