// JavaScript Document

var active = false;
function positionInfo(object){

    var p_elm = object;
	
	var lowestDate ;
	var highestDate ;
    
    this.getElementLeft = getElementLeft;
    function getElementLeft(){
        var x = 0;
        var elm;
        if (typeof(p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        while (elm != null) {
            x += elm.offsetLeft;
            elm = elm.offsetParent;
        }
        return parseInt(x);
    }
    
    this.getElementWidth = getElementWidth;
    function getElementWidth(){
        var elm;
        if (typeof(p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        return parseInt(elm.offsetWidth);
    }
    
    this.getElementRight = getElementRight;
    function getElementRight(){
        return getElementLeft(p_elm) + getElementWidth(p_elm);
    }
    
    this.getElementTop = getElementTop;
    function getElementTop(){
        var y = 0;
        var elm;
        if (typeof(p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        while (elm != null) {
            y += elm.offsetTop;
            elm = elm.offsetParent;
        }
        return parseInt(y);
    }
    
    this.getElementHeight = getElementHeight;
    function getElementHeight(){
        var elm;
        if (typeof(p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        return parseInt(elm.offsetHeight);
    }
    
    this.getElementBottom = getElementBottom;
    function getElementBottom(){
        return getElementTop(p_elm) + getElementHeight(p_elm);
    }
}

	var MONTH_RANGE = 10 ; // I took away the const because it doesn't work defined this way for IE.  I am not sure if MONTH_RANGE should be constant anyway.  - knm (7/6/09)

function CalendarControl(){

    var calendarId = 'CalendarControl';
    var currentYear = 0;
    var currentMonth = 0;
    var currentDay = 0;
    
    var selectedYear = 0;
    var selectedMonth = 0;
    var selectedDay = 0;
	
	var isMore = true ;
	var isless = true ;
	
//	const MONTH_RANGE = 20 ;
    
    var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
    var dateField = null;
    
    function getProperty(p_property){
        var p_elm = calendarId;
        var elm = null;
        
        if (typeof(p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        if (elm != null) {
            if (elm.style) {
                elm = elm.style;
                if (elm[p_property]) {
                    return elm[p_property];
                }
                else {
                    return null;
                }
            }
            else {
                return null;
            }
        }
    }
    
    function setElementProperty(p_property, p_value, p_elmId){
        var p_elm = p_elmId;
        var elm = null;
        
        if (typeof(p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        if ((elm != null) && (elm.style != null)) {
            elm = elm.style;
            elm[p_property] = p_value;
        }
    }
    
    function setProperty(p_property, p_value){
        setElementProperty(p_property, p_value, calendarId);
    }
    
    function getDaysInMonth(year, month){
        return 32 - new Date(year, month-1, 32).getDate();
    }
    
    function getDayOfWeek(year, month, day){
        var date = new Date(year, month - 1, day)
        return date.getDay();
    }
    
    this.clearDate = clearDate;
    function clearDate(){
        dateField.value = '';
        hide();
    }
    
    this.setDate = setDate;
    function setDate(year, month, day){
        if (dateField) {
			if(month == 0){
				month = "12";
			}
            if (month < 10) {
                month = "0" + month;
            }
            if (day < 10) {
                day = "0" + day;
            }
            var dateString = month + "/" + day + "/" + year;
            dateField.value = dateString;
			if (dateField.onchange) {
				dateField.onchange();
			}
            hide();
        }
        return;
    }
    
    
    this.skipMonth = skipMonth;
    function skipMonth(){
        tempMonth = parseInt(document.getElementById("calMo").value);
		
		tempMonth==0 ? isless=false : isless = true ;
		tempMonth==(MONTH_RANGE-1) ? isMore=false : isMore=true ;
	
		var now = new Date();
		now.setDate(1);
		now.setMonth(now.getMonth() + tempMonth);
		
		currentMonth = now.getMonth()+1;
		currentYear = now.getFullYear();
		currentDay = now.getDate();
		
        calendar = document.getElementById(calendarId);
        calendar.innerHTML = calendarDrawTable();
    }
    
    
    this.changeMonth = changeMonth;
    function changeMonth(change){
    
		var date = new Date();
//		date.setDate(currentDay);
		date.setDate(1);
		date.setMonth(currentMonth-1);
		date.setFullYear(currentYear);
		
		
		var now = new Date();
		now.setDate(1);
		
		var limitDateUp = new Date();
		limitDateUp.setDate(1);
		
		limitDateUp.setMonth(limitDateUp.getMonth() + MONTH_RANGE);
		
		//No futher than upper limit
		if (limitDateUp.getFullYear() == date.getFullYear() &&
			limitDateUp.getMonth() == date.getMonth() &&
			change > 0) {
			return;
			//Not before now
		} else if (now.getFullYear() == date.getFullYear() && 
			now.getMonth() == date.getMonth() &&
			change < 0) {
				return ;
		}
		
		date.setMonth(date.getMonth()+change);
		
		if (limitDateUp.getFullYear() == date.getFullYear() &&
			limitDateUp.getMonth() == date.getMonth() ) {
			isMore = false ;
		} else {
			isMore = true ;
		}
		
		if (now.getFullYear() == date.getFullYear() && 
			now.getMonth() == date.getMonth() ) {
			isless = false ;	
		} else {
			isless = true ;
		}	
		
		currentMonth = date.getMonth()+1;
		currentYear = date.getFullYear();
		currentDay = date.getDate();
    
        calendar = document.getElementById(calendarId);
        calendar.innerHTML = calendarDrawTable();
    }
	
	function adjustArroes() {
		
	}
    
    function getCurrentYear(){
    
        if (myDate != null) {
            var dateParts = myDate.split("/");
            selectedYear = parseInt(dateParts[2], 10);
            return selectedYear;
        }
        else {
            var year = new Date().getYear();
            if (year < 1900) 
                year += 1900;
            return year;
        }
    }
    
    function getCurrentMonth(){
        if (myDate != null) {
            var dateParts = myDate.split("/");
            selectedMonth = parseInt(dateParts[0], 10);
            return selectedMonth;
        }
        else {
            return new Date().getMonth() + 1;
        }
    }
    
    function getCurrentDay(){
        if (myDate != null) {
            var dateParts = myDate.split("/");
            selectedDate = parseInt(dateParts[1], 10);
            return selectedDate;
        }
        else {
            return new Date().getDate();
        }
    }
    
    function calendarDrawTable(){
    
        var dayOfMonth = 1;
        var validDay = 0;
        
        if ((currentMonth % 12) == 0) {
            var startDayOfWeek = getDayOfWeek(currentYear, 12, dayOfMonth);
            var daysInMonth = getDaysInMonth(currentYear, 12);
        }
        else {
            var startDayOfWeek = getDayOfWeek(currentYear, (currentMonth % 12), dayOfMonth);
            var daysInMonth = getDaysInMonth(currentYear, (currentMonth % 12));
        }
        var css_class = null; //CSS class for each day
        var mySelectedYear = getCurrentYear();
        var mySelectedMonth = getCurrentMonth();
        
        var table = "<table cellspacing='0' cellpadding='0' border='0'>";
        table = table + "<tr class='header'>";
        if (!((currentMonth == (new Date().getMonth() + 1)) && (currentYear == (new Date().getYear() + 1)))) {
			var vis = " style='visibility:hidden' ";
			if (isless) {
				vis = "";
			}
            table = table + "  <td id='previous' "+vis+" class='previous'><a href='javascript:changeCalendarControlMonth(-1);'><img src=\"/shared_code/images/buttons/Calender_Left_Arrow.jpg\" /></a> </td>";
        }
        else {
            table = table + "<td></td>";
        }
        table = table + "  <td colspan='5' class='title'><select onchange='skipCalendarControlMonth();' name='mo' id='calMo' class='formSelect' style='font-weight:bold'>";
		
		for(var i=0 ; i <= MONTH_RANGE ; i++) {
			var now = new Date();
			now.setDate(1);
			now.setMonth(now.getMonth() + i);
			 table = table + "<option value='" + i + "' ";
			 if (now.getMonth()+1 == currentMonth && now.getFullYear() == currentYear) {
			 	table = table + " selected ";
			 }
			 table += ">" + months[now.getMonth()] + "&nbsp;" + now.getFullYear() + "</option>";
		}

        table = table + "</select></td>";
       
        if (!(currentMonth == ((new Date().getMonth() + 1) + MONTH_RANGE - 1))) {
			var vis = " style='visibility:hidden' ";
			if (isMore) {
				vis = "";
			}
            table = table + "<td id='next' "+vis+" class='next'><a href='javascript:changeCalendarControlMonth(1);'><img src=\"/shared_code/images/buttons/Calender_Right_Arrow.jpg\" /></a></td>";
        }
        else {
            table = table + "<td></td>";
        }
        table = table + "</tr>";
        table = table + "<tr><th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>";
        //var now = new Date();
        for (var week = 0; week < 6; week++) {
            table = table + "<tr>";
            for (var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
                if (week == 0 && startDayOfWeek == dayOfWeek) {
                    validDay = 1;
                }
                else 
                    if (validDay == 1 && dayOfMonth > daysInMonth) {
                        validDay = 0;
                    }
                
                if (validDay) {
                    if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
                        css_class = 'current';
                    }
                    else 
                        if (dayOfWeek == 0 || dayOfWeek == 6) {
                            css_class = 'weekend';
                        }
                        else {
                            css_class = 'weekday';
                        }
                    
                    displayMonth = currentMonth % 12;
					var date = new Date(currentYear,currentMonth-1,dayOfMonth);
					if (date < lowestDate || date > highestDate) {
						table = table + "<th><a class='" + css_class + " , inactive'>"+ dayOfMonth + "</th>";
					} else {
						table = table + "<th><a class='" + css_class + "' href=\"javascript:setCalendarControlDate(" + currentYear + "," + displayMonth + "," + dayOfMonth + ")\">" + dayOfMonth + "</a></th>";
					}
					
                    dayOfMonth++;
                }
                else {
                    table = table + "<th class='empty'>&nbsp;</th>";
                }
            }
            table = table + "</tr>";
        }
        
        table = table + "<tr class='header'><th colspan='7' style='padding: 3px;'> <a href='javascript:hideCalendarControl();'><strong>Close</strong></a></td></tr>";
        table = table + "</table>";
        active = true;
        return table;
    }
    
    this.show = show;
    function show(field){
        can_hide = 0;
        
        // If the calendar is visible and associated with
        // this field do not do anything.
        if (dateField == field) {
            return;
        }
        else {
            dateField = field;
        }
   
        selectedMonth = getCurrentMonth();
        selectedDay = getCurrentDay();
        selectedYear = getCurrentYear();
        
        currentMonth = selectedMonth;
        currentDay = selectedDay;
        currentYear = selectedYear;
        
        if (document.getElementById) {
        
            calendar = document.getElementById(calendarId);
            //      calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);
            calendar.innerHTML = calendarDrawTable();
            
            setProperty('display', 'block');
            
            var fieldPos = new positionInfo(dateField);
            var calendarPos = new positionInfo(calendarId);
            
            var x = fieldPos.getElementLeft();
            var y = fieldPos.getElementBottom();
            
            setProperty('left', x + "px");
            setProperty('top', y + "px");
            
            if (document.all) {
                setElementProperty('display', 'block', 'CalendarControlIFrame');
                setElementProperty('left', x + "px", 'CalendarControlIFrame');
                setElementProperty('top', y + "px", 'CalendarControlIFrame');
                setElementProperty('width', calendarPos.getElementWidth() + "px", 'CalendarControlIFrame');
                setElementProperty('height', calendarPos.getElementHeight() + "px", 'CalendarControlIFrame');
            }
        }
    }
    
    this.hide = hide;
    function hide(){
        if (dateField) {
            setProperty('display', 'none');
            setElementProperty('display', 'none', 'CalendarControlIFrame');
            dateField = null;
        }
    }
    
    this.visible = visible;
    function visible(){
        return dateField
    }
    
    this.can_hide = can_hide;
    var can_hide = 0;
}

var calendarControl = new CalendarControl();
var numMonths = 10;
var myDate;
function showCalendarControl(textField, noMonths , lowlimit , highlimit){
    //    textField.onblur = hideCalendarControl;
//    numMonths = noMonths;
	MONTH_RANGE = noMonths;
	
	lowestDate = lowlimit ;
	highestDate = highlimit;

    //	alert ("sdate: " + document.getElementById[textField].value);
	if (document.getElementById(textField.id).value.length > 0)
    	myDate = new String(document.getElementById(textField.id).value);
	else 
		myDate = null ;
    //	if(selectedDate != null){
    //		myDate = new String(selectedDate);
    //	}
    calendarControl.show(textField);
}

function clearCalendarControl(){
    calendarControl.clearDate();
}

function hideCalendarControl(){
    if (calendarControl.visible()) {
        calendarControl.hide();
    }
}

function setCalendarControlDate(year, month, day){
    calendarControl.setDate(year, month, day);
}

/*
 function changeCalendarControlYear(change) {
 calendarControl.changeYear(change);
 }
 */
function skipCalendarControlMonth(change){
    //	alert("skipping change: " + change);
//	debugger ;
    calendarControl.skipMonth(change);
}

function changeCalendarControlMonth(change){
    calendarControl.changeMonth(change);
}

document.write("<iframe id='CalendarControlIFrame' src='javascript:false;' frameBorder='4' scrolling='no'></iframe>");
document.write("<div id='CalendarControl'></div>");
