/**
 * Qualquer função utilitária de funcionamento transversal entre os negócios
 * declare neste arquivo
 * 
 * @author Diego Rocha 
 */
$(document).ready(function() {
	// CARREGAR AQUI SOMENTE O QUE É NECESSÁRIO PARA TODAS AS TELAS
	
	$("input[name$='cepStart']").keyup(function(e) {		
		if ($(this).val().length == 5) {
			$(this).nextAll("[name$='cepEnd']").first().focus();
		};
	});
	
	$("input[name$='cepStartNew']").keyup(function(e) {		
		if ($(this).val().length == 5) {
			$(this).nextAll("[name$='cepEndNew']").first().focus();
		};
	});
	
	$("input[name$='ddd']").keyup(function(e) {		
		if ($(this).isPreenchido(2)) {
			$(this).nextAll("[name$='telefone']").first().focus();
		};
	});
	
	/*
	 * link da Thawte
	 */
	
	$("#lnkThawte").click(function() {
		//defini o tamanho da janela popup
		widthWindow  = 680;
		heigthWindow = 510;
		
		//diminui o valor da metade da resolução pelo tamanho da janela, fazendo com q ela fique centralizada
		var top  = (screen.height/2 - heigthWindow/2) - 90;
		var left = (screen.width/2  - widthWindow/2)  + 90;
		
		window.open(this.href, 
			        "Thawte",'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no,'+ 
			        'copyhistory=no, width=510, height=680, top='+top+ ',left='+left+'');

		return false;
		
	});
	
	/*
	 * Tratamento de teclas da caixa de busca ---------------------------
	 */
	
	//$("#txtPCouCod").onlyAlphaAndNumbers();
	
 });


/**
 * Dada uma url adiciona ou altera um parametro.
 * 
 * Ex.: usando addOrReplaceURLParameter(url, "produto", "2");
 *      a saída para /eletro?produto=1 é: /eletro?produto=2
 *              para /eletro?grupo=1 é /eletro?grupo=1&produto=2
 *              para /eletro é /eletro?produto=2
 * 
 * @param url A URL a ser avaliada
 * @param paramName O nome do parâmetro
 * @param paramValue O valor do parâmetro
 * 
 * @return A url modificada
 */
function addOrReplaceURLParameter(url, paramName, paramValue) {
	if (url.indexOf(paramName) > 0) {
		url = url.replace(new RegExp("(" + paramName + "=)[^&]+"),paramName + "=" + paramValue);
	} else {
		if (url.indexOf("?") < 0) {			
			url += "?";			
		} else {
			if (url.indexOf("=") >= 0) {
				url += "&";
			}
		}
		url += paramName + "=" + paramValue;
	}
	return url;
}

function addURLParameter(url, paramName, paramValue) {
	if (url.indexOf("?") < 0) {			
		url += "?";			
	} else {
		if (url.indexOf("=") >= 0) {
			url += "&";
		}
	}
	url += paramName + "=" + paramValue;
	return url;
}

/**
 * Dada um URL remove o parâmetro e devolve a mesma URL sem 
 * este parâmetro
 * 
 * Ex.: entrada: http://site.com?id=1&q=a+b
 *      chamada: removeURLParameter(url, "id")
 *        saída: http://site.com?&q=a+b 
 *        
 * @param url URL a ser avaliada
 * @param paramName Nome do parâmetro
 * 
 * @return url sem o parâmetro ou a mesma URL se o parâmetro não foi encontrado
 */
function removeURLParameter(url, paramName) {
	if (url.indexOf(paramName) >= 0) {
		url = url.replace(new RegExp("(" + paramName + "=)[^&]+"),"");
	}
	return url;
}

/**
 * Dada uma URL e um parâmetro retorna seu valor
 * 
 * Ex.: entrada: http://site.com?id=1&q=a+b
 *      chamada: getURLParameterValue(url, "id")
 *        saída: 1
 *         
 * @param url URL a ser avaliada
 * @param paramName Nome do parâmetro
 * 
 * @return o valor do parâmetro
 */
function getURLParameterValue(url, paramName) {
	
	if (url.indexOf(paramName) >= 0) {
		var paramValue = new RegExp("(" + paramName + "=)[^&]+").exec(url)[0].replace(paramName + "=", "");
	}
	return paramValue;
}

