/*
Stylish Select 0.3 - jQuery plugin to replace a select drop down box with a stylable unordered list
http://scottdarby.com/

Copyright (c) 2009 Scott Darby

Requires: jQuery 1.3

Licensed under the GPL license:
http://www.gnu.org/licenses/gpl.html
 */
(function(a) {
	a("html").addClass("js");
	Array.prototype.indexOf = function(c, d) {
		for ( var b = (d || 0); b < this.length; b++) {
			if (this[b] == c) {
				return b
			}
		}
	};
	a.fn.extend( {
		getSetSSValue : function(b) {
			if (b) {
				a(this).val(b).change();
				return this
			} else {
				return selText = a(this).find(":selected").text()
			}
		},
		resetSS : function() {
			$this = a(this);
			$this.next().remove();
			$this.unbind().sSelect()
		}
	});
	a.fn.sSelect = function(b) {
		return this
				.each(function() {
					var j = {
						defaultText : "Please select",
						animationSpeed : 0,
						ddMaxHeight : ""
					};
					var m = a.extend(j, b), e = a(this), k = a('<div class="selectedTxt"></div>'), s = a('<div class="newListSelected" tabindex="0"></div>'), A = a('<ul class="newList"></ul>'), u = -1, d = -1, n = [], x = false, h = "", w = false;
					s.insertAfter(e);
					k.prependTo(s);
					A.appendTo(s);
					e.hide();
					if (e.children("optgroup").length == 0) {
						e.children().each(function(B) {
							var C = a(this).text();
							n.push(C.charAt(0).toLowerCase());
							if (a(this).attr("selected") == true) {
								m.defaultText = C;
								d = B
							}
							h += '<li class="stylish-select-'+C+'">' + C + "</li>"
						});
						A.html(h);
						h = "";
						var y = A.children()
					} else {
						e
								.children("optgroup")
								.each(
										function(D) {
											var B = a(this).attr("label"), E = a('<li class="newListOptionTitle">'
													+ B + "</li>");
											E.appendTo(A);
											var C = a("<ul></ul>");
											C.appendTo(E);
											a(this)
													.children()
													.each(
															function() {
																++u;
																var F = a(this)
																		.text();
																n
																		.push(F
																				.charAt(
																						0)
																				.toLowerCase());
																if (a(this)
																		.attr(
																				"selected") == true) {
																	m.defaultText = F;
																	d = u
																}
																h += "<li>"
																		+ F
																		+ "</li>"
															});
											C.html(h);
											h = ""
										});
						var y = A.find("ul li")
					}
					var p = A.height() + 3, o = s.height() + 3, z = y.length;
					if (d != -1) {
						i(d, true)
					} else {
						k.text(m.defaultText);
						
					}
					function q() {
						var C = s.offset().top, B = jQuery(window).height(), D = jQuery(
								window).scrollTop();
						if (p > parseInt(m.ddMaxHeight)) {
							p = parseInt(m.ddMaxHeight)
						}
						C = C - D;
						if (C + p >= B) {
							A.css( {
								top : "-" + p + "px",
								height : p
							});
							e.onTop = true
						} else {
							A.css( {
								top : o + "px",
								height : p
							});
							e.onTop = false
						}
					}
					q();
					a(window).resize(function() {
						q()
					});
					a(window).scroll(function() {
						q()
					});
					function t() {
						s.css("position", "relative")
					}
					function c() {
						s.css("position", "static")
					}
					k.click(function() {
						if (A.is(":visible")) {
							A.hide();
							c();
							return false
						}
						s.focus();
						A.slideDown(m.animationSpeed);
						t();
						A.scrollTop(e.liOffsetTop)
					});
					y.hover(function(C) {
						var B = a(C.target);
						B.addClass("newListHover")
					}, function(C) {
						var B = a(C.target);
						B.removeClass("newListHover")
					});
					y.click(function(C) {
						var B = a(C.target);
						d = y.index(B);
						w = true;
						i(d);
						A.hide();
						s.css("position", "static")
					});
					function i(D, F) {
						var B = s.offset().top, G = y.eq(D).offset().top, C = A
								.scrollTop();
						if (e.onTop == true) {
							e.liOffsetTop = (((G - B) - o) + C)
									+ parseInt(m.ddMaxHeight)
						} else {
							e.liOffsetTop = ((G - B) - o) + C
						}
						A.scrollTop(e.liOffsetTop);
						y.removeClass("hiLite").eq(D).addClass("hiLite");
						var E = y.eq(D).text();
						if (F == true) {
							e.val(E);
							k.text(E);
							return false
						}
						e.val(E).change();
						k.text(E)
					}
					e.change(function(B) {
						$targetInput = a(B.target);
						if (w == true) {
							w = false;
							return false
						}
						$currentOpt = $targetInput.find(":selected");
						d = $targetInput.find("option").index($currentOpt);
						i(d, true)
					});
					function r(B) {
						B.onkeydown = function(E) {
							if (E == null) {
								var D = event.keyCode
							} else {
								var D = E.which
							}
							w = true;
							switch (D) {
							case 40:
							case 39:
								v();
								return false;
								break;
							case 38:
							case 37:
								l();
								return false;
								break;
							case 33:
							case 36:
								g();
								return false;
								break;
							case 34:
							case 35:
								f();
								return false;
								break;
							case 13:
							case 27:
								A.hide();
								c();
								return false;
								break
							}
							keyPressed = String.fromCharCode(D).toLowerCase();
							var C = n.indexOf(keyPressed);
							if (typeof C != "undefined") {
								++d;
								d = n.indexOf(keyPressed, d);
								if (d == -1 || d == null || x != keyPressed) {
									d = n.indexOf(keyPressed)
								}
								i(d);
								x = keyPressed;
								return false
							}
						}
					}
					function v() {
						if (d < (z - 1)) {
							++d;
							i(d)
						}
					}
					function l() {
						if (d > 0) {
							--d;
							i(d)
						}
					}
					function g() {
						d = 0;
						i(d)
					}
					function f() {
						d = z - 1;
						i(d)
					}
					s.click(function() {
						r(this)
					});
					s.focus(function() {
						a(this).addClass("newListSelFocus");
						r(this)
					});
					s.blur(function() {
						a(this).removeClass("newListSelFocus");
						A.hide();
						c()
					});
					k.hover(function(C) {
						var B = a(C.target);
						B.parent().addClass("newListSelHover")
					}, function(C) {
						var B = a(C.target);
						B.parent().removeClass("newListSelHover")
					});
					A.css("left", "0").hide()
				})
	}
})(jQuery);
