/***
*   This javascript is only used in home page.
*   Since the calendar div has the constant position in home page, it is no need to calculate the position at runtime,
*   so this file is a compendiary version for calendar.js.
*
*   For more detail please see calendar.js
*/

var weekStartsOnSunday = true;  // true = Start the week on Sunday, false = start the week on Monday
var showWeekNumber = false;  // true = show week number,  false = do not show week number
if(languageCode == null){
    var languageCode = 'EN';
}

var calendar_offsetTop = 0;		// Offset - calendar placement - You probably have to modify this value if you're not using a strict doctype
var calendar_offsetLeft = 0;	// Offset - calendar placement - You probably have to modify this value if you're not using a strict doctype
var calendarDiv = false;

var MSIE = false;
var Opera = false;
if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)MSIE=true;
if(navigator.userAgent.indexOf('Opera')>=0)Opera=true;


switch(languageCode){
	case "EN":	/* English */
		var monthArray = ['January','February','March','April','May','June','July','August','September','October','November','December'];
		var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
		var weekString = 'Week';
		break;
	case "FR":      /* French */
		var monthArray = ['Janvier','Fevrier','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Decembre'];
        var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Lu','Ma','Me','Je','Ve','Sa','Di'];
		var weekString = 'Week';
		break;
	case "IT":     /* Italian */
		var monthArray = ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'];
		var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Lu','Mar','Mer','Gi','Ve','Sa','Do'];
		var weekString = 'Week';
		break;
	case "SW":     /* Swedish */
		var monthArray = ['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'];
        var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Ma','Ti','On','To','Fr','Lo','So'];
		var weekString = 'Week';
		break;
	case "SP":     /* Spanish */
		var monthArray = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];
		var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['L','M','M','J','V','S','D'];
		var weekString = 'Week';
		break;
	case "DE":     /* German */
		var monthArray = ['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];
        var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Mo','Di','Mi','Do','Fr','Sa','So'];
		var weekString = 'Week';
		break;
	case "PR":     /* Portuguese */
		var monthArray = ['Janeiro','Fevereiro','Marco','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'];
		var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Se','Te','Qua','Qui','Se','Sa','Do'];
		var weekString = 'Week';
		break;
	case "NL":     /* Dutch */
		var monthArray = ['Januari ','Februari','Maart','April','Mei','Juni','Juli','Augustus','September','Oktober','November','December'];
        var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Ma','Di','Wo','Do','Vr','Za','Zo'];
		var weekString = 'Week';
		break;
	default:
		var monthArray = ['January','February','March','April','May','June','July','August','September','October','November','December'];
		var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
		var dayArray = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];
		var weekString = 'Week';
		break;
}

if (weekStartsOnSunday) {
   var tempDayName = dayArray[6];
   for(var theIx = 6; theIx > 0; theIx--) {
      dayArray[theIx] = dayArray[theIx-1];
   }
   dayArray[0] = tempDayName;
}



var daysInMonthArray = [31,28,31,30,31,30,31,31,30,31,30,31];
var currentMonth;
var currentYear;
var calendarContentDiv;
var returnDateTo;
var returnFormat;

var realDate = new Date();
var realYear = realDate.getFullYear();
var realMonth = realDate.getMonth() + 1;
var realDay = realDate.getDate();

if(minYear==null) {
    var minYear = realYear - 3;
}
if(maxYear==null) {
    var maxYear = realYear + 3;
}

var returnDateToYear;
var returnDateToMonth;
var returnDateToDay;

var inputYear;
var inputMonth;
var inputDay;

var selectBoxRolloverBgColor = '#E2EBED'; // Background color on drop down lists(rollover)


function isLeapYear(inputYear)
{
	if(inputYear%400==0||(inputYear%4==0&&inputYear%100!=0)) return true;
	return false;

}


function arrowClicked() {
	if(this.id == "leftArrow"){
		currentMonth=currentMonth-1;;
		if(currentMonth<0){
			currentMonth=11;
			currentYear=currentYear-1;
			if(currentYear < minYear) {
                minYear = currentYear;
                addYearToYearDropList("top", currentYear);
               	writeCalendarContent();
               	return;
			}
		}
	}else{
		currentMonth=currentMonth+1;;
		if(currentMonth>11){
			currentMonth=0;
			currentYear=currentYear/1+1;
			if(currentYear > maxYear) {
                maxYear = currentYear;
                addYearToYearDropList("bottom", currentYear);
                writeCalendarContent(true);
                return;
			}
		}
	}

	writeCalendarContent();
}


