/*,var Ajax;
if (Ajax && (Ajax != null)) {
	Ajax.Responders.register({
	  onCreate: function() {
        if($j('spinner') && Ajax.activeRequestCount>0)
          Effect.Appear('spinner',{duration:0.5,queue:'end'});
	  },
	  onComplete: function() {
        if($j('spinner') && Ajax.activeRequestCount==0)
          Effect.Fade('spinner',{duration:0.5,queue:'end'});
	  }
	});
}*/




var contadorAjax = 0;
$j(function(){
    //Inicio da chamada Ajax
	$j("#spinner").ajaxStart(function(){
        if(contadorAjax == 0){
            exibeDivProcessando();
            contadorAjax ++;
        }
    });

    //Fim da chamada Ajax
	$j("#spinner").ajaxStop(function() {
        contadorAjax--;
        ocultaDivProcessando();
    })

   // changeRowColor();

});

function exibeDivProcessando(){
    var spinner = $j('#spinner');
    var scrollOffs = (util.getPageScroll()[1]);
    var larguraJanela = ($j(window).width() / 2) - (spinner.width() / 2);
    $j(window).scrollTop(scrollOffs);
    var style = {
        position : 'absolute',
        left : larguraJanela + 'px',
        top : $j(window).scrollTop() + 'px'
    };
    spinner.css(style).show();
}

function ocultaDivProcessando(){
    $j('#spinner').hide();
}

/* FUNCOES UTILIZADAS NO CARREGAMENTO INICIAL DA PÁGINA */
$j(function(){
    //abrirJanelaComEfeito();
    //showDivSuccess();
    //showDivErro();
});

function abrirJanelaComEfeito(){
    $j('.container_16').fadeIn(1000);
}

/* Funcoes usadas para exibir e esconder a mensagem de sucesso */
function showDivSuccess(valor, msg){

    if(document.getElementById('divFlashMessage') || valor){
        var divSuccess = $j('#divSuccess');
        if(valor){
            $j('.success-msg').html(msg);
        }
        setStylePositionDiv(divSuccess);
        divSuccess.slideToggle(1000);
        setTimeout("hideDivSuccess();", 4000);
    }
}

function showDivErro(valor, msg){
    var divErro = $j('#divErro');
    if(document.getElementById('divFlashErro') || valor){
        if(valor){$j('#liErro').html(msg);}
        setStylePositionDiv(divErro);
        $j('#divErro').slideToggle(1000);
        setTimeout("hideDivErro();", 6000);
    }
}

function hideDivSuccess(){
    $j('#divSuccess').slideToggle(1000);
}

function hideDivErro(){
    //$j('.errors').fadeOut('slow');
    $j('.errors').slideToggle(1000);
}

function exibeDivErro(array, divElemento){
    var divErro = (divElemento ? divElemento : $j('.errors'));
    var conteudo = "<ul>";
        for(var i = 0; i < array.length; i++){
            //alert('...... > '+array[i].message);
            conteudo += array[i];
        }
    conteudo += "</ul>";
    //alert(conteudo);
    divErro.html(conteudo);
    //divErro.show();

    setStylePositionDiv(divErro);

    //divErro.fadeIn('fast');

    divErro.slideToggle(1000);
    setTimeout("hideDivErro();", 6000);
    //
}

function setStylePositionDiv(div){
    var scrollOffs = (util.getPageScroll()[1]);
    var larguraJanela = ($j(window).width() / 2) - (div.width() / 2);
    $j(window).scrollTop(scrollOffs);
    var style = {
        position:'absolute',
        left: larguraJanela + 'px',
        top: $j(window).scrollTop() + 'px'
    };
    div.css(style);
}

function ocultaDivErro(divElemento){
    var divErro = (divElemento ? divElemento : $j('#divErro'));
    divErro.hide();
    divErro.html('');
}
/* Fim das funcoes usadas para exibir e esconder a mensagem de sucesso e erro */


function checkAll(checkAllId, nameChecks){
    var marcarDesmarcar = $j('#' + checkAllId).attr('checked');
    $j('input[name="'+ nameChecks + '"]:not([value="-1"])').attr("checked", marcarDesmarcar);
}

function verificaCheckAll(nameChecks, idCheckAll){
    var checkBoxTodos = (idCheckAll ? idCheckAll : 'allbox');
    var totalChecks = $j('input[name="' + nameChecks + '"]');
    if(retornaChecadas(nameChecks).length != (totalChecks.length -1)){
        $j('#' + checkBoxTodos).attr('checked', false);
    }else{
        $j('#' + checkBoxTodos).attr('checked', true);
    }
}

function retornaChecadas(nameChecks){
    return $j("input[name='" + nameChecks + "']:checked");
}

function confirmaExclusao(texto){return confirm(texto)}

function passwordGenerator(tamanho){
    var password = "";
    for(var i= 0; i<tamanho; i++){password += getRandomChar();}
    return password;
}

