	/*Função que diz o browser usado pelo user*/
	//var browser = getBrowser().browser;
	function getBrowser () {
		detect = navigator.userAgent.toLowerCase();
		OS = ''; browser=''; version='' ; total=''; thestring='';
		
		if (checkIt('konqueror'))
		{
			browser = "Konqueror";
			OS = "Linux";
		}
		else if (checkIt('safari')) browser = "Safari"
		else if (checkIt('omniweb')) browser = "OmniWeb"
		else if (checkIt('opera')) browser = "Opera"
		else if (checkIt('webtv')) browser = "WebTV";
		else if (checkIt('icab')) browser = "iCab"
		else if (checkIt('msie')) browser = "IE"
		else if (!checkIt('compatible'))
		{
			browser = "Netscape"
			version = detect.charAt(8);
		}
		else browser = "An unknown browser";
		
		if (!version) version = detect.charAt(place + thestring.length);
		
		if (!OS)
		{
			if (checkIt('linux')) OS = "Linux";
			else if (checkIt('x11')) OS = "Unix";
			else if (checkIt('mac')) OS = "Mac"
			else if (checkIt('win')) OS = "Windows"
			else OS = "an unknown operating system";
		}
		return this;
	}

	function checkIt(string)
	{
		place = detect.indexOf(string) + 1;
		thestring = string;
		return place;
	}


	/********Funções de verificações de tipos de variavel*********/
	function isAlien(a) {
	   return isObject(a) && typeof a.constructor != 'function';
	}
	function isArray(a) {
		return isObject(a) && a.constructor == Array;
	}
	function isBoolean(a) {
		return typeof a == 'boolean';
	}
	function isEmpty(o) {
		var i, v;
		if (isObject(o)) {
			for (i in o) {
				v = o[i];
				if (isUndefined(v) && isFunction(v)) {
					return false;
				}
			}
		}
		return true;
	}
	function isFunction(a) {
		return typeof a == 'function';
	}
	function isNull(a) {
		return typeof a == 'object' && !a;
	}
	function isNumber(a) {
		return typeof a == 'number' && isFinite(a);
	}
	function isObject(a) {
		return (a && typeof a == 'object') || isFunction(a);
	}
	function isString(a) {
		return typeof a == 'string';
	}
	function isUndefined(a) {
		return typeof a == 'undefined';
	}
	/* ********************** */