function addYearToYearDropList(position, addedYear){
    var yearDropDownList = document.getElementById("selectdate-year");
    var newOption = document.createElement('OPTION');
    newOption.value = addedYear;
    newOption.innerHTML = addedYear;
    newOption.selected = true;

    if(position == "top") {
        yearDropDownList.insertBefore(newOption, yearDropDownList.firstChild);
    }
    else {
        yearDropDownList.appendChild(newOption);
    }
}

function dropDownListChanged() {
    if(this.id == "selectdate-month") {
        currentMonth = this.value;
    }
    else {
        currentYear = this.value;
    }

	writeCalendarContent();
}


function closeCalendar(){
	calendarDiv.style.display='none';
}


function writeTopBar() {

	var topBar = document.createElement('TABLE');
	topBar.className = 'selectdate';
	var row = topBar.insertRow(-1);
	calendarDiv.appendChild(topBar);
	
	// Create month drop down list
	var monthDropDownList = document.createElement('SELECT');
	monthDropDownList.id = "selectdate-month";
	for(var i=0; i<monthArray.length; i++) {
        var option = document.createElement('OPTION');
        option.value = i;
        option.innerHTML = monthArray[i];
        monthDropDownList.appendChild(option);
        if(i == (realMonth-1)){
            option.selected = true;
        }
	}
	monthDropDownList.onchange = dropDownListChanged;
	var cell = row.insertCell(-1);
	cell.appendChild(monthDropDownList);

    // Create year drop down list
    var yearDropDownList = document.createElement('SELECT');
    yearDropDownList.id = 'selectdate-year';
    for(var i=minYear; i<=maxYear; i++) {
        var option = document.createElement('OPTION');
        option.value = i;
        option.innerHTML = i;
        yearDropDownList.appendChild(option);
        if(i == realYear){
            option.selected = true;
        }
    }
    yearDropDownList.onchange = dropDownListChanged;
    var blankSpan = document.createElement('SPAN');
    blankSpan.innerHTML = "&nbsp";
    cell.appendChild(blankSpan);
	cell.appendChild(yearDropDownList);

    // Create close button
    var closeButton = document.createElement('SPAN');
    closeButton.id = "closeButton";
    closeButton.innerHTML = "X";
    closeButton.onclick = function(){
       closeCalendar();
    }
    cell = row.insertCell(-1);
    cell.appendChild(closeButton);


    // Create the control panel(including arrows and date label)
    var controlPanel = document.createElement('P');
	controlPanel.className = 'currentdate';
    calendarDiv.appendChild(controlPanel);

    var leftArrow = document.createElement('A');
    leftArrow.id = "leftArrow"
    leftArrow.href = "javascript:void(0)";
    leftArrow.className = "currentdate-previous";
    leftArrow.innerHTML = "&lt;";
    leftArrow.onclick = arrowClicked;

    var dateLabel = document.createElement('SPAN');
    dateLabel.id = 'dateLabel';
    dateLabel.innerHTML = monthArray[realMonth-1] + ", " + realYear;

    var rightArrow = document.createElement('A');
    rightArrow.id = "rightArrow"
    rightArrow.href = "javascript:void(0)";
    rightArrow.className = "currentdate-next";
    rightArrow.innerHTML = "&gt;";
    rightArrow.onclick = arrowClicked;

    controlPanel.appendChild(leftArrow);
    controlPanel.appendChild(dateLabel);
    controlPanel.appendChild(rightArrow);
}


