function $(strId)
{
	var i, arrReturn,arrStrId;
	if(arguments.length > 1)
	{
		arrStrId = new Array();
		for(i=0; i<arguments.length; i++)
			arrStrId.push(arguments[i]);
	}
	
	if(strId instanceof Array)
	{
		arrStrId = strId;
	}
	
	if(arrStrId instanceof Array)
	{
		arrReturn = new Array();
		for(i=0; i<arrStrId.length; i++)
			arrReturn[i] = document.getElementById(arrStrId[i]);
	}
	else
	{
		arrReturn = document.getElementById(strId);
	}
	
	return arrReturn;
}

function $tags(strTagName,objParentNode)
{
	if(typeof objParentNode == "undefined")
	{
		objParentNode = document;
	}
	
	return objParentNode.getElementsByTagName(strTagName);
}


function $before(objNew,objRefer)
{ 
	return objRefer.parentNode.insertBefore(objNew,objRefer);
}

/*
*	@name: $after(objNew,objRefer)
*	@param: objNew => Node Object
*	@param: objRefer => Node Object
*	@return: Node Object
*	@description: Insere o objeto "objNew" logo abaixo na arvore de n� do objeto "objRefer"
*/
function $after(objNew,objRefer)
{ 
	return objRefer.parentNode.insertBefore(objNew,objRefer.nextSibling);
}

/*
*	@name: $replace(objNew,objOld)
*	@param: objNew => Node Object
*	@param: objOld => Node Object
*	@return: Node Object, false
*	@description: Substitue o objeto "objOld" pelo objeto "objNew"
*/
function $replace(objNew,objOld)
{
	if(objOld.parentNode)
	{
		return objOld.parentNode.replaceChild(objNew,objOld);
	}
	else
	{
		return false;
	}
}

/*
*	@name: $newTN(strConteudo) 
*	@param: strConteudo => String
*	@return: Text Node Object, false
*	@description: Cria e retorna um text node com o conteudo passado em "strConteudo"
*/
function $newTN(strConteudo)
{
	if(typeof strConteudo == "string")
	{
		return document.createTextNode(strConteudo);
	}
	else
	{
		return false;
	}
}

/*
*	@name: $new(strTagName, strParams, strConteudo)
*	@param: strTagName => String
*	@param: strParams => String, Array of strings; ex: "href=#" or ["href=#","target=_blank"]
*	@param: strConteudo => String, Array of objects or strings
*	@return: Node Object
*	@description: Cria um novo elemento do tipo "strTagName". O parametro "strParams" sao as propriedades que serao aplicadas ao objeto.
*				  "strParams" pode ser uma string, caso seja apenas uma propriedade, ou um vetor, para n propriedades.
*				  O parametro "strConteudo" e o conteudo. Pode ser passado como um vetor ou diretamente. Aceita-se como
*				  valor objetos ou string.
*/
function $new(strTagName, strParams, strContent)
{
	var i, j, newElement, arrParameters;
	var fixIEParams = ["name","enctype"];
	
	if(typeof strContent == "undefined")
	{
		strContent = strParams;
		strParams = null;
	}
	
	if(document.all)
	{
		strTagName = '<'+strTagName+' ';
		
		if(strParams instanceof Array)
			for(i=0; i<strParams.length && (arrParameters = strParams[i].split("=")); i++)
				for(j=0; j<fixIEParams.length; j++)
				{
					if(arrParameters[0] == fixIEParams[j]) strTagName += arrParameters[0]+'="'+arrParameters[1]+'" ';
				}
		else
			if(typeof strParams == "string" && ( arrParameters = strParams.split("=")) )
				for(j=0; j<fixIEParams.length; j++) if(arrParameters[0] == fixIEParams[j]) strTagName += arrParameters[0]+'="'+arrParameters[1]+'" ';
		
		strTagName += '>';
	}
	
	newElement=document.createElement(strTagName);
	
	if(strParams instanceof Array)
	{
		for(i=0; i<strParams.length && (arrParameters = strParams[i].split("=")); i++)
		{	
			newElement[arrParameters[0]] = arrParameters[1];
		}
	}
	else
	{
		if(typeof strParams == "string" && ( arrParameters = strParams.split("=")) )
		{
			newElement[arrParameters[0]] = (arrParameters.length==2) ? arrParameters[1] : "";
		}
	}

	if(strContent instanceof Array)
	{
		for(i=0; i<strContent.length; i++)
		{
			(typeof(strContent[i]) =="string") ? $append($newTN(strContent[i]), newElement) : $append(strContent[i], newElement);
		}
	}
	else
	{
		$append(strContent, newElement);
	}
	
	return newElement;
}