//ASCII -> [48, 57] = numeros; [64, 90] = "@" mais letras maiusculas; [97, 122] = letras minusculas;
function getRandomChar() {
    var ascii = [[48, 57],[64,90],[97,122]];
    var i = Math.floor(Math.random()*ascii.length);
    return String.fromCharCode(Math.floor(Math.random()*(ascii[i][1]-ascii[i][0]))+ascii[i][0]);
}

function montaMensagensErroAjax(objetoErro, objectName){

    var arrayMsgErro = new Array();
    $j.each(objetoErro, function(erroChave, erroValor){
       // alert(" erroChave " + erroValor.field);
        //alert(" erroValor " + erroValor.message);
        //alert(" objectName " + objectName);
        putMessageInArray(arrayMsgErro, erroValor.message);
        $j('#' + erroValor.field + objectName).addClass('erro');
        $j('#' + erroValor.field + objectName).focus();
    });
    return arrayMsgErro;
}

function putMessageInArray(array, message){
    array.push('<li>' + message + '</li>');
}


//retorna nao checados
//$j("input[name='checks']:not(:checked)").length;

//retorna todos os checados
//$j("input[name='checks']:checked");




var util = {

	// findPos() by quirksmode.org
	// Finds the absolute position of an element on a page
	findPos: function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return [curleft,curtop];
	},

	// getPageScroll() by quirksmode.org
	// Finds the scroll position of a page
	getPageScroll: function() {
		var xScroll, yScroll;
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {// all other Explorers
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;
		}
		return [xScroll,yScroll]
	},

	// Finds the position of an element relative to the viewport.
	findPosRelativeToViewport: function(obj) {
		var objPos = this.findPos(obj)
		var scroll = this.getPageScroll()
		return [ objPos[0]-scroll[0], objPos[1]-scroll[1] ]
	}
}


function changeRowColor(){

    $j('tbody tr').live('mouseenter mouseleave', function(event) {
          if(event.type == 'mouseenter'){
             $j(this).addClass('destacar');
          }else {
             $j(this).removeClass('destacar');
          }
    });

}


function mascaraHoras(elemento, event){
      if((event.which < 48 || event.which > 57) && event.which != 8 && event.which != 9){
          event.preventDefault();
      }else{
          if($j(elemento).val().length==2 && event.which != 8 && event.which != 9){
                $j(elemento).val($j(elemento).val() + ":");
          }
      }
}

function blockPress(event){
    event.preventDefault();
}

function validaHoras(elemento){
  var erro = false;
  horario = elemento.val().split(":");
  var horas = horario[0];
  var minutos = horario[1];
  //var segundos = horario[2];
  //para relógio de 12 horas altere o valor aqui
  if(horas > 24){erro = true;}
  if(minutos > 59){erro = true;}
  if(erro){
      elemento.addClass('erro');
      //showDivErro(true, 'O Horário informado é invalido');
  }else{
      elemento.removeClass();
  }

  return erro;

  //if(segundos > 59){
  //alert("Segundos inválidos"); event.returnValue=false;relogio.focus()}
}


function registerDatePicker(id, defaultValue, elementoAuxId){
      jQuery(function($j){
            $j.datepicker.regional['pt-BR'] = {
                closeText: 'Fechar',
                prevText: '&#x3c;Anterior',
                nextText: 'Pr&oacute;ximo&#x3e;',
                currentText: 'Hoje',
                monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
                'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
                monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
                'Jul','Ago','Set','Out','Nov','Dez'],
                dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
                dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
                dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
                weekHeader: 'Sm',
                dateFormat: 'dd/mm/yy',
                firstDay: 0,
                isRTL: false,
                showMonthAfterYear: false,
                showOtherMonths: true,
                selectOtherMonths: true,
                yearSuffix: ''};
            $j.datepicker.setDefaults($j.datepicker.regional['pt-BR']);
      });

      $j('#' + id).datepicker({
            'altField' : ("#" + elementoAuxId),
            'altFormat' : "yy-mm-dd",
            'showAnim' :"slideDown",
            showOn: 'both', //icone e focus
			buttonImage: "/images/calendar-date-icon.png",
			buttonImageOnly: true,
            autoOpen:false
      });

      $j('#' + id).datepicker( $j.datepicker.regional[ "pt-BR" ] );

      if(defaultValue){
        $j('#' + id).datepicker( "setDate" ,  defaultValue);
      }

}

//Remover itens nas listas de cadastro

$j(function(){
    /*
    $j('a[title="Remover"]').click(function(event) {
        event.preventDefault();
        $j('#msgConfirm').html('Tem certeza que deseja remover este registro?');
        showConfirm(this);
    });
    */
});