function writeCalendarContent(isYearSelected)
{
	var calendarContentDivExists = true;
	if(!calendarContentDiv){
		calendarContentDiv = document.createElement('DIV');
		calendarDiv.appendChild(calendarContentDiv);
		calendarContentDivExists = false;
	}
	currentMonth = currentMonth/1;
	var d = new Date();

	d.setFullYear(currentYear);
	d.setDate(1);
	d.setMonth(currentMonth);

	var dayStartOfMonth = d.getDay();
	if (! weekStartsOnSunday) {
      if(dayStartOfMonth==0)dayStartOfMonth=7;
      dayStartOfMonth--;
   }

    if(!isYearSelected){
	    var selectYearOptions = document.getElementById('selectdate-year').options;
    	for(var i=0; i<selectYearOptions.length; i++) {
            if(selectYearOptions[i].value == currentYear) {
                selectYearOptions[i].selected = true;
                break;
            }
    	}
	}
	document.getElementById('selectdate-month').options[currentMonth].selected = true;

    document.getElementById('dateLabel').innerHTML = monthArray[currentMonth] + ", " + currentYear;

	var existingTable = calendarContentDiv.getElementsByTagName('TABLE');
	if(existingTable.length>0){
		calendarContentDiv.removeChild(existingTable[0]);
	}

	var calTable = document.createElement('TABLE');
	calTable.width = '100%';
	calTable.cellSpacing = '0';
	calTable.className = "calendartable";
	calendarContentDiv.appendChild(calTable);

	var calTBody = document.createElement('TBODY');
	calTable.appendChild(calTBody);

	var row = calTBody.insertRow(-1);
	row.className = 'calendar_week_row';
   if (showWeekNumber) {
      var cell = row.insertCell(-1);
	   cell.innerHTML = weekString;
	   cell.className = 'calendar_week_column';
	   cell.style.backgroundColor = selectBoxRolloverBgColor;
	}

    // dayArray -> (Mon,Tue,Wed....)
	for(var no=0;no<dayArray.length;no++){
        var th = document.createElement('TH');
        th.innerHTML = dayArray[no];
        row.appendChild(th);
	}

	var row = calTBody.insertRow(-1);

   if (showWeekNumber) {
	   var cell = row.insertCell(-1);
	   cell.className = 'calendar_week_column';
	   cell.style.backgroundColor = selectBoxRolloverBgColor;
	   var week = getWeek(currentYear,currentMonth,1);
	   cell.innerHTML = week;		// Week
	}
	
	/**
	*
	*  Generate leading blank pane here
	*
	*/
	for(var no=0;no<dayStartOfMonth;no++){
		var cell = row.insertCell(-1);
		cell.className = "calendar-disabled";
		cell.innerHTML = '&nbsp;';
	}

	var colCounter = dayStartOfMonth;

	var daysInMonth = daysInMonthArray[currentMonth];
	if(daysInMonth==28){
		if(isLeapYear(currentYear))daysInMonth=29;
	}

    /**
    *
    *  Generate day here    
    *
    **/
	for(var no=1;no<=daysInMonth;no++){
		//d.setDate(no-1);
		if(colCounter>0 && colCounter%7==0){
			var row = calTBody.insertRow(-1);
            if (showWeekNumber) {
                var cell = row.insertCell(-1);
                cell.className = 'calendar_week_column';
                var week = getWeek(currentYear,currentMonth,no);
                cell.innerHTML = week;		// Week
                cell.style.backgroundColor = selectBoxRolloverBgColor;
            }
		}

		var cell = row.insertCell(-1);
		if(
            currentYear<realYear
            || 
            (currentYear==realYear && (currentMonth+1)<realMonth)
            ||
            (currentYear==realYear && (currentMonth+1)==realMonth && no < realDay)
          )
        {
           cell.className='calendar-disabled';
		}
		if(currentYear==inputYear && currentMonth == inputMonth && no==inputDay){
			cell.className='calendar-current';
		}
		var span = document.createElement('SPAN');
		span.style.cursor = "pointer";
		span.innerHTML = no;
		cell.appendChild(span);
		span.onclick = pickDate;
		colCounter++;
	}

	/**
	*
	*  Generate ending blank pane here
	*
	*/
	var paneCount;
	if(colCounter <=28) {
	   paneCount = 7 - (colCounter - 3*7)
	}
	else if(colCounter <= 35) {
	   paneCount = 7 - (colCounter - 4*7)
	}
	else {
	   paneCount = 7 - (colCounter - 5*7)
	}
	for(var n=0; n<paneCount; n++) {
	   var cell = row.insertCell(-1);
	   cell.innerHTML = "&nbsp;"
	}

}