// Redimenciona para um pagina e seta aonde a mesma vai abrir
	function redirect (slink, starget) {
		if (!starget) {
			starget = "_self";
		}
		window.open (slink, starget);
	}
	
	// Recupera o HTML da pagina
	function get_pagehtml() {
		var rng = document.body.createTextRange();
		if (rng!=null) {
			alert(rng.htmlText);
		}
	}
	
	
	// Exibe mensagem se o ESPAÇO for apertado
	function is_KeySpace(){
		var tecla=window.event.keyCode;
		if (tecla==32) {
			alert('por favor, não use espaço, isso evitar vários problemas no seu cadastro'); event.keyCode=0; event.returnValue=false;
		}
	}

	// Retorna a seleção de qualquer texto na pagina
	function GetTextSelected() 
	{
		str = document.selection.createRange().text
		alert(str)
	} 
	
	// Retorna a posição left de um objeto
	function getOffsetLeft (el) {
	  var ol = el.offsetLeft;
	  while ((el = el.offsetParent) != null)
		ol  += el.offsetLeft;
	  return ol;
	}
	
	// Retorna a posição top de um objeto
	function getOffsetTop (el) {
	  var ot = el.offsetTop;
	  while ((el = el.offsetParent) != null)
		ot += el.offsetTop;
	  return ot;
	}
	
	//Cria uma nova janela personalizada
	function new_window(slink, iwidth, iheigth) {
		window.open(slink,'','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,menubar=no,width='+iwidth+',height='+iheigth);
	}
	
	//Envia um formulario
	function OnSubmitForm(form, src) {
		 form.action = src;	
		 //alert(form.name);
		 form.submit();
		   
	}
	
	//Cria uma pagina em uma nova janela atravez de codigo html
	function openRemotePage (htmlString, iwidth, iheight) {
		linkPage = htmlString;
		remote = window.open("","remotewin","width="+iwidth+",height="+iheight);
		remote.document.write (linkPage);
		remote.document.close()
	}
	
	// Está funções/classe registra objectos em um ARRAY
		b_frm = Array();	
		// Registra os objetos. Se o objecto ja tiver registrado nela a função retorna FALSE caso contrario TRUE	
		function RegistryObject(src) {
			// Se o for igual a "1" é pq o objeto ja foi registrado para a função
			if (b_frm[src.name]==1) {
				return false;
			}
			b_frm[src.name] = 1;
			return true;
		}
		// Limpa todos os registros
		function clearObjRegistrys() {
			b_frm = Array();	
		}
	// Fim da classe
	
	function IsSubmit(src) {
		if (!RegistryObject(src)) {
			alert("Você já enviou estas informações.");
			return false;
		}
		return true;
	}
	
	// Muda status de visibilidade de um objeto
	function objVisibility (obj, visible) {
		obj = document.getElementById(obj);
		if (visible) {
			obj.style.visibility = 'visible';
		}
		else {
			obj.style.visibility = 'hidden';
		}
	}
	
	// Alinha um objeto em relação a outro, os paremetros diffX e diffY são utilizados para regular possiveis indiferenças de alinhamento
	function alignObjectByReference (ObjName, refName, directionX, directionY, diffX, diffY) {
		objRef  = document.getElementById(refName);
		elmt     = document.getElementById(ObjName);
		
		refLeft  = getOffsetLeft(objRef);
		refTop   = getOffsetTop(objRef);
		
		switch (directionX) {
			case 0:
				elmt.style.left = refLeft - elmt.offsetWidth;						
				break;
			case 1:
				elmt.style.left = refLeft; 
				break;
			case 2:
				elmt.style.left = (refLeft + objRef.offsetWidth) - parseInt(elmt.style.width); 
				break;
			case 3:
				elmt.style.left = refLeft + parseInt(objRef.offsetWidth); 
				break;
		}
		
		switch (directionY) {
			case 0:
				elmt.style.top = refTop - elmt.offsetHeight;			
				break;
			case 1:
				elmt.style.top = refTop;
				break;
			case 2:
				elmt.style.top = (refTop + objRef.offsetHeight) - parseInt(elmt.style.height);;
				break;
			case 3:
				elmt.style.top = refTop + parseInt(objRef.offsetHeight);
				break;
		}
		
		if (diffX) {
			elmt.style.left = parseInt(elmt.style.left) + diffX;
		}
		if (diffY) {
			elmt.style.top = parseInt(elmt.style.top) + diffY;
		}
	}
	
	var istatus 	= 0
	var dropdown 	= '';
	var in_dropdown 	= 0;
	var elmt		= 0;
	
	// Funcção que cria um menu drapDraw alinha e configurado
	function showMenuDropDown(main, refName, directionX, directionY, diffX, diffY) {
		
		objRef 	= document.getElementById(refName);
		elmt   	= document.getElementById(main);
		refLeft    = getOffsetLeft(objRef);
		refTop    = getOffsetTop(objRef);
		
		alignObjectByReference(main, refName, directionX, directionY, diffX, diffY);
		
		elmt.onclick = function () { event.cancelBubble = true;  };
		if (istatus == 1) {
		//	alert (2);
			hiddenMenuDropDown(main);
			istatus = 0;
			return '';
		}
		
		document.body.onclick = hiddenMenuDropDown;
		
		event.cancelBubble=true;	
		elmt.style.visibility = 'visible';
		istatus = 1;
	}
	
	function hiddenMenuDropDown() {
		//alert (1);
		event.cancelBubble = true;
	
		if (elmt) {
			elmt.style.visibility  = 'hidden';
			istatus = 0 ;
		}
	}
	
	// Funções de controle de scroll bar
	
	var timer		= 0;
	var RealWidth   = 0;
	var RealHeight  = 0;
	var __startX__	= 0, __startY__=0, __TopScrollHeight__=0;
	var __ObjTopCurrentPosition__ = 0;
	var __scrollSpeed__ = 1;
	
	function setScrollPosition(obj, TopScrollHeight, startX, startY) {	
		//alert(1);
		if (!isObject(obj)) {
			obj = document.getElementById(obj);		
		}
		__ObjTopCurrentPosition__ = obj;
		//alert(obj);
		__startX__ = startX;
		__startY__ = startY;
		
		if (__startX__)
			__ObjTopCurrentPosition__.style.left = __startX__;
		else 
			__startX__ = parseInt(__ObjTopCurrentPosition__.style.left);
	
		if (__startY__)
			__ObjTopCurrentPosition__.style.top  = __startY__;
		else 
			__startY__ = parseInt(__ObjTopCurrentPosition__.style.top);
	
		__TopScrollHeight__ = TopScrollHeight;
		//alert(__ObjTopCurrentPosition__.style.left);
	}
	
	// Função que recupera o tamanho real do conteúdo
	function setSize(src) {
		//
		// Recupera os reais tamanho do conteudo do Scroll Bar
		// OBS: o valor final do scrollTop sempre será o tamanho REAL (seja width ou height) MENOS o tamanho da MASCARA de CONTEUDO, ou seja,
		// o tamanho do DIV.. isso pois a soma de rolagem conta apartir do conteudo À ser visto, e os primeiros conteudo já são mostrados
		//
		RealHeight = document.getElementById((src+"Content")).offsetHeight;
		RealWidth  = document.getElementById((src+"Content")).offsetWidth;
	}
	
	
	var newTopScrollHeight=0;
	function setTopCurrentPosition(src, direction, posDefault) {
		//
		// Só entra se o tamanho da mascara de scroll for menor que o tamanho real do conteudo
		//
		if (document.getElementById(src).offsetHeight<RealHeight) {
			TopScrollHeight = (__TopScrollHeight__ ? __TopScrollHeight__ : document.getElementById(src).offsetHeight);
			//
			// Recupera a constante para o andamento do scroll
			//
			var constSCroll = (RealHeight - document.getElementById(src).offsetHeight)/__scrollSpeed__;
			constSCroll 	= TopScrollHeight / constSCroll;
			//alert(constSCroll);
			newTopScrollHeight = newTopScrollHeight + constSCroll;
	
			//alert(newTopScrollHeight +"--"+ __TopScrollHeight__);
			if (direction=='dawn') {
				if (newTopScrollHeight>__TopScrollHeight__)
					newTopScrollHeight = __TopScrollHeight__;
				__ObjTopCurrentPosition__.style.top = __startY__ + newTopScrollHeight;
			}
			else {		
				// Diminiu 2 de constSCroll pois ele eh somando acima 
				newTopScrollHeight = newTopScrollHeight - (constSCroll*2);
	
				if (newTopScrollHeight<0) {
					newTopScrollHeight = 0;				
				}
				//alert(newTopScrollHeight)
				__ObjTopCurrentPosition__.style.top = __startY__ + newTopScrollHeight;
			}
			
			// se for solicitado que o ponteiro vah para a posicao default (padrao) da direcao, seja o padrao de UP ou de DOWN
			if (posDefault && direction=='up') {
				newTopScrollHeight = 0;
				__ObjTopCurrentPosition__.style.top = __startY__;
			}
			else if (posDefault && direction=='down') {
				newTopScrollHeight = __TopScrollHeight__;
				__ObjTopCurrentPosition__.style.top = __startY__ + __TopScrollHeight__;			
			}
		}
	}
	
	function scrollDown(src){
		topAnt = document.getElementById(src).scrollTop;
		document.getElementById(src).scrollTop += __scrollSpeed__;
		
		// Seta o tamanho real do conteúdo
		setSize(src);
			
		if (__ObjTopCurrentPosition__) {
			setTopCurrentPosition(src, 'dawn');
		}
	
		
		if (document.getElementById(src).scrollTop==topAnt) {
			//alert(document.getElementById(src).scrollTop + " - " + RealHeight);
			scrollStop();
			return false;
		}
		var funcstop = "scrollDown('"+src+"')";
		timer = setTimeout(funcstop, 10);
	}
	function scrollUp(src){
		document.getElementById(src).scrollTop -= __scrollSpeed__;
	
		// Seta o tamanho real do conteúdo
		setSize(src);
		
		if (__ObjTopCurrentPosition__) {
			setTopCurrentPosition(src, 'up');
		}
		
		if (document.getElementById(src).scrollTop==0) {
			scrollStop();
			return false;
		}
			var funcstop = "scrollUp('"+src+"')";
			timer = setTimeout(funcstop, 10);
	}
	function scrollStop(){
		clearTimeout(timer);
	}
	function GoToTop(src) {
		document.getElementById(src).scrollTop = 0;
		if (__ObjTopCurrentPosition__) {
			setTopCurrentPosition(src, 'up', true);
		}
	}
	function GoToBottom(src) {
		elemts = document.getElementById(src);
		setSize(src);
		document.getElementById(src).scrollTop = RealHeight;
		scrollStop()
		if (__ObjTopCurrentPosition__) {
			setTopCurrentPosition(src, 'down', true);
		}
	}