/**
 * Localiza o botão de comparação de produtos, verifica se foram
 * selecionados no mínimo dois produtos, caso sim, submete o formulário,
 * caso não abre caixa de diálogo avisando
 */
$('.btnCompararProd').live("click", function(){
	jQuery.ajax({
		url: "/eletro/countCompararProduto",
		dataType: 'json',					
		success: function(data) {
			var numChecked = data;
			
			if(numChecked < 2){
				$.fn.colorbox({width:"420px", open:true, inline:true, href:"#modalInsuficienteComp", opacity: 0.2, rel:false});
			} else {		
				$('#formLstProds').submit();
			}
		}, error: function(xhr) {						
			if (xhr.status == "400") {
				showErrorMessageOnGlobal(xhr.responseText);
			} else if (xhr.status == "408") {
				showErrorMessageOnGlobal("A requisição alcançou o tempo limite, repita a operação");
			} else {
				showErrorMessageOnGlobal("O servidor não pode atender a solicitação");
			}
		}
	});
});


//------------------------------------
//Funções para o calendário da cozinha
//------------------------------------

function setNomeUnidade() {
	$("#linkVerListaCompleta").text("Veja a lista completa de cursos para " + $("#unidadesCursos > option:selected").text());
	$("#linkVerListaCompleta").attr("title", "Veja a lista completa de cursos para " + $("#unidadesCursos > option:selected").text());
	$("#linkVerListaCompleta").attr("href", "/cozinha/cursos?idUnidade=" + $("#unidadesCursos > option:selected").val());
}

function loadCalendar(data) {
	var hoje = new Date();
	var mesAno = new Array(2);
	if(data==undefined || data==null) {
		mesAno[0] = hoje.getMonth();
		mesAno[1] = hoje.getUTCFullYear();
	} else {
		mesAno[0] = data.getMonth();
		mesAno[1] = data.getUTCFullYear();
	}
	getDatasByUnidade(mesAno);
}

$("#cidadesCursos").change(function(){
	var _idCidade = $("#cidadesCursos").val();
	jQuery.ajax({
		url: "/cozinha/changeUnidadeByCidade",
		data: {idCidade : _idCidade},
		success: function(data){
			$("#unidadesCursos").empty().append(data);
			$("#unidadesCursos").change();
		}
	});
});

$("#unidadesCursos").change(function(){
	loadCalendar();
	setNomeUnidade();
});

//Pega o mês e ano atual no calendário
function extractYearAndMonth() {
	var h2Text = $('.dp-popup-calendar > h2').text();
	h2Text = h2Text.split(" / ");
	var monthYear = new Array(2);
	monthYear[0] = getMonthByMonthName(h2Text[0]);
	monthYear[1] = h2Text[1];
	return monthYear;
}

//Recebe o nome do mês e retorna o número dele (zero based)
function getMonthByMonthName(monthName) {
	for(var i=0; i<Date.monthNames.length; i++) {
		if(Date.monthNames[i] == monthName) {
			return i;
		}
	}
	return 0;
}

//Pega as datas da unidade selecionada, no Mês / Ano do calendário
function getDatasByUnidade(monthYear) {
	var idUnidade = $("#unidadesCursos > option:selected").val();
	var idCidade = $("#cidadesCursos > option:selected").val();
	var mes = monthYear[0];
	var ano = monthYear[1];
	var url = "/cozinha/loadDatasByLojaMesAno?mes="+mes+"&ano="+ano+"&idUnidade="+idUnidade;
	$.ajax({
		url: url,
		success: function(data) {
			// Ativa o calendário com as datas dos eventos
			$("#boxCalendario").datePicker({
				inline:true,
				month: mes,
				eventsDays: extractDatas(data),
				eventToday: new Date(),
				startDate:  "01/03/2010"
			});			
			//Manipula o botão next do calendário
			$('.dp-nav-next-month').click(function() {
				var monthYear = extractYearAndMonth();
				getDatasByUnidade(monthYear);
			});

			// Manipula o botão prev do calendário
			$('.dp-nav-prev-month').click(function() {
				var monthYear = extractYearAndMonth();
				getDatasByUnidade(monthYear);
			});
			
			$(".cursoMarcados").each(function(index, element) {
				$(element).attr("href", "/cozinha/cursoDetalhe?idUnidade="+idUnidade+"&idCidade="+idCidade+"&dia="+$(element).text()+"&mes="+(mes+1)+"&ano="+ano);
				//this.text();
			});
		}
	});
}

