/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

// Mail demo javascript code

// Display list of messages (upper right pane)

var LISTPANE = "listPane";
var formProfile = "";
var tree = null;



function displayList(){
    this.update = function(message) {
        var clickedTreeNode =     
            message.node;       
		tree = clickedTreeNode.tree; 					
		var url = clickedTreeNode.objectId;
		treeNodeSelected = clickedTreeNode;						
		getListPane().setUrl(url);				        								
    };
	
}


function updateTreeNode(){
	try{
		if(tree!=null){				  		 
		  tree.updateIconTree();
		}
	}
	catch(e){
		alert(e);
	}
}

var displayer = new displayList();
var nodeSelectionTopic = dojo.event.topic.getTopic("listSelected");
nodeSelectionTopic.subscribe(displayer, "update");

function getListPane(){
	
   return getWidgetById(LISTPANE);	
}

function getWidgetById(id){
	try{
		return dojo.widget.getWidgetById(id);
	}
	catch (e) { return null}
}

function postDojoForm(id){		
	getListPane().setUrl($(id).submit());
}

/**
 * Os ids dos editores e textareas tem que estar na mesma ordem
 * @param {Object} id do form
 * @param {Object} editorsIds ids dos editores usados. Mais de 1 deve ser separado por ,
 * @param {Object} textAreasIds ids dos textsAreas para poder jogar o conteudo. Mais de 1 deve ser separado por , 
 */
function setTextsFromEditor(editorsIds,textAreasIds){	    
	var editorsIds = editorsIds.split(",");
	var textAreasIds = textAreasIds.split(",");	
	for(i=0;i<editorsIds.length;i++){	    	
		$(textAreasIds[i]).value = getWidgetById(editorsIds[i]).getEditorContent();
    }	
	
}
/**
 * Altera o conteudo do listPane
 * @param {Object} url
 */
function changeUrl(url){					
	  if(trim(url,0).length>0){		  		  	      
		  var iframeMiolo = null;
		  try{
				if(url.indexOf("?")<=0){
					url = url+"?noCache="+new Date();
				}
				else{
					url = url+"&noCache="+new Date();
				}				  
		  	iframeMiolo = $("miolo");
			iframeMiolo.src = url;						
		  }
		  catch(e){					  		
		  		iframeMiolo = this.parent.document.getElementById("miolo");							
				iframeMiolo.src = url;	
		  }
		    
	  }
}




/**
 * Faz o post do form utilizando ajax
 * @param {Object} formId
 * @param {Object} url
 */
function ajaxPost(formId,msg,validateFunction,handler){ 
	
     
  var validou = false;  
  
  try{
  	  	/*
  	 * Funcao que as telas podem implementar caso queiram fazer alguma
  	 * coisa antes de postar.
  	 */
  	eval("prepareForm()");
  }
  catch(e5){}
     
  try{  	  	
	validou = eval(validateFunction+"(formId)");			
	if(validou=="undefined"){		
		validou = true;	
	}
  }
  catch(e){   	  	  	  	  	  
	validou = true;
  }
             
  if(validou){

	  if(!msg){
	    $('formResult').innerHTML = "";
	  } 
	  else{
	  	$('formResult').innerHTML = msg;
	  } 	  
	  
	  dojo.io.bind({
		method : 'POST',
		url: $(formId).action,
	    handler:function(type, data, evt){
			       if(type=="load"){			   			
				   	  $('formResult').style.color = "blue";		      		   				       	   
					  //se teve algum erro
					  if($('erro')){
					  	 $('formResult').style.color = "red";					  	 					     	
					  }			
					  
					  $('formResult').innerHTML = data; 
			       }
				   if(type=="error"){
				   	  $('formResult').style.color = "red";			   	  
				   	  $('formResult').innerHTML = "Erro inesperado. Tente de novo";				  
				   }
				   
				   try{
				   		eval(handler+"(data,type)");
				   }
				   catch(e){}				   
				    },		  
	    formNode:dojo.byId(formId),
		preventCache:true,
		mimetype: "text/html",
	    transport: "XMLHTTPTransport"		
	   });   
   }   
}

/**
 * Faz um get via ajax e se existir alguma funcao de callback ela é chamada
 * @param {Object} url
 * @param {Object} callBack
 */
