﻿// JScript File
//Troca imagens on/off (ícones do menu)
function SwitchImage(name, tag) {
	document.images[name].src = "images/" + tag + ".gif";
}
function SwitchImage2(eElem, tag) {
	eElem.src = "images/" + tag + ".gif";
}

// OpenMail
function OpenMail(Name,Domain)
{
    window.open("mailto:" + Name + "@" + Domain);
}

// função para abrir popup
function OpenPopUp(url,Nome,sFeatures,w,h)
{
	if (sFeatures == ""){
		sFeatures ='top=200,';
		sFeatures +='left=200,';
		sFeatures +='scrollbars=yes,';
		sFeatures +='resizable=no,';
	}
	sFeatures +='height='+ h +',';
	sFeatures +='width='+ w;
	
	newwin=window.open (url, Nome,sFeatures);
	if (!newwin.opener)
		newwin.opener=self;

	if(parseInt(navigator.appVersion) >= 4)
		newwin.window.focus();
}

// função para abrir popup com o calendário
function OpenPopUpCalendario(url,Nome)
{	
	var	sFeatures ='top=200,';
		sFeatures +='left=200,';
		sFeatures +='scrollbars=no,';
		sFeatures +='resizable=no,';		
	    sFeatures +='status=no,';
	
	OpenPopUp(url,Nome,sFeatures,200,210);		
}

// função para abrir uma factura
function OpenPopUpInvoice(url,Nome)
{
    var	sFeatures ='top=200,';
		sFeatures +='left=200,';
		sFeatures +='scrollbars=no,';
		sFeatures +='resizable=no,';
	    sFeatures +='status=no,';
	    
    OpenPopUp(url, Nome, sFeatures, 100, 100);
}
function OpenPopUpVbV(url,Nome)
{
    var	sFeatures ='top=200,';
		sFeatures +='left=200,';
		sFeatures +='scrollbars=no,';
		sFeatures +='resizable=no,';
	    sFeatures +='status=no,';
	    
    OpenPopUp(url, Nome, sFeatures, 330, 259);
}

// função para abrir o Verified By Visa
function OpenPopUpCvv(url,Nome)
{
    var	sFeatures ='top=200,';
		sFeatures +='left=200,';
		sFeatures +='scrollbars=no,';
		sFeatures +='resizable=no,';
	    sFeatures +='status=no,';
	    
    OpenPopUp(url, Nome, sFeatures, 259, 181);
}

// função para abrir popup help
function OpenPopUpHelp(url,Nome)
{	
	var	sFeatures ='top=200,';
		sFeatures +='left=200,';
		sFeatures +='scrollbars=yes,';
		sFeatures +='resizable=no,';		
	    sFeatures +='status=no,';
	
	OpenPopUp(url,Nome,sFeatures,820,650);		
}

// Copy register data to invoicing data
function  WriteInvoicingData(clientID)
{
    var _name = document.getElementById(clientID + "lblValueRegDataName");
    var _address = document.getElementById(clientID + "lblValueRegDataAddress");
    var _cp4 = document.getElementById(clientID + "lblValueRegDataCP4");
    var _local = document.getElementById(clientID + "lblValueRegDataLocal");
    var _phone = document.getElementById(clientID + "lblValueRegDataPhone");
    
    var _txtName = document.getElementById(clientID + "txtInvDataName");
    var _txtAddress = document.getElementById(clientID + "txtInvDataAddress");
    var _txtCP4 = document.getElementById(clientID + "txtInvDataCP4");
    var _txtLocal = document.getElementById(clientID + "txtInvDataLocal");
    var _txtPhone = document.getElementById(clientID + "txtInvDataPhone");
    
    try
    {
        _txtName.value = _name.innerText;
        _txtAddress.value = (_address.innerText != "")?_address.innerText:_txtAddress.value;
        _txtCP4.value = (_cp4.innerText != "")?_cp4.innerText:_txtCP4.value;
        _txtLocal.value = (_local.innerText != "")?_local.innerText:_txtLocal.value;
        _txtPhone.value = (_phone.innerText != "")?_phone.innerText:_txtPhone.value;
    }
    catch(ex)
    {
        alert(ex.message);
    }    
}

// Valida NIF PT
function SPW_JS_ValidateNumContribuinte(sender,args)
{
    args.IsValid = SPW_JS_IsNumContribuinte(args.Value);
}

