﻿// JScript File

/* Javascript Date Selector
   by Warren Brown (03/01/2004 Radiokop South Africa)

   Script to place Month/day/year onto a web page, leap year enabled
*/
DATE_DD = {
    dias_mes:[31,28,31,30,31,30,31,30,30,31,31,30],
    meses:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],
    option:"<option value='%v'>%t</option>",
    getOptRange:function(from, to){
        var rt = '';
        for(var d=from;d <= to;d++)
            rt += this.option.replace(/\%v/g,d).replace(/\%t/g,d);
        return rt;
    },
    getOptMonths:function(){
        var rt = '';
        for(var d =0;d < this.meses.length;d++){
            rt += this.option.replace(/\%v/g,d+1).replace(/\%t/g,this.meses[d]);
        }
        return rt;
    },
    getOptRange_ie:function(from, to,select){
        while(select.childNodes.length)
            select.removeChild(select.childNodes[0]);

        for(var d=from;d <= to;d++){
            var o = document.createElement('OPTION');
            o.value = d; o.innerHTML = d;
            select.appendChild(o);
        }
    },
    getOptMonths_ie:function(select){
        while(select.childNodes.length)
            select.removeChild(select.childNodes[0]);

        for(var d =0;d < this.meses.length;d++){
            var o = document.createElement('OPTION');
            o.value = d+1; o.innerHTML = this.meses[d];
            select.appendChild(o);
        }
    },
    getDays: function(m, y){
        var a = y/4;
        m = m-1;
        if(m==1){
            if(parseInt(a)==a){
                return this.dias_mes[m] + 1;
            }else{
                return this.dias_mes[m] + 1;
            }
        }else{
            return this.dias_mes[m];
        }
    },
    date_dd_update:function(date_box_id,source){
        var default_day = 1;
        var box = document.getElementById(date_box_id);
        var dds = box.dds;
        
        if(!dds){
            var selects = box.getElementsByTagName('SELECT');
            dds = {};
            for(var s = 0;s<selects.length;s++){
                dds[selects[s].getAttribute('x:id')] = selects[s];
                selects[s].onchange = function(){DATE_DD.date_dd_update(date_box_id,this.getAttribute('x:id'));};
            }

            var yearFrom = box.getAttribute('x:yearFrom');
            var yearTo = box.getAttribute('x:yearTo');
            yearTo = isNaN(yearTo)?(new Date()).getFullYear():yearTo;
            yearFrom = isNaN(yearFrom)?yearTo-40:yearFrom;
            this.getOptRange_ie(yearFrom,yearTo,dds['year']);
            this.getOptMonths_ie(dds['month']);
            var val = box.getElementsByTagName('INPUT')[0].value;
            if(val && val.length > 0){
                var vals = val.split('/');
                dds['year'].value = vals[2]*1;
                dds['month'].value = vals[0]*1;
                default_day = vals[1]*1;
            }else{
                dds['year'].value = yearTo;
                dds['month'].value = '1';
                dds['day'].value = '1';
            }
            box.dds = dds;
        }

        var d=null;
        var y = parseInt(dds['year'].value);
        var m = parseInt(dds['month'].value);
        try{d = parseInt(dds['day'].value);}catch(e){};

        this.getOptRange_ie(1,this.getDays(m,y),dds['day']);

        if(!isNaN(d) && (source=='day' || d < 28)){
        }else{
            d = default_day;
        }

        dds['day'].value = d;
        var value = box.getAttribute('x:format');
        value = value.replace(/\%Y/g,y);
        value = value.replace(/\%M/g,m);
        value = value.replace(/\%D/g,d);
        box.getElementsByTagName('INPUT')[0].value = value;
    }
}
