﻿var requisicoesFeitas = 0;
var requisicoesTotal = 0;
function busca(cep1, cep2, lblTempo, lblEspaco, lblTempoSegundos, lblEspacoMetros, tableName, lastTime) {
  if(document.getElementById(lblTempo) != null){
      directions = new GDirections();
      GEvent.addListener(directions, 'load', 
            function(directions)
            {
                document.getElementById(lblEspaco).innerHTML = directions.getDistance().html;
                document.getElementById(lblTempo).innerHTML = directions.getDuration().html;
                document.getElementById(lblEspacoMetros).innerHTML = directions.getDistance().meters;
                document.getElementById(lblTempoSegundos).innerHTML = directions.getDuration().seconds;
                if(++requisicoesFeitas == requisicoesTotal) sort(tableName);
            }
        );
        GEvent.addListener(directions, 'error', 
            function(directions)
            {
                if(directions.getStatus().code != G_GEO_TOO_MANY_QUERIES)
                {
                    document.getElementById(lblEspaco).innerHTML = 'Não foi possível calcular a rota.';
                    document.getElementById(lblTempo).innerHTML = 'Não foi possível calcular a rota.';
                    document.getElementById(lblEspacoMetros).innerHTML = '0';
                    document.getElementById(lblTempoSegundos).innerHTML = '0';
                    if(++requisicoesFeitas == requisicoesTotal) sort(tableName);
                }
                else
                {
                    setTimeout('busca("' + cep1 + '", "' + cep2 + '", "' + lblTempo + '", "' + lblEspaco + '", "' + lblTempoSegundos + '", "' + lblEspacoMetros + '", "' + tableName + '", true)', 100);
                }
            }
        );
      directions.load("from: " + cep1 + " to: " + cep2);
    }
}

function getErrorType(code){
    switch (code)
    {
        case 200:
            return 'G_GEO_SUCCESS';
            break;
        case 400:
            return 'G_GEO_BAD_REQUEST';
            break;
        case 500:
            return 'G_GEO_SERVER_ERROR';
            break;
        case 601:
            return 'G_GEO_MISSING_QUERY';
            break;
        case 601:
            return 'G_GEO_MISSING_ADDRESS';
            break;
        case 602:
            return 'G_GEO_UNKNOWN_ADDRESS';
            break;
        case 603:
            return 'G_GEO_UNAVAILABLE_ADDRESS';
            break;
        case 604:
            return 'G_GEO_UNKNOWN_DIRECTIONS';
            break;
        case 610:
            return 'G_GEO_BAD_KEY';
            break;
        case 620:
            return 'G_GEO_TOO_MANY_QUERIES';
            break;
    }
}

