"use strict";
$.widget("ui.selectWidget", {
options: {
change: function(e) {
return e
},
effect: "slide",
keyControl: true,
speed: 200,
scrollHeight: 250
},
_create: function() {
this._selectFunctional()
},
_selectFunctional: function() {
function v(t) {
$("li.active", s).removeClass("active");
$("li", s).eq(t).addClass("active");
$("option[selected]", e).removeAttr("selected");
u.eq(t).prop("selected", true);
e.val(u.eq(t).val());
n.text(u.eq(t).text());
a = t;
if (p) {
e.change(u.eq(t).val());
p(e.val())
}
return t
}
function m() {
var e = 0,
t = $(".select-items", s);
for (var n = 0,
r = t.length; n < r; n++) {
if ($(t[n]).hasClass("active")) {
break
}
e += $(t[n]).outerHeight()
}
s.stop().animate({
scrollTop: e
},
l)
}
if (this.element.is(":hidden")) {
return false
}
var e = this.element,
t = $("
").addClass("select-main"),
n = $("
").addClass("select-set"),
r = $("
").addClass("select-arrow"),
i = $("
").addClass("select-block"),
s = $("
").addClass("select-list"),
o = e.find("option[selected]").length,
u = $("option", e),
a = 0,
f = $("input[type=reset]", e.parents("form")),
l = this.options.speed,
c = this.options.keyControl,
h = this.options.effect,
p = this.options.change,
d = this.options.scrollHeight;
t.append(r);
t.append(n);
i.append(s);
t.append(i);
e.after(t);
e.hide();
i.hide();
u.each(function(e, t) {
s.append($("- ").addClass("select-items").text($(t).text()))
});
f.click(function() {
$(u, $(this).parents("form")).each(function(e, t) {
if ($(t).val() == "" && !$(t).is(":selected")) {
$(".select-items:first", s).click();
return false
}
})
});
if (e.attr("disabled")) {
t.addClass("disabled")
}
if (!o) {
e.val(u.first().val());
$("li:first", s).addClass("active");
n.text(u.first().text())
} else {
e.val(e.find("option[selected]").val());
$("li", s).eq(e.find("option[selected]").index()).addClass("active");
n.text(e.find("option[selected]").text())
}
a = $("option[selected]", e).index();
$("li", s).click(function() {
var e = $(this).index();
a = e;
v(e)
window.open($(this).attr('type'));
});
if (d) {
if (i.height() > d) {
s.css("height", d).css("overflow", "auto")
}
}
r.click(function() {
n.click()
});
n.click(function() {
var e = $(this);
if (e.parent(t).hasClass("disabled")) {
return false
}
if (!e.prev().hasClass("reverse")) {
$(".select-arrow").removeClass("reverse");
e.prev().addClass("reverse");
e.parent().addClass("z-index")
} else {
e.parent().removeClass("z-index");
e.prev().removeClass("reverse")
}
if (i.is(":hidden")) {
if ($(".select-block").is(":visible")) {
if (h == "slide") {
$(".select-block").slideUp(l / 2);
$(".select-main").removeClass("z-index")
} else if (h == "fade") {
$(".select-block").fadeOut(l / 2);
$(".select-main").removeClass("z-index")
}
$(document).unbind("keydown")
}
$(document).bind("click",
function(e) {
if (!$(e.target).is(".select-set") && !$(e.target).is(".select-arrow")) {
if ($(".select-block").is(":visible")) {
if (h == "slide") {
i.slideUp(l / 2,
function() {
$(".select-main").removeClass("z-index")
});
$(".select-arrow").removeClass("reverse")
} else if (h == "fade") {
i.fadeOut(l / 2,
function() {
$(".select-main").removeClass("z-index")
});
$(".select-arrow").removeClass("reverse")
}
$(document).unbind("click keydown")
}
}
});
if (h == "slide") {
i.slideDown(l);
e.parent().addClass("z-index");
m()
} else if (h == "fade") {
i.fadeIn(l);
e.parent().addClass("z-index");
m()
}
if (c) {
$(document).bind("keydown",
function(e) {
var t = e.keyCode;
if (t == 40) {
if (a < u.length - 1) {
a = a == -1 ? 0 : a;
v(a += 1);
m()
}
e.preventDefault()
}
if (t == 38) {
if (a > 0) {
v(a -= 1);
m()
}
e.preventDefault()
}
if (t == 13) {
if (h == "slide") {
i.slideUp(l / 2,
function() {
$(".select-main").removeClass("z-index")
})
} else if (h == "fade") {
i.fadeOut(l / 2,
function() {
$(".select-main").removeClass("z-index")
})
}
$(".select-arrow").removeClass("reverse");
$(document).unbind("keydown");
e.preventDefault()
}
})
}
} else {
if (h == "slide") {
i.slideUp(l / 2,
function() {
$(".select-main").removeClass("z-index")
});
$(".select-arrow").removeClass("reverse")
} else if (h == "fade") {
i.fadeOut(l / 2,
function() {
$(".select-main").removeClass("z-index")
});
$(".select-arrow").removeClass("reverse")
}
$(document).unbind("keydown")
}
})
}
});