﻿
function addEvent(e,a,f,b) {
	if (document.addEventListener) {
		e.addEventListener(a,f,b);
	}
	else if (document.attachEvent) {
		e.attachEvent('on'+a,f,b);
	}
}

function Calendar() {
    var displayElement;
    var valueElement;
    var title;

    var day_names = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
    var month_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    var currentDate = new Date();
    var currentDay = currentDate.getDate();
    var selectedDay = currentDate.getDate();
    var currentMonth = currentDate.getMonth();
    var currentYear = currentDate.getFullYear();
    var postback_element;
    
    var me = this;
    
    me.getDisplayElement = function() {
        return displayElement;
    };
    me.setDisplayElement = function(value) {
        displayElement = value;
    };
    me.getTitle = function() {
        return title;
    };
    me.setTitle = function(value) {
        title = value;
    };
    
    me.getValueElement = function() {
        return valueElement;
    };
    me.setValueElement = function(value) {
        valueElement = value;
    };
    me.getNextMonth = function(num) {
        num++;
        if(num>11) {
            num=0;
        }
        return num;
    };
    me.nextMonth = function() {
        currentMonth = me.getNextMonth(currentMonth);
        if(currentMonth==0) {
            currentYear++;
        }
        me.reloadCalendar();
    };
    me.getPrevMonth = function(num) {
        num--;
        if(num<0) {
            num=11;
        }
        return num;
    };
    me.prevMonth = function() {
        currentMonth = me.getPrevMonth(currentMonth);
        if(currentMonth==11) {
            currentYear--;
        }
        me.reloadCalendar();
    };
    
    me.prevYear = function() {
        currentYear--;
        me.reloadCalendar();
    };
    me.nextYear = function() {
        currentYear++;
        me.reloadCalendar();
    };

    me.daysInMonth = function(month, year) {
        var m=[31,28,31,30,31,30,31,31,30,31,30,31];
        if(month!=1) return m[month];
        if(year%4!=0) return m[1];
        if(year%100==0 && year%400!=0) return m[1];
        return m[1]+1;
    };
    me.reloadCalendar = function() {
        // Do month headings first
        document.getElementById("previous_month").innerHTML = "&laquo; " + month_names[me.getPrevMonth(currentMonth)];
        document.getElementById("current_month").innerHTML = month_names[currentMonth] + " " + currentYear + "<a href = 'javascript:calendar.nextYear()' style ='position:absolute;margin-top:-6px;font-size:14px'>&#9650;</a><a href = 'javascript:calendar.prevYear()' style ='position:absolute;margin-top:7px;font-size:14px'>&#9660;</a>";
        document.getElementById("next_month").innerHTML = month_names[me.getNextMonth(currentMonth)] + " &raquo;";
        // Do day headings
        var table = document.getElementById("calendar");
        var tbody = document.createElement("TBODY");
        // -- Remove children
        while (table.firstChild) 
        {
            table.removeChild(table.firstChild);
        };
        var currRow = ""
        var currCell = ""
        var currAnchor = ""
        var currText = ""
        currRow = document.createElement("TR");
        for(var i=0; i<7; i++) {
            currCell = document.createElement("TH");
            currCell.setAttribute("scope", "col");
            currText = document.createTextNode(day_names[i].substr(0,3));
            currCell.appendChild(currText);
            currRow.appendChild(currCell);
        }
        tbody.appendChild(currRow);
        // Begin days
        var dayTally = 0;
        var blnReachedDay = false;
        var firstDay = new Date();
        firstDay.setFullYear(currentYear);
        firstDay.setMonth(currentMonth);
        firstDay.setDate(1);
        var daysInPrev = me.daysInMonth(me.getPrevMonth(currentMonth), currentYear);
        var daysInThis = me.daysInMonth(currentMonth, currentYear);
        
        while(dayTally < me.daysInMonth(currentMonth)) {
            currRow = document.createElement("TR");
            for(var i=0; i<7; i++) {
                currCell = document.createElement("TD");
                if(blnReachedDay == false) {
                    if(i == firstDay.getDay()) {
                        blnReachedDay = true;
                        dayTally++;
                        currAnchor = document.createElement("A");
                        currAnchor.setAttribute("href", "#");
                        addEvent(currAnchor,'click',calendar.dateSelected);
                        //currAnchor.setAttribute("onclick", "");
                        currText = document.createTextNode("1");
                        currAnchor.appendChild(currText);
                    } else {
                        currCell.className = "pag_disable";
                        currAnchor = document.createElement("A");
                        currAnchor.setAttribute("href", "#");
                        currText = document.createTextNode(daysInPrev - firstDay.getDay() + i + 1);
                        currAnchor.appendChild(currText);
                    }
                } else {
                    dayTally++;
                    if(dayTally > daysInThis) {
                        currCell.className = "pag_disable";
                        currAnchor = document.createElement("A");
                        currAnchor.setAttribute("href", "#");
                        currText = document.createTextNode(dayTally - daysInThis);
                        currAnchor.appendChild(currText);
                    } else {
                        currAnchor = document.createElement("A");
                        currAnchor.setAttribute("href", "#");
                        addEvent(currAnchor,'click',calendar.dateSelected);
                        //currAnchor.setAttribute("onclick", "calendar.dateSelected(" + dayTally + ")");
                        currText = document.createTextNode(dayTally);
                        currAnchor.appendChild(currText);
                    }
                }
                currCell.appendChild(currAnchor);
                currRow.appendChild(currCell);
            }
            tbody.appendChild(currRow);
        }
        table.appendChild(tbody);
    };
    me.show = function() {
        var strDate = displayElement.innerHTML;
		//trim leading ws
        strDate = strDate.replace(/^\s+/, '');
        
        if (strDate == 'Not set')
        {
        
            var today = new Date();
            currentDay = today.getDay();
            currentMonth = today.getMonth();
            currentYear = today.getFullYear();
            }
        else      
        {
            arrDate = strDate.split(' ');
            currentDay = arrDate[0];
            for(var z=0; z<12; z++) {
                if(month_names[z] == arrDate[1]) {
                    currentMonth = z;
                }
            }
            currentYear = arrDate[2];
            
            
        }
        ajaxOpenDialog('/cms/calendar.aspx',48,29,title);
    };
    
    me.date = function() {
        return selectedDay + " " + month_names[currentMonth] + " " + currentYear;
    };
    
    me.quickInit = function(displayElementTitle, valueElementTitle, calendarTitle) {
        me.setDisplayElement(document.getElementById(displayElementTitle));
        me.setValueElement(document.getElementById(valueElementTitle));
        me.setTitle(calendarTitle);
        me.show();
    };
    
    me.dateSelected = function(e) {
		var a;
		var day
		if(e.childNodes)
			a = e;
		else if(this.childNodes)
			a = this;
		else if(e.srcElement.childNodes)
			a = e.srcElement;
		day = a.innerHTML;
        selectedDay = day;
        displayElement.innerHTML=me.date();
        valueElement.value=me.date();
        ajaxCloseDialog();
    };
}

var calendar = new Calendar();