/*
*	@name: $append(objNode, objParentNode)
*	@param: objNode => Node Object, String, Array of Node Objects or Strings
*	@param: objParentNode => Node Object
*	@return: Integer
*	@description: Adiciona o "objNode" como ultimo no filho de "objParentNode". Se "objNode" for uma string
*				  e criada um Text Node e adicionado como ultimo no. Caso "objParentNode" nao seja definido e tomado
*				  como padrao "document.body"
*/
function $append(objNode, objParentNode)
{
	var i;
	if(typeof(objParentNode) == "undefined")
	{
		objParentNode = document.body;
	}
	
	if(objNode=="" || objNode == null)
	{
		return true;
	}
	if(objNode instanceof Array)
	{
		for(i=0; i<objNode.length; i++)
		{
			$append(objNode[i], objParentNode);
		}
	}
	else
	{
		if(typeof(objNode) == "string")
		{
			objParentNode.appendChild($newTN(objNode))
		}
		else
		{
			objParentNode.appendChild(objNode);
		}
	}
	
	return objParentNode.childNodes.length;
}

/*
*	@name: $remove(objNode)
*	@param: objNode => Node Object
*	@return: void
*	@description: Remove o elemento "objNode"
*/
function $remove(objNode)
{
	if(objNode && objNode.parentNode)
	{
			objNode.parentNode.removeChild(objNode);
	}
}

/*
*	@name: getStc(evt)
*	@param: evt => Event Object
*	@return: void
*	@description: Retorna o objeto no qual o evento foi realizado
*/
function getSrc(evt)
{
	if(typeof(evt) == "undefined")
	{
		evt=window.event;
	}
	
	var objSrc=evt.target?evt.target:evt.srcElement;
	
	if(objSrc.nodeType==3)
	{
		objSrc=objSrc.parentNode;
	}
	return objSrc;
}

/*
*	@name: cEvt(evt)
*	@param: evt => Event Object
*	@return: false
*	@description: Cancela o efeito do evento "evt"
*/
function cEvt(evt)
{
	try 
	{ 
		evt.preventDefault();
	}
	catch(e)
	{
		event.returnValue=false;
	} 
	
	return false;
}

/*
*	@name: JSON(t)
*	@param: t => String
*	@return: mixed
*	@description: Interpreta a string no formato JSON
*/
function JSON(t)
{
	try
	{
		return eval("["+t+"]")[0];
	}
	catch(e)
	{
		throw("Eval Error on code:\n"+t);
	}
}


/*
*	@name: addClass(objTarget, strClass)
*	@param: objTarget => Node Object
*	@param: strClass => String
*	@return: String
*	@description: Adiciona a class strClass ao objeto objTarget caso ele não possua essa classe
*/
function addClass(objTarget, strClass)
{
	if(hasClass(objTarget, strClass))
	{
		return false;
	}
  	
	return objTarget.className = ((objTarget.className) ? objTarget.className : '') +' '+ strClass;
}

/*
*	@name: hasClass(objTarget, strClass)
*	@param: objTarget => Node Object
*	@param: strClass => String
*	@return: Boolean
*	@description: Verifica se o objTarget já possui a classe strClass
*/
function hasClass(objTarget, strClass)
{
	var n, i, tToks=objTarget.className.split(' ');
	for (n=tToks.length; n--; )
	{
		if(tToks[n]==strClass)
		{
			return true;
		}
	}
	return false;
}

/*
*	@name: removeClass(objTarget, strClass)
*	@param: objTarget => Node Object
*	@param: strClass => String
*	@return: String
*	@description: Remove a classe strClass de objTarget, se ele possuir
*/
function removeClass(objTarget, strClass)
{
	if(!objTarget.className)
	{
		return '';
	}
	
	var n, i, tRs=[], tToks=objTarget.className.split(' ');
  	for(n=tToks.length, i=0; i<n; i++)
	{
		if(tToks[i]!=strClass)
		{
			tRs[tRs.length]=tToks[i];
		}
	}
	
	return objTarget.className = (tRs.length ? tRs.join(' ') : '');
}

/*
*	@name: getPosition(e)
*	@param: e => Event Object
*	@return: Object
*	@description: Retorna um objeto possuido as propriedades x e y que representa as coordenadas do mouse no evento e
*/
function getPosition(e)
{
	e = e || window.event;
	var cursor = {x:0, y:0};
	if (e.pageX || e.pageY)
	{
		cursor.x = e.pageX;
		cursor.y = e.pageY;
	} 
	else
	{
		cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		cursor.y = e.clientY + (document.documentElement.scrollTop ||  document.body.scrollTop) -  document.documentElement.clientTop;
	}
	return cursor;
}

