
//copiat de Calendar mishoo
DivUtils = function () {
}

// ** constants

/// "static", needed for event handlers.
DivUtils._C = null;

/// detect a special case of "web browser"
DivUtils.is_ie = ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );

DivUtils.is_ie5 = ( DivUtils.is_ie && /msie 5\.0/i.test(navigator.userAgent) );

/// detect Opera browser
DivUtils.is_opera = /opera/i.test(navigator.userAgent);

/// detect KHTML-based browsers
DivUtils.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);


// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate
//        library, at some point.

DivUtils.getAbsolutePos = function(el) {
	var SL = 0, ST = 0;
	var is_div = /^div$/i.test(el.tagName);
	if (is_div && el.scrollLeft)
		SL = el.scrollLeft;
	if (is_div && el.scrollTop)
		ST = el.scrollTop;
	var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
	if (el.offsetParent) {
		var tmp = this.getAbsolutePos(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
};

DivUtils.isRelated = function (el, evt) {
	var related = evt.relatedTarget;
	if (!related) {
		var type = evt.type;
		if (type == "mouseover") {
			related = evt.fromElement;
		} else if (type == "mouseout") {
			related = evt.toElement;
		}
	}
	while (related) {
		if (related == el) {
			return true;
		}
		related = related.parentNode;
	}
	return false;
};

DivUtils.removeClass = function(el, className) {
	if (!(el && el.className)) {
		return;
	}
	var cls = el.className.split(" ");
	var ar = new Array();
	for (var i = cls.length; i > 0;) {
		if (cls[--i] != className) {
			ar[ar.length] = cls[i];
		}
	}
	el.className = ar.join(" ");
};

DivUtils.addClass = function(el, className) {
	DivUtils.removeClass(el, className);
	el.className += " " + className;
};

DivUtils.getElement = function(ev) {
	if (DivUtils.is_ie) {
		return window.event.srcElement;
	} else {
		return ev.currentTarget;
	}
};

DivUtils.getTargetElement = function(ev) {
	if (DivUtils.is_ie) {
		return window.event.srcElement;
	} else {
		return ev.target;
	}
};

DivUtils.stopEvent = function(ev) {
	ev || (ev = window.event);
	if (DivUtils.is_ie) {
		ev.cancelBubble = true;
		ev.returnValue = false;
	} else {
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
};

DivUtils.addEvent = function(el, evname, func) {
	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
};

DivUtils.removeEvent = function(el, evname, func) {
	if (el.detachEvent) { // IE
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) { // Gecko / W3C
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
};

DivUtils.createElement = function(type, parent) {
	var el = null;
	if (document.createElementNS) {
		// use the XHTML namespace; IE won't normally get here unless
		// _they_ "fix" the DOM2 implementation.
		el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
	} else {
		el = document.createElement(type);
	}
	if (typeof parent != "undefined") {
		parent.appendChild(el);
	}
	return el;
};



//aquestes dos son meves


DivUtils.getClientWidth = function() {
	if (navigator.appCodeName=='Mozilla') { 
		return document.body.clientWidth-16; //16 per scrolling bar
	}else if (document.layers) { //per netscape
		return window.innerWidth-16; //16 per scrolling bar
	} else {				//per Explorer
		return document.body.clientWidth-16; //16 per scrolling bar
	}


}

DivUtils.getClientHeight = function() {
	if (navigator.appCodeName=='Mozilla') { 
		return document.body.clientHeight-16; //16 per scrolling bar
	}else if (document.layers) { //per netscape
		return window.innerHeight-16; //16 per scrolling bar
	} else {				//per Explorer
		return document.body.clientHeight-16; //16 per scrolling bar
	}
}

DivUtils.isRelated2 = function(elem, ev) {

	var el = DivUtils.is_ie ? DivUtils.getElement(ev) : DivUtils.getTargetElement(ev);
	for (; el != null && el != elem; el = el.parentNode);
	if (el == null) {
		return false;
	}
	return true;
}

