/**
 * Arquivo das funções do Enturma
 *
 * Todas as funções que são genéricas ou utilizadas em todo o sistema devem
 * estar neste arquivo encapsuladas no namespace Enturma
 */

/*
 * 
 * Identify IE versions
 * From: http://stackoverflow.com/questions/209043/browser-version-in-prototype-library
 * 
 */

Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
Prototype.Browser.IE9 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 9;
Prototype.Browser.IE8 =	Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7 && !Prototype.Browser.IE9;



/**
 * @todo ENTURMA_3_1_0: Move this functions to another place...
 * @todo ENTURMA_3_1_0: Create documentation
 */
 
//Util methods added to the Prototype framework -- Gabriel R. Giannattasio
Element.addMethods( { 
  toHTML: function(element) { 
    if (typeof element=='string') element = $p(element);  // IE needs that check with XML 
    return Try.these( 
      function() { 
        var xmlSerializer = new XMLSerializer(); 
        return  element.nodeType == 4 ? element.nodeValue : xmlSerializer.serializeToString(element); 
      }, 
      function() { 
        return element.xml || element.outerHTML || $p(element).clone().wrap().up().innerHTML;
      } 
    ) || ''; 
  }, 
  getStyles: function(element) { 
  element = $p(element); 
  return $A(element.style).inject({}, function(styles, styleName) { 
    styles[styleName.camelize()] = element.getStyle( styleName ); 
    return styles; 
  }); 
  }, 
  clone: function(element) { 
    var clone = new Element(element.tagName); 
    $A(element.attributes).each(function(attribute) { 
	  if ( attribute.name != 'style' ) clone[attribute.name] = attribute.value; 
	}); 
    clone.setStyle( element.getStyles() ); 
    clone.update(element.innerHTML); 
    return clone; 
  } 
}); 

//Todo: Fazer uma classe que extendida para implementar observadores diversos
//Class for implement observing element style changes -- Gabriel R. Giannattasio
StyleObserver = Class.create(Abstract.TimedObserver, {
  observedStyle: '', //the name of observed style property
 
  /**
   * overriding initialisation method, cause we need to set the name of style property we want to observe
   */
  initialize: function($super, element, frequency, callback, observedStyle) {
    $super(element, frequency, callback); //we need to call initialize method of parent class. See [1]
    this.observedStyle= observedStyle;    
  },
 
  /**
    * this is the key funtion. TimedObserver will call it with {{frequency}}
    * try to keep this method short and fast, cause it will be called many times
    */
  getValue: function() {
     return Element.getStyle(this.element, this.observedStyle);
  }
});

//Class for implement observing element html changes -- Gabriel R. Giannattasio
offsetHeightObserver = Class.create(Abstract.TimedObserver, {
 
  /**
   * overriding initialisation method, cause we need to set the name of style property we want to observe
   */
  initialize: function($super, element, frequency, callback) {
    $super(element, frequency, callback); //we need to call initialize method of parent class. See [1]
  },
 
  /**
    * this is the key funtion. TimedObserver will call it with {{frequency}}
    * try to keep this method short and fast, cause it will be called many times
    */
  getValue: function() {
     return this.element.offsetHeight;
  }
});

//Exemple:
/*
new StyleObserver(
    $p(element),
    1, //1 second period
    function(el,value){   //the callback  
        alert('new display: ' + value)
    }, 
    'display'   //the style you want to observe
);
*/

var cancelSubmit = true;

