/*************************************************************************** sexy-combo 2.1.3 : A jQuery date time picker. Authors: Kadalashvili.Vladimir@gmail.com - Vladimir Kadalashvili thetoolman@gmail.com Version: 2.1.3 Website: http://code.google.com/p/sexy-combo/ * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * * ***************************************************************************/;(function($){$.fn.sexyCombo=function(config){return this.each(function(){if("SELECT"!=this.tagName.toUpperCase()){return;}new $sc(this,config);});};var defaults={skin:"sexy",suffix:"__sexyCombo",hiddenSuffix:"__sexyComboHidden",renameOriginal:false,initialHiddenValue:"",emptyText:"",autoFill:false,triggerSelected:true,filterFn:null,dropUp:false,separator:",",key:"value",value:"text",showListCallback:null,hideListCallback:null,initCallback:null,initEventsCallback:null,changeCallback:null,textChangeCallback:null,checkWidth:true};$.sexyCombo=function(selectbox,config){if(selectbox.tagName.toUpperCase()!="SELECT")return;this.config=$.extend({},defaults,config||{});this.selectbox=$(selectbox);this.options=this.selectbox.children().filter("option");this.wrapper=this.selectbox.wrap("
").hide().parent().addClass("combo").addClass(this.config.skin);this.input=$("").appendTo(this.wrapper).attr("autocomplete","off").attr("value","").attr("name",this.selectbox.attr("name")+this.config.suffix);var origName=this.selectbox.attr("name");var newName=origName+this.config.hiddenSuffix;if(this.config.renameOriginal){this.selectbox.attr("name",newName);}this.hidden=$("").appendTo(this.wrapper).attr("autocomplete","off").attr("value",this.config.initialHiddenValue).attr("name",this.config.renameOriginal?origName:newName);this.icon=$("
").appendTo(this.wrapper).addClass("icon");this.listWrapper=$("
").appendTo(this.wrapper).addClass("list-wrapper");this.updateDrop();this.list=$("
    ").appendTo(this.listWrapper);var self=this;var optWidths=[];this.options.each(function(){var optionText=$.trim($(this).text());if(self.config.checkWidth){optWidths.push($("
  • ").appendTo(self.htm(""+optionText+"").addClass("visible").find("span").outerWidth());}else{$("
  • ").appendTo(self.htm(""+optionText+"").addClass("visible");}});this.listItems=this.list.children();if(optWidths.length){optWidths=optWidths.sort(function(a,b){return a-b;});var maxOptionWidth=optWidths[optWidths.length-1];}this.singleItemHeight=this.listItems.outerHeight();this.listWrapper.addClass("invisible");if($.htm({position:"relative",left:"0",top:"0"});}this.filterFn=("function"==typeof(this.config.filterFn))?this.config.filterFn:this.filterFn;this.lastKey=null;this.multiple=this.selectbox.attr("multiple");var self=this;this.wrapper.data("sc:lastEvent","click");this.overflowCSS="overflowY";if((this.config.checkWidth)&&(this.listWrapper.innerWidth()maxShown){this.setDropUp(true);}else{this.setDropUp(false);}if(""==$.trim(this.input.val())){this.highlightFirst();this.listWrapper.scrollTop(0);}else{this.highlightSelected();}this.notify("showList");},hideList:function(){if(this.listWrapper.hasClass("invisible"))return;this.listWrapper.removeClass("visible").addClass("invisible");this.htm("zIndex","0");this.htm("zIndex","99999");this.notify("hideList");},getListItemsHeight:function(){var itemHeight=this.singleItemHeight;return itemHeight*this.liLen();},setOverflow:function(){var maxHeight=this.getListMaxHeight();if(this.getListItemsHeight()>maxHeight)this.htm(this.overflowCSS,"scroll");else this.htm(this.overflowCSS,"hidden");},highlight:function(activeItem){if(($sc.KEY.DOWN==this.lastKey)||($sc.KEY.UP==this.lastKey))return;this.listItems.removeClass("active");$(activeItem).addClass("active");},setComboValue:function(val,pop,hideList){var oldVal=this.input.val();var v="";if(this.multiple){v=this.getTextValue();if(pop)v.pop();v.push($.trim(val));v=$sc.normalizeArray(v);v=v.join(this.config.separator)+this.config.separator;}else{v=$.trim(val);}this.input.val(v);this.setHiddenValue(val);this.filter();if(hideList)this.hideList();this.input.removeClass("empty");if(this.multiple)this.input.focus();if(this.input.val()!=oldVal)this.notify("textChange");},setHiddenValue:function(val){var set=false;val=$.trim(val);var oldVal=this.hidden.val();if(!this.multiple){for(var i=0,len=this.options.length;i").appendTo(self.list).text(optionText).addClass("visible");});this.listItems=this.list.children();this.listItems.bind("mouseover",function(e){self.highlight(e.target);});this.listItems.bind("click",function(e){self.listItemClick($(e.target));});self.wrapper.data("sc:optionsChanged","");}var comboValue=this.input.val();var self=this;this.listItems.each(function(){var $this=$(this);var itemValue=$this.text();if(self.filterFn.call(self,self.getCurrentTextValue(),itemValue,self.getTextValue())){$this.removeClass("invisible").addClass("visible");}else{$this.removeClass("visible").addClass("invisible");}});this.setOverflow();this.setListHeight();},filterFn:function(currentComboValue,itemValue,allComboValues){if("click"==this.wrapper.data("sc:lastEvent")){return true;}if(!this.multiple){return itemValue.toLowerCase().indexOf(currentComboValue.toLowerCase())==0;}else{for(var i=0,len=allComboValues.length;ilistHeight){this.listWrapper.height(Math.min(maxHeight,liHeight));return Math.min(maxHeight,liHeight);}},getActive:function(){return this.listItems.filter(".active");},keyUp:function(e){this.lastKey=e.keyCode;var k=$sc.KEY;switch(e.keyCode){case k.RETURN:case k.TAB:this.setComboValue(this.getActive().text(),true,true);if(!this.multiple)break;case k.DOWN:this.highlightNext();break;case k.UP:this.highlightPrev();break;case k.ESC:this.hideList();break;default:this.inputChanged();break;}},liLen:function(){return this.listItems.filter(".visible").length;},inputChanged:function(){this.filter();if(this.liLen()){this.showList();this.setOverflow();this.setListHeight();}else{this.hideList();}this.setHiddenValue(this.input.val());this.notify("textChange");},highlightFirst:function(){this.listItems.removeClass("active").filter(".visible:eq(0)").addClass("active");this.autoFill();},highlightSelected:function(){this.listItems.removeClass("active");var val=$.trim(this.input.val());try{this.listItems.each(function(){var $this=$(this);if($this.text()==val){$this.addClass("active");self.listWrapper.scrollTop(0);self.scrollDown();}});this.highlightFirst();}catch(e){}},highlightNext:function(){var $next=this.getActive().next();while($next.hasClass("invisible")&&$next.length){$next=$next.next();}if($next.length){this.listItems.removeClass("active");$next.addClass("active");this.scrollDown();}},scrollDown:function(){if("scroll"!=this.htm(this.overflowCSS))return;var beforeActive=this.getActiveIndex()+1;var minScroll=this.listItems.outerHeight()*beforeActive-this.listWrapper.height();if($.browser.msie)minScroll+=beforeActive;if(this.listWrapper.scrollTop()maxScroll){this.listWrapper.scrollTop(maxScroll);}},applyEmptyText:function(){if(!this.config.emptyText.length)return;var self=this;this.input.bind("focus",function(){self.inputFocus();}).bind("blur",function(){self.inputBlur();});if(""==this.input.val()){this.input.addClass("empty").val(this.config.emptyText);}},inputFocus:function(){if(this.input.hasClass("empty")){this.input.removeClass("empty").val("");}},inputBlur:function(){if(""==this.input.val()){this.input.addClass("empty").val(this.config.emptyText);}},triggerSelected:function(){if(!this.config.triggerSelected)return;var self=this;try{this.options.each(function(){if($(this).attr("selected")){self.setComboValue($(this).text(),false,true);throw new Error();}});}catch(e){return;}self.setComboValue(this.options.eq(0).text(),false,false);},autoFill:function(){if(!this.config.autoFill||($sc.KEY.BACKSPACE==this.lastKey)||this.multiple)return;var curVal=this.input.val();var newVal=this.getActive().text();this.input.val(newVal);this.selection(this.input.get(0),curVal.length,newVal.length);},selection:function(field,start,end){if(field.createTextRange){var selRange=field.createTextRange();selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}else if(field.setSelectionRange){field.setSelectionRange(start,end);}else{if(field.selectionStart){field.selectionStart=start;field.selectionEnd=end;}}},updateDrop:function(){if(this.config.dropUp)this.listWrapper.addClass("list-wrapper-up");else this.listWrapper.removeClass("list-wrapper-up");},setDropUp:function(drop){this.config.dropUp=drop;this.updateDrop();},notify:function(evt){if(!$.isFunction(this.config[evt+"Callback"]))return;this.config[evt+"Callback"].call(this);}});$sc.extend({KEY:{UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8},log:function(msg){var $log=$("#log");$log.html($log.html()+msg+"
    ");},createSelectbox:function(config){var $selectbox=$("