function Calendar(idDiv,fid) {
    this.respCalendar = function(resp) {
        document.getElementById(this.idDiv).innerHTML = resp;
    }

    this.respCalPicker = function(resp) {
        var div = document.getElementById(this.idDiv + "picker");
        if (!div) return;
        div.innerHTML = resp;

        for (var i = 0; i <= 9; i++) {
            document.getElementById("Y" + i).innerHTML = year + i - 4;
        }

        this.yearcell = document.getElementById("Y4");
        this.yearcell.className = "selected";
        document.getElementById("M" + this.month).className = "selected";

        var instance = this;
        div.onclick = function(ev) { instance.calSelect(ev); };

        div.style.display = "";
    }

    this.showCalPicker = function(evt, curdate, cont) {
        this.year = parseInt(curdate.substr(0, 4));
        this.month = curdate.substr(4, 2);

        var div = document.getElementById(this.idDiv + "picker");
        if (!div) {
            div = document.createElement("div");
            cont.appendChild(div);
            div.id = this.idDiv + "picker";
            div.style.display = "none";
            div.style.position = "absolute";
        }

        var e = evt || window.event;
        div.style.left = (e.x || e.layerX) + "px";
        div.style.top = (e.y || e.layerY) + "px";

        var instance = this;
        ajg(function(resp) { instance.respCalPicker(resp); }, "/forumx/calendar.aspx?dp=1&fid=" + this.fid)
    }

    this.closeCalPicker = function() {
        var div = document.getElementById(this.idDiv+"picker");
        if (!div) return;
        div.style.display = "none";
    }

    this.selectCalPicker = function() {
        this.closeCalPicker();
        showWaitImage(this.idDiv, document.getElementById(this.idDiv).childNodes[0]);

        var instance = this;
        ajg(function(resp) { instance.respCalendar(resp); }, "/forumx/calendar.aspx?fid=" + this.fid + "&date=" + this.year + this.month);
    }

    this.calSelect = function(ev) {
        var e = ev || window.event;
        var cell = e.target || e.srcElement;
        if (cell.id.substr(0, 1) == "Y") {
            this.yearcell.className = "";
            this.yearcell = cell;
            this.year = cell.innerHTML;
            cell.className = "selected";
        }
        else if (cell.id.substr(0, 1) == "M") {
            document.getElementById("M" + this.month).className = "";
            this.month = cell.id.substr(1, 2);
            cell.className = "selected";
        }

        e.cancelBubble = true;
        if(e.stopPropagation) e.stopPropagation();
    }

    this.calYears = function(delta) {
        this.yearcell.className = "";
        var fy = parseInt(document.getElementById("Y0").innerHTML);
        for (var i = 0; i <= 9; i++) {
            var cell = document.getElementById("Y" + i);
            cell.innerHTML = fy + i + delta;
            if (this.year == (fy + i + delta)) cell.className = "selected";
        }
    }

    this.calToday = function() {
        document.getElementById("M" + this.month).className = "";
        this.yearcell.className = "";

        var today = new Date();
        this.year = today.getFullYear();
        this.month = today.getMonth() + 1;

        this.yearcell = document.getElementById("Y4");
        this.yearcell.className = "selected";
        document.getElementById("M" + this.month).className = "selected";

        for (var i = 0; i <= 9; i++) {
            document.getElementById("Y" + i).innerHTML = this.year + i - 4;
        }
    }

    this.onmousedown = function(ev) {
        ev = ev || window.event;
        var target = ev.target || ev.srcElement;
        var move = target.getAttribute("move");
        if (!move) return;
        showWaitImage(this.idDiv, document.getElementById(this.idDiv).childNodes[0]);

        var instance = this;
        ajg(function(resp) { instance.respCalendar(resp); }, "/forumx/calendar.aspx?fid=" + this.fid + "&date=" + move);
    }
    
    this.idDiv = idDiv;
    this.fid = fid;

    var div = document.getElementById(this.idDiv);
    if (div == null) return;

    var instance = this;
    div.onmousedown = function(ev) { instance.onmousedown(ev); };
    ajg(function(resp) { instance.respCalendar(resp); }, "/forumx/calendar.aspx?fid=" + this.fid + "&container=" + this.idDiv);

    var exec = "var " + this.idDiv + "=this;";
    if (window.execScript)
        window.execScript(exec);
    else
        if (window.eval) window.eval(exec);
}
