﻿Type.registerNamespace("Administration");
Administration.CountryEditor = function(element) {
    Administration.CountryEditor.initializeBase(this, [element]);
    /*Attributes*/
    this._optionValues = null;

    /*Controls*/
    this._dropDownCtrl = null;
    this._btnCreate = null;
    this._txtCreateEdit = null;
    this._btnEdit = null;
    this._btnDelete = null;
    this._headerText = null;

    /*Handlers*/
    this._onBtnSaveClick = null;
    this._onBtnEditClick = null;
    this._onBtnDeleteClick = null;
    this._onDropDownChange = null;

}

Administration.CountryEditor.prototype =
{

    set_dropDownCtrlValues: function(values) {

        this._optionValues = values;
        var dropDown = this._getDropDownCtrl();
        var optLength = dropDown.options.length;
        /* for (var i = 0; i < optLength; i++) {
        dropDown.remove(i);
        }*/

        while (dropDown.options[0]) {
            dropDown.remove(0);
        }

        for (var i = 0; i < values.length; i++) {

            var option = document.createElement("option");
            option.value = values[i].Id;
            option.text = values[i].Name;
            try {
                dropDown.add(option, null); // standards compliant; doesn't work in IE
            }
            catch (ex) {
                dropDown.add(option); // IE only
            }


        }
        if (values.length > 0)
        {
            this._onDropDownChangeHandler();
            this._getTxtCreateEditCtrl().value = values[0].Name;
            this._getBtnEditCtrl().disabled = false;
            this._getBtnDeleteCtrl().disabled = false;
        }
        else {
            this._getBtnEditCtrl().disabled = true;
            this._getBtnDeleteCtrl().disabled = true;
        }
    },

    _getDropDownCtrl: function() {
        if (!this._dropDownCtrl) {
            this._dropDownCtrl = $get(this.get_element().id + "_selectName");
            $addHandler(this._dropDownCtrl, "change", this._onDropDownChange);
        }
        return this._dropDownCtrl;
    },

    _getBtnCreateCtrl: function() {
        if (!this._btnCreate) {
            this._btnCreate = $get(this.get_element().id + "_btnSave");
            $addHandler(this._btnCreate, "click", this._onBtnSaveClick);
        }
        return this._btnCreate;
    },

    _getBtnEditCtrl: function() {
        if (!this._btnEdit) {
            this._btnEdit = $get(this.get_element().id + "_btnEdit");
            $addHandler(this._btnEdit, "click", this._onBtnEditClick);
        }
        return this._btnEdit;
    },

    _getBtnDeleteCtrl: function() {
        if (!this._btnDelete) {
            this._btnDelete = $get(this.get_element().id + "_btnDelete");
            $addHandler(this._btnDelete, "click", this._onBtnDeleteClick);
        }
        return this._btnDelete;
    },
    set_getHeaderTextCtrlValue: function(value) {
        this._getHeaderTextCtrl().innerHTML = value;
    },
    get_getHeaderTextCtrlValue: function() {
        return this._getHeaderTextCtrl().innerText;
    },
    _getHeaderTextCtrl: function() {
        if (!this._headerText) {
            this._headerText = $get(this.get_element().id + "_headerText");
        }
        return this._headerText;
    },
    _getTxtCreateEditCtrl: function() {
        if (!this._txtCreateEdit) {
            this._txtCreateEdit = $get(this.get_element().id + "_txtCreateEdit");
        }
        return this._txtCreateEdit;
    },

    /*Events*/
    add_onSave: function(fnHandler) {
        this.get_events().addHandler('onSave', fnHandler);
    },
    remove_onSave: function(fnHandler) {
        this.get_events().removeHandler('onSave', fnHandler);
    },
    _raiseOnSave: function(args) {
        var fnHandler = this.get_events().getHandler('onSave');
        if (fnHandler) {
            fnHandler(this, args);
        }
    },


    add_onEdit: function(fnHandler) {
        this.get_events().addHandler('onEdit', fnHandler);
    },
    remove_onEdit: function(fnHandler) {
        this.get_events().removeHandler('onEdit', fnHandler);
    },
    _raiseOnEdit: function(args) {
        var fnHandler = this.get_events().getHandler('onEdit');
        if (fnHandler) {
            fnHandler(this, args);
        }
    },

    add_onDelete: function(fnHandler) {
        this.get_events().addHandler('onDelete', fnHandler);
    },
    remove_onDelete: function(fnHandler) {
        this.get_events().removeHandler('onDelete', fnHandler);
    },
    _raiseOnDelete: function(args) {
        var fnHandler = this.get_events().getHandler('onDelete');
        if (fnHandler) {
            fnHandler(this, args);
        }
    },

    /*Handlers*/
    _onBtnSaveClickHandler: function(sender, args) {
        var text = this._getTxtCreateEditCtrl().value;
        var arg = new Object();
        arg.Text = text;
        this._raiseOnSave(arg);
        this._getTxtCreateEditCtrl().value = "";
    },

    _onBtnEditClickHandler: function(sender, args) {
        var value = this._getDropDownCtrl().options[this._getDropDownCtrl().selectedIndex].value;
        var text = this._getTxtCreateEditCtrl().value;
        var arg = new Object();
        arg.Value = value;
        arg.Text = text;
        this._raiseOnEdit(arg);
        this._getTxtCreateEditCtrl().value = "";
    },

    _onBtnDeleteClickHandler: function(sender, args) {
        var value = this._getDropDownCtrl().options[this._getDropDownCtrl().selectedIndex].value;
        var arg = new Object();
        arg.Value = value;
        this._raiseOnDelete(arg);
        this._getTxtCreateEditCtrl().value = "";
    },

    _onDropDownChangeHandler: function(sender, args) {
        var text = this._getDropDownCtrl().options[this._getDropDownCtrl().selectedIndex].text;
        this._getTxtCreateEditCtrl().value = text;
    },

    /*Initialization*/

    _initializeControl: function() {
        this._getBtnEditCtrl();
        this._getBtnDeleteCtrl();
        this._getBtnCreateCtrl();
    },

    _initializeHandlers: function() {
        if (!this._onBtnSaveClick) {
            this._onBtnSaveClick = Function.createDelegate(this, this._onBtnSaveClickHandler);
        }
        if (!this._onBtnEditClick) {
            this._onBtnEditClick = Function.createDelegate(this, this._onBtnEditClickHandler);
        }
        if (!this._onBtnDeleteClick) {
            this._onBtnDeleteClick = Function.createDelegate(this, this._onBtnDeleteClickHandler);
        }
        if (!this._onDropDownChange) {
            this._onDropDownChange = Function.createDelegate(this, this._onDropDownChangeHandler);
        }

    },

    initialize: function() {
        Administration.CountryEditor.callBaseMethod(this, 'initialize');

        this._initializeHandlers();
        this._initializeControl();
    },
    dispose: function() {
        Administration.CountryEditor.callBaseMethod(this, 'dispose');
    }
}


Administration.CountryEditor.registerClass('Administration.CountryEditor', Sys.UI.Control);
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
