/* PopUp Calendar v2.1
 © PCI, Inc.,2000 , Freeware
 webmaster@personal-connections.com
 +1 (925) 955 1624
 Permission granted  for unlimited use so far
 as the copyright notice above remains intact. */
/* Settings. Please read readme.html file for instructions*/


// Ugly hack to fix non-IE browser compatibility issues
// ANYTHING relying on document.all after this file is loaded may get false information
ppcIE = document.all;
if (!document.all) document.all = true;
//---------------//


var ppcDF = "m/d/Y";
var ppcMN = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var ppcWN = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var ppcER = new Array(4);
ppcER[0] = "Required DHTML functions are not supported in this browser.";
ppcER[1] = "Target form field is not assigned or not accessible.";
ppcER[2] = "Sorry, the chosen date is not acceptable. Please read instructions on the page.";
ppcER[3] = "Unknown error occured while executing this script.";
var ppcUC = false;
var ppcUX = 4;
var ppcUY = 4;

/* Do not edit below this line unless you are sure what are you doing! */

var ppcTT = "<table width=\"150\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\" bordercolor=\"#000000\" style=\"border-collapse:collapse;\" ><tr><td><table width=\"150\" cellspacing=\"0\" cellpadding=\"2\" border=\"0\" bordercolor=\"#000000\" >\n";
var ppcCD = ppcTT;
var ppcFT = "<font face=\"MS Sans Serif, sans-serif\" size=\"1\" color=\"#000000\">";
var ppcFC = true;
var ppcTI = false;
var ppcSV = null;
var ppcRL = null;
var ppcXC = null;
var ppcYC = null;
var ppcML = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var ppcWE = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var ppcNow = new Date();
var ppcPtr = new Date();

function getCalendarFor(target, rules){
    ppcSV = target;
    ppcRL = rules;
    if (ppcFC) {
        setCalendar();
        ppcFC = false;
    }
    if ((ppcSV != null) && (ppcSV)) {
        var obj = document.getElementById('PopUpCalendar');
        pos = findPos(target);
        dims = findSize(target);
        obj.style.left = pos[0] + dims[0] + 5;
        obj.style.top = pos[1];
        // obj.style.left = document.body.scrollLeft+event.clientX;
        //obj.style.top  = document.body.scrollTop+event.clientY;
        obj.style.visibility = "visible";
    }
    else {
        showError(ppcER[1]);
    }
}

function switchMonth(param){
    var tmp = param.split("|");
    setCalendar(tmp[0], tmp[1]);
}

function moveMonth(dir){
    var obj = null;
    var limit = false;
    var tmp, dptrYear, dptrMonth;

   obj = document.ppcMonthList.sItem;

    if (obj != null) {
        if ((dir.toLowerCase() == "back") && (obj.selectedIndex > 0)) {
            obj.selectedIndex--;
        }
        else
            if ((dir.toLowerCase() == "forward") && (obj.selectedIndex < 12)) {
                obj.selectedIndex++;
            }
            else {
                limit = true;
            }
    }
    if (!limit) {
        tmp = obj.options[obj.selectedIndex].value.split("|");
        dptrYear = tmp[0];
        dptrMonth = tmp[1];
        setCalendar(dptrYear, dptrMonth);
    }
    else {
		obj.style.backgroundColor = "#FF9999";
		window.setTimeout("document.ppcMonthList.sItem.style.backgroundColor = '#FFFFFF'", 50);
    }
}

function selectDate(param){
    var arr = param.split("|");
    var year = arr[0];
    var month = arr[1];
    var date = arr[2];
    var ptr = parseInt(date);
    ppcPtr.setDate(ptr);
    if ((ppcSV != null) && (ppcSV)) {
        if (validDate(date)) {
            ppcSV.value = dateFormat(year, month, date);
            hideCalendar();
        }
        else {
            showError(ppcER[2]);
            if (ppcTI) {
                clearTimeout(ppcTI);
                ppcTI = false;
            }
        }
    }
    else {
        showError(ppcER[1]);
        hideCalendar();
    }
}

function setCalendar(year, month){
    if (year == null) {
        year = getFullYear(ppcNow);
    }
    if (month == null) {
        month = ppcNow.getMonth();
        setSelectList(year, month);
    }
    if (month == 1) {
        ppcML[1] = (isLeap(year)) ? 29 : 28;
    }
    ppcPtr.setYear(year);
    ppcPtr.setMonth(month);
    ppcPtr.setDate(1);
    updateContent();
}

function updateContent(){
    generateContent();
    document.getElementById('monthDays').innerHTML = ppcCD;
    ppcCD = ppcTT;
}