//Chamado pelo datePicker. Extrai as datas do valor passado por parametro	
function extractDatas(value) {
	$("#datasComCurso").val(value);
	return parseDatas(value);
}

function parseDatas(value) {
	var values = value.split(";");
	var datas = new Array(values.length-1);
	for(var i=0; i<datas.length; i++) {
		var itens = values[i].split("/");
		datas[i] = new Date(itens[2], --itens[1], itens[0]);
	}
	return datas;
}
//Fim métodos do calendário de cursos
//-----------------------------------



/*
 * Funções para mostrar a validação nos formulários
 */

function markAsInvalid(element) {
    $(element).addClass("frmErro");            
    $(element).nextAll(".msgErro").show();
}

function markAsValid(element) {
    $(element).removeClass("frmErro");
    $(element).nextAll(".msgErro").hide();
}


/*
 * Funções para mostrar/ocultar mensagens de erro e sucesso nos modais
 */

function showErrorMessageOnModal(modal, text) {
	$(modal).find(".msgFeedback").hide().empty().append("<div class='msgFeedbackErro'>" + text + "</div>").fadeIn();
	$(modal).colorbox.resize();        	
}

function showSuccessMessageOnModal(modal, text) {
	$(modal).find(".msgFeedback").hide().empty().append("<div class='msgFeedbackSucesso'>" + text + "</div>").fadeIn();
	$(modal).colorbox.resize();        	
}

function hideMessagesFromModal(modal) {
	$(modal).find(".msgFeedback").fadeOut().empty();	
}

jQuery.fn.showErrorMessageModal = function(message) {
	$(this).find(".msgFeedback").hide().empty()
		.append("<p class='erroCommit'>" + message + "</p>")
		.fadeIn(function() {
			$(this).colorbox.resize();
		});
	
	return this;
}

jQuery.fn.showErrorMessage = function(message) {
	$(this).find(".msgFeedback").hide().empty()
		.append("<div class='msgFeedbackErro'>" + message + "</div>")
		.fadeIn(function() {
			$(this).colorbox.resize();
		});
	
	return this;
}

jQuery.fn.showSuccessMessage = function(message) {
	$(this).find(".msgFeedback").hide().empty()
		.append("<div class='msgFeedbackSucesso'>" + message + "</div>")
		.fadeIn(function() {
			$(this).colorbox.resize();
		});
	
	return this;
}

jQuery.fn.clearMessages = function() {
	$(this).find(".msgFeedback").fadeOut().empty();
	$(this).colorbox.resize();
	return this
}

/*
 * Funções para mostrar/ocultar mensagens de erro e sucesso na página
 */

function showErrorMessageOnGlobal(text) {
	$("#msgsFeedback").empty().append("<div class='msgFeedbackErro'>" + text + "</div>").fadeIn();
	$.scrollTo('#msgsFeedback', 500);
}

function showSuccessMessageOnGlobal(text) {
	$("#msgsFeedback").empty().append("<div class='msgFeedbackSucesso'>" + text + "</div>").fadeIn();     
	$.scrollTo('#msgsFeedback', 500);
}

function hideMessagesFromGlobal() {
	$("#msgsFeedback").fadeOut().empty();
}


/*
 * Funções para validação
 */

jQuery.fn.markAsInvalid = function() {
	$(this).addClass("frmErro");    
	$(this).nextAll(".msgErro").show();
	return this;
};

jQuery.fn.markAsValid = function() {
	$(this).removeClass("frmErro");
    $(this).nextAll(".msgErro").hide();
    return this;
};

jQuery.fn.hideMessages = function() {
	$(this).find(".msgFeedback, #msgsFeedBack").fadeOut().empty();
	$(this).find(".msgErro").hide();
	return this;
};

jQuery.fn.markAllFieldsAsValids = function() {
	$(this).find("input, select").removeClass("frmErro");	
	return this;
};

jQuery.fn.modalAssertAsValid = function() {
	$(this).hideMessages();
	$(this).markAllFieldsAsValids();
	$(this).colorbox.resize();
	return this;
};

jQuery.fn.isFulfilled = function() {
	if (!jQuery.trim($(this).val())) {
		$(this).markAsInvalid();
		return false;
	}
	return true;
};