/*
*	@name: addEvent(objTarget, strEvtType, fnFunction, useCapture, arrParams)
*	@param: objTarget => Node Object
*	@param: strEvtType => String
*	@param: fnFunction => Function Object
*	@param: useCapture => Boolean
*	@param: arrParams => Array
*	@return: Boolean
*	@description:
*/
function addEvent(objTarget, strEvtType, fnFunction, useCapture, arrParams)
{
	if(!objTarget) return false;
	
	var fnNewFunction;

	if(typeof arrParams != "undefined")
	{
         /** Se for necessario passar varios argumentos em arrParams  */
		if ( typeof(arrParams) != 'string' )
		{
			var arrParamsToFunction = []; // Iniciamos um array que contera as mensagens de erro
			for ( var i = 0; i < arrParams.length; i++ )
			{
				arrParamsToFunction.push(arrParams[i]);
			}
			
			fnNewFunction = function() { fnFunction.apply(objTarget,[arrParamsToFunction]); };
		}
		else
		{
			fnNewFunction = function() { fnFunction.apply(objTarget, [arrParams]); };
		}
	}
	else
	{
		fnNewFunction = fnFunction;
	}

	if (objTarget.addEventListener)
	{
		objTarget.addEventListener(strEvtType, fnNewFunction, useCapture);
		return true;
	}
	else
	{
		if (objTarget.attachEvent)
		{
			return objTarget.attachEvent('on' + strEvtType, fnNewFunction);
		}
		else
		{
			objTarget['on' + strEvtType] = fnNewFunction;
		}
	}
};

/*
*	@name: remEvent(o, evType, fn)
*	@param: objTarget => Node Object
*	@param: strEvtType => String
*	@param: fnFunction => Function Object
*	@return: Boolean
*	@description:
*/
function remEvent(objTarget, strEvtType, fnFunction)
{
	if (document.detachEvent)
	{
		objTarget.detachEvent('on'+ strEvtType, fnFunction, true);
		return true;
	}
	
	if (objTarget.removeEventListener)
	{
		objTarget.removeEventListener(strEvtType, fnFunction, true);
		return true;
	}
}
/*MENSAJES DE AYUDA*/

if(location.href.match(/https/))
	var url = "";
else
	var url = "";
//////// Prototype's $ function
///////////////////////////////
function $jt(){
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) { 
    var element = arguments[i];
    if (typeof element == 'string')
	  element = document.getElementById(element);
    if (arguments.length == 1)	
      return element;
    elements.push(element);
  }
  return elements;
}



