/**
 * Nexus Consulting Calendar Control
 *
 * outFormat        [Y.m.d or d.m.Y]
 * controlId        Id to input control where:
 *                  - initial date is located
 *                  - selected date is stored
 *                  (dates in outFormat)
 * cancelLabel      Label to add to the cancel button
 **/

function nxcCalendarControl() {}
nxcCalendarControl.prototype.outFormat = 'Y.m.d';
nxcCalendarControl.prototype.cancelLabel = 'Cancel';
nxcCalendarControl.prototype.button = null;
nxcCalendarControl.prototype.div = null;
nxcCalendarControl.prototype.months = new Array('January','Feburary','March','April','May','June','July','August','September','October','November','December');
nxcCalendarControl.prototype.dDate = new Date();
nxcCalendarControl.prototype.show=function(textControlId) {
    if(textControlId != null) {
        this.control = textControlId;
    }
    var sDate = new String(document.getElementById(textControlId).value);
    var aDate = sDate.split('.');
    if(aDate.length == 3) {
        if(this.outFormat == 'd.m.Y') {
            var day = new String(aDate[0]);
            var month = new String(aDate[1]-1);
            var year = new String(aDate[2]);
        } else {
            var day = new String(aDate[2]);
            var month = new String(aDate[1]-1);
            var year = new String(aDate[0]);
        }
        this.dDate.setFullYear(year);
        this.dDate.setMonth(month);
        this.dDate.setDate(day);
    }
    /*alert('Date: ' + this.getDateString());*/

    this.createCalendar();
}
nxcCalendarControl.prototype.prev=function() {
    if(this.dDate.getMonth() == 0) {
        this.dDate.setMonth(11);
        this.dDate.setFullYear(this.dDate.getFullYear()-1);
    } else {
        this.dDate.setMonth(this.dDate.getMonth()-1);
    }
    this.createCalendar();
}
nxcCalendarControl.prototype.next=function() {
    this.dDate.setMonth(this.dDate.getMonth()+1);
    this.createCalendar();
}
nxcCalendarControl.prototype.createCalendar = function() {
    if(this.div != null) {
       document.body.removeChild(this.div);
       this.div = null;
    }
    this.div = document.createElement('div');
    this.div.id = 'nxcCalendarControl';

    var form = document.createElement('form');

    var prev = document.createElement('input');
    prev.type = 'button';
    prev.className = 'prev';
    prev.onclick = function() {
       window.nxcCC.prev();
    }
    prev.value = '<<';

    var next = document.createElement('input');
    next.type = 'button';
    next.className = 'next';
    next.onclick = function() {
       window.nxcCC.next();
    }
    next.value = '>>';

    var north = document.createElement('div');
    north.className = 'north';
    north.appendChild(prev);
    north.appendChild(next);
    north.appendChild(document.createTextNode(this.months[this.dDate.getMonth()]+' '+this.dDate.getFullYear()));
    form.appendChild(north);

    var breakdiv = document.createElement('div');
    breakdiv.className = 'break';
    form.appendChild(breakdiv);

    var calendar = document.createElement('div');
    calendar.className = 'ncalendar';

    var day = new Date(this.dDate.getFullYear(),this.dDate.getMonth(),1);
    if(day.getDay() == 0) {
        var emptyDays = 6;
    }
    else {
        var emptyDays = day.getDay() - 1;
    }
    for(var i=0;i<emptyDays;i++) {
        calendar.appendChild(this.createDay(' ','noday'));
    }

    var month = day.getMonth();
    for(var i=0;i < 31;i++) {
        if(day.getMonth() == month) {
            calendar.appendChild(this.createDay(day.getDate(),'hand day'+day.getDay()));
            day.setDate(day.getDate() + 1);
        } else {
            break;
        }
    }

    form.appendChild(calendar);

    var cancel = document.createElement('input');
    cancel.type = 'button';
    cancel.onclick = function() {
       window.nxcCC.div = null;
       document.body.removeChild(document.getElementById('nxcCalendarControl'));
    }
    cancel.value = this.cancelLabel;

    var south = document.createElement('div');
    south.className = 'south';
    south.appendChild(cancel);

    form.appendChild(south);

    this.div.appendChild(form);
    document.body.appendChild(this.div);
}
nxcCalendarControl.prototype.createDay = function(value,className) {
    var day = document.createElement('div');
    day.appendChild(document.createTextNode(value));
    day.className = 'day '+className;
    if(className != 'noday') {
        day.onclick = function() {
            window.nxcCC.select(this.innerHTML);
        }
    }
    return day;
}
nxcCalendarControl.prototype.select = function(day) {
    this.dDate.setDate(day);
    var ctrl = document.getElementById(this.control);
    if(ctrl != null) {
        ctrl.value = this.getDateString();
    }
    if(this.div != null) {
       document.body.removeChild(this.div);
       this.div = null;
    }
}
nxcCalendarControl.prototype.getDateString = function() {
    var returnvalue = new String(this.outFormat);
    returnvalue = returnvalue.replace(/Y/,this.dDate.getFullYear());
    var date = this.dDate.getMonth()+1;
    if(date < 10) {
        date = '0' + date;
    }
    returnvalue = returnvalue.replace(/m/,date);
    var day = this.dDate.getDate();
    if(day < 10) {
        day = '0' + day;
    }
    returnvalue = returnvalue.replace(/d/,day);
    return returnvalue;
}

var nxcCC = new nxcCalendarControl();
nxcCC.cancelLabel = 'Avbryt';
nxcCC.outFormat = 'd.m.Y';
nxcCC.months = new Array('januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember');