function pickDate(e,inputDay)
{
	var month = currentMonth/1 +1;
	if(month<10)month = '0' + month;
	var day;
	if(!inputDay && this)day = this.innerHTML; else day = inputDay;

	if(day/1<10)day = '0' + day;
	if(returnFormat){
		returnFormat = returnFormat.replace('dd',day);
		returnFormat = returnFormat.replace('mm',month);
		returnFormat = returnFormat.replace('yyyy',currentYear);
		returnFormat = returnFormat.replace('d',day/1);
		returnFormat = returnFormat.replace('m',month/1);

		returnDateTo.value = returnFormat;
		try{
			returnDateTo.onchange();
		}catch(e){

		}
	}else{
		for(var no=0;no<returnDateToYear.options.length;no++){
			if(returnDateToYear.options[no].value==currentYear){
				returnDateToYear.selectedIndex=no;
				break;
			}
		}
		for(var no=0;no<returnDateToMonth.options.length;no++){
			if(returnDateToMonth.options[no].value==parseInt(month)){
				returnDateToMonth.selectedIndex=no;
				break;
			}
		}
		for(var no=0;no<returnDateToDay.options.length;no++){
			if(returnDateToDay.options[no].value==parseInt(day)){
				returnDateToDay.selectedIndex=no;
				break;
			}
		}
	}
	closeCalendar();

}


function getWeek(year,month,day){
   if (! weekStartsOnSunday) {
	   day = (day/1);
	} else {
	   day = (day/1)+1;
	}
	year = year /1;
    month = month/1 + 1; //use 1-12
    var a = Math.floor((14-(month))/12);
    var y = year+4800-a;
    var m = (month)+(12*a)-3;
    var jd = day + Math.floor(((153*m)+2)/5) +
                 (365*y) + Math.floor(y/4) - Math.floor(y/100) +
                 Math.floor(y/400) - 32045;      // (gregorian calendar)
    var d4 = (jd+31741-(jd%7))%146097%36524%1461;
    var L = Math.floor(d4/1460);
    var d1 = ((d4-L)%365)+L;
    NumberOfWeek = Math.floor(d1/7) + 1;
    return NumberOfWeek;
}


function initCalendar()
{
    calendarDiv = document.getElementById("calendar");

	writeTopBar();

	if(!currentYear){
		var d = new Date();
		currentMonth = d.getMonth();
		currentYear = d.getFullYear();
	}

	writeCalendarContent();
}



function checkInputDateValid(date){
    if(date.split("/").length != 3) {
        return "error";
    }

    var day = date.split("/")[0];
    var month = date.split("/")[1];
    var year = date.split("/")[2];

    if(day.length > 2 || month.length > 2 || year.length != 4) {
    	return "error";
    }

	if(isNaN(parseInt(day)) || isNaN(parseInt(month)) || isNaN(parseInt(year))) {
		return "error";
	}

    if(month > 12) {
        return "error";
    }

    if(parseInt(month) == 2 && isLeapYear(year) && day > 29){
        return "error";
    }
    if(day > daysInMonthArray[month-1]) {
        if(!(parseInt(month) == 2 && isLeapYear(year) && day == 29)) {
            return "error";
        }
    }

    if(day.length == 1) {
        day = "0" + day;
    }
    if(month.length == 1) {
        month = "0" + month;
    }

	return day + "/" + month + "/" + year;
}


function displayCalendar(inputField,format,buttonObj) {
    var checkedDate = checkInputDateValid(inputField.value);
	if(checkedDate!="error"){
        var positionArray = new Object();
        positionArray.m = format.indexOf('mm');
        if(positionArray.m==-1)positionArray.m = format.indexOf('m');
        positionArray.d = format.indexOf('dd');
        if(positionArray.d==-1)positionArray.d = format.indexOf('d');
        positionArray.y = format.indexOf('yyyy');
        
        var elements = ['y','m','d'];
        var properties = ['currentYear','currentMonth','inputDay'];
        var propertyLength = [4,2,2];
        for(var i=0;i<elements.length;i++) {
        	if(positionArray[elements[i]]>=0) {
        	    if(properties[i] == "currentMonth"){
                    window[properties[i]] = checkedDate.substr(positionArray[elements[i]],propertyLength[i])/1 - 1;
        	    }
        	    else {
        			window[properties[i]] = checkedDate.substr(positionArray[elements[i]],propertyLength[i])/1;
        	    }
        	}					
        }
	}
	else{
		var d = new Date();
		currentMonth = d.getMonth();
		currentYear = d.getFullYear();
		inputDay = d.getDate()/1;
	}

	inputYear = currentYear;
	inputMonth = currentMonth;

	if(!calendarDiv){
		initCalendar();
	}else{
		if(calendarDiv.style.display=='block'){
			closeCalendar();
			return false;
		}
		writeCalendarContent();
	}

	returnFormat = format;
	returnDateTo = inputField;

	calendarDiv.style.visibility = 'visible';
	calendarDiv.style.display = 'block';
}