function generateContent(){
    var year = getFullYear(ppcPtr);
    var month = ppcPtr.getMonth();
    var date = 1;
    var day = ppcPtr.getDay();
    var len = ppcML[month];
    var bgr, cnt, tmp = "";
    var j, i = 0;
    for (j = 0; j < 7; ++j) {
        if (date > len) {
            break;
        }
        for (i = 0; i < 7; ++i) {
            bgr = ((i == 0) || (i == 6)) ? "#FFFFCC" : "#FFFFFF";
            if (((j == 0) && (i < day)) || (date > len)) {
                tmp += makeCell(bgr, year, month, 0);
            }
            else {
                tmp += makeCell(bgr, year, month, date);
                ++date;
            }
        }
        ppcCD += "<tr align=\"center\">\n" + tmp + "</tr>\n";
        tmp = "";
    }
    ppcCD += "</table></td></tr></table>\n";
}

function makeCell(bgr, year, month, date){
    var param = "\'" + year + "|" + month + "|" + date + "\'";
    var td1 = "<td width=\"20\" bgcolor=\"" + bgr + "\" ";
    var td2 = "</font></span></td>\n";
    var evt = "onMouseOver=\"this.style.backgroundColor=\'#FF9999\'\" onMouseOut=\"this.style.backgroundColor=\'" + bgr + "\'\" onMouseUp=\"selectDate(" + param + ")\" ";
    var ext = "<span Style=\"cursor: hand\">";
    var lck = "<span Style=\"cursor: default\">";
    var lnk = "<a href=\"javascript:selectDate(" + param + ")\" onMouseOver=\"window.status=\' \';return true;\">";
    var cellValue = (date != 0) ? date + "" : "&nbsp;";
    if ((ppcNow.getDate() == date) && (ppcNow.getMonth() == month) && (getFullYear(ppcNow) == year)) {
        cellValue = "<b>" + cellValue + "</b>";
    }
    var cellCode = "";
    if (date == 0) {
        cellCode = td1 + "Style=\"cursor: default\">" + lck + ppcFT + cellValue + td2;
    }
    else {
        cellCode = td1 + evt + "Style=\"cursor: hand\">" + ext + ppcFT + cellValue + td2;
    }
    return cellCode;
}

function setSelectList(year, month){
    var i = 0;
    var obj = null;
    obj = document.ppcMonthList.sItem;

    while (i < 13) {
        obj.options[i].value = year + "|" + month;
        obj.options[i].text = year + " : " + ppcMN[month];
        i++;
        month++;
        if (month == 12) {
            year++;
            month = 0;
        }
    }
}

function hideCalendar(){
	document.getElementById('PopUpCalendar').style.visibility = "hidden";
    ppcTI = false;
    setCalendar();
    ppcSV = null;
    var obj = document.ppcMonthList.sItem;
    obj.selectedIndex = 0;
}

function showError(message){
    window.alert("[ PopUp Calendar ]\n\n" + message);
}

function isLeap(year){
    if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) {
        return true;
    }
    else {
        return false;
    }
}

function getFullYear(obj){
    return obj.getFullYear();
}

function validDate(date){
    var reply = true;
    if (ppcRL == null) {/* NOP */
    }
    else {
        var arr = ppcRL.split(":");
        var mode = arr[0];
        var arg = arr[1];
        var key = arr[2].charAt(0).toLowerCase();
        if (key != "d") {
            var day = ppcPtr.getDay();
            var orn = isEvenOrOdd(date);
            reply = (mode == "[^]") ? !((day == arg) && ((orn == key) || (key == "a"))) : ((day == arg) && ((orn == key) || (key == "a")));
        }
        else {
            reply = (mode == "[^]") ? (date != arg) : (date == arg);
        }
    }
    return reply;
}

function isEvenOrOdd(date){
    if (date - 21 > 0) {
        return "e";
    }
    else
        if (date - 14 > 0) {
            return "o";
        }
        else
            if (date - 7 > 0) {
                return "e";
            }
            else {
                return "o";
            }
}

function dateFormat(year, month, date){
    if (ppcDF == null) {
        ppcDF = "m/d/Y";
    }
    var day = ppcPtr.getDay();
    var crt = "";
    var str = "";
    var chars = ppcDF.length;
    for (var i = 0; i < chars; ++i) {
        crt = ppcDF.charAt(i);
        switch (crt) {
            case "M":
                str += ppcMN[month];
                break;
            case "m":
                str += (month < 9) ? ("0" + (++month)) : ++month;
                break;
            case "Y":
                str += year;
                break;
            case "y":
                str += year.substring(2);
                break;
            case "d":
                str += ((ppcDF.indexOf("m") != -1) && (date < 10)) ? ("0" + date) : date;
                break;
            case "W":
                str += ppcWN[day];
                break;
            default:
                str += crt;
        }
    }
    return unescape(str);
}


function findPos(obj){
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        do {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }
        while (obj = obj.offsetParent);
    }
    return [curleft, curtop];
}


function findSize(obj){
    var curwidth = curheight = 0;
    curwidth = obj.offsetWidth;
    curheight = obj.offsetHeight
    return [curwidth, curheight];
}
