try {
	jQuery.noConflict();
	$j = jQuery;
}catch(e) {
	alert("jQuery não está disponível");
}



// EXTENDING VALIDATOR METHODS ========================================

$j.validator.addMethod("login_chars", function(value, element, param) {
  return /^[\w\.\-\_]*$/.test(value); 
},"O login somente pode conter letras, números, pontos, hifens e underscore. Ex.: log_in, log-in, log.in");

$j.validator.methods.otherThan = function(value, element, param) {
	return value != param;
};


$j.validator.addMethod("otherThan", function(value, element, param) { 
  return value != param; 
});

$j.validator.addMethod("requiredWith", function(value, element, param) {
	var elements = param.split(",");
		elements.push(element);
	
	var state = true;

	for(i in elements){
		var element = jQuery(elements[i])[0];
		
		switch( element.nodeName.toLowerCase() ) {
		case 'select':
			var options = jQuery("option:selected", element);
			if(!options.length > 0 && ( element.type == "select-multiple" || (jQuery.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0))
				state = false;
		case 'input':
			if ( this.checkable(element) )
				if(!this.getLength(value, element) > 0)
					state = false;
		default:
			if(!value.length > 0)
				state = false;
		}
	}
		
	return state;
},"Please fill up all related fields");

// ===============================================================================

function getNewRndNumber(){
	return Math.round(Math.random()*99999999999);
}


var Content_Show = function(){

	$j("div.outer")
		.css("opacity",0)
		.animate({opacity: 1},550, function(){
			$j(this).css("opacity","auto");
		});
}

var FLEXIGRID_OPTIONS = {
	dataType: 'json',
	usepager: true,
	useRp: true,
	rp: 15,
	showTableToggleBtn: true,
	height: 'auto',
	resizable: false,
	width:'auto'
}

var MULTICOMBO_OPTIONS = {
	filterText: 'Filtro',
	selectAllText: 'Selecionar todos',
	removeSelectedText: 'Remover seleção',
	addSelectedText: 'Adicionar seleção',
	addedText: '# registro(s) adicionado(s)',
	availableText: '# registro(s) disponível(is)',
	limitText: 'Máximo: # registro(s)'
}

var MULTIFILE_OPTIONS = {
			 striped: true,
			 strings: {
			 	errors: {
					extension: 'Esta extensão ([ext]) não é válida.\nPor favor tente novamente...',
					duplicated:'Este arquivo ([filename]) já foi selecionado.\nPor favor selecione outro...',
					connection:'O controle não conseguiu se conectar à url informada ([addURL])',
					response: 'O servidor retornou uma sequência de código inválida.',
					transaction: 'O servidor não pôde processar o arquivo que você está tentando subir ([filename]).\n Veja mais: ',
					generic: 'Desculpe, houve um erro ao processar sua solicitação',
					attribute: 'Na resposta do servidor o atributo [attribute] (obrigatório) está ausente.\nPor favor verifique o código...'
				},
			 	remove: 'Remover [filename]',
				removeConfirm: 'Você tem certeza que deseja remover o arquivo [filename]?',
				removeSelectedConfirm: 'Por favor confirme a remoção destes [total] arquivos...\n(clique em Cancelar caso não tenha certza disso!)',
				removeAll: 'Remover seleção',
				detail: 'Ver detalhes de [filename]',
				selectAll: 'Selecionar todos',
				added: '[total] arquivo(s) adicionado(s)',
				processing: 'Processando sua solicitação, por favor aguarde...',
				subtitle: 'Legenda',
				text: 'Texto',
				file: 'Arquivo'
			 }
		  };

/**
 * Inicia o componente JDMultifile
 */
var Multifile_Start = function(){
	
	$j("input[type=file].multifileme").each(function(){
		var controlID = ($j(this).attr("id").length>0)?$j(this).attr("id"):$j(this).attr("name");
		
		var defs = $j(this).metadata();
			defs.uid = controlID;
		
		try {
			$j(this).JDMultifile($j.extend(defs,MULTIFILE_OPTIONS));
		}catch(e){
			alert("Source: Main.js\nErro ao iniciar JDMultifile para " + controlID + "\n" + e);
		}	
	});
		
}
		  
var InitMain = function() {
	//Content_Show();
	
	
	try{
		FormClasses_Set();
	}catch(e){}
	
	try{
		BlankLink_Rewrite();	
	}catch(e) {}
	
	
	try{
		InitDomain();
	}catch(e){}
	
	
	
	
}




var BlankLink_Rewrite = function () {
	
	$j("a._blank").each(function(){
		var self = $j(this);
		var prevTitle = self.attr("title")
		var blankTitle = (prevTitle.length >0)?" (nova janela)":"Este link abre em uma nova janela";
		self.attr("title", prevTitle + blankTitle);
	});
	
	$j("a._blank").bind("click", function(){
		var self = $j(this);
		var url = self.attr("href");
		window.open(url);
		return false;		
	});
}

var ExecuteAfterLoaded = function(f) {
	var loadedImagesCount = 0;
	var contentImages = $j("div.content").find("img");
	var contentImagesCount = contentImages.length;
	
	var exec = function(){
		eval(f);
	}
	
	if(contentImagesCount>0)
		contentImages.bind("load", 
			function(){
				loadedImagesCount++;
				if(loadedImagesCount>=contentImagesCount)
					exec();
					return false;
			}
		);
		
	exec();
	
}

var validaLogin = function(){
	return true;
}


var DynamicComboLoading = false; 

var DynamicCombo_Fill = function(e){
	
	var self = $j(this);
	if(!self[0].disabled && !DynamicComboLoading) {
		self.attr("disabled",true);
		DynamicComboLoading = true;
		
		var defs = self.metadata();
		var control = $j(defs.control);
			control.attr("disabled",true);
			control.parent().find("label").remove();
			
		var loading = control.parent().find("span:first");
			loading.show();
			
		var value = Number(self.find("option:selected").val());
		
		
		$j.ajax({
			url: defs.URL,
			type: "POST",
			dataType: "json",
			data: "&" + defs.param + "=" + value,
			success: function(data,status){
					control.attr("disabled", true);
					control.find("option:gt(0)").remove();

				for(i = 0; i<data.length; i++){
					var option = document.createElement("option");
					eval("option.value = data[i]." + defs.vAttr);  
					eval("option.innerHTML = data[i]." + defs.tAttr);
					
					control.append(option);
				}
				
				
				
				if(data.length>0){
					control.animate({opacity: 1},150);
					control.parent().animate({opacity: 1});
				} else {
					control.parent().animate({opacity: 0.4});
				}
				
				loading.hide();
				control.attr("disabled",false);
				self.attr("disabled",false);
				DynamicComboLoading = false;
			},
			error: function(r,s,e){
				alert("Erro:" + e);
			}
		});	
	}
}

var DynamicCombo_Start = function(){
	$j("select.dynamic")
		.bind("change",DynamicCombo_Fill)
		.each(function(){
			var defs = $j(this).metadata();
			var control = $j(defs.control);
			var wrapper = document.createElement("div");
				$j(wrapper).addClass("dynamic-wrapper");
						
			var loading = document.createElement("span");
				$j(loading).addClass("loading");
				$j(loading).hide();
				
			control.wrap(wrapper);
			control.parent().append(loading);
			
			if(control.find("option").length > 0)
				control.animate({opacity: 1});
			
		});
		
	
}

var FormClasses_Set = function(){
	
	// instantiating validation
	$j("form.validateme").validate();
	
	// adding specific css classes	
	$j("input[type=radio]").addClass("radio");
	$j("input[type=checkbox]").addClass("checkbox");
	$j("input[type=button]").addClass("button");
	$j("input[type=submit]").addClass("submit");
	$j("input[type=reset]").addClass("reset");
	$j("input[type=text]").addClass("text");
	$j("input[type=file]").addClass("file");
	$j("input[type=password]").addClass("password");
	$j("textarea").addClass("textarea");
	$j("select").addClass("select");
	
	// adding masks, hints e datepicker
	$j("input.data")
		.mask("99/99/9999")
		.datepicker({ yearRange: '1910:2100' })
		.attr("autocomplete","off");
		
	$j("input.hora")
		.mask("99:99")
		.attr("autocomplete","off");
	
	$j("input.ddd").mask("99");
			
	$j("input.telefone").mask("9999-9999");
			
	$j("input.cep").mask("99999-999");
	
	$j("input.cpf").mask("999.999.999-99");

	$j("input.ip").mask("999.999.999.999");
	
	try{
		$j("form.faleconosco").find("select[name=assunto]").bind("change", FaleConoscoAssunto_Change);
		$j("form.faleconosco").find("select[name=assunto]").trigger("change");
	}catch(e){alert(e)}
	
}


var getFileTypeFor = function(filename){
	var extension = filename.substring(filename.lastIndexOf(".")+1).toLowerCase();
	var images = "jpg|jpeg|gif|png|bmp";
	var txt = "txt|csv|htm|html";
	
	if(extension.match(images)){
		return "image";
	}else if(extension.match(txt)){
		return "text";
	}else{
		return undefined;	
	}
}

var blockUIFile =  function(link, filename){
	var url = $j(link)[0].href;
	var random = getNewRndNumber();
	

	if(url.indexOf("?")>-1)
		url = url + "&_rnd=" + random;
	else
		url = url + "?_rnd=" + random;

	var type = getFileTypeFor(filename);

	var container = document.createElement("div");
		$j(container).addClass("file-container");

	var header = document.createElement("h6");
		$j(header).html("<span>Preview - "+filename+"</span>");

	var cancel = document.createElement("a");
		$j(cancel).addClass("cancel");
		$j(cancel).attr("href","#");
		$j(cancel).attr("title","Fechar");
		$j(cancel).append("cancel");
		
		$j(cancel).bind("click", function(){
			$j.unblockUI();
			return false;
		});

	$j(header).append(cancel);
	$j(container).append(header);

	if(type=="image"){
		var img = document.createElement("img");
			img.src = url;
			$j(img).bind("load", function(){
				
				if($j(this).width() >= $j(window).width())
					$j(this).width(750);
					
				var blockUIDiv = $j(this).parent().parent();
				
				var divWidth = $j(this).width()+ 30;
				
				if ((divWidth < 750)) {
					divWidth = 750;
				}
				
				
				
				var divHeight = $j(this).height()+ 60;
				
				var divLeft = (($j(window).width()-divWidth)/2);
				var divTop = (($j(window).height()-divHeight)/2);
				
				$j(this).css("margin-top", "15px");
				
				
				
				blockUIDiv.css("left",divLeft+"px");
				blockUIDiv.css("top",divTop+"px");
				
				blockUIDiv.animate({width: divWidth, height: divHeight, opacity: 1, borderWidth: '1px'}, 300);
			});
		
		$j(container).append(img);
		
		$j.blockUI({message: container, css:{height: '100%', width: '100%', opacity: 0}});
		
	}else if (type == "text"){
		
		var iframe  = document.createElement("iframe");
		$j(iframe).addClass("text");
	
		$j(container).append(iframe);
	
		$j.ajax({
			url: url,
			type: "POST",
			dataType: "html",
			success: function(data,status){
				
				$j.blockUI({message: container, css:{height: '100%', width: '100%', opacity: 0}});
							
				blockUIDiv = $j(container).parent();
				
				iframe = $j(container).find("iframe")[0];
				var iDoc = iframe.contentDocument;
				if (iDoc == undefined || iDoc == null)
    				iDoc = iframe.contentWindow.document;
		
				iDoc.open();
				iDoc.write(data);
				iDoc.close();
				
				
				var divWidth = 750;
				var divHeight = ($j(window).height() * 0.7);
				
				$j(iframe).width(divWidth-15);
				
				$j(iframe).height(divHeight-45);
				
				var divLeft = (($j(window).width()-divWidth)/2);
				var divTop = (($j(window).height()-divHeight)/2);
				
				blockUIDiv.css("left",divLeft+"px");
				blockUIDiv.css("top",divTop+"px");
				
				blockUIDiv.animate({width: divWidth, height: divHeight, opacity: 1, borderWidth: '1px'}, 300);
			},
			error: function(r,s,e){
				alert("deu erro");
			}
		});
	}else {
		window.open(url);
	}
}

var FaleConoscoAssunto_Change = function(){
	if($j(this).find("option:selected").val()=="SRI - Banco de Dados"){
		$j(".sri-field").show();		
	}else{
		$j(".sri-field").hide();
	}
}

var FormClasses_Set = function(){
	
	// instantiating validation
	$j("form.validate-me").validate();
	
	// adding masks, hints e datepicker
	$j("input.data")
		.mask("99/99/9999")
		.datepicker({ yearRange: '1910:2010' })
		.attr("autocomplete","off");
		
	$j("input.hora")
		.mask("99:99")
		.attr("autocomplete","off");
	
	$j("input.ddd").mask("99");
			
	$j("input.telefone").mask("9999-9999");
			
	$j("input.cep").mask("99999-999");
	
	$j("input.cpf").mask("999.999.999-99");
	$j("input.ddd-telefone").mask("(99) 9999-9999");
	$j("input.cpf-number").mask("99999999999");
	$j("input.cnpj").mask("99.999.999/9999-99");

	$j("input.ip").mask("999.999.999.999");

}


$j(document).ready(function(){
	ExecuteAfterLoaded("InitMain()");
})