jQuery.fn.isValidEmail = function() {	
	if (!checkMail($(this).val())) {
		$(this).markAsInvalid();
		return false;
	}
	return true;
};

jQuery.fn.modalInvalidate = function() {
	$(this).colorbox.resize();
	return false;
}

function carregaPrazoEntrega(idNegocio){
	var idUnidade = $("#cbCidades").attr("value");
	var urlParams = "prazoEntrega.action?idNegocio="+idNegocio+"&idUnidade="+idUnidade;
	
	$("#prazoEntregaTabela").load(urlParams, function(){$("#modalPrazoEntrega").colorbox.resize();});
}

jQuery.fn.acceptOnlyIntegerInput = function(e) {
	
	$(this).keypress(function(e){
		return isInteger(e);
	});

	$(this).change(function(){
		if (isNaN($(this).val()) || $(this).val() <= 1) {
			$(this).val(1);
		}				
	});
	
	return this;
};

jQuery.fn.acceptOnlyNumbers = function(e) {
	
	$(this).keypress(function(e){
		return isInteger(e);
	});

	$(this).change(function(){
		if (isNaN($(this).val())) {
			$(this).val("");
		}				
	});
	
	return this;
};

function isInteger(e) {
	var key;
	
	if (e.keyCode) {
		key = e.keyCode;
	} else if (e.which) {
		key = e.which;
	} else {
		return true;
	}	
	
	if (key == 8 || key == 190 || key == 9) { 
		return true; //números de 0-9
	} else if (key > 47 && key < 58) {				
		return true; //backspace backspace e TAB		
	} else if (key >= 37 && key <= 39) {				
		return true; //setas esquerda e direita
	} else if (key == 46) {
		return true; //tecla delete (firefox)
	} else if ((e.ctrlKey && key == 118) || (e.ctrlKey && key == 86)) {
		return true; // comando colar no firefox e opera
	}

	return false;
};


function isDecimal(e) {
	var key;
	
	if (e.keyCode) {
		key = e.keyCode;
	} else if (e.which) {
		key = e.which;
	} else {
		return true;
	}	
	
	if (key == 8 || key == 190 || key == 9) { 
		return true; //números de 0-9
	} else if (key > 47 && key < 58) {				
		return true; //backspace backspace e TAB		
	} else if (key >= 37 && key <= 39) {				
		return true; //setas esquerda e direita
	} else if (key == 46) {
		return true; //tecla delete (firefox)
	} else if (key == 44) {
		return true; //tecla , (para decimal)
	} else if ((e.ctrlKey && key == 118) || (e.ctrlKey && key == 86)) {
		return true; // comando colar no firefox e opera
	}

	return false;
};


jQuery.fn.spinnerListener = function(e) {

	$(this).click(function(e){
		
		input = $(this).find('input');
		value = new Number($(input).val());

		if (isNaN(value)) {
			$(input).val(1);				
		} else if ($(e.target).attr('class')=='up') {
			$(input).val(setQtProd(value, 0));
		} else if ($(e.target).attr('class')=='down') {
			if (value <= 1) {
				$(input).val(1);
			} else {
				$(input).val(setQtProd(value, 1));
			}
		}				
	});
	
	return this;
};

function carregaProduto(negocio, palavra, grupo){

	$('.ajaxLoading').remove();
	
	$('#saveStatePage').val("1");
	
	var page =  $('#saveStatePage').val();
	var itemsPerPage = 	$('#saveStateItemsPerPage').val();
		
	var urlParams = "/"+negocio+"/filtrePor?q="+retiraAcentos(palavra)+"&grupo="+grupo+"&page="+page+"&itemsPerPage="+itemsPerPage;
	//alert(urlParams)
	var $valorLoading = '<div class="ajaxLoading marAuto">Por favor, aguarde.</div>';
	
	$('#content').after($valorLoading);
	$('#result').remove();
	$('#products').remove();
	
	$(".busca").load(urlParams,function(){
								loadTooltipsAbas();
								modalProdutoIndisponivel();
								$('.ajaxLoading').remove();
								});
}