function showConfirm(elemento){
     var link = $j(elemento);
     var scrollOffs = (util.getPageScroll()[1]);
     var offset = link.offset();
     var x = (offset.left - 60);
     var y = ((offset.top - scrollOffs) + 20);

     $j("#dialogConfirmForm").dialog({
            autoOpen: true,
            height: 140,
            modal: true,
            show: "fade",
            hide: "fade",
            dialogClass:'shadowForm',
            resizable: false,
            position: [x, y],
            buttons:{
                "Remover": function(){
                    window.location = link.attr('href');
                },
                Cancelar: function() {
                    $j(this).dialog("close");
                }
            },
            close: function() {
                //$j('#taskId').val('');
                //clearFieldsTimeSheetForm();
            },
            open: function(event, ui) { }
     });
}
//Remover itens nas listas de cadastro

function ajaxRequest(url, divId, dataJson){
    var sucesso = true;
    var teste = null;
    $j.ajax({
            url:url,
            dataType:"html",
            type:"GET",
            processData:(dataJson ? true : false),
            async:true,
            cache:false,
            data:dataJson,
            success:function(data, textStatus){
                if(data.sucesso == false){
                    this.exibeErros(data.erros);
                }
                $j('#' + divId).html(data);
            },
            error:function(xhr, errorType){
                sucesso = false;
                //alert('-- xhr -- ' + xhr.getAllResponseHeaders());
                //alert('-- errorType -- ' + errorType);

            }
    });
    return sucesso;
}

function exibeErros(erros){
    for (i = 0; i < erros.length; i++){
        $j('.errors').html(erros[i]+'<br />')
    }
}

function bloquearDesbloquearForm(formId, valor){
   $j('#' + formId).find(':input').attr('disabled', valor);
}

function cancelar(formId){
   $j('#' + formId).find(':input:not(:button)').val('').removeClass('erro');
   $j('#' + formId).find(':input[type="checkbox"]').attr('checked', false);
}

function removeClasseFormElementos(formId, classe){
    var elementos = $j('#' + formId).find(':input:not(:button)');
    $j.each(elementos, function(index, elemento){
        $j(elemento).removeClass(classe);
    });
}


function ajaxPost(url, formId, nomeCampoAux, dataJSON){

   var objetoRetorno = null;
   var valoresForm = (dataJSON ? dataJSON :$j('#'+formId).serialize());
   $j('.erro').removeClass('erro');
   if(formId){
       removeClasseFormElementos(formId, 'erro');
       //bloquearDesbloquearForm(formId, true);
   }

    $j.ajax({
            url:url,
            dataType:"json",
            async:false,
            cache:false,
            data:valoresForm,
            type:"POST",
            //beforeSend:function(xhr){
            //    xhr.setRequestHeader('X-CSRF-Token', $j('meta[name="csrf-token"]').attr('content'));
            //},
            success:function(data, textStatus){

                objetoRetorno = data;

                if(data.sucesso){
                    //$j(".errors").hide();
                    //showDivSuccess(true, 'Operação realizada com sucesso.');
                    //cancelar(formId);
                }else{
                    var arrayMsgErro = montaMensagensErroAjax(data.erros, nomeCampoAux);

                    if(data.msgErro){
                        var arrayMsgErro = new Array();
                        putMessageInArray(arrayMsgErro, data.msgErro);
                        exibeDivErro(arrayMsgErro, null);
                    }else{
                        exibeDivErro(arrayMsgErro, null);
                    }
                }
            },
            error:function(xhr, errorType){

                //consoleLog('-- xhr -- ' + xhr);
                //consoleLog('-- errorType -- ' + errorType);
            }
    });
    //bloquearDesbloquearForm(formId, false);


    return objetoRetorno;
}

function atualizaSprintsAjax(){
    var url = "/sprints/atualiza_sprints_ajax";
    var divId = "divSprintList";
    var data = {'project_id':$j('#sprint_project').val()};
    ajaxRequest(url, divId, data);
}

function VerificaCPF() {
    if (vercpf(document.frmcpf.cpf.value)) {
        document.frmcpf.submit();
    } else {
        errors = "1";
        if (errors) alert('CPF NÃO VÁLIDO');
        document.retorno = (errors == '');
    }
}
function vercpf(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;
    add = 0;
    for (i = 0; i < 9; i ++)
        add += parseInt(cpf.charAt(i)) * (10 - i);
    rev = 11 - (add % 11);
    if (rev == 10 || rev == 11)
        rev = 0;
    if (rev != parseInt(cpf.charAt(9)))
        return false;
    add = 0;
    for (i = 0; i < 10; i ++)
        add += parseInt(cpf.charAt(i)) * (11 - i);
    rev = 11 - (add % 11);
    if (rev == 10 || rev == 11)
        rev = 0;
    if (rev != parseInt(cpf.charAt(10)))
        return false;
    alert('O CPF INFORMADO É VÁLIDO.');
    return true;
}

