var droplist = function(opts){	/**	* css classes (used prefix (default = droplist).):	* {prefix}-list, {prefix}-default, {prefix}-hover, {prefix}-active, {prefix}-current, 	* 	* uses the custom attributes: val	* change event gives the element change is fired on as parameter.	* 	*/		var classPrefix = 'droplist';	var listEls = $('.'+classPrefix);	var lists = new Array();		var init = function(){		listEls.each(function(){			lists[lists.length] = new list($(this));		});	}		this.getList = function(id){		for(i in lists){			if(typeof lists[i] == 'object'){				if(id == lists[i].getId()){					return lists[i];				}			}		}	}		this.reattachEvents = function(){		for(i in lists){			lists[i].attachEvents();		}	}		var list = function(el){		var overlap = 0;		var c = this;		var element = null;		var id = null;		var list = null;		var currentValue;		var isOpen = false;		var init = function(){			element = el;			id = element.attr('id');			list = element.find('.'+classPrefix+'-list');			styleList();						if(list.find('.'+classPrefix+'-active').length > 0){				setCurrent(list.find('.'+classPrefix+'-active'));			}else{				setCurrent(list.find('.'+classPrefix+'-default'));			}						c.attachEvents();		}				this.getId = function(){			return id;		}		this.getList = function(){			return list;		}		this.getValue = function(){			return currentValue;		}				var styleList = function(){			var y = (element.outerHeight()+element.offset().top)-overlap;			var x = element.offset().left;			list.appendTo('body')				.css('position', 'absolute')				.css('top', y+'px')				.css('left', x+'px')				.hide();				}				var setCurrent = function(el){			list.find('li').removeClass(classPrefix+'-active');			el.addClass(classPrefix+'-active');			element.find('.'+classPrefix+'-current').text(el.text());			element.attr('val', el.attr('val'));			currentValue = el.attr('val');				}				this.attachEvents = function(){			$(element).unbind('click');			list.find('li').unbind('mouseover');			list.find('li').unbind('mouseout');			list.find('li').unbind('click');			$(element).click(function(){ if(isOpen){ close(); }else{ open(); } });			list.find('li').mouseover(function(){ $(this).addClass(classPrefix+'-hover'); });			list.find('li').mouseout(function(){ $(this).removeClass(classPrefix+'-hover'); });			list.find('li').click(function(){ if(!$(this).hasClass(classPrefix+'-disabled')){ selectEl($(this)); } });					}				var selectEl = function(el){						setCurrent(el);			element.trigger('change', c);			close();					}				var close = function(){					element.removeClass('droplist-open');			list.slideUp();			isOpen = false;		}		var open = function(){			element.addClass('droplist-open');			list.slideDown();			isOpen = true;		}						init();	}		init();}