function carregaProdutoCompraRapida(negocio, palavra, grupo, nomeGrupo){
	
	$('.ajaxLoading').remove();
	
	$('#saveStatePage').val("1");
	
	var page =  $('#saveStatePage').val();
	var itemsPerPage = 	$('#saveStateItemsPerPage').val();
	
	var urlParams = "/"+negocio+"/filtrePorCompraRapida?q="+retiraAcentos(palavra)+"&grupo="+grupo+"&page="+page+"&itemsPerPage="+itemsPerPage;
	
	var $valorLoading = '<div class="ajaxLoading marAuto">Por favor, aguarde.</div>';
	
	$('#content').after($valorLoading);
	$('#result').remove();
	$('#products').remove();
	
	$(".busca").load(urlParams,function(){
								loadTooltipsAbas();
								modalProdutoIndisponivel();
								$('.ajaxLoading').remove();
								});
}

function retiraAcentos(palavra) {
	com_acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ';
	sem_acento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
	nova='';
	for(i=0;i<palavra.length;i++) {
		if (com_acento.search(palavra.substr(i,1))>=0) {
			nova+=sem_acento.substr(com_acento.search(palavra.substr(i,1)),1);
		}
		else {
			nova+=palavra.substr(i,1);
		}
	}
	return nova;
}

$('.filtrePorSelected').live("click",function(e){
	$('.filtrePorSelected').removeClass('on');
	$(this).addClass('on');
})

jQuery.fn.integer = function() {
	
	$(this).keypress(function(e){
		return isInteger(e);
	});

	return this;
}


jQuery.fn.decimal = function() {
	
	$(this).keypress(function(e){
		return isDecimal(e);
	});

	return this;
}



function openUrlInNewWindow(url) {
	if(navigator.appName.indexOf('Internet Explorer')>0){
		wn = window.open(url, "_blank", "");
    }else {
		wn = window.open(url , "_blank", "");
    }
	wn.focus();
}

/**
 * Verifica se uma determinada data é válida.
 *  
 * @param data string -> formato dd/mm/aaaa
 * 
 * @return true caso data válida, caso contrário false
 */
function isDateValid(strDate) {
	
	var regex  = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/;

    if (! strDate.match(regex)) {		            		            
     	// data não casa com o padrão
    	return false;
    }
     
	dia = strDate.substring(0,2);
	mes = strDate.substring(3,5);
	ano = strDate.substring(6,10);
	
	if(! isValidDate(dia, mes, ano)) {
		// data inválida
        return false;
	}	
	
	return true;
}

/**
 * Verifica se uma determinada data é válida, e também se é maior ou igual a hoje
 *  
 * @param data string -> formato dd/mm/aaaa
 * 
 * @return true caso data válida, maior ou igual a hoje, caso contrário false
 */
function isDateValidAndGreaterOrEqualToday(strDate) {
	
	if(! isDateValid(strDate)) {
		// data inválida
		return false;
	}
	
	var date = transformValidStringDateInDateType(strDate);
	
	var today = getToday();
	
	if(date < today) {
		// é menor que hoje
        return false;
    }
	
	// data é válida, é maior ou igual a hoje
	return true;
}

/**
 * Retorna um objeto date no formato dd/mm/aaaa 00:00:00
 * 
 * @return objeto Date - horas, minutos, segundos e milisegundos são zerados 
 */
function getToday() {
	var date = new Date();
	
	date.setHours(0);
	date.setMinutes(0);
	date.setSeconds(0);
	date.setMilliseconds(0);
	
	return date;
}

/**
 * Converte uma data string válida em um objeto Date
 *  
 * @param data string -> formato dd/mm/aaaa
 * 
 * @return objeto Date ou null caso data seja inválida
 */
function transformValidStringDateInDateType(strDate) {
	
	if(! isDateValid(strDate)) {
		// data inválida
		return null;
	}
	
	var date = getToday();
	
	dia = strDate.substring(0,2);
	mes = strDate.substring(3,5);
	ano = strDate.substring(6,10);
	
	date.setFullYear(ano, mes -1, dia);
	
	return date;
}

function isValidDate(day, month, year) {
    var date = new Date();
    var blnRet = false;
    var blnDay;
    var blnMonth;
    var blnYear;

    date.setFullYear(year, month -1, day);

    blnDay   = (date.getDate()      == day);
    blnMonth = (date.getMonth()     == month -1);
    blnYear  = (date.getFullYear()  == year);

    if (blnDay && blnMonth && blnYear){
        blnRet = true;
    }

    return blnRet;
}