function ajaxGetInteraction(url,callBack){        
      if(!callBack || callBack==""){
         callBack = "";	     	
	  }      	        	  		        
		  dojo.io.bind({
			method : 'GET',
			url: url,
		    handler:function(type, data, evt){						
						if(type=="load"){
						   vetor = eval(data);
						   eval(callBack+"(vetor)");
						}	
					},		  	    
			preventCache:true,			
			mimetype: "text/html",
		    transport: "XMLHTTPTransport"		
		   });	   	           
}

/**
 * 
 * @param {Object} formId id do Formulario
 * @param {Object} callBack funcao de callBack
 * @param {Object} loadingText texto para ser mostrado enquanto carrega
 * @param {Object} responseAreaId id do local de resposta ajax
 */
function ajaxPostInteraction(formId,callBack,loadingText,responseAreaId){
	  if(!callBack || callBack==""){
         callBack = "";	     	
	  }  
	  $(responseAreaId).innerHTML = loadingText;
	  dojo.io.bind({
		method : 'POST',
		url: $(formId).action,
	    handler:function(type, data, evt){
					if(trim(callBack,0).length>0){
						eval(callBack+"(type,data,evt)");
					}				   
				},		  
	    formNode:dojo.byId(formId),
		preventCache:true,
		mimetype: "text/html",
	    transport: "XMLHTTPTransport"		
	   });	      	        	  	
}




/**
 * Funcao para via ajax fazer a exclusao dos registros e depois atualizar a tabela.
 * Assumo que os checks marcados tem o id==ids. To assumindo que o id da tabela de 
 * listagem é sempre "tableList". O segundo parametro é passado caso 
 * a tabela seja montada utilizando a displaytag
 * 
 * @param {Object} formId 
 * @param {Object} tableId
 */
function ajaxDeletePost(formId,handler){ 	  
  try{
  	$('listResult').innerHTML = "";
  }
  catch(e){}
  dojo.io.bind({
	method : 'POST',
	url: $(formId).action,
    handler:function(type, data, evt){
		       
		       if(type=="load"){	
			   try{
			   	  $('listResult').style.color = "blue";	
				  $('listResult').innerHTML = data;	   	  
				  if(!$('erro')){			  				  
                       getChecksIds();			
				  }
				}
				catch(e2){}				  
		       }
			   if(type=="error"){	
			    try{		   				   	  
				  $('listResult').style.color = "red";
				  $('listResult').innerHTML = "Não foi possivel realizar a operação";
				}
				catch(e3){}				  				  				
			   }			   
			   try{			   		
			   		eval(handler+"(data,type)");
			   }
			   catch(e){}
		    },		  
    formNode:dojo.byId(formId),
	preventCache:true,
	mimetype: "text/html",
    transport: "XMLHTTPTransport"		
   });
}



/**
 * Executa uma interacao com a url esperando como retorno 
 * uma string no formato JSON. Usado para montar o combo
 * @param {Object} url para qual deve se fazer a requisicao
 * @param {Object} callBack metodo de callBack que deve ser executado
 */
function ajaxJSONInteraction(url,callBack){  
  dojo.io.bind({
	method : 'get',
	url: url,
    handler:function(type, data, evt){
		       montaComboAJAX(type,eval(data));
		    },		  
	preventCache:true,
	mimetype: "text/json"    	
   });	
}

/**
 * Executa uma interacao com a url esperando como retorno 
 * uma string no formato JSON.
 * @param {Object} url para qual deve se fazer a requisicao
 * @param {Object} callBack metodo de callBack que deve ser executado
 */
function genericAjaxJSONInteraction(url,callBack){  
  dojo.io.bind({
	method : 'get',
	url: url,
    handler:function(type, data, evt){
		       return data;
		    },		  		  
	preventCache:true,
	mimetype: "text/json"    	
   });	
}

/**
 * Faz uma chamada ajax, na qual uma pagina html é a resposta
 * @param {Object} url
 * @param {Object} callBack
 */
function ajaxHtmlGetInteraction(url,callBack,loadingText,responseAreaId){
	  if(!callBack || callBack==""){
         callBack = "";	     	
	  }  
	  $(responseAreaId).innerHTML = loadingText;
	  dojo.io.bind({
		method : 'GET',
		url: url,
	    handler:function(type, data, evt){
					if(trim(callBack,0).length>0){
						eval(callBack+"(type,data,evt)");
					}				   
				},		  	    
		preventCache:true,
		mimetype: "text/html",
	    transport: "XMLHTTPTransport"		
	   });	      	        	  	
}





