Date.isValidDate = function(day,month,year){
	var dteDate=new Date(year,month,day);
	return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
}
Date.toDDMMYYYY = function(date){
	return date.getUTCDate() + "/" + (date.getUTCMonth()+1)  + "/"+ date.getUTCFullYear();
}
Date.weekShortDays = ["dom","seg","ter","qua","qui","sex","sab"];
Date.monthNames = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
Date.prototype.addDays = function(d){
	var DAY_IN_MS=86400000;
	return this.addMilliseconds(d * DAY_IN_MS);  
}
Date.prototype.addMonths = function(mm){
	var MONTH_IN_MS = 2592000000;
	return this.addMilliseconds(mm * MONTH_IN_MS);  
}
Date.prototype.addYears = function(yy){
	var YEAR_IN_MS=31557600000;
	return this.addMilliseconds(yy * YEAR_IN_MS);  
}
Date.prototype.addMilliseconds = function(ms){
  return new Date(new Date().setTime(this.getTime() + (ms)));
}


function CreateDiv(className)
{
	var div = document.createElement("DIV");
	div.className = className;
	return div;
}
function CreateHRef(child, link, className)
{
	var href = document.createElement("A");
	if (link != null) 
		href.setAttribute("href", link);
	else
		href.setAttribute("href", 'javascript:void(null);');
	
	href.className = className;
	if (child != null)
		href.appendChild(child);
	return href;
}
function setStyleFloat(tag, style)
{
	if (document.all)
		tag.style.styleFloat = style; 
	else
		tag.style.cssFloat = style; 
}
function addTextNode(tag,text)
{
	tag.appendChild(document.createTextNode(text));
}
function findPosX(obj)
{ 
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{ 
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function searchNodeInside(source, searchedNode)
{
	if (source == null) return false;
	if (searchedNode == source) return true;
	if (source.childNodes.length == 0) return false;
	for(var i=0;i<source.childNodes.length;i++)
	{
		if (searchedNode == source.childNodes[i])
			return true;
		if (searchNodeInside(source.childNodes[i], searchedNode))
			return true;
	}
	return false;
}

var EventUtil = new Object;
EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler) 
{
	if (oTarget.addEventListener) { 
		oTarget.addEventListener(sEventType, fnHandler, false);
	} else if (oTarget.attachEvent) { 
		oTarget.attachEvent("on" + sEventType, fnHandler);
	} else { 
		throw new Error("Node {"+oTarget+"} does not support event listeners.");
	}
};		
EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler) 
{
	if (oTarget.removeEventListener) { 
		oTarget.removeEventListener(sEventType, fnHandler, false);
	} else if (oTarget.detachEvent) { 
		oTarget.detachEvent("on" + sEventType, fnHandler);
	} else { 
		oTarget["on" + sEventType] = null;
	}
};
EventUtil.getEvent = function() 
{
	if (window.event) {
		return window.event;
	} else {
		return EventUtil.getEvent.caller.arguments[0];
	}
};
EventUtil.getCharCode = function(oEvent)
{
	return oEvent.charCode || oEvent.keyCode;
}
