function zero_pad(istr,l){
    if(istr.length < l){
        return zero_pad("0"+istr,l);
    }else{
        return istr;
    }
}
function DateTimeField(element){
    this.element = $(element);
    this.months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
    this.get_current_date = function(){
        return new Date();
    }
    this.get_elements_date = function(){
        var formatted;
        var dt = new Date();
        if(this.element.val().indexOf(" ") != -1){
            formatted = this.element.val().substr(0, this.element.val().indexOf(" "));
        }else{
            formatted = this.element.val();
        }
        formatted = formatted.split("-");
        formatted = new Array(formatted[1],formatted[2],formatted[0]).join("/")
        dt.setTime(Date.parse(formatted));
        return dt;
    }
    this.get_day_range = function(month,year){
        var range = new Array();
        var top = 32 - new Date(year, month, 32).getDate();
        for (var c = 1; c < top+1; c++){
            range.push(c);
        }
        return range;
    }
    this.get_year_range = function(){
        var start = this.get_current_date();
        var range = new Array();
        for(var c = 0; c < 5; c++){
            range.push((start.getFullYear()-1)+c);
        }
        return range;
    }
    this.render_month_select = function(){
        var select = document.createElement('select');
        select.setAttribute('class', 'month_selector');
        var sel_month = this.get_elements_date().getMonth();
        for (var c = 0; c < this.months.length; c++){
            var option = document.createElement('option');
            option.innerHTML = this.months[c];
            option.setAttribute('value', zero_pad(String(c+1),2));
            if(sel_month == c){
                option.setAttribute('selected', '1');
            }
            select.appendChild(option);
        }
        return select;
    }
    this.render_year_select = function(){
        var select = document.createElement('select');
        select.setAttribute('class', 'year_selector');
        var sel_year = this.get_elements_date().getFullYear();
        var years = this.get_year_range();
        for (var c = 0; c < years.length; c++){
            var option = document.createElement('option');
            option.innerHTML = years[c];
            option.setAttribute('value', years[c]);
            if(sel_year == years[c]){
                option.setAttribute('selected', '1');
            }
            select.appendChild(option);
        }
        return select;
    }
    this.render_day_select = function(){
        var select = document.createElement('select');
        select.setAttribute('class', 'day_selector');
        var sel_day = this.get_elements_date().getDate();
        var days = this.get_day_range(this.get_elements_date().getMonth(), this.get_elements_date().getFullYear())
        for (var c = 0; c < days.length; c++){
            var option = document.createElement('option');
            option.innerHTML = days[c];
            option.setAttribute('value', zero_pad(String(c+1),2));
            if(sel_day == c+1){
                option.setAttribute('selected', '1');
            }
            select.appendChild(option);
        }
        return select;
    }
    this.initial_format_input = function(){
        $(this.element).wrap('<div class="datetime-area"></div>');
        this.parent_element = this.element.parents('.datetime-area');
        this.element.hide();
        this.add_new_selectors();
        return 0;
    }
    this.add_new_selectors = function(){
        this.parent_element.find('select').remove();
        this.parent_element.append($(this.render_month_select()));
        this.parent_element.append($(this.render_day_select()));
        this.parent_element.append($(this.render_year_select()));
        var self = this;
        this.parent_element.find('select').change(function(){
            self.reformat_date_input();
        })
    }
    this.reformat_date_input = function(){
        var m = this.parent_element.find('.month_selector').val();
        var d = this.parent_element.find('.day_selector').val();
        var y = this.parent_element.find('.year_selector').val();
        this.element.val(new Array(y,m,d).join("-"));
        this.add_new_selectors();
    }
    this.initial_format_input();
}

$(document).ready(function(){
     $('.date-field').each(function(){
        dt = new DateTimeField(this);
    });
});