// JavaScript Document

function generateCal(m, y, div, flag) {
  if (!flag) document.getElementById(div).innerHTML = "<div id='calendar'><span class='title'><a id='monthMoverBack' href='#'>&laquo;</a><span id='month'></span><a id='monthMoverFor' href='#'>&raquo;</a></span><div id='calendarDaysRow'><span class='calendarDay'><b>S</b></span><span class='calendarDay'><b>M</b></span><span class='calendarDay'><b>T</b></span><span class='calendarDay'><b>W</b></span><span class='calendarDay'><b>T</b></span><span class='calendarDay'><b>F</b></span><span class='calendarDay'><b>S</b></span></div><div id='calendarMonth'></div>";
  activeDiv = div;
  if (m == 1) {
    var prevMonth = 12;
	var prevYear = y - 1;
  }
  else {
    var prevMonth = m - 1;
	var prevYear = y;
  }
  if (m == 12) {
    var nextMonth = 1;
	var nextYear = y + 1;
  }
  else {
    var nextMonth = m + 1;
	var nextYear = y;
  }
  
  if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) var feb = 29;
  else var feb = 28;
  var daysInMonth = new Array(31,feb,31,30,31,30,31,31,30,31,30,31);
  var days = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
  var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  var month = new Date();
  month.setYear(y);
  month.setMonth(m-1);
  month.setDate(1);
  
  document.getElementById('monthMoverBack').onclick = function() {
	generateCal(prevMonth,prevYear,div,"true");
	showCal(activeField);
	return false;
  };
  document.getElementById('month').innerHTML = months[m-1] + " " + y;
  document.getElementById('monthMoverFor').onclick = function() {
	generateCal(nextMonth,nextYear,div,"true");
	return false;
  };
  var html = "";
  
  var startDayOfWeek = month.getDay();
  var newM = m-2;
  if (newM == -1) newM = 11;
  var daysInPrevMonth = daysInMonth[newM];
  var counter = 0;
  var tempDate = new Date();
  var tempInt = 0;
  var todayYear = tempDate.getFullYear();
  var todayMonth = tempDate.getMonth() + 1;
  var todayDay = tempDate.getDate();
  var todayInt = mktime(0,0,0,todayMonth,todayDay,todayYear);
  
  for (var i = daysInPrevMonth - startDayOfWeek + 1; i <= daysInPrevMonth; i++) {
	tempInt = mktime(0,0,0,prevMonth,i,prevYear);
    html += "<a class='calendarItem_noMonth' href='#' onclick='calClick(" + tempInt + "); return false;'" + i + "</a>";
	counter++;
  }
  for (var i = 1; i <= daysInMonth[m-1]; i++) {
	tempInt = mktime(0,0,0,m,i,y);
	if (todayInt == tempInt) html += "<a class='calendarItem_curDay' href='#' onclick='calClick(" + tempInt + "); return false;'>" + i + "</a>";
	else html += "<a class='calendarItem' href='#' onclick='calClick(" + tempInt + "); return false;'>" + i + "</a>";
	counter++;
  }
  for(var i = 1; counter < 42; i++) {
	tempInt = mktime(0,0,0,nextMonth,i,nextYear);
	html += "<a class='calendarItem_noMonth' href='#' onclick='calClick(" + tempInt + "); return false;'>" + i + "</a>";
	counter++;
  }
  document.getElementById('calendarMonth').innerHTML = html;
}

function mktime() {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: baris ozdil
    // +      input by: gabriel paderni
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FGFEmperor
    // +      input by: Yannoo
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: jakes
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Marc Palau
    // +   improved by: Brett Zamir (http://brettz9.blogspot.com)
 
    var no=0, i = 0, ma=0, mb=0, d = new Date(), dn = new Date(), argv = arguments, argc = argv.length;
 
    var dateManip = {
        0: function(tt){ return d.setHours(tt); },
        1: function(tt){ return d.setMinutes(tt); },
        2: function(tt){ var set = d.setSeconds(tt); mb = d.getDate() - dn.getDate(); return set;},
        3: function(tt){ var set = d.setMonth(parseInt(tt)-1); ma = d.getFullYear() - dn.getFullYear(); return set;},
        4: function(tt){ return d.setDate(tt+mb);},
        5: function(tt){
            if (tt >= 0 && tt <= 69) {
                tt += 2000;
            }
            else if (tt >= 70 && tt <= 100) {
                tt += 1900;
            }
            return d.setFullYear(tt+ma);
        }
        // 7th argument (for DST) is deprecated
    };
 
    for( i = 0; i < argc; i++ ){
        no = parseInt(argv[i]*1);
        if (isNaN(no)) {
            return false;
        } else {
            // arg is number, let's manipulate date object
            if(!dateManip[i](no)){
                // failed
                return false;
            }
        }
    }
    for (i = argc; i < 6; i++) {
        switch(i) {
            case 0:
                no = dn.getHours();
                break;
            case 1:
                no = dn.getMinutes();
                break;
            case 2:
                no = dn.getSeconds();
                break;
            case 3:
                no = dn.getMonth()+1;
                break;
            case 4:
                no = dn.getDate();
                break;
            case 5:
                no = dn.getFullYear();
                break;
        }
        dateManip[i](no);
    }
 
    return Math.floor(d.getTime()/1000);
}