function isCpfValido(CPF) {	

	if (CPF.length != 11 
			|| CPF == "00000000000" || CPF == "11111111111" 
				|| CPF == "22222222222" || CPF == "33333333333"
					|| CPF == "44444444444" || CPF == "55555555555" 
						|| CPF == "66666666666" || CPF == "77777777777" 
							|| CPF == "88888888888" || CPF == "99999999999") {
		return false;
	}
	
	var POSICAO, I, SOMA, DV, DV_INFORMADO;
	var DIGITO = new Array(10);
	DV_INFORMADO = CPF.substr(9, 2);

	for (I=0; I<=8; I++) {
	  DIGITO[I] = CPF.substr( I, 1);
	}

	POSICAO = 10;
	SOMA = 0;
	for (I=0; I<=8; I++) {
		SOMA = SOMA + DIGITO[I] * POSICAO;
		POSICAO = POSICAO - 1;
	}
	
	DIGITO[9] = SOMA % 11;
	
	if (DIGITO[9] < 2) {
		DIGITO[9] = 0;
	} else {
		DIGITO[9] = 11 - DIGITO[9];
	}

	POSICAO = 11;
	SOMA = 0;
	for (I=0; I<=9; I++) {
		SOMA = SOMA + DIGITO[I] * POSICAO;
		POSICAO = POSICAO - 1;
	}
	
	DIGITO[10] = SOMA % 11;
	
	if (DIGITO[10] < 2) {
		DIGITO[10] = 0;
	} else {
		DIGITO[10] = 11 - DIGITO[10];
	}

	DV = DIGITO[9] * 10 + DIGITO[10];
	if (DV != DV_INFORMADO) {	
		return false;
	} 
	
	return true;
};

function isCpfValidoDeprecated(cpf){
	
	if (cpf == undefined) return false;
	
	var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
	var soma1=0, soma2=0;
	var vlr =11;
	for(i=0;i<9;i++){
		soma1 += eval(cpf.charAt(i)*(vlr-1));
	    soma2 += eval(cpf.charAt(i)*vlr);
	    vlr--;
	}   
	
	soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
	soma2 = (((soma2+(2*soma1))*10)%11);
	
	var digitoGerado = (soma1*10) + soma2;
	
	if(digitoGerado != digitoDigitado){
		return false;
	}
	
	return true;
} 


function isCnpjValido(cnpj){
	var i = 0;
	var l = 0;
	var strNum = "";
	var strMul = "6543298765432";
	var character = "";
	var iValido = 1;
	var iSoma = 0;
	var strNum_base = "";
	var iLenNum_base = 0;
	var iLenMul = 0;
	var iSoma = 0;
	var strNum_base = 0;
	var iLenNum_base = 0;

	l = cnpj.length;
	for (i = 0; i < l; i++) {
		caracter = cnpj.substring(i,i+1)
		if ((caracter >= '0') && (caracter <= '9'))
			strNum = strNum + caracter;
	};

	if(strNum.length != 14){
		return false;
	}

	strNum_base = strNum.substring(0,12);
	iLenNum_base = strNum_base.length - 1;
	iLenMul = strMul.length - 1;
	for(i = 0;i < 12; i++) {
		iSoma = iSoma + parseInt(strNum_base.substring((iLenNum_base-i),(iLenNum_base-i)+1),10) * parseInt(strMul.substring((iLenMul-i),(iLenMul-i)+1),10);
	}	
	
	iSoma = 11 - (iSoma - Math.floor(iSoma/11) * 11);
	
	if(iSoma == 11 || iSoma == 10){
		iSoma = 0;
	}

	strNum_base = strNum_base + iSoma;
	iSoma = 0;
	iLenNum_base = strNum_base.length - 1
	
	for(i = 0; i < 13; i++){
		iSoma = iSoma + parseInt(strNum_base.substring((iLenNum_base-i),(iLenNum_base-i)+1),10) * parseInt(strMul.substring((iLenMul-i),(iLenMul-i)+1),10)
	}	
	
	iSoma = 11 - (iSoma - Math.floor(iSoma/11) * 11);
	
	if(iSoma == 11 || iSoma == 10){
		iSoma = 0;
	}
	
	strNum_base = strNum_base + iSoma;
	
	if(strNum != strNum_base){
		return false;
	}
	return true;
}

function isDataValida(data){
	regex = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/\d{4}$/;
	return regex.test(data);
}