/////////Prototypes Clipp functions
///////////////////////////////////
function makeClipping(element){ 
	if (element._overflow) return element;
    element._overflow = element.style.overflow || 'auto';
    if ((element.style.overflow || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
    return element;
}
/////////Prototypes Clipp functions
///////////////////////////////////
function undoClipping(element){
	if (!element._overflow) return element;
	element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
}
/////////Prototypes Dimention functions
///////////////////////////////////////
function getDimentions(e){
	element = e;
	var display = element.style.display;
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};
	var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
}

//////// Tooltip code
///////////////////////
var offsetfromcursorX=12
var offsetfromcursorY=10
var offsetdivfrompointerX=10
var offsetdivfrompointerY=14
var table  = '<div id="tooltip" style="display:none; position:absolute;z-index: 100;opacity: .9;filter: alpha(opacity=90);">';
    table += '<table border="0" cellpadding="0" cellspacing="0">';
    table += '  <tr><td width="1" height="8" background="'+url+'/images/tooltip_top.gif"></td>';
    table += '    <td align="left" background="'+url+'/images/tooltip_top.gif"><img src="'+url+'/images/tooltip_arrow.gif" width="20" height="8" /></td>';
    table += '    <td width="1" background="'+url+'/images/tooltip_top.gif"></td>';
    table += '  </tr><tr>';
    table += '  <td bgcolor="#42371B"></td>';
    table += '    <td bgcolor="#FBF6EA"><div style="padding:10px; font-family:\'Trebuchet MS\'; font-size:12px; color:black" id="tooltipinner"></div></td>';
    table += '    <td bgcolor="#42371B"></td>';
    table += '  </tr><tr>';
    table += '    <td height="1" bgcolor="#42371B"></td>';
    table += '    <td bgcolor="#42371B"></td>';
    table += '    <td bgcolor="#42371B"></td>';
    table += '  </tr>';
    table += '</table>';
    table += '</div>';
document.write(table)
var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
if (ie||ns6)
var tipobj     = document.all? document.all["tooltipinner"] : document.getElementById? $jt("tooltipinner") : ""
var pointerobj = document.all? document.all["tooltip"]      : document.getElementById? $jt("tooltip") : ""
function ietruebody(){
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}
function ddrivetip(thetext, thewidth, thecolor){
	if(thetext != ""){
		if (ns6||ie){
		 	if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px";
			if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor;
			tipobj.innerHTML=thetext;
			enabletip=true;
			return false;
		}		
	}
}
function positiontip(e){
	if (enabletip){
		var nondefaultpos=false
		var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
		var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
		var winwidth=ie&&!window.opera? ietruebody().clientWidth : window.innerWidth-20
		var winheight=ie&&!window.opera? ietruebody().clientHeight : window.innerHeight-20
		var rightedge=ie&&!window.opera? winwidth-event.clientX-offsetfromcursorX : winwidth-e.clientX-offsetfromcursorX
		var bottomedge=ie&&!window.opera? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY
		var leftedge=(offsetfromcursorX<0)? offsetfromcursorX*(-1) : -1000
		if (rightedge<tipobj.offsetWidth){
			tipobj.style.left=curX-tipobj.offsetWidth+"px"
		nondefaultpos=true
	}
	else if (curX<leftedge)
		tipobj.style.left="5px"
	else{
		tipobj.style.left=(curX+offsetfromcursorX-offsetdivfrompointerX-25)+"px" //position the horizontal position of the menu where the mouse is positioned
		pointerobj.style.left=(curX+offsetfromcursorX-25)+"px"
	}
	if (bottomedge<tipobj.offsetHeight){
		tipobj.style.top=(curY-tipobj.offsetHeight-offsetfromcursorY+15)+"px"
		nondefaultpos=true
	}
	else{
		tipobj.style.top=curY+offsetfromcursorY+offsetdivfrompointerY+"px"
		pointerobj.style.top=curY+offsetfromcursorY+"px"
	}
	//tipobj.style.visibility="visible"
	tipobj.style.display = "block"
	pointerobj.style.display = "block"
	}
}
function hideddrivetip(){
	if (ns6||ie){
		enabletip=false
		//tipobj.style.visibility="hidden"
		tipobj.style.display = "none"
		pointerobj.style.display = "none"
		tipobj.style.left="-1000px"
		tipobj.style.backgroundColor=''
		tipobj.style.width=''
	}
}
document.onmousemove=positiontip
//////// Validation library V2
//////////////////////////////
var errored = false;            // Global for validate function
var exClassName = new Object(); // Global for Changed classnames
var styleAdded = false;         // Global for checking sytle status
function validate(elem,type,option){	// Main function
	var option = (option)? option : "";
	if(!styleAdded){			// Add style for Error warnings
		var style = document.createElement('style');
		var sprop  = '.error{ border:2px red solid; background:#FCFCFC; }';
		    sprop += '.Errortext{ color:#FF0000;font-family:"Trebuchet MS"; font-size:11px; }';
            sprop += '.DivErrortext{ border:1px solid #ccc;margin:4px; padding:5px; background:lightyellow; color:#FF0000;font-family:"Trebuchet MS"; font-size:11px; }';
		style.setAttribute("type", "text/css");
		if (style.styleSheet){   // for IE
			style.styleSheet.cssText = sprop;
		} else {
			var newStyle = document.createTextNode(sprop);
			style.appendChild(newStyle);
		}
		document.getElementsByTagName('head')[0].appendChild(style);
		styleAdded = true; //don't add again.
	}
	
	
	
	/////////////
	// Function to check is error printed?
	var checkForErrorDiv = function(elem){
		for(var node = 0;node < elem.parentNode.childNodes.length; node++)
			if(elem.parentNode.childNodes[node].className == "Errortext")
				return true;
		return false;
	}
	
	/////////////
	// Function to define errors and print messages
	var error = function(elem, type, message){
		correct(elem);
		if(!checkForErrorDiv(elem)){
			div = document.createElement("div");
			div.innerHTML = (message)? message : getMsg(type);
			div.className = "Errortext";
			elem.parentNode.appendChild(div);
			//elem.parentNode.insertBefore(div, elem.nextSibling);
		}
		if(elem.className != "error")
			exClassName[elem.name] = elem.className;
		if(elem.type != "checkbox" && elem.type != "radio"){
			elem.className = "error";
		}
		errored = true;
		return true;
	}
	
		
}