var sorting = false;
var temPaginacao = false;
function sort(tableName){
    if(!sorting){
        sorting = true;
        var countTables = 0;
        while (document.getElementById(tableName + "_gv" + countTables + "_gv" + countTables) != null){
            var mytable = document.getElementById(tableName + "_gv" + countTables + "_gv" + countTables);
            var limite = temPaginacao ? mytable.rows.length -1 : mytable.rows.length;
            var inicio = temPaginacao ? 2 : 1;
            for (var i = inicio; i < limite -1; i++)
            {
                for (var j = i+1; j < limite; j++)
                {
                    //if(mytable.rows.item(i).cells[1].childNodes[1].innerText != "0"){
                        //if(parseInt(mytable.rows.item(j).cells[0].childNodes[0].cells[1].childNodes[0].childNodes[1].innerHTML) != 0 && (parseInt(mytable.rows.item(i).cells[0].childNodes[0].cells[1].childNodes[0].childNodes[1].innerHTML) == 0 || parseInt(mytable.rows.item(i).cells[0].childNodes[0].cells[1].childNodes[0].childNodes[1].innerHTML) > parseInt(mytable.rows.item(j).cells[0].childNodes[0].cells[1].childNodes[0].childNodes[1].innerHTML)))
                        var metrosCima = 0;
                        if(mytable.rows.item(i).cells[0].childNodes[0] != null)
                            if(mytable.rows.item(i).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                metrosCima = mytable.rows.item(i).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[2].innerHTML;
                            else
                                metrosCima = mytable.rows.item(i).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[1].innerHTML;
                        else
                            if(mytable.rows.item(i).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                metrosCima = mytable.rows.item(i).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[2].innerHTML;
                            else
                                metrosCima = mytable.rows.item(i).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[1].innerHTML;
                        var metrosBaixo = 0;
                        if(mytable.rows.item(j).cells[0].childNodes[0] != null)
                            if(mytable.rows.item(j).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                metrosBaixo = mytable.rows.item(j).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[2].innerHTML;
                            else
                                metrosBaixo = mytable.rows.item(j).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[1].innerHTML;
                        else
                            if(mytable.rows.item(i).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                metrosBaixo = mytable.rows.item(j).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[2].innerHTML;
                            else
                                metrosBaixo = mytable.rows.item(j).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[1].innerHTML;
                                
                        var rowsCima;
                        if(mytable.rows.item(i).cells[0].childNodes[0] != null)
                            if(mytable.rows.item(i).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                rowsCima = mytable.rows.item(i).cells[0].childNodes[0].rows;
                            else
                                rowsCima = mytable.rows.item(i).cells[0].childNodes[0].rows;
                        else
                            if(mytable.rows.item(i).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                rowsCima = mytable.rows.item(i).cells[0].childNodes[1].rows;
                            else
                                rowsCima = mytable.rows.item(i).cells[0].childNodes[1].rows;
                                
                        var rowsBaixo;
                        if(mytable.rows.item(j).cells[0].childNodes[0] != null)
                            if(mytable.rows.item(j).cells[0].childNodes[0].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                rowsBaixo = mytable.rows.item(j).cells[0].childNodes[0].rows;
                            else
                                rowsBaixo = mytable.rows.item(j).cells[0].childNodes[0].rows;
                        else
                            if(mytable.rows.item(j).cells[0].childNodes[1].rows.item(0).cells[1].childNodes[0].childNodes[2] != null)
                                rowsBaixo = mytable.rows.item(j).cells[0].childNodes[1].rows;
                            else
                                rowsBaixo = mytable.rows.item(j).cells[0].childNodes[1].rows;

                        if(parseInt(metrosBaixo) != 0 && (parseInt(metrosCima) == 0 || parseInt(metrosCima) > parseInt(metrosBaixo)))
                        {
                            var aux = getCells(rowsCima[0]);
                            changeRow(rowsCima[0], rowsBaixo[0]);
                            setCells(rowsBaixo[0], aux);
                        }
                    /*}
                    else{
                        if(parseInt(mytable.rows.item(j).cells[1].childNodes[1].innerHTML) > parseInt(mytable.rows.item(i).cells[1].childNodes[1].innerHTML))
                        {
                            var aux = getCells(mytable.rows[j]);
                            changeRow(mytable.rows[j], mytable.rows[i]);
                            setCells(mytable.rows[i], aux);
                        }
                    }*/
                }
            }
            countTables++;
        }
        sorting = false;
    }
}

function getCells(row){
    var rows = new Array();
    for (var i = 0; i < row.cells.length; i++){
        rows.push(row.cells[i].innerHTML);
    }
    return rows;
}

function setCells(row, rows){
    for (var i = 0; i < row.cells.length; i++)
    {
        row.cells[i].innerHTML = rows[i];
    }
}

function changeRow(rowPassive, rowAtive){
    for (var i = 0; i < rowPassive.cells.length; i++)
    {
        rowPassive.cells[i].innerHTML = rowAtive.cells[i].innerHTML;
    }
}

String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

//exemplo de uso do noLetters: onKeyDown="return noLetters(event);"
	function noLetters(e)
	{
		var tecla;
		if(!e)
			e = window.event;
		
		// verificação cross-browser
		if(e.which)
			tecla = e.which;
		else if(e.keyCode)
			tecla = e.keyCode;

		if( (tecla >= 48 && tecla <= 57) || (tecla >= 96 && tecla <= 105) || tecla == 8 || tecla == 37 || tecla == 39 || tecla == 46 || tecla == 9 )
		{
			/*9: tab; 8 = backspace; 37 = seta pra esquerda; 39 = seta pra direita; 46 = delete*/
			return true;
		}
		else
		{
			return false;
		}
	}

    
    function nextText(source, dest, max)
    {
        if(document.getElementById(source).value.length == max)
            document.getElementById(dest).focus();
    }