function isDataNoPassado(data) {
	try {
		if (isDataValida(data)) {
			
			var date = new Number(data.substr(0,2));
			var month = new Number(data.substr(3,2)) - 1;
			var year = new Number(data.substr(6,4));
			
			var now = new Date();
			if (year < now.getFullYear()
					|| (year == now.getFullYear() && month < now.getMonth())
						|| (year == now.getFullYear() && month == now.getMonth() && date < now.getDate())) {
				return true;
			}
			
		}		
	} catch (e) { }
	
	return false;
}

function loginLojaEletronica(){
	var login = jQuery.trim($("#login").val());
	var senha = jQuery.trim($("#senha").val());
	
	$("#frmLoginLojaEletronica").find("#login").markAsValid();
	$("#frmLoginLojaEletronica").find("#senha").markAsValid();
	
	if ($("#frmLoginLojaEletronica").find("#login").isFulfilled() &&  $("#frmLoginLojaEletronica").find("#senha").isFulfilled()) {
		if(senha.length >=3 && senha.length <=9){
			var url = "/login/loginLojaEletronica";
			$("#frmLoginLojaEletronica").attr("action", url);
			$('#frmLoginLojaEletronica').submit();
		}
		else{
			$("#boxAlertaLojaEletronica").html("senha fora do padrão de 3 a 9 caracteres");
			$("#boxAlertaLojaEletronica").show();
		}	
	}
	else{
		$("#boxAlertaLojaEletronica").html("Preencha corretamente os campos em destaque.");
		$("#boxAlertaLojaEletronica").show();
	}
}

function loginAssistenteVendas(){
	var login = jQuery.trim($("#login").val());
	var senha = jQuery.trim($("#senha").val());
	
	$("#frmLoginAssintenteVendas").find("#login").markAsValid();
	$("#frmLoginAssintenteVendas").find("#senha").markAsValid();
	
	if ($("#frmLoginAssintenteVendas").find("#login").isFulfilled() &&  $("#frmLoginAssintenteVendas").find("#senha").isFulfilled()) {
		if(senha.length >=3 && senha.length <=9){
			var url = "/login/loginAssistenteVendas";
			$("#frmLoginAssintenteVendas").attr("action", url);
			$('#frmLoginAssintenteVendas').submit();
		}
		else{
			$("#boxAlertaAssistenteVendas").html("senha fora do padrão de 3 a 9 caracteres");
			$("#boxAlertaAssistenteVendas").show();
		}	
	}
	else{
		$("#boxAlertaAssistenteVendas").html("Preencha corretamente os campos em destaque.");
		$("#boxAlertaAssistenteVendas").show();
	}
}

function loginTeleVendas(){
	var login = jQuery.trim($("#login").val());
	var senha = jQuery.trim($("#senha").val());
	
	$("#frmLoginTeleVendas").find("#login").markAsValid();
	$("#frmLoginTeleVendas").find("#senha").markAsValid();
	
	if ($("#frmLoginTeleVendas").find("#login").isFulfilled() &&  $("#frmLoginTeleVendas").find("#senha").isFulfilled()) {
		if(senha.length >=3 && senha.length <=9){
			var url = "/login/loginTeleVendas";
			$("#frmLoginTeleVendas").attr("action", url);
			$('#frmLoginTeleVendas').submit();
		}
		else{
			$("#boxAlertaTeleVendas").html("senha fora do padrão de 3 a 9 caracteres");
			$("#boxAlertaTeleVendas").show();
		}	
	}
	else{
		$("#boxAlertaTeleVendas").html("Preencha corretamente os campos em destaque.");
		$("#boxAlertaTeleVendas").show();
	}
}

// Carrega a modal de consulta estoque com
$('.lnkConsultarEstoque').click(function(){
	var idProduto = $("#consultaEstoqueIdProduto").val();
	var idNegocio = $("#idNegocio").val();
	
	$("#modalConsultarEstoque").load("/eletro/consultaEstoque?idProduto=" + idProduto + "&idNegocio=" + idNegocio,
	function(){
		jQuery.fn.colorbox({width:"562px", inline:true, href:"#modalConsultarEstoque" ,opacity: 0.2});													
	});
	return false;
});		


/*
 * Atalho sintático para versionate(url)
 */
function v(url) {return versionate(url);}

/*
 * Versiona chamadas Ajax para evitar o problema
 * do Cache da requisição causado pelo IE
 */