// Check whether string s is empty.
function SPW_JS_IsEmpty(s)
{
    return (s == null || s.length == 0 || SPW_JS_Trim(s).length == 0)
}

// faz o trim a uma string
function SPW_JS_Trim (s) {
	if (s.length == 0) return s;
    return s.replace(/^\s*(.*?)\s*$/,'$1');
}

// SPW_JS_IsSignedInteger (STRING s)
// Returns true if all characters are numbers;
// first character is allowed to be + or - as well.
// Does not accept floating point, exponential notation, etc.
function SPW_JS_IsSignedInteger (s)
{
    if (SPW_JS_IsEmpty(s)) return false;

    else {
        var startPos = 0;

        // skip leading + or -
        if ( (s.charAt(0) == "-") || (s.charAt(0) == "+") )
           startPos = 1;
        return (SPW_JS_IsInteger(s.substring(startPos, s.length)))
    }
}

// SPW_JS_IsInteger (STRING s)
// Returns true if all characters in string s are numbers.
// Accepts non-signed integers only. Does not accept floating
// point, exponential notation, etc.
function SPW_JS_IsInteger (s)
{
    if (SPW_JS_IsEmpty(s)) return false;

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (var i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);

        if (!SPW_JS_IsDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

// Returns true if character c is a digit
// (0 .. 9).
function SPW_JS_IsDigit (c)
{   
    return ((c >= "0") && (c <= "9"))
}

// isPositiveInteger (STRING s)
// Returns true if string s is an integer > 0.
function SPW_JS_IsPositiveInteger (s)
{
    if (SPW_JS_IsEmpty(s)) return false;
    
    return (SPW_JS_IsSignedInteger(s) && Number(s) > 0);
}

// Nuno Santos 
//Verifica se o Numero de Contribuinte está correcto
//Valida Unicamente NIF portugueses
function SPW_JS_IsNumContribuinte(s)
{   
    if (s.length!=9 || !SPW_JS_IsPositiveInteger(s))    
        return false;

    var soma,resto,digi;
    var nif = new Array(9);
    for (var i=0;i<9;i++) 
        nif[i] = Number(s.substring(i,i+1));
    
    for (var i=0,soma=0;i<8;i++)
        soma += nif[i]*(9-i);
    
    resto = soma%11;
    digi = 11-resto;  
    if (digi>9) digi=0;
    return (digi==nif[8]);
}

//Change backgroundColor row
function  ChangeColorRow (IdElem,ColorNotSelect,ColorSelect)
{
	var eElem = document.getElementById(IdElem);	
	if (eElem.type == "checkbox")
	{
	    if (eElem.checked)
		    eElem.parentNode.parentNode.parentNode.style.backgroundColor = ColorSelect;
	    else
		    eElem.parentNode.parentNode.parentNode.style.backgroundColor = ColorNotSelect;
	}
	
	return false;
}
//Change borderColor item
function  ChangeColorItem (IdElem,ColorNotSelect,ColorSelect)
{
	var eElem = document.getElementById(IdElem);	
	if (eElem.type == "checkbox")
	{
	    if (eElem.checked){
		    eElem.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.borderColor=ColorSelect;
		    eElem.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.borderWidth="2pt";
		}
        else{
		    eElem.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.borderColor=ColorNotSelect;    
		    eElem.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.style.borderWidth="2pt";
	    }		    
	}
	return false;
}


// permite checkar um radio button
function CheckRadio(eElem)
{
    if (eElem){
        eElem.checked = true;
    }
}
// permite colocar activo ou não as datas de acordo com o radio seleccionado
function EnabledDates(clientId)
{
    var rdDepDate = document.getElementById("rdDepartureDate");
    var rdArrDate = document.getElementById("rdArrivalDate");
    var hfSelectedDate = document.getElementById(clientId + "hfSelectedDate");
    
    if (!rdDepDate) return;
           
    var DepDateChecked = true;
    if (rdDepDate.checked)
    {
        DepDateChecked = true;
        hfSelectedDate.value = "departure";
    }
    if (rdArrDate.checked)
    {    
        DepDateChecked = false;    
        hfSelectedDate.value = "arrival";
    }
    
    var cmbDepDay = document.getElementById(clientId + "cmbDepartureDay");
    var cmbDepMonth = document.getElementById(clientId + "cmbDepartureMonth");
    var cmbDepYear = document.getElementById(clientId + "cmbDepartureYear");
    var cmbDepHours = document.getElementById(clientId + "cmbDepartureHours");
    var cmbDepMin = document.getElementById(clientId + "cmbDepartureMinutes");
    var imgDepCalend = document.getElementById("imgDepartureCalend");
            
    var cmbArrDay = document.getElementById(clientId + "cmbArrivalDay");
    var cmbArrMonth = document.getElementById(clientId + "cmbArrivalMonth");
    var cmbArrYear = document.getElementById(clientId + "cmbArrivalYear");
    var cmbArrHours = document.getElementById(clientId + "cmbArrivalHours");
    var cmbArrMin = document.getElementById(clientId + "cmbArrivalMinutes");
    var imgArrCalend = document.getElementById("imgArrivalCalend");
    
    cmbDepDay.disabled = !DepDateChecked;     
    cmbArrDay.disabled = DepDateChecked;
    cmbDepMonth.disabled = !DepDateChecked;    
    cmbArrMonth.disabled = DepDateChecked;
    cmbDepYear.disabled = !DepDateChecked;    
    cmbArrYear.disabled = DepDateChecked;
    cmbDepHours.disabled = !DepDateChecked;    
    cmbArrHours.disabled = DepDateChecked;
    cmbDepMin.disabled = !DepDateChecked;    
    cmbArrMin.disabled = DepDateChecked;
    
    imgDepCalend.style.display = (DepDateChecked)? 'block': 'none';    
    imgArrCalend.style.display = (!DepDateChecked)? 'block': 'none';
    
    if (!DepDateChecked)
    {
        cmbDepDay.selectedIndex = 0;
        cmbDepMonth.selectedIndex = 0;
        cmbDepYear.selectedIndex = 0;
        cmbDepHours.selectedIndex = 0;
        cmbDepMin.selectedIndex = 0;        
    }
    else
    {
        cmbArrDay.selectedIndex = 0;
        cmbArrMonth.selectedIndex = 0;
        cmbArrYear.selectedIndex = 0;
        cmbArrHours.selectedIndex = 0;
        cmbArrMin.selectedIndex = 0;
    }    
}
// permite colocar activo ou não as datas de acordo com o radio seleccionado
function EnabledDatesCurTrip(clientId)
{
    var rdDepDate = document.getElementById("rdDepartureDateCurTrip");
    var rdArrDate = document.getElementById("rdArrivalDateCurTrip");
    var hfSelectedDate = document.getElementById(clientId + "hfSelectedDateCurTrip");
        
    if (!rdDepDate) return;
    
    var DepDateChecked = true;
    if (rdDepDate.checked)
    {
        DepDateChecked = true;
        hfSelectedDate.value = "departure";
    }
    if (rdArrDate.checked)
    {    
        DepDateChecked = false;    
        hfSelectedDate.value = "arrival";
    }
        
    var cmbDepDay = document.getElementById(clientId + "cmbDepartureDayCurTrip");
    var cmbDepMonth = document.getElementById(clientId + "cmbDepartureMonthCurTrip");
    var cmbDepYear = document.getElementById(clientId + "cmbDepartureYearCurTrip");
    var cmbDepHours = document.getElementById(clientId + "cmbDepartureHoursCurTrip");
    var cmbDepMin = document.getElementById(clientId + "cmbDepartureMinutesCurTrip");
    var imgDepCalend = document.getElementById("imgDepartureCalendCurTrip");
            
    var cmbArrDay = document.getElementById(clientId + "cmbArrivalDayCurTrip");
    var cmbArrMonth = document.getElementById(clientId + "cmbArrivalMonthCurTrip");
    var cmbArrYear = document.getElementById(clientId + "cmbArrivalYearCurTrip");
    var cmbArrHours = document.getElementById(clientId + "cmbArrivalHoursCurTrip");
    var cmbArrMin = document.getElementById(clientId + "cmbArrivalMinutesCurTrip");
    var imgArrCalend = document.getElementById("imgArrivalCalendCurTrip");
    
    cmbDepDay.disabled = !DepDateChecked;      
    cmbArrDay.disabled = DepDateChecked;
    cmbDepMonth.disabled = !DepDateChecked;    
    cmbArrMonth.disabled = DepDateChecked;
    cmbDepYear.disabled = !DepDateChecked;    
    cmbArrYear.disabled = DepDateChecked;
    cmbDepHours.disabled = !DepDateChecked;    
    cmbArrHours.disabled = DepDateChecked;
    cmbDepMin.disabled = !DepDateChecked;    
    cmbArrMin.disabled = DepDateChecked;
    
    imgDepCalend.style.display = (DepDateChecked)? 'block': 'none';    
    imgArrCalend.style.display = (!DepDateChecked)? 'block': 'none';
    
    if (!DepDateChecked)
    {
        cmbDepDay.selectedIndex = 0;
        cmbDepMonth.selectedIndex = 0;
        cmbDepYear.selectedIndex = 0;
        cmbDepHours.selectedIndex = 0;
        cmbDepMin.selectedIndex = 0;        
    }
    else
    {
        cmbArrDay.selectedIndex = 0;
        cmbArrMonth.selectedIndex = 0;
        cmbArrYear.selectedIndex = 0;
        cmbArrHours.selectedIndex = 0;
        cmbArrMin.selectedIndex = 0;
    }    
}

// Permite seleccionaaro o radio da data da viagem actual
function SelectDateCurrTrip(clientID)
{
    var hfSelectedDate = document.getElementById(clientID + "hfSelectedDateCurTrip");
    var eElem = document.getElementsByName("rdDateCurTrip");
    if (eElem && hfSelectedDate) 
    {
        if (hfSelectedDate.value == 'departure')
           eElem[0].checked = true;
        else if (hfSelectedDate.value == 'arrival')
           eElem[1].checked = true;        
    }  
    
    EnabledDatesCurTrip(clientID);  
}

// object type struct to save info of stop 
// used in the function FillToChangeStops()
function InfoStops(address,cp4,local,country,timed,timeh,timem,visitkm)
{
    this.Address = address;
    this.CP4 = cp4;
    this.Local = local;
    this.Country = country;
    this.TimeD = timed;
    this.TimeH = timeh;
    this.TimeM = timem;
    this.VisitKM = visitkm;
}

// fill fields of div stops
function FillToChangeStops(infoDivStops,clientId)
{
    var _dAddress = document.getElementById(clientId + "txtStoppingAddress");
    var _dCP4 = document.getElementById(clientId + "txtStoppingCP4");
    var _dLocal = document.getElementById(clientId + "txtStoppingLocal");
    var _dCountry = document.getElementById(clientId + "cmbStoppingCountry");
    var _dStopTimeD = document.getElementById(clientId + "cmbStopDays");
    var _dStopTimeH = document.getElementById(clientId + "cmbStopTimeHours");
    var _dStopTimeM = document.getElementById(clientId + "cmbStopTimeMinutes");
    var _dVisitKm = document.getElementById(clientId + "txtVisitKm");
    
    // são válidos todos os campos
    if(_dAddress && _dCP4 && _dLocal && _dCountry && _dStopTimeD && _dStopTimeH && _dStopTimeM && _dVisitKm)
    {
        try
        {
            _dAddress.value = infoDivStops.Address;
            _dCP4.value = infoDivStops.CP4;
            _dLocal.value = infoDivStops.Local;
            _dCountry.value = infoDivStops.Country;
            _dStopTimeD.selectedIndex = infoDivStops.TimeD;
            _dStopTimeH.selectedIndex = infoDivStops.TimeH;
            _dStopTimeM.selectedIndex = infoDivStops.TimeM;            
            _dVisitKm.value = infoDivStops.VisitKM;
            
            // desabilitar os campos que não podem ser alterados
            /*
                _dAddress.readOnly = true;
                _dCP4.readOnly = true;
                _dLocal.readOnly = true;
                _dCountry.disabled = true;                    
            */
        }
        catch (ex)
        {
            //alert(ex.message);
        }
    }    
}

// is changing stop then block a few fields
function BlockFieldsDivStops(clientId,block)
{    
    var _dAddress = document.getElementById(clientId + "txtStoppingAddress");
    var _dCP4 = document.getElementById(clientId + "txtStoppingCP4");
    var _dLocal = document.getElementById(clientId + "txtStoppingLocal");
    var _dCountry = document.getElementById(clientId + "cmbStoppingCountry");
    
    // são válidos todos os campos
    if(_dAddress && _dCP4 && _dLocal && _dCountry)
    {
        try
        {            
            // abiliatr os campos que não podem ser alterados, caso tenham sido chamados no alterar
            _dAddress.readOnly = block;
            _dCP4.readOnly = block;
            _dLocal.readOnly = block;
            _dCountry.disabled = block;           
        }
        catch (ex)
        {
            //alert(ex.message);
        }
    }    
}

// show div stopping
function ShowDivStoppings(IdDiv,IdHF,IdHFIndex,value,display,clientId,ischangingstop,txtButton)
{       
    ClearDivStoppings(clientId);

    //alterar o defaultbutton do form    
    var _btAdd = document.getElementById(clientId + "btStoppingAdd");         
    if (_btAdd) _btAdd.value = txtButton;
        
    var _isChStop = document.getElementById(clientId + "IsChangingStop");
    if (_isChStop) _isChStop.value = ischangingstop;
    if (ischangingstop == 'true') 
        BlockFieldsDivStops(clientId,true);
    else
        BlockFieldsDivStops(clientId,false);
        
    var _divStops = document.getElementById(IdDiv); 
    var _hf = document.getElementById(IdHF);
    var _hfIndex = document.getElementById(IdHFIndex);
          
    if (_hfIndex) _hfIndex.value = value;
     
    if (_hf.value == 'S') display = 'block';
    
    _divStops.style.display = display; 
    
    try
    {
        var _divAll = document.getElementById("divAll");
        if (_divAll && display == 'block')
        {
            _divAll.style.display = "block";
		    _divAll.style.width = getDocumentWidth();	
		    _divAll.style.height = getDocumentHeight();
	    }	
	}
	catch(ex)
	{
	    alert(ex.message);
	}
     
    var divWidth =  _divStops.offsetWidth;
    var divHeight = _divStops.offsetHeight;
    var winWidth = getDocumentWidth();
    var winHeight = getDocumentHeight();
     
    x = Math.abs((winWidth/2) - (divWidth/2));     
    y = Math.abs((winHeight/2) - (divHeight/2));    
     
    _divStops.style.top = y;
    _divStops.style.left = x;  
    
    if (display == 'block')
    {
        // retirar o default button do form
        var frmID = _hf.form.id;
        var frm = document.getElementById(frmID);
        if (frm) frm.onkeypress = "";
        // dar o focus ao campo txtStoppingLocal
        var eSL = document.getElementById(clientId + "txtStoppingLocal");
        if (eSL) eSL.focus();
    }
                   
    return(false);    
}
// como o nome bem indica esconde o Div 
function HideDivStoppings(IdDiv)
{
     var _divStops = document.getElementById(IdDiv); 
     if(_divStops) _divStops.style.display = 'none';

	var _divAll = document.getElementById("divAll");
	if (_divAll)_divAll.style.display = "none";
}

// clear all the fields of the div stoppings
function ClearDivStoppings(clientId)
{ 
    // campos a limpar e esconder no div
    // campos de validators
    var valSum = document.getElementById(clientId + "valSummary");
    var valCP4 = document.getElementById(clientId + "RegExValidStoppingCP4");
    var valACL = document.getElementById(clientId + "ctValidStoppingAddressCPLocal");
    var valVKm = document.getElementById(clientId + "RegExValidVisitKm");
        
    // campos de dados
    var inpAdd = document.getElementById(clientId + "txtStoppingAddress");
    var inpCP4 = document.getElementById(clientId + "txtStoppingCP4");
    var inpLoc = document.getElementById(clientId + "txtStoppingLocal");
    var inpCon = document.getElementById(clientId + "cmbStoppingCountry");
    var inpVKm = document.getElementById(clientId + "txtVisitKm");
    var inpTmH = document.getElementById(clientId + "cmbStopTimeHours");
    var inpTmM = document.getElementById(clientId + "cmbStopTimeMinutes");
    var tbStop = document.getElementById(clientId + "tbStoppings");
    var lblSIT = document.getElementById(clientId + "lblShowInfoTimeMinStop");
    
    // esconder os validators
    if (valSum) valSum.style.display = 'none';
    if (valCP4) valCP4.style.display = 'none';
    if (valACL) valACL.style.display = 'none';
    if (valVKm) valVKm.style.display = 'none';    
        
    // limpar os campos de dados
    if (inpAdd) inpAdd.value = "";
    if (inpCP4) inpCP4.value = "";
    if (inpLoc) inpLoc.value = "";
    if (inpVKm) inpVKm.value = 0;
    if (inpTmH) inpTmH.selectedIndex = 0;
    if (inpTmM) inpTmM.selectedIndex = 0;
    if (inpCon) inpCon.selectedIndex = 0;    
    if (tbStop) tbStop.style.display = 'none';
    if (lblSIT) lblSIT.style.display = 'none';    
}

// permite mostrar um confirm no caso da paragem ter mais de ? horas
// ? = variável dos resources com a informação guardada em segundos
function ConfirmStop(clientID,msgText,btContinue)
{
    var hfShowAlert = document.getElementById(clientID + "hfShowAlert");
    var btCont = document.getElementById(btContinue);
    
    if (hfShowAlert)
    {
        if (hfShowAlert.value == 'S')
        {
            var res = confirm(msgText);
            if (res)
            {
                if (btCont) 
                {
                    btCont.click();
                }
            }            
        }
    }        
}

// permite mostrar um confirm no caso de ter alterado algum campo do form de viagem normal
// sem ter feito o adicionar
function ConfirmFieldsChanged(clientID,msgText,btContinue)
{
    var hfFieldsCh = document.getElementById(clientID + "hfFieldsChanged");
    var btCont = document.getElementById(btContinue);
    
    if (hfFieldsCh)
    {
        if (hfFieldsCh.value != '')
        {
            var aux = hfFieldsCh.value.split("|");
            msgText = msgText.replace("{0}","\""+ aux[0] +"\"");
            msgText = msgText.replace("{1}","\""+ aux[1] +"\"");
                            
            var res = confirm(msgText);
            if (res)
            {
                hfFieldsCh.value = '';
                if (btCont) 
                {
                    btCont.click();
                    return(true);
                }
            }    
            else
                return false;        
        }
    }  
    
    return true;      
}

function fnChangeField(clientID,eElem,nomeCampo,nomeBT)
{
    var hfFieldsCh = document.getElementById(clientID + "hfFieldsChanged");
    if (hfFieldsCh) hfFieldsCh.value = nomeCampo + "|" + nomeBT;
}

// permite realizar a acção correspondente à tecla  (Enter ou Escape)
function DoIt(IdElemEnter,IdElemEscape,e)
{
    var keyCode = e.keyCode;
    
	switch (keyCode)
	{
	    case 13: // enter
	        var eEnter = document.getElementById(IdElemEnter);
            if(eEnter.click) {eEnter.click();return false};            
	        break;
	    case 27: // escape
	        var eEscape = document.getElementById(IdElemEscape);
            if(eEscape.click) {eEscape.click();return false};
	        break;
	    default:	    
	        break;
	}		
	
	return true;    
}

//Show input text to fill other answer to the question
 function SelectOtherAnswer(selectid,txtid)
 { 
	if (document.getElementById(selectid).value=="0")
	{
		document.getElementById(txtid).style.display = 'block';
		document.getElementById(txtid).focus();
	}		
	else 
	{
		document.getElementById(txtid).value="";
		document.getElementById(txtid).style.display = 'none';	
	}	
 }

//Altera o valor da label que mostra o numero de vehículos seleccionados
function UpdateLabelNumberSel(eElemId,eElemChk)
{
    var eElem = document.getElementById(eElemId);
    
    if (eElem)
    {   
        var num = Number(eElem.innerHTML);        
        if (eElemChk.checked)
            num ++;
        else
            num --;                                
                   
        eElem.innerHTML = num;
    }
    return true;
}
//Altera o valor da label que mostra o numero de condutores seleccionados
function UpdateLblNumberSelDriver(eElemId,eElemChk,NumMax,Msg)
{
    var eElem = document.getElementById(eElemId);    
    if (eElem)
    {   
        var num = Number(eElem.innerHTML);
        if (eElemChk.checked)
        {
            num ++;
            if (num > NumMax) {eElemChk.checked = false; alert(Msg); return false}
        }
        else
            num --;                                
                   
        eElem.innerHTML = num;
    }
    return true;
}
// refresh o número de elementos seleccionados
function RefreshLabelNumberSel(eElemId,ColorNotSelect,ColorSelect,fnLoad)
{
    var eElem = document.getElementById(eElemId);
    
    if (eElem)
    {
        var inputs = document.getElementsByTagName("input");
        var num = 0;
        for (var i = 0; i < inputs.length; i++)
        {
            if (inputs[i].type == "checkbox")
            {
                if (inputs[i].checked) num++; 
                               
                eval(fnLoad)(inputs[i].id,ColorNotSelect,ColorSelect);
            }
        } 
        
        eElem.innerHTML = num;   
    }
}

// função para confirmar uma acção do utilizador
function ConfirmAction(strMsg)
{
    var res = confirm(strMsg);
    return(res);
}

// get scroll of a element
// set the scroll value to a hidden element
function GetScroll(eElemId,eElemIdTo)
{
    var elem = document.getElementById(eElemId);
    var elemTo = document.getElementById(eElemIdTo);
    if (elem && elemTo) elemTo.value = elem.scrollTop;     
}

// set the scroll to a element
function SetScroll(eElemId,eElemIdFrom)
{
    var elem = document.getElementById(eElemId);
    var elemFrom = document.getElementById(eElemIdFrom);
    if (elem && elemFrom) elem.scrollTop = elemFrom.value;
}

// preselect the combo stop minues
function PreselectStopDuration(clientId,timeMin)
{
    var eElem = document.getElementById(clientId + "cmbStopTimeMinutes");
    var lblSIT = document.getElementById(clientId + "lblShowInfoTimeMinStop");
    
    if (eElem)
    {
        if (Number(timeMin)) eElem.selectedIndex = timeMin;        
    }
    
    if (lblSIT)
        lblSIT.style.display = 'block';
}

// DateAdd
Date.prototype.add = function (p_Interval, p_Number)
{ 
   var thing = new String(); 
    
   //in the spirt of VB we'll make this function non-case sensitive 
   //and convert the charcters for the coder. 
   p_Interval = p_Interval.toLowerCase(); 
    
   if(isNaN(p_Number)){ 
    
      //Only accpets numbers  
      //throws an error so that the coder can see why he effed up    
      throw "The second parameter must be a number. \n You passed: " + p_Number; 
      return false; 
   } 
 
   p_Number = new Number(p_Number); 
   switch(p_Interval.toLowerCase()){ 
      case "yyyy": {// year 
         this.setFullYear(this.getFullYear() + p_Number); 
         break; 
      } 
      case "q": {      // quarter 
         this.setMonth(this.getMonth() + (p_Number*3)); 
         break; 
      } 
      case "m": {      // month 
         this.setMonth(this.getMonth() + p_Number); 
         break; 
      } 
      case "y":      // day of year 
      case "d":      // day 
      case "w": {      // weekday 
         this.setDate(this.getDate() + p_Number); 
         break; 
      } 
      case "ww": {   // week of year 
         this.setDate(this.getDate() + (p_Number*7)); 
         break; 
      } 
      case "h": {      // hour 
         this.setHours(this.getHours() + p_Number); 
         break; 
      } 
      case "n": {      // minute 
         this.setMinutes(this.getMinutes() + p_Number); 
         break; 
      } 
      case "s": {      // second 
         this.setSeconds(this.getSeconds() + p_Number); 
         break; 
      } 
      case "ms": {      // second 
         this.setMilliseconds(this.getMilliseconds() + p_Number); 
         break; 
      } 
      default: { 
       
         //throws an error so that the coder can see why he effed up and 
         //a list of elegible letters. 
         throw   "The first parameter must be a string from this list: \n" + 
               "yyyy, q, m, y, d, w, ww, h, n, s, or ms.  You passed: " + p_Interval; 
         return false; 
      } 
   } 
   return this; 
} 

// ao alterar a combo dias altera a combo horas
function changeStopHour(eElem,ElemIdTo)
{
    var _elemto = document.getElementById(ElemIdTo);    
    if (_elemto)
    {
        if (eElem.selectedIndex >= 0)
        {
            if (_elemto.selectedIndex == 0)   _elemto.selectedIndex = 1;
        }
    }
}

// mostra o div dos km vazio caso assim seja
function ShowDivEmptyKm(hiddenElemID,eElemID)
{
    var eElem = document.getElementById(eElemID);
    var hElem = document.getElementById(hiddenElemID);    
    
    if (eElem && hElem)
    {
        if(hElem.value == 1)
        { 
            eElem.style.display = "block"; 
            eElem.style.top = (getDocumentHeight()/2)-100;
            eElem.style.left = (getDocumentWidth()/2)-250; 
            
            try 
            {
                var _divAll = document.getElementById("divAll")
                if (_divAll){
                    _divAll.style.display = "block";
                    _divAll.style.width = getDocumentWidth();
                    _divAll.style.height = getDocumentHeight();
                }
            }
            catch(ex)
            {                  
                alert(ex.message)
            }
        }
    }
}

//validar data YYYY/MM/DD
function ValidateDate(checkStr) {

	var daysOfMonth = new Object();
	daysOfMonth ['Jan'] = daysOfMonth ['January']   = daysOfMonth [1] = 31;
	daysOfMonth ['Feb'] = daysOfMonth ['February']  = daysOfMonth [2] = 28;
	daysOfMonth ['Mar'] = daysOfMonth ['March']     = daysOfMonth [3] = 31;
	daysOfMonth ['Apr'] = daysOfMonth ['April']     = daysOfMonth [4] = 30;
	daysOfMonth ['May'] = daysOfMonth ['May']       = daysOfMonth [5] = 31;
	daysOfMonth ['Jun'] = daysOfMonth ['June']      = daysOfMonth [6] = 30;
	daysOfMonth ['Jul'] = daysOfMonth ['July']      = daysOfMonth [7] = 31;
	daysOfMonth ['Aug'] = daysOfMonth ['August']    = daysOfMonth [8] = 31;
	daysOfMonth ['Sep'] = daysOfMonth ['September'] = daysOfMonth [9] = 30;
	daysOfMonth ['Oct'] = daysOfMonth ['October']   = daysOfMonth [10] = 31;
	daysOfMonth ['Nov'] = daysOfMonth ['November']  = daysOfMonth [11] = 30;
	daysOfMonth ['Dec'] = daysOfMonth ['December']  = daysOfMonth [12] = 31;
		
	if (checkStr.search("/") > -1)
		var date = checkStr.split('/');
	else if (checkStr.search("-") > -1)
		var date = checkStr.split('-');
	else
		return (false);
		
	var num = date.length;
	if (num != 3)
		return (false);
		
	var year = Number(date[0]);
	var month = Number(date[1]);
	var day = Number(date[2]);
			
	if (month < 1 || month > 12 || month == "")
		return (false);

	if (day < 1  || day == "")
		return (false);
  
	if (month == 2 && IsLeapYear(year))
		var dayLimit = 29;
	else 
		var dayLimit = daysOfMonth[month];
	
	if (day > dayLimit)
		return (false);
 
	if (year < 1000 || year == "" || year > 9999)
		return (false);
	
	return (true);
}	
//ver se é ano bisexto
function IsLeapYear(y) 
{
	return (y % 4 == 0  && (y % 400 == 0 || y % 100 != 0))
}

// permite seleccionar o texto do campo 
function SelectFieldText(eElemId)
{
    try
    {
        var eElem = document.getElementById(eElemId);
        if (eElem)
        {
           eElem.focus();
           eElem.select();
        }
    }
    catch(ex)
    {
        //do nothing
        //alert(ex.message);
    }    
}

function ordenarLisBox(eElemId,tipo,msgSelect)
{
	var _iLB = document.getElementById(eElemId);

	//o selected index começa em zero (0)
	var _si = _iLB.selectedIndex;
	if (Number(_si) == -1){
		alert(msgSelect);
		return;
	}
	
	var _len = _iLB.length;
	
	if (tipo == 'up' && _si == 0) return;
	if (tipo == 'down'&& _si == Number(_len) - Number(1)) return;
	
	if (tipo == 'up') 
		var _auxsi = Number(_si) - Number(1);
	else if (tipo = 'down') 
		var _auxsi = Number(_si) + Number(1);
		
	var _vsi1 = _iLB.options[_si].value;
	var _tsi1 = _iLB.options[_si].text;

	var _vsi2 = _iLB.options[_auxsi].value;
	var _tsi2 = _iLB.options[_auxsi].text;
	
	_iLB.options[_auxsi].text = _tsi1;
	_iLB.options[_auxsi].value = _vsi1;
	
	_iLB.options[_si].text = _tsi2;
	_iLB.options[_si].value = _vsi2;
	
	//utilizo para seleccionar o index que acabo de mover
	_iLB.selectedIndex = _auxsi;
}


//funções para determinar o X e Y de um elemento, funciona em IE e FireFox
function getAbsX(elt) { return (elt.x) ? elt.x : getAbsPos(elt,"Left");}
function getAbsY(elt) { return (elt.y) ? elt.y : getAbsPos(elt,"Top");}
function getAbsPos(elt,which) 
{
    iPos = 0;
    while (elt != null) {
        iPos += elt["offset" + which];
        elt = elt.offsetParent;
    }
    return iPos;
} 
function getDocumentWidth()
{
    if (document.body.scrollWidth)
        return document.body.scrollWidth;
        
    var w = document.documentElement.offsetWidth;
    if (window.scrollMaxX)
        w += window.scrollMaxX;
    
    return w;
}
function getDocumentHeight()
{    
    if (document.body.scrollHeight)
        return document.body.scrollHeight;
        
    return document.documentElement.offsetHeight; 
}

