﻿/// <reference path="/Scripts/jquery-1.3.2.min.js"/>

function ThrowdownWizard() {
}

ThrowdownWizard.prototype =
{
    _nameID: null,
    _pageIndex: 0,
    _nameRemainingID: null,
    _tbDaysID: null,
    _tbWeeksID: null,
    _tbMonthsID: null,
    _rbDayID: null,
    _rbWeekID: null,
    _rbMonthID: null,
    _btnNextID: null,
    _btnPrevID: null,
    _btnFinishedID: null,
    _tbStartDateID: null,
    _rbAnyID: null,
    _rbFiveSymbolsID: null,
    _rbSectorID: null,
    _ddlSectorsID: null,
    _tbAddSymID: null,
    _imgAddSymID: null,
    _lblSymOneID: null,
    _lblSymTwoID: null,
    _lblSymThreeID: null,
    _lblSymFourID: null,
    _lblSymFiveID: null,
    _hfSymOneID: null,
    _hfSymTwoID: null,
    _hfSymThreeID: null,
    _hfSymFourID: null,
    _hfSymFiveID: null,
    _tbMembersID: null,
    _tbFriendsID: null,

    nameChanged: function ThrowdownWizard$nameChanged(e) {
        var name = $elt(this._nameID);

        var btnNext = $elt(this._btnNextID);
        if (name.value.length > 0) {
            btnNext.disabled = '';
            btnNext.src = "/Images/contest_wiz_next.gif";
        } else {
            btnNext.disabled = 'disabled';
            btnNext.src = "/Images/contest_wiz_next_disabled.gif";
        }
    },
    dateChanged: function ThrowdownWizard$dateChanged(e) {
        var startDate = $elt(this._tbStartDateID);

        var btnFinished = $elt(this._btnFinishedID);
        if (startDate.value.length > 0) {
            btnFinished.disabled = '';
            btnFinished.src = "/Images/contest_wiz_finish.gif";
        } else {
            btnFinished.disabled = 'disabled';
            btnFinished.src = "/Images/contest_wiz_finish_disabled.gif";
        }
    },
    imposeDigits: function(e) {
        var code = e.keyCode;

        if (code == 0)
            code = e.which || 0;

        return (code >= 48 && code <= 57) || (code == 8) || (code >= 35 && code <= 46);
    },
    imposeMax30: function(e) {
        var value = parseInt(this.value);
        if (value > 30)
            this.value = 30;
    },
    imposeMaxLength: function ThrowdownWizard$imposeMaxLength(e) {
        var name = $elt(this._nameID);
        var remaining = $elt(this._nameRemainingID)

        if (e.keyCode == PWSConstants.KeyCodes.BACKSPACE || e.keyCode == PWSConstants.KeyCodes.DELETE) {
            if (name.value.length == 0)
                remaining.innerHTML = PWSConstants.ThrowdownWizard.MAX_NAME_LENGTH;
            else
                remaining.innerHTML = PWSConstants.ThrowdownWizard.MAX_NAME_LENGTH - (name.value.length - 1);
            return true;
        }

        if (e.keyCode == PWSConstants.KeyCodes.RETURN && name.value.length > 0) {
            this.addComment();
        }

        var result = (name.value.length < (PWSConstants.ThrowdownWizard.MAX_NAME_LENGTH))

        if (result) {
            remaining.innerHTML = PWSConstants.ThrowdownWizard.MAX_NAME_LENGTH - (name.value.length + 1);
        }

        return result;
    },
    _enableElement: function(elt, enable) {
        var elem = $elt(elt);
        if (enable)
            elem.disabled = '';
        else
            elem.disabled = 'disabled';
    },
    _enableAddSymButton: function(enable) {
        this._enableElement(this._imgAddSymID, enable);

        var elem = $elt(this._imgAddSymID);
        if (enable) {
            elem.src = '/Images/contest_wiz_btn_add_sym.gif';
        } else {
            elem.src = '/Images/contest_wiz_btn_add_sym_disabled.gif';
        }
    },
    enableTimeFrameDays: function ThrowdownWizard$enableTimeFrameDays(e) {
        this._enableElement(this._tbDaysID, true);
        this._enableElement(this._tbWeeksID, false);
        this._enableElement(this._tbMonthsID, false);
    },
    enableTimeFrameWeeks: function ThrowdownWizard$enableTimeFrameWeeks(e) {
        this._enableElement(this._tbDaysID, false);
        this._enableElement(this._tbWeeksID, true);
        this._enableElement(this._tbMonthsID, false);
    },
    enableTimeFrameMonths: function ThrowdownWizard$enableTimeFrameMonths(e) {
        this._enableElement(this._tbDaysID, false);
        this._enableElement(this._tbWeeksID, false);
        this._enableElement(this._tbMonthsID, true);
    },
    enableAny: function(e) {
        this._enableElement(this._tbAddSymID, false);
        this._enableAddSymButton(false);
        $('.throwdown_wiz_sym_data').css('color', 'gray');

        this._enableElement(this._ddlSectorsID, false);
    },
    enableFiveSymbols: function(e) {
        if (!this.allSymbolsFilled()) {
            this._enableElement(this._tbAddSymID, true);
            this._enableAddSymButton(true);
            $('.throwdown_wiz_sym_data').css('color', '');
        }

        this._enableElement(this._ddlSectorsID, false);
    },
    enableSector: function(e) {
        this._enableElement(this._tbAddSymID, false);
        this._enableAddSymButton(false);
        $('.throwdown_wiz_sym_data').css('color', 'gray');

        this._enableElement(this._ddlSectorsID, true);
    },
    allSymbolsFilled: function() {
        var lbls = [this._lblSymOneID, this._lblSymTwoID, this._lblSymThreeID, this._lblSymFourID, this._lblSymFiveID];
        for (var i in lbls) {
            var elem = $elt(lbls[i]);
            if (elem.innerHTML == '') {
                return false;
            }
        }

        return true;
    },
    removeSymbol: function(e) {
        var id = e.currentTarget.id;
        var elt;
        var store;

        if (id == 'one') {
            elt = $elt(this._lblSymOneID);
            store = $elt(this._hfSymOneID);
        } else if (id == 'two') {
            elt = $elt(this._lblSymTwoID);
            store = $elt(this._hfSymTwoID);
        } else if (id == 'three') {
            elt = $elt(this._lblSymThreeID);
            store = $elt(this._hfSymThreeID);
        } else if (id == 'four') {
            elt = $elt(this._lblSymFourID);
            store = $elt(this._hfSymFourID);
        } else if (id == 'five') {
            elt = $elt(this._lblSymFiveID);
            store = $elt(this._hfSymFiveID);
        }

        if (elt) {
            elt.innerHTML = '';
            store.value = '';
        }
        return false;
    },
    addSymbol: function() {
        var sym = $elt(this._tbAddSymID);
        var lbls = [this._lblSymOneID, this._lblSymTwoID, this._lblSymThreeID, this._lblSymFourID, this._lblSymFiveID];
        var stores = [this._hfSymOneID, this._hfSymTwoID, this._hfSymThreeID, this._hfSymFourID, this._hfSymFiveID];
        for (var i in lbls) {
            var elem = $elt(lbls[i]);
            if (elem.innerHTML == '') {
                elem.innerHTML = sym.value;
                $elt(stores[i]).value = sym.value;
                sym.value = '';
                sym.focus();
                if (this.allSymbolsFilled()) {
                    this._enableElement(this._tbAddSymID, false);
                    this._enableAddSymButton(false);
                }
                return;
            }
        }
    },
    setupEmptyText: function(elemID) {
        $("#" + elemID).focus(function(srcc) {
            if ($(this).val() == $(this)[0].title) {
                $(this).removeClass("defaultTextActive");
                $(this).val("");
            }
        });
        $("#" + elemID).blur(function() {
            if ($(this).val() == "") {
                $(this).addClass("defaultTextActive");
                $(this).val($(this)[0].title);
            }
        });
        $("#" + elemID).blur();
    },
    getEasternTime: function() {
        var ESTOffset = -4;

        // create Date object for current location
        d = new Date();

        // convert to msec
        // add local time zone offset 
        // get UTC time in msec
        utc = d.getTime() + (d.getTimezoneOffset() * 60000);

        nd = new Date(utc + (3600000 * ESTOffset));

        return nd;
    },
    initialize: function(nameID, nameRemainingID, pageIndex, tbDaysID, tbWeeksID, tbMonthsID,
                        rbDayID, rbWeekID, rbMonthID, btnNextID, btnPrevID, btnFinishedID, tbStartDateID,
                        rbAnyID, rbFiveSymbolsID, rbSectorID, ddlSectorsID, tbAddSymID, imgAddSymID,
                        lblSymOneID, lblSymTwoID, lblSymThreeID, lblSymFourID, lblSymFiveID,
                        hfSymOneID, hfSymTwoID, hfSymThreeID, hfSymFourID, hfSymFiveID,
                        tbMembersID, tbFriendsID) {

        this._nameID = nameID;
        this._nameRemainingID = nameRemainingID;
        this._pageIndex = pageIndex;
        this._tbDaysID = tbDaysID;
        this._tbWeeksID = tbWeeksID;
        this._tbMonthsID = tbMonthsID;
        this._rbDayID = rbDayID;
        this._rbWeekID = rbWeekID;
        this._rbMonthID = rbMonthID;
        this._btnNextID = btnNextID;
        this._btnPrevID = btnPrevID;
        this._btnFinishedID = btnFinishedID;
        this._tbStartDateID = tbStartDateID;

        this._rbAnyID = rbAnyID;
        this._rbFiveSymbolsID = rbFiveSymbolsID;
        this._rbSectorID = rbSectorID;
        this._ddlSectorsID = ddlSectorsID;
        this._tbAddSymID = tbAddSymID;
        this._imgAddSymID = imgAddSymID;
        this._lblSymOneID = lblSymOneID;
        this._lblSymTwoID = lblSymTwoID;
        this._lblSymThreeID = lblSymThreeID;
        this._lblSymFourID = lblSymFourID;
        this._lblSymFiveID = lblSymFiveID;
        this._hfSymOneID = hfSymOneID;
        this._hfSymTwoID = hfSymTwoID;
        this._hfSymThreeID = hfSymThreeID;
        this._hfSymFourID = hfSymFourID;
        this._hfSymFiveID = hfSymFiveID;
        this._tbMembersID = tbMembersID;
        this._tbFriendsID = tbFriendsID;

        if (this._pageIndex == 0) {
            $('#' + this._nameID).bind("keypress", Delegate.Create(this, this.imposeMaxLength));
            $('#' + this._nameID).bind("keyup", Delegate.Create(this, this.nameChanged));
        } else if (this._pageIndex == 1) {
            this.setupEmptyText(this._tbMembersID);
            this.setupEmptyText(this._tbFriendsID);
        } else if (this._pageIndex == 2) {
            $('#' + this._rbAnyID).bind("click", Delegate.Create(this, this.enableAny));
            $('#' + this._rbFiveSymbolsID).bind("click", Delegate.Create(this, this.enableFiveSymbols));
            $('#' + this._rbSectorID).bind("click", Delegate.Create(this, this.enableSector));

            $('#' + this._imgAddSymID).bind("click", Delegate.Create(this, this.addSymbol));

            $('.throwdown_wiz_sym_delete a').bind("click", Delegate.Create(this, this.removeSymbol));

            $('#' + this._tbAddSymID).autocomplete('/services/symbol.ashx', {
                parse: function(data) {
                    return $.map(eval(data), function(row) {
                        return {
                            data: row,
                            value: row.symbol,
                            result: row.symbol
                        }
                    });
                },
                formatItem: function(item) {
                    if (item.symbol.length > 0)
                        return "<div style='float: left; width: 60px;'>" + item.symbol + "</div><span title='" + item.name + "'>" + item.name.substr(0, 30) + "</span>";
                    else
                        return item.name;
                },
                width: 285,
                scroll: true,
                delay: 100,
                autoFill: false
            });
        } else if (this._pageIndex == 3) {
            var maxDate = this.getEasternTime();
            maxDate.setDate(maxDate.getDate() + 1);
            maxDate.setHours(0, 1, 0, 0);

            $('#' + this._tbStartDateID).datepicker(
                {
                    minDate: maxDate,
                    beforeShowDay: $.datepicker.noWeekends
                }
            );

            $('#' + this._tbDaysID).bind("keypress", Delegate.Create($elt(this._tbDaysID), this.imposeDigits));
            $('#' + this._tbWeeksID).bind("keypress", Delegate.Create($elt(this._tbWeeksID), this.imposeDigits));
            $('#' + this._tbMonthsID).bind("keypress", Delegate.Create($elt(this._tbMonthsID), this.imposeDigits));

            $('#' + this._tbDaysID).bind("change", Delegate.Create($elt(this._tbDaysID), this.imposeMax30));
            $('#' + this._tbWeeksID).bind("change", Delegate.Create($elt(this._tbWeeksID), this.imposeMax30));
            $('#' + this._tbMonthsID).bind("change", Delegate.Create($elt(this._tbMonthsID), this.imposeMax30));

            $('#' + this._rbDayID).bind("click", Delegate.Create(this, this.enableTimeFrameDays));
            $('#' + this._rbWeekID).bind("click", Delegate.Create(this, this.enableTimeFrameWeeks));
            $('#' + this._rbMonthID).bind("click", Delegate.Create(this, this.enableTimeFrameMonths));
            $('#' + this._tbStartDateID).bind("keyup", Delegate.Create(this, this.dateChanged));
            $('#' + this._tbStartDateID).bind("change", Delegate.Create(this, this.dateChanged));
        }
    }
}

PWSConstants.ThrowdownWizard = {
    MAX_NAME_LENGTH: 30
};