function versionate(url) {
	return addOrReplaceURLParameter(url, "version", new Date().getTime().toString());
}



jQuery.fn.onlyAlphaAndNumbers = function() {
	
	$(this).keypress(function(e){
		return isAlphaOrNumbers(e);
	});
	
}

function isAlphaOrNumbers(e) {
	key = undefined;
	
	if ( window.event ) key = e.keyCode;
	else if ( e.which ) key = e.which;
	
	// allow Ctrl+A
	if((e.ctrlKey && key == 97 /* firefox */) || (e.ctrlKey && key == 65) /* opera */) return true;
	// allow Ctrl+X (cut)
	if((e.ctrlKey && key == 120 /* firefox */) || (e.ctrlKey && key == 88) /* opera */) return true;
	// allow Ctrl+C (copy)
	if((e.ctrlKey && key == 99 /* firefox */) || (e.ctrlKey && key == 67) /* opera */) return true;
	// allow Ctrl+Z (undo)
	if((e.ctrlKey && key == 122 /* firefox */) || (e.ctrlKey && key == 90) /* opera */) return true;
	// allow or deny Ctrl+V (paste), Shift+Ins
	if((e.ctrlKey && key == 118 /* firefox */) || (e.ctrlKey && key == 86) /* opera */ || (e.shiftKey && key == 45)) return true;
	
	
	if ( key == undefined ) return true;
	
	// Backspace, ENTER e Espaço
	if ( key == 8 || key == 13 || key == 32) return true;
	
	//    [0-9]                     [A-Z]                     [a-z]                             [ç]
	if (( key >= 48 && key <= 57 ) || ( key >= 65 && key <= 90 ) || ( key >= 97 && key <= 122 ) || key == "ç".charCodeAt(0)) {
		return true;
	}
	
	return false;
}



jQuery.fn.isCpfValido = function() {
	return isCpfValido($(this).val());
};


jQuery.fn.isCnpjValido = function() {
	return isCnpjValido($(this).val());
};


jQuery.fn.isSenhaValida = function() {
	value = $(this).val();
	if (value == undefined || value.length < 3 || value.length > 9) return false;
	return true;
};


jQuery.fn.isCartaoValido = function() {
	value = $(this).val();
	if (value == undefined || value.length < 16) return false;
	return true;
};

jQuery.fn.isPreenchido = function(minLength) {
	minLength = minLength == undefined ? 1 : minLength;
	value = jQuery.trim($(this).val());
	if (value == undefined || value.length < minLength) return false;
	return true;
};

jQuery.fn.equals = function(other) {
	return $(this).val() == $(other).val();
}

jQuery.fn.isDataValida = function() {
	return isDataValida($(this).val());
}

jQuery.fn.isDataNoPassado = function() {
	return isDataNoPassado($(this).val());
}

jQuery.fn.isEmailValido = function() {	
	if (!checkMail($(this).val())) {		
		return false;
	}
	return true;
};


// função para comparar 2 horas passadas como hh:mm
// retorna false se a horaFim for maior que a hora início
// retorna true, caso contrário
function comparaHora(horaInicio, horaFim){
    var iHoraInicio, iHoraFim;
    var iMinutoInicio, iMinutoFim;

    //quebra a hora
    iHoraInicio = horaInicio.substring(0,2);
    iHoraFim = horaFim.substring(0,2);

    // quebra os minutos
    iMinutoInicio = horaInicio.substring(3,5);
    iMinutoFim = horaFim.substring(3,5);

    //comparando os valores da hora
    if (iHoraInicio != iHoraFim){
        if (iHoraInicio > iHoraFim){
            return false;
        }
    }else{
        // são horas iguais, compara os minutos
        if (iMinutoInicio > iMinutoFim){
            return false;
        }
        if (iMinutoInicio == iMinutoFim){
            return false;
        }
    }
    return true;
}



var ajaxLoading = '<div class="ajaxLoading">Por favor, aguarde.</div>';
var loading = ajaxLoading;


function currency(value) {
	
	value = value.replace(".","");
	value = value.replace(",",".");
	
	var _val = new Number(value);
	
	if (_val == undefined || _val == null || isNaN(_val)) {
		_val = 0;					
	} else {
		_val = _val.toFixed(2);
	}
	var _valString = new String(_val);
	
	_valString = _valString.replace(".",",");
	
	return _valString;
					
};
