Delay

by mariomc

HTML

<link rel="stylesheet" href="http://jqueryui.com/themes/base/jquery.ui.all.css">
<script src="http://jqueryui.com/ui/i18n/jquery.ui.datepicker-pt.js"></script>
<div id="calendario"></div>
<div>Dia Seleccionado<input type="textbox" id="datepicker" /></div>
<div id="max">Hora Máxima Entrega<input type="textbox" value="16"/></div>
<div id="actual">Hora actual<input type="textbox" value="16"/></div>
<div id="entregaPt">Entrega Portugal: <span class="valor"></span></div>
<div id="entregaLx">Entrega Lisboa em: <span class="valor"></span></div>
<div id="entregaInt">Entrega Internacional em: <span class="valor"></span></div>

JavaScript

(function($) {
    function calculadataentrega(mode) {
        var dataactual = new Date($("#datepicker").val());
        dataactual.setUTCHours($("#actual input").val(), 0, 0);
        var dataentrega = dataactual;
        var diaactual = dataactual.getUTCDate();
        var horaactual = dataactual.getUTCHours();
        var horalimitentrega = $("#max input").val();
        //Verifica se é fim-de-semana
        switch (mode) {
        case 'lx':
            if (horaactual >= horalimitentrega) {
                dataentrega.setUTCDate(dataentrega.getUTCDate() + 1);
            }
            if (isDeliveryDay(dataentrega)) {
                dataentrega.setUTCHours(16, 0, 0);
            } else {
                dataentrega = parseWeekend(dataentrega);
            }
            break;
        case 'pt':
            if (horaactual >= horalimitentrega) {
                dataentrega.setUTCDate(dataentrega.getUTCDate() + 2);
            } else {
                dataentrega.setUTCDate(dataentrega.getUTCDate() + 1);
            }
            if (isDeliveryDay(dataentrega)) {
                dataentrega.setUTCHours(9, 0, 0);
            } else {
                dataentrega = parseWeekend(dataentrega);
            }
            break;
        case 'int':
                dataentrega.setUTCDate(dataentrega.getUTCDate() + 2);
            break;
        }
        return dataentrega.toDateString();
    } /*Helper Function para calcular se uma data é Sábado ou Domingo. Recebe um parametro com formato date. Retorna verdadeiro ou falso respectivamente*/

    function isDeliveryDay(date) {
        var ret = true;
        var dia = date.getUTCDay();
        if (dia == 6 || dia == 0 || dia == 1) {
            ret = false;
        }
        return ret;
    }

    /*Helper funcion para modificar o dia de entrega. Recebe um parametro com formato date. Retorna o valor modificado. Possivelmente posso melhorar a função tornando-a recursiva...*/

    function parseWeekend(date) {
        var...