﻿(function ($) {
    $.widget("ui.combobox", {
        _create: function () {
            var self = this,
					select = this.element.hide(),
					selected = select.children(":selected"),
					value = selected.val() ? selected.text() : "",
                    idEnabled = false,
                    list = null,
                    previousValue = "",
                    afterSelectFunction = null;
            if ($(this.element[0]).attr('idenabled') != null && $(this.element[0]).attr('idenabled').toLowerCase() == "true")
                this.idEnabled = true;
            var maxLength = this.element[0].maxLength;
            this.list = (comboboxDataSources[$(this.element[0]).attr('datasourcename')] === undefined ? null : comboboxDataSources[$(this.element[0]).attr('datasourcename')]);

            var input = this.input = $("<input>")
					.insertAfter(select)
					.val(value).attr('maxLength', maxLength)
					.autocomplete({
					    delay: 0,
					    minLength: 0,
					    source: (comboboxDataSources[$(this.element[0]).attr('datasourcename')] === undefined ? null : comboboxDataSources[$(this.element[0]).attr('datasourcename')]),
					    select: function (event, ui) {
					        self.element.val(self.idEnabled ? ui.item.id : ui.item.value);
					        if (self.afterSelectFunction !== undefined) {
					            self.afterSelectFunction(event, ui);
					        }
					    }
					}).keyup(function (event) {
					    var isValid = false;
					    var validValue;
					    for (i in self.list) {
					        if (self.list[i].value.toLowerCase() == this.value.toLowerCase()) {
					            isValid = true;
					            validValue = self.list[i];
					        }
					    }
					    if (!isValid) {
					        if (event.keyCode != 13 && event.keyCode != 40 && event.keyCode != 0) {
					            self.element.val('');
					        }
					        if (event.keyCode == 13) {

					        }
					    } else {
					        self.previousValue = this.value;
					        self.element.val(self.idEnabled ? validValue.id : validValue.value)
					    }
					    var length = this.value.length;
					    var maxLength = $(this).attr("maxLength");

					    if (length == maxLength && !isValid) {
					        alert('Invalid value!');
					    }
					})
					.addClass("ui-widget ui-widget-content ui-corner-left").keypress(limitMe); //.attr('maxLength', maxLength); //.keypress(limitMe);

            if ($(this.element[0]).attr('w') == 'undefined') {
            } else {
                if ($(this.element[0]).attr('w') !== undefined && $(this.element[0]).attr('w') != '') {
                    $(this.input).width($(this.element[0]).attr('w'));
                }
            }
            if (!($(this.element[0]).attr('VisibleName') === undefined))
                input.val($(this.element[0]).attr('VisibleName'));

            input.data("autocomplete")._renderItem = function (ul, item) {
                return $("<li></li>")
						.data("item.autocomplete", item)
						.append("<a>" + item.label + "</a>")
						.appendTo(ul);
            };

            if (select.attr('disabled')) {
                input.autocomplete('disable');
                input.attr('disabled', true);
            }

            // input.val(this.element.val());

            this.button = $("<button type='button'>&nbsp;</button>")
					.attr("tabIndex", -1)
					.attr("title", "Show All Items")
					.insertAfter(input)
					.button({
					    icons: {
					        primary: "ui-icon-triangle-1-s"
					    },
					    text: false
					})
					.removeClass("ui-corner-all")
					.addClass("ui-corner-right ui-button-icon")
					.click(function () {
					    // close if already visible
					    if (input.autocomplete("widget").is(":visible")) {
					        input.autocomplete("close");
					        return;
					    }

					    // work around a bug (likely same cause as #5265)
					    $(this).blur();

					    // pass empty string as value to search for, displaying all results
					    input.autocomplete("search", "");
					    input.focus();
					});

            if (this.element.val() != "") {
                var v = this.element.val();

                if (!this.idEnabled) {
                    this.element.val(v);
                    this.input.val(v);
                } else {
                    for (var item in list) {
                        if (list[item].id + '' == v + '') {
                            this.element.val(list[item].id);
                            this.input.val(list[item].value);
                        }
                    }
                }
            }
        },

        ssource: function (value) {
            this.input.autocomplete("option", "source", value);
        },

        destroy: function () {
            this.input.remove();
            this.button.remove();
            this.element.show();
            $.Widget.prototype.destroy.call(this);
        },

        setAfterSelectFunction: function (val) {
            this.afterSelectFunction = val;
        },


        autocomplete: function (value) {

            if (!this.idEnabled) {
                this.element.val(value);
                this.input.val(value);
            } else {
                if (this.list === undefined)
                    this.list = comboboxDataSources[$(this.element[0]).attr('datasourcename')];

                for (var item in this.list) {
                    if (this.list[item].id + '' == value + '') {
                        this.element.val(this.list[item].id);
                        this.input.val(this.list[item].value);
                    }
                }
            }
        },

        disabled: function (value) {
            this.input.autocomplete('option', 'disabled', value);
            this.input.attr('readonly', value);
        },

        src: function (value) {
            this.list = value;
            this.input.autocomplete('option', 'source', value);
            this.autocomplete(this.element.val());
        },

        idenabled: function (value) {
            this.idEnabled = value;
        }
    });
})(jQuery);

(function ($) {
    $.widget("ui.mydatepicker", {
        _create: function () {
            var self = this,
					select = this.element;
            var value = select.val();
            select.datepicker()
                .datepicker("option", "dateFormat", 'dd.mm.yy')
                .datepicker("option", "firstDay", 1)
                .datepicker("option", "showButtonPanel", true)
                .addClass("ui-widget ui-widget-content ui-corner-left ui-autocomplete-input");
            select.datepicker('setDate', value);
            if (select.attr('minDate'))
                select.datepicker('option', 'minDate', select.attr('minDate'));
            if (select.attr('maxDate'))
                select.datepicker('option', 'maxDate', select.attr('maxDate'));
            if (select.attr('readOnly'))
                select.datepicker("disable");

            this.button = $("<button type='button'>&nbsp;</button>")
					.attr("tabIndex", -1)
					.attr("title", "Show All Items")
					.insertAfter(select)
					.button({
					    icons: {
					        primary: "ui-icon-calculator"
					    },
					    text: false
					})
					.removeClass("ui-corner-all")
					.addClass("ui-corner-right ui-button-icon")
					.click(function () {
					    if (!select.attr('readOnly'))
					        select.datepicker('show');
					});
        },

        destroy: function () {
            this.input.remove();
            this.button.remove();
            this.element.show();
            $.Widget.prototype.destroy.call(this);
        }
    });
})(jQuery);
function limitMe(e) {
    if (e.keyCode == 8) { return true; }
    return this.value.length < $(this).attr("maxLength");
} 

