/*
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(value){
			$this = $(this);
			$this.next().remove();
			//unbind all events and redraw
			if(value)
			$this.unbind().sSelect(value);
			else
			$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>"+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);
