/*
 ******************************************************************************
 * File: cc_api.js
 * Description: Dom, Browser and Utils objects
 * Usage: 
 * Dept: 
 * Browsers: IE 5+, Mozilla 1+ and Opera 7+
 ******************************************************************************
 * Copyright (C) 2002 Caspar Due [http://caspar.dk/]
 ******************************************************************************
*/

/*
 ******************************************************************************
 * Browser object
 ******************************************************************************
*/
function Browser() {}

Browser.ua = navigator.userAgent.toLowerCase();
Browser.isIE = ((Browser.ua.indexOf("msie") != -1) && (Browser.ua.indexOf("opera") == -1));
Browser.isIE4 = (Browser.isIE && (Browser.ua.indexOf("msie 4")!=-1));
Browser.isIE5_5 = (Browser.isIE && (Browser.ua.indexOf("msie 5.5") !=-1));
Browser.isIE6 = (Browser.isIE && (Browser.ua.indexOf("msie 6.")!=-1));
Browser.isNS6 = ((Browser.ua.indexOf("netscape6/")!=-1) || (Browser.ua.indexOf("gecko")!=-1));
Browser.isNS6_0 = (Browser.ua.indexOf("netscape6/6.0")!=-1);
Browser.isOpera = (Browser.ua.indexOf("opera") != -1);
Browser.isMac = (Browser.ua.indexOf("mac") != -1);
Browser.isGecho = (navigator.product == "Gecko");

browser=Browser;
/*
 ******************************************************************************
 * Dom object
 ******************************************************************************
*/
function Dom() {}

Dom.mouseX = 0;
Dom.mouseY = 0;
Dom.scrollX = 0;
Dom.scrollY = 0;
Dom.current = null;
Dom.dragElm = null;
Dom.isLoaded = false;

Dom._loaded = function() {
	Dom.isLoaded = true;
}

Dom.getOffsetX = function(obj) {
	var currentX = 0;

	while (obj.offsetParent) {
		currentX += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return currentX;
}

Dom.getOffsetY = function(obj) {
	var currentY = 0;

	while(obj.offsetParent)	{
		currentY += obj.offsetTop
		obj = obj.offsetParent;
	}
	return currentY;
}

// Checks if elm1 contains elm2
Dom.contains = function(elm1, elm2) {
	if(elm2) {
		while(elm2.parentNode) {
			if((elm2 = elm2.parentNode) == elm1) {
				return true;
			}
		}
		return false;
	}
	else {
		return false;
	}
}

Dom.trackMouse = function(event) {
	Dom.current = (window.event) ? window.event.srcElement : event.target;
	Dom.mouseX = (window.event) ? window.event.clientX : event.pageX;
	Dom.mouseY = (window.event) ? window.event.clientY : event.pageY;
	Dom.trackScroll();
}

Dom.trackScroll = function() {
	if (typeof(document.body.scrollTop) != "undefined") {
		if(document.compatMode != "CSS1Compat") {
   		Dom.scrollX = document.body.scrollLeft;
   		Dom.scrollY = document.body.scrollTop;
  	}
  	else {
  		Dom.scrollX = document.documentElement.scrollLeft;
   		Dom.scrollY = document.documentElement.scrollTop;
  	}
  }
  else {
   Dom.scrollX = window.pageXOffset;
   Dom.scrollY = window.pageYOffset;
  }
  
  
  
  
  var myWidth = 0, myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      myWidth = window.innerWidth;
      myHeight = window.innerHeight;
    } else if( document.documentElement &&
      ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
      myWidth = document.documentElement.clientWidth;
      myHeight = document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
      //IE 4 compatible
      myWidth = document.body.clientWidth;
      myHeight = document.body.clientHeight;
      }
  Dom.width = myWidth;
  Dom.height = myHeight;
  
  
   
  
}

Dom.getAllElements = function() {
	if (document.all)	{
		return document.all;
	}
	else if(document.getElementsByTagName("*"))	{
		return document.getElementsByTagName("*");
	}
}

Dom.setDragElement = function(poElm) {
	this.dragElm = poElm;
}

Dom.addEvent = function(elm,event,func) {
	switch(event) {
		case "safemouseover":
			_handler = function(event) {
				var current, related;
				current = (window.event) ? elm : event.currentTarget;
				related = (window.event) ? window.event.fromElement : event.relatedTarget;
		
				if(current!=related && !Dom.contains(current,related)) {
					
					eval(func + "(event,elm);");
				}
			}
			
			Dom._addEvent(elm,"mouseover","_handler");
			break;
		case "safemouseout":
			_handler = function(event) {
				var current, related;
				current = (window.event) ? elm : event.currentTarget;
				related = (window.event) ? window.event.toElement : event.relatedTarget;
								
				if(current!=related && !Dom.contains(current,related)) {
					
					eval(func + "(event,elm);");
				}
			}
			
			Dom._addEvent(elm,"mouseout","_handler");
			break;
		default:
			Dom._addEvent(elm,event,func);
	}
}

Dom._addEvent = function(elm,event,func) {
	if(typeof(elm.addEventListener) != "undefined") {
  	elm.addEventListener(event, eval(func), false);
  }
	else if(typeof(elm.attachEvent) != "undefined") {
		elm.attachEvent( "on"+event, eval(func));
	}
	else {
		var oldEvent = eval("elm.on" + event);
		if(oldEvent) {
			var evalString = "elm.on" + event + "= function (event) {" +	"oldEvent(event); " + func + "(event); };";
			eval(evalString);
   	}
   	else {
    	eval("elm.on" + event + "=" + func +";");
		}
	}
}

// Set Dom.isLoaded=true when window is loaded
Dom.addEvent(window,"load","Dom._loaded");
var dom = Dom;
/*
 ******************************************************************************
 * Utils object
 ******************************************************************************
*/
function Utils() {}

Utils.random = function (lower,upper) {
	return (upper < lower) ? 0 : Math.floor(( (upper-lower+1) * Math.random())) + lower;
}