//Inicia Enturma
Enturma = {
	/**
	 * Realiza uma chamada AJAX
	 *
	 * Esta função abre automaticamente a caixa de carregamento e a fecha no
	 * final da conexao. Em caso de erros, eles são tratados da maneira padrão
	 * ou por callback.
	 *
	 * Cuidado: Sempre passe o ajaxOptions contendo:
	 *   [successCallback]     Callback para sucesso
	 *   [errorCallback]       Callback para erros
	 *   [parameters]          Parametros que serao repassados para as funcoes
	 *                         de callback
	 *
	 * A ordem dos parametros enviados para a funcao Callback sera sempre:
	 * ( request.responseText, parameters )
	 *
	 * A variável `request' será repassada com o nome _request nos parâmetros.
	 *
	 * @param id - ID do elemento a ser atualizado
	 * @param url - URL a ser chamada
	 * @param enturmaOptions - Array de opcoes para callback
	 * @param ajaxOptions - Opcoes para a chamada ajax
	 *
	 * TODO: Tratamento de erros
	 */
	callFunction: function (id, url, enturmaOptions, ajaxOptions) {
		var options = Object.extend( {
			onLoading: function(request) {
				Enturma.showLoadLayer();
			},
			onComplete: function(request) {
				Enturma.hideLoadLayer();
				parameters = Object.extend(enturmaOptions["parameters"], {_request: request});
				enturmaOptions["successCallback"](request.responseText, parameters);
			},
			encoding: 'ISO-8859-1'
		},
		ajaxOptions || {} ); // extend

		new Ajax.Updater($p(id), url, options);
	},
	/**
	 * Retorna o tamanho (largura, altura) maior da janela
	 * @return [width, height]
	 */
	getWindowSize: function () {
		var width=0, height=0;
	    if (window.clientHeight) {
			width = window.clientWidth;
			height = window.clientHeight;
		}
		if (top) {
			var doc = top.document;
		} else {
			var doc = document;
		}
		if (doc && doc.body)	{
			var width2 = doc.body.clientWidth;
			var height2 = doc.body.clientHeight;
			if (width2 > width) width = width2;
			if (height2 > height) height = height2;
			if (doc.body.scrollHeight > height)
				height = doc.body.scrollHeight;
			if (doc.body.scrollWidth > width)
				width = doc.body.scrollWidth;
		}
		if (document.documentElement && document.documentElement.clientWidth) {
			var width3 = document.documentElement.clientWidth;
			var height3 = document.documentElement.clientHeight;
			if (width3 > width) width = width3;
			if (height3 > height) height = height3;
		}

		var obj = document.getElementsByTagName('html')[0];
		if (obj.offsetHeight && obj.offsetHeight > height) {
			height = obj.offsetHeight;
		}
		if (obj.offsetWidth && obj.offsetWidth > width) {
			width = obj.offsetWidth;
		}
		if (document.body) {
			if (document.body.offsetHeight && document.body.offsetHeight > height) {
				height = document.body.offsetHeight;
			}
			if (document.body.offsetWidth && document.body.offsetWidth > width) {
				width = document.body.offsetHeight;
			}
		}
		return [width, height];
	},
	/**
	 * Retorna o tamanho (largura, altura) apenas da area visivel
	 * @return [width, height]
	 */
	getWindowVisibleSize: function () {
		var width = 0;
		var height = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
			//Firefox, Opera, Safari, etc...
			width = window.innerWidth;
			height = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ em modo padrao
			width = document.documentElement.clientWidth;
			height = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4
			width = document.body.clientWidth;
			height = document.body.clientHeight;
		}
		return [width, height];
	},
	
	popUp:function (url, width, height, name, center, scroll) {
		if (name == '')   name = 'janela';
		if (center == '') center = false;
		var args = "width="+width+",height="+height;
		if (center && screen && screen.availWidth) { // Centralizar
			var l = (screen.availWidth-10 - width) / 2;
			var t = (screen.availHeight-20 - height) / 2;
			args += ",left="+l+",top="+t+",screenX="+l+",screenY="+t;
		}
		if (scroll) {
			args += ",scrollbars=yes";
		} else {
			args += ",scrollbars=no";
		}
		args += ",resizable=yes,location=no";
		args += ",menubar=no,toolbar=no,status=yes,titlebar=no,directories=no";
		if (url.indexOf('?') == -1)
			url = url + '?popup=1';
		else
			url = url + '&popup=1';
		window.open(url, name, args);
		finished();
	},
	/**
	 * Modifica o cursor padrão
	 */
	setCursor: function(cursor) {
		document.body.style.cursor = cursor;
		parent.document.body.style.cursor = cursor;
	},
	/**
	 * Fecha uma janela
	 */
	closeWindow: function(id) {
		var obj = $p(id);
		if (obj != 'undefined' && obj != undefined) {
			Enturma.hide(obj);
		}
	},
	/**
	 * Move elemento de acordo com clique do mouse.
	 */
	moveElement: function(id, e, x, y) {
		var obj = $p(id);
		var xx;
		var xy;
		if (obj) {
			if (x && y) {
				xx = x;
				xy = y;
			}
			else {
				var srcElem = e.srcElement || e.target;
				var height = Element.getHeight(srcElem);
				var pos = (Element.positionedOffset(srcElem));
				
				xx = parseInt(pos[0]);
				xy = parseInt(pos[1]) + parseInt(height);
			}
			obj.style.left = xx +'px';
			obj.style.top = xy +'px';
		}
		return true;
	},
	/**
	 * Seta as propriedades da layer de bloqueio e apresenta na tela
	 * @param elementToShow: id elemento a ser mostrado por cima do block
	 * @param elementToFocs: id elemento a ser focado depois de mostrar elementToShow
	 */
	showBlockLayer: function(elementToShow, elementToFocus) {
		var size = Enturma.getWindowSize();
		var width = 0;
		var height = size[1];

		var blockLayer = $p('blockLayer');
		blockLayer.style.opacity = '0';
		blockLayer.style.background = '#cecece repeat';
		blockLayer.style.zIndex = 59;
		var zIndexElement = parseInt(blockLayer.style.zIndex) + 2;

		// Se for IE6 Não bloqueia
		if (elementToShow && Prototype.Browser.IE6) {
			Enturma.showElementBlockLayer(zIndexElement, elementToShow, elementToFocus);
			return;
		}

		if (height) {
			blockLayer.style.height = height+'px';
		}
		else {
			blockLayer.style.height = '100%';
		}
		if (width) {
			blockLayer.style.width = width+'px';
		}
		else {
			blockLayer.style.width = '100%';
		}
		Effect.Appear(blockLayer, {duration: 0.1, from: 0, to: 0.4,
			afterFinish: function() {
				// Porque o Appear do prototype só testa o disabled
				blockLayer.setStyle({visibility: "visible"});
				if (elementToShow) {
					Enturma.showElementBlockLayer(zIndexElement, elementToShow, elementToFocus);
				}
			}
			});
	},
	showElementBlockLayer: function(zIndex, elementToShow, elementToFocus) {
		var elem = $p(elementToShow);
		if (elem) {
			elem.style.zIndex = zIndex;
			elem.style.border = '1px solid #898989';
			Enturma.show(elementToShow);
			Enturma.stickElement(elementToShow, 10);
			if (elementToFocus) {
				var elemFocus = $p(elementToFocus);
				if (elemFocus && Enturma.visible(elementToFocus))
					elemFocus.focus();
			}
		}
		else {
			Enturma.hideBlockLayer();
		}
	},

	/**
	 * Esconde a layer de bloqueio
	 */
	hideBlockLayer: function(elementToHide) {
		if (elementToHide) {
			Enturma.hide(elementToHide);
		}
		var blockLayer = $p('blockLayer');
		Enturma.closeWindow(blockLayer);
		setTimeout( function() {
			var blockLayer = $p('blockLayer');
			blockLayer.style.zIndex = -1;
			blockLayer.style.opacity = '';
			blockLayer.style.filter = '';
			blockLayer.style.zIndex = -1;
			blockLayer.style.backgroundColor = 'transparent';
			blockLayer.style.width = '0px';
			blockLayer.style.height = '0px';
		}, 1);
	},
	/**
	 * Apresenta a div de carregamento via AJAX
	 */
	showLoadLayer: function() {
		Enturma.setCursor('wait');
		Enturma.hideAllMessages();
		Enturma.show('loading');
		Enturma.stickElement($p('loading'), 10, 'top', true);
	},
	/**
	 * Esconde a div de carregamento via AJAX
	 *
	 * TODO: Procurar função equivalente ao switchDocumentCursor
	 */
	hideLoadLayer: function() {
		Enturma.hide('loading');
		Enturma.setCursor('auto');
	},
	/**
	 * Esconde todas as mensagens (avisos ou erros) do sistema
	 */
	hideAllMessages: function() {
		Enturma.closeWindow('toolTip');
		Enturma.closeWindow('messageBox');
		Enturma.closeWindow('errorBox');
		Enturma.closeWindow('confirmBox');
	},
	/**
	 * Mantém a posição de um elemento fixa, mesmo que a página tenha barras
	 * de rolagem.
	 *
	 * [1] Caso a orientação seja omitida, o elemento apenas será marcado como
	 *     posicionamento fixo.
	 *
	 * @param id Elemento
	 * @param y Offset em Y
	 * @param orientation [top, bottom] Orientação do elemento [1]
	 */
	stickElement: function(id, y, orientation, floatIE6) {
		if (Prototype.Browser.IE6) {
			if (floatIE6) {
				floatDiv(id, 'fromtop', 1, y);
			}
		}
		else {
			var obj = $p(id);
			if (obj) {
				var size = Enturma.getWindowVisibleSize();
				obj.setStyle({position: 'fixed'});
				if (orientation == 'bottom') {
					obj.setStyle({top: (size[1] - y)+"px"});
				}
				else {
					obj.setStyle({top: y+'px'});
				}
			}
		}
	},
	/**
	 * Abre a janela de bloqueio
	 *
	 * Esta funcao abre a layer de bloqueio e carrega a janela de bloqueio em
	 * cima da layer de bloqueio.
	 *
	 * Parametros do array content:
	 *    [url]                 Url a ser chamada por AJAX
	 *    [ajaxOptions]         Opções da chamada AJAX
	 * Parametros do array parameters:
	 *    [behaviours]          Array de comportamentos da janela
	 *    [dragzone]            Zona de arrasto da janela
	 */
	openBlockWindow: function(content, parameters) {
		if (typeof content != "string") {
			Enturma.callFunction($p('blockWindow'), content["url"], {successCallback: Enturma.openBlockWindow, parameters: parameters}, content["ajaxOptions"]);
			return;
		}

		Enturma.showBlockLayer();
		var wnd = $p('blockWindow');
		wnd.update(content);
		Enturma.center(wnd);
		Enturma.stickElement(wnd, 50, 'top', true);
		Enturma.show(wnd);
		new Draggable(wnd, {handle:$p(parameters["dragzone"])});
		Behaviour.register(parameters["behaviours"]);
		Behaviour.apply();
	},
	/**
	 * Fecha a janela de bloqueio
	 */
	closeBlockWindow: function(event) {
		Enturma.hideBlockLayer();
		Enturma.closeWindow('blockWindow');
		Event.stop(event);
	},
	/**
	 * Abre a janela do mini meu espaço
	 */
	showMiniMySpace: function(event) {
		var content = {
			url: urlhome + 'account/MySpace.html?action=miniMySpace&resultLayout=3'
		}
		var parameters = {
			behaviours: {
				'#miniMySpaceClose': function(element) {
					Event.observe(element, 'click', Enturma.closeBlockWindow);
				},
				'#miniMySpaceGotoCommunity': function(element) {
					Event.observe(element, 'click', Enturma.redirectMiniMySpace);
				},
				'#autocomplete': function(element) {
					Event.observe(element, 'keyup', Enturma.renderAutoCompleteMiniMySpace );
				}
			},
			dragzone: "miniMySpaceHeader"
		};

		Enturma.openBlockWindow(content, parameters);
		Event.stop(event);
	},
	/**
	 * Comportamento de redirecionamento do mini meu espaço
	 */
	redirectMiniMySpace: function(event) {
		var tool = $p('miniMySpaceComponent');
		var community = $p('miniMySpaceCommunity');
		var selectedTool = tool.options[tool.selectedIndex].value;
		if (!selectedTool) selectedTool = 'Index';
		var selectedCommunity = community.value;
		if (selectedTool && selectedCommunity) {
			Enturma.redirect(urlhome + 'community/' + selectedCommunity + '/' + selectedTool + '.html');
		}
		Event.stop(event);
	},
	/**
	 * Redireciona o navegador para url
	 */
	redirect: function(url) {
		window.location.href = url;
	},
	/**
	 * Cria os divs de layer e mensagens necessários
	 * divs: blockLayer, blockWindow, errorDiv, sysErrorDiv,
	 * 		 messagesDiv, helpBox, toolTipLayer, sendScrapForm
	 */
	createLayers: function () {
		['toolTipLayer', 'sendScrapForm', 'blockLayer','blockWindow',
		'errorDiv', 'sysErrorDiv', 'messagesDiv', 'helpBox'].each(function(id) {
			if (!$p(id)) {
				var element = Builder.node('div', {id: id});
				$p('containerDefault').appendChild(element);
			}
		});
		$p('toolTipLayer').setStyle({position:'absolute', visibility: 'hidden', zIndex: '19'});
		$p('blockWindow').setStyle({position: 'absolute', display: 'none', zIndex:'60', top:'0', left:'0'});

		//TODO: Remover o frame - obsoletos
		if (!$p('fAction')) {
			var iframe = Builder.node('iframe', {id:'fAction', name:'fAction', width:0, height:0, frameborder:0, src:'about:blank'});
			$p('containerDefault').appendChild(iframe);
		}
		$p('fAction').setStyle({display: 'none', border: '0'});
	},

	/**
	 * Esconde um elemento, caso exista.
	 */
	hide: function(element) {
		var obj = $p(element);
		if (obj != undefined && obj != 'undefined') {
			obj.hide();
			// TODO: Verificar como fazer isso melhor
			/* O prototype não modifica o estilo visibility nos métodos show e
			 * hide do Element.
			 * Duas opções, a principio:
			 * a) tornar esta maneira aqui difinitiva e _SEMPRE_ utilizar os
			 *    método Enturma.show|hide para mostrar ou esconder elementos
			 * b) adaptar os estilos para utilizar _SEMPRE_ o display none
			 *    quando se deseja esconder elementos
			 */
			obj.setStyle({visibility: "hidden"});
		}
	},
	/**
	 * Mostra um elemento, caso exista.
	 */
	show: function(element) {
		var obj = $p(element);
		if (obj != undefined && obj != 'undefined') {
			obj.show();
			obj.setStyle({visibility: "visible"});
		}
	},
	/**
	 * Alterna entre mostrar ou esconder um elemento, caso exista.
	 */
	toggle: function(element) {
		var obj = $p(element);
		if (Enturma.visible(obj)) {
	    	Enturma.hide(obj);
	    }
	    else {
	    	Enturma.show(obj);
	    }
		/* Mesmo problema do show|hide
		if (obj != undefined && obj != 'undefined') {
			obj.toggle();
		}
		*/
	},

	/**
	* O visible do prototype não é usado
	* pois ele só testa se o atributo style existir
	* e não se o estilo for definido no arquivo css.
	*/
	visible: function(element) {
		var sdisplay = $p(element).getStyle('display');
		var svisibility = $p(element).getStyle('visibility');
		if (svisibility == 'inherit')
			svisibility = $p(element).up().getStyle('visibility');

		var displayed = (!sdisplay || sdisplay != 'none');
		var visible = (!svisibility || svisibility != 'hidden');
		return (displayed && visible);
	},

	/**
	 * Marca o foco de um elemento selecionado no formulário
	 */
	focusInput: function(element, blur) {
		if (element.tagName == 'SELECT')
			return;
		if (element.tagName=="TEXTAREA" || (element.tagName=="INPUT" && (element.type =='text' || element.type=='password'))) {
			if (blur || element.disabled || element.getAttribute('readonly') || element.getAttribute('readonly') == "readonly") {
				element.removeClassName('focusInputSelected');
			}
			else {
				element.addClassName('focusInputSelected');
			}
		}
		else {
			return;
		}
	},

	/**
	 * Seleciona permissões de conteúdo mais comuns
	 */
	selectDefaultContentPermissions: function() {
		$p('allMembersView').checked = true;
		$p('allMembersView').onclick();
		$p('onlyAuthorUpdate').checked = true;
		$p('onlyAuthorUpdate').onclick();
		$p('onlyAuthorPublish').checked = true;
		$p('onlyAuthorPublish').onclick();
		$p('onlyAuthorDelete').checked = true;
		$p('onlyAuthorDelete').onclick();
	},

	/**
	 * Mostrar box para Enviar página de conteúdo por email
	*/
	showSendPageEmail: function(event, urlPage) {
		if ($p('sendEmail').innerHTML) {
			Enturma.openSendPageEmail();
		}
		else {
			var content = {
				url: urlPage + '?action=sendPageToEmail&resultLayout=3'
			}
			var parameters = {
				behaviours: {}
			};

			Enturma.callFunction($p('sendEmail'), content["url"], {successCallback: Enturma.openSendPageEmail, parameters: parameters});
		}

		Event.stop(event);
	},
	openSendPageEmail: function() {
		$p('comments').value = '';
		$p('to').value = '';
		$p('subject').value = '';
		Enturma.hide('errorTto');
		Enturma.hide('errorTfrom');
		Enturma.center('sendEmail');
		Enturma.stickElement('sendEmail', 50, 'top', true);
		Enturma.show('sendEmail');
	},

	/**
	 * Função que usa Scriptaculous pra centralizar Elemento
	*/
	center: function(element){
	    try {
	        element = $p(element);
	    }
	    catch(e) {
	        return;
	    }

	    var my_width  = 0;
	    var my_height = 0;

	    if ( typeof( window.innerWidth ) == 'number' )
	    {

	        my_width  = window.innerWidth;
	        my_height = window.innerHeight;
	    }
	    else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
	    {

	        my_width  = document.documentElement.clientWidth;
	        my_height = document.documentElement.clientHeight;
	    }
	    else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
	    {

	        my_width  = document.body.clientWidth;
	        my_height = document.body.clientHeight;
	    }
	    element.style.position = 'absolute';
	    element.style.display  = 'block';
	    element.style.zIndex   = 99;

	    var scrollY = 0;

	    if ( document.documentElement && document.documentElement.scrollTop )
	    {
	        scrollY = document.documentElement.scrollTop;
	    }
	    else if ( document.body && document.body.scrollTop )
	    {
	        scrollY = document.body.scrollTop;
	    }
	    else if ( window.pageYOffset )
	    {
	        scrollY = window.pageYOffset;
	    }
	    else if ( window.scrollY )
	    {
	        scrollY = window.scrollY;
	    }

	    var elementDimensions = Element.getDimensions(element);

	    var setX = ( my_width  - elementDimensions.width  ) / 2;
	    var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;

	    setX = ( setX < 0 ) ? 0 : setX;
	    setY = ( setY < 0 ) ? 0 : setY;

	    element.style.left = setX + "px";
	    element.style.top  = setY + "px";
	},

	/**
	 * Ver detalhes de acesso e respostas ed um conteudo
	*/
	viewDetailedContentLog: function(urlPage) {
		var content = {
			url: urlPage + '&resultLayout=3'
		}
		var parameters = {
			behaviours: {},
			dragzone: "viewDetailedBoxfloatBoxTitle"
		};
		$p('viewDetailedBoxfloatBoxContent').innerHTML = '';
		Enturma.callFunction($p('viewDetailedBoxfloatBoxContent'), content["url"], {successCallback: Enturma.showDetailedBox, parameters: parameters});
	},
	/**
	 * Mostra detalhes de acesso e respostas ed um conteudo
	 *	chamado pelo viewDetailedContentLog()
	*/
	showDetailedBox: function() {
	    Enturma.show('viewDetailedBox');
	    Enturma.stickElement('viewDetailedBox', 40, 'top', true);
	},
	/**
	 * Mostra perfil de um usuário no sistema
	 * Usado na página de participantes e cronograma de aulas
	*/
	showMemberProfile: function(idBox, idContent, community, idUser, textLoading) {
	    callFunctionFrame('community/'+community+'/Members.html', 'memberProfile', idContent, 'idUser='+idUser);
	    $p(idContent).innerHTML = textLoading;

	    Enturma.show(idBox);
	    Enturma.stickElement(idBox, 40, 'top', true);
		$p(idBox).style.left= '20%';
	},
	/**
	 * Mostra estatísticas de acesso de um conteúdo em uma data específica
	*/
	goToLogDate: function(idContent, idUser) {
		if ($p('viewDetailedBoxfloatBoxContent')) {
			month = $p('selmonth').value;
			year = $p('selyear').value;
			var urlPage = $p('viewLog'+idContent+idUser).href + '&year='+year+'&month='+month;
			return Enturma.viewDetailedContentLog(urlPage);
		}
	},
	/** Cria novo item de texto no formulário (usado nas Enquetes)
	*/
	addNewItems: function(selName, selText) {
		var elems = document.getElementsByTagName("input");
		var count  = 0;
		for (i=0; i< elems.length; i++) {
			if (elems[i].type == "text" && elems[i].name == selName)  count++;
		}

		var nro = $p('moreOptions').value;
		var elems = document.getElementsByTagName("span");
		for (i=0; i<elems.length; i++) {
			if (elems[i].id == selName + "Group")
				objParent = elems[i];
		}
		var opnro = parseInt(count) + 1;
		for (i=0; i<nro; i++) {
			var objElement = createInput('text', selName, selName, 35, 'inputField');
			if (objParent && objElement) {
				objParent.appendChild(document.createElement('br'));
				var spanElem = document.createElement('span');
				spanElem.innerHTML = selText+' '+opnro+' ';
				opnro += 1;
				objParent.appendChild(spanElem);
				objParent.appendChild(objElement);
			}
		}
	},
	joinSelectedCheckbox: function(chk){
		var list = '';
		if(chk[0] == undefined)
			return chk.value;
		var length = chk.length;
		for (i=0; i< length; i++)
			if (chk[i].checked==true){
				list+=chk[i].value;
				if(i<length-1)
					list+=',';
			}
		return list;
	},
	selectListFromSearch: function(separator){
		Enturma.selectFromSearch('', separator);
	},
	selectFromSearch: function(valor, separator) {
		// Valor: string '<id>@<name>@<uid>'
		var formSel = $p('selall');
		if (window.opener) winparent = window.opener;
		else winparent = parent;
		if (valor || formSel) {
			var formId = $p('search_id');
			var formUid = $p('search_uid');
			var formName = $p('search_name');
			var elemento = winparent.document.getElementById(formId.value);
			var elementoUid = null;
			if (formUid && formUid.value)
				elementoUid = winparent.document.getElementById(formUid.value);

			if (!elemento && !elementoUid)
			{
				return;
			}

			// Se puder selecionar mais de um elemento, elemento "id" deve ser um array "id[]"
			if (formSel && !valor)
			{
				var sel = getSelected();
				var size = sel.length;
				var retorno = Array();
				var retornoName = Array();
				var retornoUid = Array();
				i = 0;
				for (i = 0; i < size; i++) {
					valor = $p( sel[i] ).value.split( "@" );
					if( valor[0] != '' )
					{
						retorno.push( valor[0] );
						// Pode se informar um id de um elemento para mostrar o nome do item pesquisado
						if( formName.value != '' )
						{
							retornoName.push( valor[1] );
						}
						if( formUid && formUid.value != '' )
						{							
							retornoUid.push( valor[2] );
						}
					}
				}
				if( separator )
				{
					if( elemento.value != '' )
					{
						elemento.value += separator+replaceAll( retorno.toString(), ',', separator );
					}
					else
					{
						elemento.value = replaceAll( retorno.toString(), ',', separator );
					}
				}
				else
				{
					elemento.value = retorno;
				}
				// Pode se informar um id de um elemento para mostrar o nome do item pesquisado
				if (formName.value != '') {
					elementoName = winparent.document.getElementById(formName.value);
					if (separator) {
						if (elementoName.value != '' )
							elementoName.value += separator+replaceAll(retornoName.toString(), ',', separator);
						else
							elementoName.value = replaceAll(retornoName.toString(), ',', separator);
					} else
						elementoName.value = retornoName;
				}
				// Pode se informar um id de um elemento para mostrar o uid do item pesquisado
				if (formUid && formUid.value != '') {
					if (separator) {
						if (elementoUid.value != '' )
							elementoUid.value += separator+replaceAll(retornoUid.toString(), ',', separator);
						else
							elementoUid.value = replaceAll(retornoUid.toString(), ',', separator);
					} else
						elementoUid.value = retornoUid;
				}
			}
			// Somente um elemento
			else {
			  	valor = valor.split("@"); // <id>@<name>@<uid>
				// Pode se informar um id de um elemento para mostrar o id do item pesquisado
				if (formId.value != '') {
					if (separator && elemento.value != '')
						elemento.value += separator+valor[0];
					else
						elemento.value = valor[0];
				}
				// Pode se informar um id de um elemento para mostrar o nome do item pesquisado
				if (formName.value != '') {
					elementoName = winparent.document.getElementById(formName.value);
					if (separator && elementoName.value != '')
						elementoName.value += separator+valor[1];
					else elementoName.value = valor[1];
				}
				// Pode se informar um id de um elemento para mostrar o uid do item pesquisado
				if (formUid && formUid.value != '') {
					if (separator && elementoUid.value != '')
						elementoUid.value += separator+valor[2];
					else elementoUid.value = valor[2];
				}
			}
			// Executa as funcoes, se existirem, incluir mais funcoes, se necessario
			if (elemento) {
				if (elemento.fireEvent) { // Soh para o IE
					elemento.fireEvent("onchange");
					elemento.fireEvent("onfocus");
				}
				else { // Mozilla e outros?
					if (elemento.onchange)  elemento.onchange();
					if (elemento.onfocus)   elemento.onfocus();
				}
			}
			// Executa as funcoes, se existirem, incluir mais funcoes, se necessario
			if (elementoUid) {
				if (elementoUid.fireEvent) { // Soh para o IE
					elementoUid.fireEvent("onchange");
					elementoUid.fireEvent("onfocus");
				}
				else { // Mozilla e outros?
					if (elementoUid.onchange)  elementoUid.onchange();
					if (elementoUid.onfocus)   elementoUid.onfocus();
				}
			}
			if (window.opener) window.close();
			else Enturma.hide('search');
		}
	},
	showMacroDetails: function(event, box, url) {
		Event.stop(event);
		if(!box.innerHTML){
			Enturma.callFunction(box, url);
	}
		if(box.visible())
			box.hide();
		else
			box.show();

	},
	showFaqAnswer: function(event, el, box, urlPage, edit){
		Event.stop(event);
		if(!box.innerHTML || edit){
			var url = urlPage + '&resultLayout=3';
			Enturma.callFunction(box, url);
			Enturma.show(el);
		} else {
			box.innerHTML = '';
			Enturma.toggle(el);
		}
	},
	showScormBlockFrame: function(event, urlPage){
		Event.stop(event);
	//	var content = {
	//		url: urlPage + '&popup=1'
	//	}
	//	var parameters = {
	//		behaviours: {
	//			'#scormBlockClose': function(element) {
	//					Event.observe(element, 'click', Enturma.closeBlockWindow);
	//			}
	//		}
	//	};
		//TODO: Migrar isso para o namespace do Enturma
		popUp(url, 800, 600, 'scormViewExpand', true, true);
		//Enturma.openFullScormFrame(content, parameters);

	},
	openFullScormFrame: function(content, parameters) {
		if (typeof content != "string") {
			Enturma.callFunction($p('blockWindow'), content["url"], {successCallback: Enturma.openFullScormFrame, parameters: parameters}, content["ajaxOptions"]);
			return;
		}

		Enturma.showBlockLayer();
		var wnd = $p('blockWindow');
		wnd.update(content);
		wnd.style.left = "0px";
	    wnd.style.top  = "0px";
		Enturma.stickElement(wnd, 0, 'top', true);
		Enturma.show(wnd);
		new Draggable(wnd, {handle:$p(parameters["dragzone"])});
		Behaviour.register(parameters["behaviours"]);
		Behaviour.apply();
	},
	openWizard: function(url){
		var content = {
			url: urlhome + url
		}
		var parameters = {
			behaviours: {
				/*'#miniMySpaceClose': function(element) {
					Event.observe(element, 'click', Enturma.closeBlockWindow);
				},
				'#miniMySpaceGotoCommunity': function(element) {
					Event.observe(element, 'click', Enturma.redirectMiniMySpace);
				}*/
			}
			//dragzone: "miniMySpaceHeader"
		};

		Enturma.openBlockWindow(content, parameters);

		Event.stop(event);
	},
	cookieToggle: function(element){
		var obj = $p(element);
		var today = new Date();
		var zero_date = new Date(0, 0, 0);
		today.setTime(today.getTime() - zero_date.getTime());
		var cookie_expire_date = new Date(today.getTime() + (8 * 7 * 86400000));
		
		if (Enturma.visible(obj)) {
			Enturma.hide(obj);
			Set_Cookie('show' + obj.id, 'invisible', cookie_expire_date);
		}
		else {
			Enturma.show(obj);
			Set_Cookie('show' + obj.id, 'visible', cookie_expire_date);
		}
	},
	
	/**
	 * renderAutoCompleteMiniMySpace
	 * Realiza chamada Ajax para retornar uma lista de comunidades que serão sugeridas ao usuário
	 * @param {Object} event
	 */
	renderAutoCompleteMiniMySpace: function(event) {
		new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "/account/MySpace.html?action=searchCommunities", {
			paramName: "value",
			minChars: 3,
			frequency: 0.5,
			indicator: 'indicator1',
			callback: setButtonDisabled,
			afterUpdateElement: getSelectionId
		});
		setTimeout(function() {Enturma.hideLoadLayer()}, 500);
		Event.stop(event);
	},
	
	/**
	 * renderAutoCompleteEvaluation
	 * Realiza chamada Ajax para retornar uma lista de comunidades que serão sugeridas ao usuário
	 * @param {Object} event
	 */
	renderAutoCompleteEvaluation: function(event) {
		
		var idCommunityType = $p('idCommunityType').options[$p('idCommunityType').selectedIndex].value;
		new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "/admin/EvaluationManager.html?action=searchCommunities&idCommunityType="+idCommunityType, {
			paramName: "value",
			minChars: 3,
			frequency: 0.5,
			indicator: 'indicator1',
			callback: setButtonDisabled,
			afterUpdateElement: getSelectionId			
		});
		setTimeout(function() {Enturma.hideLoadLayer()}, 500);
		Event.stop(event);
	},
	
	/**
	 * Função para abrir e fechar o menu tools do enturma
	 */
	ocultShowMenu: function(event) {
		var today = new Date();
		var zero_date = new Date(0, 0, 0);
		today.setTime(today.getTime() - zero_date.getTime());
		var cookie_expire_date = new Date(today.getTime() + (8 * 7 * 86400000));
		
		element = $p('listToolsColumn');
		
		if( element == null )
		{
			Set_Cookie('showMenu'+uidOwner, 'open', cookie_expire_date, '/');
			$p('listToolsIcons').id = 'listToolsColumn';
			$p('ocultMenuIcons').id = 'ocultMenu';
			$p('breadCrumbsIcons').id = 'breadCrumbs';
			//$p('selectTeamsIcons').id = 'selectTeams';
					
		}
		else
		{
			Set_Cookie('showMenu'+uidOwner, 'close', cookie_expire_date, '/');		
			element.id = 'listToolsIcons';
			$p('ocultMenu').id = 'ocultMenuIcons';
			$p('breadCrumbs').id = 'breadCrumbsIcons';
			//$p('selectTeams').id = 'selectTeamsIcons';
			
		}
		Event.stop(event);
	},
	
	/**
	 * Função para abrir e fechar a Descrição e Objetivos do Cronograma
	 */
	ocultLearningPathDesc: function(event) {
		var today = new Date();
		var zero_date = new Date(0, 0, 0);
		today.setTime(today.getTime() - zero_date.getTime());
		var cookie_expire_date = new Date(today.getTime() + (8 * 7 * 86400000));
		
		element = $p('listPath');
		
		if( element == null )
		{
			Set_Cookie('showPathInfo', 'open', cookie_expire_date, '/');
			$p('listPathItens').id = 'listPath';
			$p('ocultPathItens').id = 'ocultPath';							
		}
		else
		{
			Set_Cookie('showPathInfo', 'close', cookie_expire_date, '/');		
			element.id = 'listPathItens';
			$p('ocultPath').id = 'ocultPathItens';
				
		}
		Event.stop(event);

	},
	/**
	 * Realiza uma chamada ajax pra preencher o conteúdo do widget.
	 * Implemente a função element.wiget.restoreHeight não está presente no callFunction()
	 * 
	 * @todo ENTURMA_3_1_0: Move to another place (widget.js?)
	 * @param {String/Object} element (or element.id)
	 * @param {String} url
	 * @param {Object} ajaxOptions
	 */
	ajaxWidgetData: function(element,url,ajaxOptions)
	{
		element = $p(element);
		
		var options = Object.extend( {
			onLoading: function() {
				if(!this.periodicalUpdater)
					Enturma.showLoadLayer();
			},
			onSuccess: function(request) {
				element.update(request.responseText);
				element.widget.restoreHeight('content');
				if(!this.periodicalUpdater)
					Enturma.hideLoadLayer();
			},
			onFailure: function() {
				element.update('Error loading...');
			},
			onComplete: function() {
				if(!this.periodicalUpdater)
					Enturma.hideLoadLayer();
			},
			encoding: 'ISO-8859-1',
			periodicalUpdater: false
		},
		ajaxOptions || {} ); // extend
		
		if(options.periodicalUpdater)
		{
			new Ajax.PeriodicalUpdater(element,url,options);
		}
		else
		{
			new Ajax.Updater(element,url,options);
		}
	},
	/**
	 * @todo ENTURMA_3_1_0: Move this functions to another place... (widget.js?)
	 * @todo ENTURMA_3_1_0: Create documentation
	 */
	enableDockingPanel: function(elements) {
		elements = (typeof elements == "string") ? $p(elements) : elements;
		this._enableDockingPanel = (typeof this._enableDockingPanel == "object") ? this._enableDockingPanel : Array();
		//POG: Only execute one time the class instacement
		
		if( this._enableDockingPanel.indexOf(elements.first().identify()) === -1)
		{
			this._enableDockingPanel.push(elements.first().identify());
			
			if(Prototype.Browser.IE)
			{
				//Show the panel and widgets
				$$('#dkTable').each(function(e) {
					e.show();
				});
				
				$$('[model=widgetControls]').each(function(e) {
					e.hide();
				});
				
				return false;
			}
			
			var listDockingPanels = Array();
			//This object was set in events.js
			dockingPanel = $H();
			
			var onRemove     = false;
			var onAdd	     = false;
			var onOverWidget = false;
			var onOutWidget  = false;
			//list all diferent DockingPanels in the interface
			elements.each(function(element) {
				var actionElement = element;
				if(!onRemove)
				{
					onRemoveFunction = function(element)
					{
						var widget = element;
						eval(actionElement.readAttribute('onRemove'));
						element.hide();
						$p(widget).widget.data.set('removed',true);
						$p('organize_'+element.id).show();
						new Ajax.Request(element.dockingPanel.options.url + '&data=' + widget.id, {
							parameters: $p(widget).widget.data.toObject()
						});
					}
				}
				if(!onAdd)
				{
					onAddFunction = function(element)
					{
						var widget = element;
						eval(actionElement.readAttribute('onAdd'));
						element.show();
						if($p('organize_'+element.id))
							$p('organize_'+element.id).hide();
						if($p(widget).widget.data.get('removed'))
						{
							$p(widget).widget.data.set('removed',false);
							new Ajax.Request(element.dockingPanel.options.url + '&data=' + widget.id, {
								parameters: $p(widget).widget.data.toObject()
							});
						}
					}
				}
				if(!onOverWidget)
				{
					onOverWidgetFunction = function(portal, widget)
					{
						eval(actionElement.readAttribute('onOverWidget'));
						if(widget.getElement().down('.closeBox'))
							widget.getElement().down('.closeBox').show();
					}
				}
				if(!onOutWidget)
				{
					onOutWidgetFunction = function(portal, widget)
					{
						eval(actionElement.readAttribute('onOutWidget'));
						if(widget.getElement().down('.closeBox'))
							widget.getElement().down('.closeBox').hide();
					}
				}
				
				var panelId = element.readAttribute('group');
				element.group = panelId;
				if(listDockingPanels.indexOf(panelId) === -1)
				{
					listDockingPanels.push(panelId);
					
					//Create a DockingPanel instance
					dockingPanel.set(panelId,new Modules.Helpers.DockingObjects.Panel('div[model=dockingPanel][group='+panelId+']',{
						fixVerticalPadding: 10,
						onRemove: onRemoveFunction,
						onAdd: onAddFunction,
						onOverWidget: onOverWidgetFunction,
						onOutWidget: onOutWidgetFunction,
						url: '/widget/?action=setLayout'
					}) );
					
					//Add container widgets
					var count = 0;
					$$('div[model=dockingPanel][group='+panelId+']').each(function(element) {

						element.descendants().each(function(element) {
							element.dockingPanel = element.up('div[model=dockingPanel]').dockingPanel;  
						});
												
						/*
						//Adiciona observador de dimensão:
						new StyleObserver(
						    element,
						    1, //1 second period
						    function(el,value){   //the callback
						    	if((value != null && el.oldWidth != null && typeof el.oldWidth != 'undefined')
								&& Math.ceil(value.sub('px','')) != Math.ceil(el.oldWidth.sub('px','')))
								{
									el.dockingPanel.updateWidgetsHeight('content');
								}
								el.oldWidth = value;
						    }, 
						    'width'   //the style you want to observe
						);
						*/
						
						element.select('div[model=widget]').each(function(element) {
							var widget = element;
							dockingPanel.get(panelId).add(new Modules.Helpers.DockingObjects.Widget($H({title: null, content: null}),element.identify(),{ 
								onBlockUpdate: function(block) {
									dockingPanel.get(panelId)._updateColumnsHeight();
								} 
							} ),count);
							element.descendants().each(function(element) {
								element.widget = widget.widget;
								if(element.match('[model=widget] div[block!=fixed]'))
								{
									element.autoUpdateHeight = true;
									new offsetHeightObserver(
									    element,
									    0.3, //0.3 second period
									    function(el,value) {
											if(value != el.oldOffsetHeight)
											{
												if(el.autoUpdateHeight)
													el.widget.restoreHeight('content');
											}
											el.oldOffsetHeight = value;
										}
									);	
								}
							});
							element.select('[model=widgetControls]').each(function(element) {
								element.widget       = widget.widget;
								element.dockingPanel = dockingPanel.get(panelId);
								
								Event.observe(element,'click', function(event) {
									var action = this.readAttribute('action');
									var widgetElement = $p(element.widget.id);
									var dockingPanel = element.dockingPanel;
									switch(action) {
										case 'toggle':
											var eventEffect = this.readAttribute('effect');
											this.up('[model=widget]').select('div[block!=fixed]').each( function(element) {
												if(typeof eventEffect != 'undefined')
												{
													switch(eventEffect) {
														case 'slide':
														case 'slideUp':
														case 'slideDown':
														element.autoUpdateHeight = false;
														Effect.toggle(element, eventEffect, { 
															afterUpdate: function(effect) {
																effect.element.dockingPanel._updateColumnsHeight();
															}, 
															afterFinish: function(effect) {
																effect.element.autoUpdateHeight = true;
															} 
														});
														break;
														default:
														//POG: calcular tamanho de forma correta (não chega exibir na interface), caso não seja especificado no update do efeito.
														element.toggle();
														widgetElement.widget.restoreHeight('content');
														element.toggle();
														eval(eventEffect);
													}
												} else {
													element.toggle();
													widgetElement.widget.restoreHeight('content');
												}
												//Envia via ajax pro servidor o estado a ser armazenado
												//Servidor trata por ID.
												if(widgetElement.widget.getBlock('content').getStyle('display') == 'block')
												{
													widgetElement.widget.data.set('minimized',true);
												}
												else
												{
													widgetElement.widget.data.set('minimized',false);
												}
												new Ajax.Request(dockingPanel.options.url + '&data=' + widget.id, {
													parameters: widgetElement.widget.data.toObject()
												});
												//console.info(widgetElement.widget.data);
											});
										break;
									}
								});
							});
						});
						count++;
					});
					
					//Find controls
					
					//Add action toggle to controls
					$$('a[model=dockingPanelControls][group='+panelId+']').each(function(element) {
						
						Event.observe(element,'click', function(event) {
							var action = this.readAttribute('action');
							var target = this.readAttribute('target-element');
							//POG: Para definir a coluna
							var column = this.readAttribute('column');
							target = target.split(' ');
							target.each(function(s) {
								switch(action){
									case 'toggle':
										if(dockingPanel.get(panelId).widgets.indexOf(s) !== -1)
										{
											dockingPanel.get(panelId).remove($p(s).widget);
										}
										else
										{
											$p(s).widget.getBlock('content').show();
											$p(s).widget.data.set('minimized',false);
											dockingPanel.get(panelId).restore(s,column);
										}									
									break;
									case 'add':
										//TODO: add widget...
									break;
									case 'restore':
										if(dockingPanel.get(panelId).widgets.indexOf(s) === -1)
										{
											$p(s).widget.getBlock('content').show();
											$p(s).widget.data.set('minimized',false);
											dockingPanel.get(panelId).restore(s,column);
										}
									break;
									case 'remove':
										if(dockingPanel.get(panelId).widgets.indexOf(s) !== -1)
										{
											dockingPanel.get(panelId).remove($p(s).widget);
										}
									break;
								}
							})
						});
						
					});
					
				}
			});
			//TODO: Está aceitando apenas um dockingPanel, tornar dinamico
			
			new Ajax.Request('/widget/', {
			  parameters: {action: 'getLayout'},
			  onLoading: function() {
				Enturma.showLoadLayer();
			  },
			  onSuccess: function(response) {
			  	if(response.headerJSON){
					var widgetDisplayOrder = $H(response.headerJSON);
					widgetDisplayOrder.each(function(e) {
						var pWidgets = $H(e.value);
						pWidgets.each(function(v) {
							if(v.key != "")
							{
								if($p(v.key)) {
									var widget = new Modules.Helpers.DockingObjects.Widget($H({title: null, content: null}),v.key,{ 
										onBlockUpdate: function(block) {
											block.dockingPanel._updateColumnsHeight();
										} 
									} );
									elements[0].dockingPanel.add(widget,e.key);
									var pWidgetData = $H(v.value);
									pWidgetData.each(function(h) {
										if(h.key == 'minimized')
										{
											if(h.value == "true")
											{
												widget.getBlock('content').hide();
												widget.data.set('minimized',true);
											}
										}
										if(h.key == 'removed')
										{
											if(h.value == "true")
											{
												widget.data.set('removed',true);
												//É removido sem executar o evento de remover.
												elements[0].dockingPanel.remove(widget,false);
												$p('organize_'+widget.getElement().id).show();
												widget.getElement().hide();
											}
										}
									})
								}
							}
						})
					})
				} else {
					new Ajax.Request(elements[0].dockingPanel.options.url, {
						parameters: elements[0].dockingPanel.serialize()
					});
				}
			  },
			  onComplete: function() {
				//Show the panel and widgets
				$$('#dkTable,#organizeMySpace').each(function(e) {
					e.show();
				});
				$$('div[model=dockingPanel]')[0].dockingPanel.updateWidgetsHeight('content');
				Enturma.hideLoadLayer();
			  }
			});
			
			//Fim
		}

	},
	
	/**
	 * Função para abrir e fechar campos de data na comunidade de tipo Evento
	 *
	 * @todo ENTURMA_3_1_0: Create documentation.
	 */
	toggleCommunityTypeEvent: function(event) {
		if(this.down('option[value="'+$F(this)+'"]').readAttribute("itemtype") == "event") {
			
			$p("comStartDate").show().setOpacity(0);
			$p("comEndDate").show().setOpacity(0);
			new Effect.Opacity('comStartDate', { from: 0.0, to: 1.0, duration: 0.5 });
			new Effect.Opacity('comEndDate', { from: 0.0, to: 1.0, duration: 0.5 });
		} else {
			$p("comStartDate").setOpacity(0).hide();
			$p("comEndDate").setOpacity(0).hide();
		}
	},	
	/**
	 * Função para abrir popup em modo full screen
	 *
	 * @todo ENTURMA_3_1_0: Create documentation.
	 */
	popupFullScreen: function(url) {
 		params  = 'width='+screen.width;
 		params += ', height='+screen.height;
 		params += ', top=0, left=0';
		params += ', fullscreen=yes';

		newwin=window.open(url, 'windowname4', params);
		if (window.focus) {newwin.focus()}
		return false;
	},
	/**
	 * Internet Explorer <9 workaround for HTML5 tags.
	 */
	html5toIE: function() {
		if( Prototype.Browser.IE )
		{
			var html5elements = 'address|article|aside|audio|canvas|command|datalist|details|dialog|figure|figcaption|footer|header|hgroup|keygen|mark|meter|menu|nav|progress|ruby|section|time|video'.split('|');
			for( var i = 0; i < html5elements.length; i++ )
			{
				document.createElement( html5elements[i] );
			}
		}
	},
	setRuleAction : function() {
		var actionRule = $p("ruleAction").value
		
		switch(actionRule){
			case '':
			case '0':
			case '2':
				$p("ruleActionMoveTR").hide();
				$p("ruleForwardEmailTR").hide();
			break;
			case '1':
				$p("ruleActionMoveTR").show();
				$p("ruleForwardEmailTR").hide();
			break;
			case '3':
				$p("ruleActionMoveTR").hide();
				$p("ruleForwardEmailTR").show();
			break;
		}
	},
	isObject: function (x) {
			return (typeof x === 'object') && !(x instanceof Array) && (x !== null);
	},	
	
	/**
	 * AJUSTANDO JSON COOKIE 
	 */
		getJSONCookie: function (cookieName) {
			var cookieData = Enturma.getCookie(cookieName);
			return cookieData ? JSON.parse(cookieData) : {};
		},
		setJSONCookie: function (cookieName, data, options) {
			var cookieData = '';
		
			if (!options.cookie_expire_date)
			{
				var today = new Date();
				var zero_date = new Date(0, 0, 0);
				today.setTime(today.getTime() - zero_date.getTime());
				var cookie_expire_date = new Date(today.getTime() + (8 * 7 * 86400000));
			}
			else
			{
				var cookie_expire_date = options.cookie_expire_date;
			}
			
			if (!options.path) {
				var path = '/';
			}
			else 
			{
				var path = options.path;
			}			
			
			if (!isObject(data)) {	// data must be a true object to be serialized
			throw new Error('JSONCookie data must be an object');
			}
			
			cookieData = JSON.stringify(data);
			
			return Enturma.setCookie(cookieName,cookieData, cookie_expire_date, path);
		},
		removeJSONCookie: function (cookieName) {
			var today = new Date();
			var zero_date = new Date(0, 0, 0);
			today.setTime(today.getTime() - zero_date.getTime());
			var cookie_expire_date = new Date(today.getTime() - (8 * 7 * 86400000));
			
			return Enturma.setCookie(cookieName, null, cookie_expire_date, '/');
		},
		JSONCookie: function (cookieName, data, options) {
			if (data) {
				Enturma.setJSONCookie(cookieName, data, options);
			}
			return Enturma.getJSONCookie(cookieName);
		},
		getCookie: function (name) {
		    var start = document.cookie.indexOf(name+"=");
		    var len = start+name.length+1;
		    if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
		    if (start == -1) return null;
		    var end = document.cookie.indexOf(";",len);
		    if (end == -1) end = document.cookie.length;
		    return unescape(document.cookie.substring(len,end));
		},
		setCookie:function (name,value,expires,path,domain,secure) {
		    document.cookie = name + "=" +escape(value) +
		        ( (expires) ? ";expires=" + expires.toUTCString() : "") +
		        ( (path) ? ";path=" + path : "") +
		        ( (domain) ? ";domain=" + domain : "") +
		        ( (secure) ? ";secure" : "");
		},
	
	/**
	 * End JSON Cookies 
	 *
	getJSONCookieXX: function (cookieName) {
				var cookieData = Get_Cookie(cookieName);
				return cookieData ? JSON.parse(cookieData) : {};
	},
	setJSONCookieXX: function (cookieName, data, options) {
		var cookieData = '';
		
		options = {
			expires: 90,
			path: '/'
		};
		
		if (!isObject(data)) {	// data must be a true object to be serialized
			throw new Error('JSONCookie data must be an object');
		}
		
		cookieData = JSON.stringify(data);
		
		return Set_Cookie(cookieName,cookieData, options);
	},
	removeJSONCookieXX: function (cookieName) {
		return Set_Cookie(cookieName, null);
	},
	JSONCookieXX: function (cookieName, data, options) {
		if (data) {
			Enturma.setJSONCookie(cookieName, data, options);
		}
		return Enturma.getJSONCookie(cookieName);
	},*/
	submitFormCaptcha:function ( idForm ) {
		
		cancelSubmit = false;
		// adiciona um input hidden com o valor do campo do form de captcha:  ID captchaCode		
		var hidden = new Element('input',{id:'captcha_code', name:'captcha_code', value:$p('captchaCode').value});hidden.setStyle({display:'none'});$p(idForm).appendChild(hidden);
		// submit no form com os dados preenchidos
		$p(idForm).submit();
		return true;
	},
    
    addSlashes:  function (str) {
    	str=str.replace(/\\/g,'\\\\');
    	str=str.replace(/\'/g,'\\\'');
    	str=str.replace(/\"/g,'\\"');
    	str=str.replace(/\0/g,'\\0');
    	return str;
    },
    
    stripSlashes: function (str) {
    	str=str.replace(/\\'/g,'\'');
    	str=str.replace(/\\"/g,'"');
    	str=str.replace(/\\0/g,'\0');
    	str=str.replace(/\\\\/g,'\\');
    	return str;
    }
}


//################################# EVENTS

/**
 * @author eddie
 */
/*
Event.observe(window, 'load', function() {
	var elem = $p('login');
	if (elem) {
		if (Enturma.visible('login') && !$p('errorTlogin')) {
			elem.focus();
		}
	}
} );
*/
var rules = {
	'body': function(element) {
		Event.observe(element, 'click', function(e) {
			var elem = $p('toolCategoryMenu');
			if (elem && elem.visible()) {
				//Effect.Fade(elem, {duration: 0.5});
				Enturma.hide(elem);
				if (Event.element(e).tagName.toLowerCase() != 'a') {
					Event.stop(e);
				}
			}
		});
		Event.observe(element, 'load', function(e) {
			// ativa html5 em browser que não tem compatibilidade
			Enturma.html5toIE();
		});
	},
	'#newHeader h1': function(element) {
		$p(element).setStyle({cursor:'pointer'});
		Event.observe(element, 'click', function(e) {
			Enturma.redirect(urlocal);
		});
	},
	'#menuLinkOpen' : function(element) {
		Event.observe(element, 'click', function(e) {
			var elem = $p('toolCategoryMenu');
			if (!elem.visible()) {
				//Effect.Appear(elem, {duration:0.5});
				Enturma.show(elem);
				Event.stop(e);
			}
		});
	},
	'#menuComunity li ul li' :function(element) {
		Event.observe(element, 'click', function(e) {
			var a = Element.down($p(element), 'a');
			//if (element.id == 'toolChatMenu') {
			//	Event.stop(e);
			//	popUp (a.href, 780, 600, 'chat', true, true);
			//}
			//else
			if (a) {
				Enturma.redirect(a.href);
				Event.stop(e);
			}
		});
	},
	'.subMenu li' :function(element) {
		Event.observe(element, 'click', function(e) {
			var a = Element.down($p(element), 'a');
			//if (element.id == 'toolChat_mini') {
			//	Event.stop(e);
			//	popUp (a.href, 780, 600, 'chat', true, true);
			//}
			//else
			if (a) {
				Enturma.redirect(a.href);
				Event.stop(e);
			}

		});
	},
	'#callMiniMySpace': function(element) {
		Event.observe(element, 'click', Enturma.showMiniMySpace);
	},
	'#communitySendScrapBox' : function(element) {
	/** Link para box de enviar recado na capa da comunidade
	 **/
		Event.observe(element, 'click', function(e) {
			var form = $p('formSendScrapBox');
			if (!form.visible()) {
				Enturma.show('formSendScrapBox');
				$p('msgScrapBox').focus();
			} else {
				Enturma.hide('formSendScrapBox');
			}
			Event.stop(e);
		});
	},
	'.sendScrap' : function (element) {
	/** Link para abrir caixa de enviar recado de Mural
	 **/
		Event.observe(element, 'click', function(e){
			wait();
			$p('sendScrapForm').innerHTML = '';
			callFunctionFrame(element.href, 'confirm', 'sendScrapForm');
			Enturma.stickElement($p('sendScrapForm'), 200, 'top', true);
			Event.stop(e);
		});
	},
	'input': function(element) {
		Event.observe(element, 'focus', function(event) {
			Enturma.focusInput(element, false);
		});
		Event.observe(element, 'blur', function(event) {
			Enturma.focusInput(element, true);
		});
	},
	'textarea': function(element) {
		Event.observe(element, 'focus', function(event) {
			Enturma.focusInput(element, false);
		});
		Event.observe(element, 'blur', function(event) {
			Enturma.focusInput(element, true);
		});
	},
	'.sendNewMessage' : function (element) {
	/** Link para href de emails de usuários/comunidades
	 *	para clientes que tenha Mailbox
	 **/
		Event.observe(element, 'click', function(e){
			var email = element.innerHTML;
			createNewMessage('', '', 0, email);
			Event.stop(e);
		});
	},
	'.popupHelp': function (element) {
		Event.observe(element, 'click', function(e){
			Event.stop(e);
			popUp (element.href, 780, 600, 'help', true, true);
		});
	},
//	'#toolChat_mini a': function (element) {
//		Event.observe(element, 'click', function(e){
//			Event.stop(e);
//			popUp (element.href, 780, 600, 'chat', true, true);
//		});
//	},
//	'#wizardChat a': function (element) {
//		Event.observe(element, 'click', function(e){
//			Event.stop(e);
//			popUp (element.href, 780, 600, 'chat', true, true);
//		});
//	},
//	'#toolChat a': function (element) {
//		Event.observe(element, 'click', function(e){
//			Event.stop(e);
//			popUp (element.href, 780, 600, 'chat', true, true);
//		});
//	},
	'.popupGradeUsers': function (element) {
		Event.observe(element, 'click', function(e){
			Event.stop(e);
			popUp (element.href, 780, 600, 'grades', true, true);
		});
	},
	'.viewDetailedContentLog': function (element) {
		Event.observe(element, 'click', function(e){
			Event.stop(e);
			Enturma.viewDetailedContentLog(element.href);
		});
	},
	'#menuBookmark': function (element) {
		aMenu('menuBookmark', 500);
	},
	'#mainMenuCover': function (element) {
        aMenu('mainMenuCover', 100);
	},
	/* Para univille que possui 2 menus over na mesma página
	 * */
	'#mainMenuCoverReply': function (element) {
        aMenu('mainMenuCoverReply', 100);
	},
	'#mainMenuCoverClick': function (element) {
		aMenu('mainMenuCoverClick', 100, 'click');
	},
	'#searchKeyword': function (element) {
		Event.observe(element, 'focus', function(e){
			element.value = '';
			element.removeClassName('textSearch');
		});
	},
	'.closeJobAction': function (element) {
		Event.observe(element, 'click', function(e) {
			Event.stop(e);
			idJob = element.id.replace('jobId_', "");
			contentSource = element.href + "&resultLayout=3";
			idElement = 'closeJobWindow_'+idJob;
			Enturma.callFunction(idElement, contentSource);
			Enturma.toggle(idElement);
		});
	},
	'.questionLine': function(element){
		Event.observe(element, 'click', function(event) {
			Event.stop(event);
			var parent = Element.up($p(element), 'div');
			var idQuestion = parent.id.replace('topic', '');
			var el = $p('lineReply'+idQuestion);
			var box = el;
			if(!box.loaded) {
				var url = element.href + '&resultLayout=3';
				Enturma.callFunction(box, url, {}, {onComplete: function() {
					Enturma.hideLoadLayer();
					Enturma.show(el);
					box.loaded = true;
					var replyElement = $p('replyLine_'+idQuestion);
					Event.observe(replyElement, 'click', function(event) {
						Event.stop(event);
						var parentElement = $p('answerFaq_'+idQuestion);
						var url = replyElement.href + '&resultLayout=3';
						Enturma.callFunction(box, url, {}, {onComplete: function() {
							Enturma.hideLoadLayer();
							Enturma.show(el);
							box.loaded = false;
						}});
					})
				}});
			} else {
				Enturma.toggle(el);
			}
		});
	},
	// Para quando a pergunta do FAQ for carregada em uma tela separada (sem Ajax)
	'.replyLine': function(element) {
		Event.observe(element, 'click', function(event) {
			Event.stop(event);
			var parentElement = Element.up($p(element), 'div');
			var idQuestion = element.id.replace('replyLine_', '');
			var box = $p('answerFaq_'+idQuestion);
			var url = element.href + '&resultLayout=3';
			Enturma.hide(parentElement);
			Enturma.callFunction(box, url, {}, {onComplete: function() {
				Enturma.hideLoadLayer();
			}});
		});
	}, // capa comunidade de ensino
	/*'#boxLearningPath' : function (element) {
		var url = urlhome + 'community/'+element.title+'/Index.html?action=showLearningPath&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},*/
	'#panelTools' : function (element) {
		var url = urlhome + 'community/'+element.title+'/Index.html?action=showAvailableTools&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},
	/*'#communityInfo' : function (element) {
		var url = urlhome + 'community/'+element.title+'/Index.html?action=showCommunityInfo&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},*/
	'#boxSuggestedByTeacher' : function (element) {
		//como não temos acesso daqui ao login da comunidade, usamos o title do elemento
		var url = urlhome + 'community/'+element.title+'/Index.html?action=suggestedActivitiesByTeacher&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},
	'#boxSuggestedByStudent' : function (element) {
		//como não temos acesso daqui ao login da comunidade, usamos o title do elemento
		var url = urlhome + 'community/'+element.title+'/Index.html?action=suggestedActivitiesByStudent&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},
	'#boxAjaxFaq' : function (element) {
		//como não temos acesso daqui ao login da comunidade, usamos o title do elemento
		var url = urlhome + 'community/'+element.title+'/Index.html?action=showFaq&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},
	'#boxCalendarCommunity' : function (element) {
		//como não temos acesso daqui ao login da comunidade, usamos o title do elemento
		var url = urlhome + 'community/'+element.title+'/Index.html?action=showCalendar&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},
	'#boxMessages' : function (element) {
		//como não temos acesso daqui ao login da comunidade, usamos o title do elemento
		var url = urlhome + 'community/'+element.title+'/Index.html?action=showMessages&resultLayout=3';
		Enturma.callFunction(element.id, url);
	},// Permission Macro
	'#macroList' : function (element) {
		var url = urlhome + 'admin/PermissionMacro.html?action=listMacros&resultLayout=3';
		Enturma.callFunction(element.id, url);
	}, // ocorrencias conselho de classe

	'.occurrenceLine': function(element){
		Event.observe(element, 'click', function(event) {
			Event.stop(event);
			var idUser = element.id.replace('occurrence', '');
			var el = $p('occurrenceReply'+idUser);
			var box = el;
			if(!box.loaded) {
				var url = element.href + '&resultLayout=3';
				var divElem = box;
				Enturma.callFunction(divElem, url, {}, {onComplete: function() {
					Enturma.hideLoadLayer();
					Enturma.show(el);
					box.loaded = true;
				}});
			} else {
				Enturma.toggle(el);
			}
		});
	},

	// Class Council
	'#councilMembersList' : function (element) {
		//como não temos acesso daqui ao login da comunidade, usamos o title do elemento que deve estar no formato title@register
		//temp = element.title.split('@');
		//var url = element.title
		//urlhome + 'community/'+temp[0]+'/Council.html?action=getCouncilMembers&resultLayout=3&register='+temp[1];
		Enturma.callFunction(element.id, element.title);
	},

	'#contactTeachers' : function (element) {
		Event.observe(element, 'click', function(event) {
			Event.stop(event);
			var href = element.href;
			window.open(href);
		});
	},
	
	'#formContatos': function (element) {
		var lis = $p(element).select('li');
		lis.each(function(item) {
			Event.observe(item, 'click', function(event) {
				var arrContact = getSelected();
				var lastClicked = Event.element(event)
				if (arrContact.length > 30){
					alert('Você pode selecionar no máximo 30 contatos por grupo.');
				   	$p(lastClicked).checked = 0;
				    finished();
					return;
				}
			})
		})
	},
	
	'#ocultMenuAction': function (element) {
		Event.observe(element, 'click', Enturma.ocultShowMenu);
	},
	
	'#ocultInfoAction': function (element) {
		Event.observe(element, 'click', Enturma.ocultLearningPathDesc);
	},
	
	//Carrega sistema de widgets (dockingPanel + widgets)
	'div[model=dockingPanel]': function (element) {
		Enturma.enableDockingPanel($$('div[model=dockingPanel]'));
	},

	'#boxAjaxCalendar' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=calendar&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxCommunitiesLoad' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=communitiesBox&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},	
	'#boxAjaxMonograph' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=monographBox&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxAjaxMail' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=webmail&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxProfileQuota' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=quota&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxLastUpdates' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=history&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxAjaxNewsFolders' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=news&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxAjaxScrapbook' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=scraps&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxAjaxResume' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=resumeBox&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	'#boxAjaxSchedule' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=scheduleBox&resultLayout=3';
		Enturma.ajaxWidgetData(element.id, url);
	},
	/*'#boxCommunities' : function (element) {
		var url = urlhome + 'account/MySpace.html?action=communitiesBox&resultLayout=3';
		element.show();
		Enturma.callFunction(element.id, url);
	},*/
	'#formEvaluationManager': function (element) {
		Event.observe($p('autocomplete'), 'keyup', Enturma.renderAutoCompleteEvaluation );
	},
	'#formLoginIM' : function (element) {
		if (document.createEventObject){
			var evt = document.createEventObject();
			return element.fireEvent('onsubmit',evt);
		} else {
	        var evt = document.createEvent("HTMLEvents");
	        evt.initEvent('submit', true, true ); // event type,bubbling,cancelable
	        return !element.dispatchEvent(evt);
		}
	},	
	'#organizeMySpace' : function (element) {
		$p('organizeMySpace').observe('mouseover', function(event) {
			event.stop();
			if ($p('organizeMySpace').readAttribute('doing_animation') != 'true') 
			{
				var relatedTarget = $p(event.relatedTarget || event.fromElement);
				var target = Event.element(event);
				if ((target == element || Element.descendantOf(target, element)) &&
				!((relatedTarget == element) || Element.descendantOf(relatedTarget, element))) 
				{
					clearTimeout($p('organizeMySpace').autoShow);
					if ($p('organizeMySpace').getStyle('display') == 'none') 
					{
						$p('organizeMySpace').autoShow = setTimeout(function(){
							Effect.SlideDown('organizeMySpace', {
								duration: 0.3,
								beforeStart: function(event){
									$p('organizeMySpace').writeAttribute('doing_animation', 'true');
								},
								afterFinish: function(event){
									$p('organizeMySpace').writeAttribute('doing_animation', 'false');
								},
								queue: {
									position: 'end',
									scope: 'organizeMySpace',
									limit: 1
								}
							});
						}, 2000);
					}
				}
			}
		});
		
		$p('organizeMySpace').observe('mouseout', function(event) {
			event.stop();
			var relatedTarget = $p(event.relatedTarget || event.fromElement);
	        var target = Event.element(event);
			if ((target == element || Element.descendantOf(target, element)) &&
			!((relatedTarget == element) || Element.descendantOf(relatedTarget, element))) 
			{
				clearTimeout($p('organizeMySpace').autoShow);
				if ($p('organizeMySpace').readAttribute('doing_animation') != 'true' && $p('organizeMySpace').getStyle('display') != 'none') 
				{
					clearTimeout($p('organizeMySpace').autoHide);
					$p('organizeMySpace').autoHide = setTimeout(function(){
						Effect.SlideUp('organizeMySpace', {
							duration: 0.3,
							beforeStart: function(event){
								$p('organizeMySpace').writeAttribute('doing_animation', 'true');
							},
							afterFinish: function(event){
								$p('organizeMySpace').writeAttribute('doing_animation', 'false');
							},
							queue: {
								position: 'end',
								scope: 'organizeMySpace',
								limit: 1
							}
						});
					}, 0500);
				}
			}
		});
		$p('organizeMySpace').observe('click', function(event) {
			event.stop();
			clearTimeout($p('organizeMySpace').autoShow);
			clearTimeout($p('organizeMySpace').autoHide);
			if(Event.element(event) == $p('organizeMySpace') || (Event.element(event) == $p('organizeMySpace_toggler') ))
			{
				//Quando for clicado e o menu estiver escondido, não ativar o autoHide, do contrário re-ativa-lo.
				if ($p('organizeMySpace').getStyle('display') == 'none') 
				{
					$p('organizeMySpace').autoHide = false;
				}
				else
				{
					//Ativar autoHide se não houver um atributo definindo como falso.
					if($p('organizeMySpace').readAttribute('autoHide') != 'false')
					{
						$p('organizeMySpace').autoHide = true;
					}
				}
				Effect.toggle('organizeMySpace', 'slide', {
					duration: 0.3,
					beforeStart: function(event){
						$p('organizeMySpace').writeAttribute('doing_animation', 'true');
					},
					afterFinish: function(event){
						$p('organizeMySpace').writeAttribute('doing_animation', 'false');
					},
					queue: {
						position: 'end',
						scope: 'organizeMySpace',
						limit: 1
					}
				});	
			}
		});
	},
	/**
	 * Make the menu organizeToggle auto slideUp 
	 */
	'#organizeToggle' : function (element) {
		
		if($p('organizeToggle').readAttribute('autoHide') != 'false')
		{
			$p('organizeToggle').autoHide = true;
			new StyleObserver(
			    element,
			    1, //1 second period
			    function(el,value){   //the callback
			    	if(value == 'block' && $p('organizeToggle').autoHide)
					{
						el.autoHide=setTimeout(function(){
							if($p('organizeToggle').readAttribute('doing_animation') != 'true')
							{
								Effect.SlideUp('organizeToggle', {
									duration: 0.3,
									beforeStart: function(event){
										$p('organizeToggle').writeAttribute('doing_animation', 'true');
									},
									afterFinish: function(event){
										$p('organizeToggle').writeAttribute('doing_animation', 'false');
									},
									queue: {
										position: 'end',
										scope: 'organizeToggle',
										limit: 1
									}
								});
							}
						},4000);
					}
			    }, 
			    'display'   //the style you want to observe
			);
		}
	},
	/**
	 * admin/Community
	 * 
	 */
	
	'#comType': function (element) {
		Event.observe(element, 'change', Enturma.toggleCommunityTypeEvent);
	},

	//ferramnta comentário
	'#boxComments': function (element) {
		
		var variaveis = $p('boxComments').title.split("|");
		var title = variaveis[0]; // mostra apenas a string "nome"
		var communityLogin = variaveis[1]; // mostra apenas a palavra "login"

		var url = '/comments/'+communityLogin+'/';
		var pars = 'idRawContent='+title+'&idComponent=23&resultLayout=3';
		var target = element.id;
		
		 new Ajax.Request(url, {
			  method: 'get',
			  parameters: pars,
			  contentType: 'text/html',
			  onSuccess: successFunc
			  });

		 function successFunc(response){
			   
		    var container = $p(element);
		    var content = response.responseText;
		    container.update(content);
		}
		function failureFunc(response){

		     alert("Call is failed" );
		    
		}		
	},
	
	//conteúdo relacionado
	'#boxRelatedContent': function (element) {
		
		var variaveis = $p('boxRelatedContent').title.split("|");
		var idPage = variaveis[0]; // mostra apenas a string "nome"
		var communityLogin = variaveis[1]; // mostra apenas a palavra "login"

		var url = '/relatedContent/'+communityLogin+'/';
		var pars = 'idContent='+idPage+'&resultLayout=3';
		var target = element.id;
		
		 new Ajax.Request(url, {
			  method: 'get',
			  parameters: pars,
			  contentType: 'text/html',
			  onSuccess: successFunc
			  });

		 function successFunc(response){
			   
		    var container = $p(element);
		    var content = response.responseText;
		    container.update(content);
		}
		function failureFunc(response){

		     alert("Call is failed" );
		    
		}		
	},
	
	// Captcha para formParser.php
	'.formParserCaptcha': function (element) {
		function loadjscssfile(filename, filetype){
			 if (filetype=="js"){ //if filename is a external JavaScript file
			  var fileref=document.createElement('script')
			  fileref.setAttribute("type","text/javascript")
			  fileref.setAttribute("src", filename)
			 }
			 else if (filetype=="css"){ //if filename is an external CSS file
			  var fileref=document.createElement("link")
			  fileref.setAttribute("rel", "stylesheet")
			  fileref.setAttribute("type", "text/css")
			  fileref.setAttribute("href", filename)
			 }
			 if (typeof fileref!="undefined")
			  document.getElementsByTagName("head")[0].appendChild(fileref)
		}
		
		loadjscssfile('/include/js/modalbox.js','js');
		loadjscssfile('/templates/source/default/xhtml/css/modalbox.css','css');
		
		Event.observe(element, 'submit', function(e) {
			
			Modalbox.show(urlocal+'/captcha/'+element.id, {title: 'Captcha', width: 600, height: 240});
			if (cancelSubmit)
			{
				Event.stop(e);
			}
			
			return false;			
			
		});
	},
	
	DateValidate:function(date){
        erro=0;
        today = new Date();
        todayYear = today.getFullYear();
        bars = date.split("/");
        if (bars.length == 3)
        {
                day = bars[0];
                month = bars[1];
                year = bars[2];
                result = (!isNaN(day) && (day > 0) && (day < 32)) && (!isNaN(month) && (month > 0) && (month < 13)) && (!isNaN(year) && (year.length == 4) && (year <= todayYear && year >= 1900));
                if (!result)
                        return false;
         } 
         else
             return false;

        return true;
    }    

}

