// BEGIN: UTILITY FUNCTIONS; 
// beware that these might be moved into a separate library, at some point.
// ALREADY DONE :) - Nidhi Vithlani

Calendar.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;
};

Calendar.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;
};

Calendar.removeClass = function(el, className) 
{
	if (!(el && el.className)) 
	{
		return;
	}
	var cls = el.className.split(" ");
	var currentcls = className.split(" ");
	var ar = oJSFW.fnObjectInitializer('Array',"",[]);
	for (var i = cls.length; i > 0;) 
	{
		for( var j = className.split(" ").length ; j > 0;)
		{
			if (cls[--i] != className.split(" ")[--j]) 
			{
				ar[ar.length] = cls[i];
			}
		}
	}
	el.className = ar.join(" ");
};

Calendar.addClass = function(el, className) 
{
	Calendar.removeClass(el, className);
	el.className += " " + className;
};

Calendar.getElement = function(ev) 
{
	if (Calendar.is_ie) 
	{
		return window.event.srcElement;
	} 
	else 
	{
		return ev.currentTarget;
	}
};

Calendar.getTargetElement = function(ev) 
{
	if (Calendar.is_ie) 
	{
		return window.event.srcElement;
	} 
	else 
	{
		return ev.target;
	}
};

Calendar.stopEvent = function(ev) 
{
	ev || (ev = window.event);
	if (Calendar.is_ie) 
	{
		ev.cancelBubble = true;
		ev.returnValue = false;
	} 
	else 
	{
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
};

Calendar.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;
	}
};

Calendar.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;
	}
};

Calendar.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;
};

// END: UTILITY FUNCTIONS
