﻿/*(C) Copyright 2010 ZZEE. All rights reserved. http://zzee.com
This file is a part of ZZEE zzSuggestSelector (Product).

You may use or display this file only according to the terms of the
License for the Product. Any other use or copying is prohibited.

You may not modify or alter Javascript files of the Product. 
You may edit CSS files of the Product, retaining this copyright notice.
You may not remove this copyright notice.*/

(function($){var ns='zzSuggestSelector',nsul=ns+'UL',z=[];var R={r:false,e:'',q:'',l:100,p:0,d:[]};function CI(ps,q,pr){var T=this;T.ps=ps;T.q=q;T.pr=pr;T.i=[];T.p=0;T.P=[];T.PG=[];T.nm=false;T.c=0;T.rn=false;}CI.prototype={r:function(q){CI.call(this,this.ps,q,this.pr);},hr:function(r,e,t){var T=this,a=typeof r=='object',i,j,L;if(a){i={};r=$.extend(i,R,r);}else{}if((!a)||(!r.r)){if(e&&$.isFunction(e)){e.call(t,r);}return false;}if(T.q!=r.q){return false;}if(r.p in T.PG){return false;}if(!(r.p in T.P)){return false;}L=r.d.length;T.PG[r.p]=L;for(i in r.d){j=r.d[i];if(typeof(j.value)=='undefined'){return false;}T.c+=j.value.length+j.text.length;}i=r.p*r.l;if(i<T.i.length){for(j=0;j<L;j++){T.i.splice(i+j,0,r.d[j]);}T.rn=true;}else{T.i=T.i.concat(r.d);}if(L<r.l){T.nm=true;if(T.pr.n){T.pr.n(T);}}return T.i;},gp:function(){var T=this;if(T.nm){return false;}T.P[T.p]=1;return T.p;},gi:function(){return this.i.length?this.i:null;},gc:function(){return this.i;},m:function(){if(this.nm){return this.i;}this.p++;return null;}};function CC(pr,ps,ms){var T=this;T.pr=pr;T.ps=ps;T.ms=ms;T.i={};T.c=null;T.s('');}CC.prototype={s:function(t){var T=this;if(typeof(T.i[t])=='undefined'){T.i[t]=new CI(T.ps,t,this);T.cc(T.i[t]);}else{if(T.c!=T.i[t]){T.cc(T.i[t]);}}return T.c;},cc:function(i){var T=this,q;T.c=i;if(T.gs()>T.ms){for(q in T.i){if(T.i[q]!=i){delete T.i[q];}}}},ch:function(t){if(typeof(this.i[t])=='undefined'){return null;}return this.i[t];},gi:function(){return this.c;},gs:function(){var q,i=0;for(q in this.i){i+=this.i[q].c;}return i;},z:function(){var q;for(q in this.i){delete this.i[q];}},n:function(item){var T=this;if(item==T.c){if(T.pr.n){T.pr.n();}}}};$.widget('ui.'+ns,{_create:function(){var T=this,O=T.options,j=T.element,x,y,w;R.l=O.pageSize;T._x=false;T._q='';T._vi=[];T._fi=-1;T._ci=-1;T._va=false;T._t=null;T._j=j;if(T.element[0].tagName.toLowerCase()=='select'){T._s=j;y=T.element[0];if((O.value===false)&&(y.selectedIndex>=0)){x=y.options[y.selectedIndex];O.value=x.value;O.text=x.text;}w=j.css('width');j.addClass('ui-helper-hidden');}else{T._s=null;}T._va=!(T._s||O.items);if(T._va){T._c=new CC(T,O.pageSize,O.cacheMaxSize);T._c.s(T._q);}else{T._c=null;}y='<div class="zzsuggestselectorinline"></div>';if(T._s){T._d=$(y).insertAfter(j);}else{T._d=$(y).appendTo(j);}T._h=null;if((!T._s)&&O.name){y='<input type="hidden" name="'+O.name+'"'+' value=""/>';T._h=$(y).appendTo(T._d);}y='<input type="text" class="input" readonly="readonly"'+((O.inlineCSS&&(!T._s))?(' style="'+O.inlineCSS+'"'):'')+'/>';T._i=$(y).appendTo(T._d).bind('keyup.'+ns,function(e){e=e||window.event;if(e.keyCode==13){T._p();}return false;});T._sv(false);T._bc(T._i);if(T._s&&w){T._i.css('width',w);}if(O.showButton){y='<span class="button ui-corner-right ui-state-default"><span class="ui-icon ui-icon-circle-triangle-s"></span><span class="text"></span></span>';T._b=$(y).insertAfter(T._i).bind('mousedown.'+ns,function(){$(this).addClass('ui-state-active');}).bind('mouseup.'+ns,function(){$(this).removeClass('ui-state-active');}).bind('mouseover.'+ns,function(){$(this).addClass('ui-state-hover');}).bind('mouseout.'+ns,function(){$(this).removeClass('ui-state-hover');});T._bc(T._b);T._b.find('span.text').append(document.createTextNode(O.buttonCaption));}else{T._b=null;}},_cq:function(q,k){var T=this;q+='';q=$.trim(q).toLowerCase();if(q==T._q){return;}T._q=q;if(T._va){T._c.s(q);}T._f(k);T._mc();},_gi:function(a,m){m=m||false;a=a||m;var T=this,i;if(T._s){return T.element[0].options;}else if(T.options.items){return T.options.items;}else if(a){i=T._c.gi()[m?'m':'gi']();if(i===null){T._a();}return i;}else{return T._c.gi().gc();}},_an:function(){var T=this,u=T._ul,x=T._w,off=u.position();x.css('left',off.left+(u.width()-x.width())/2).css('top',off.top+(u.height()-x.height())/2).css('display','block');},_anx:function(){this._w.css('display','none');},_a:function(){var T=this,O=T.options,d={},t=T._q,p=T._c.gi().gp();if(p===false){return;}d[O.cgiParamKeyword]=t;d[O.cgiParamPagesize]=O.pageSize;d[O.cgiParamPage]=p;d[O.cgiParamTimestamp]=+new Date();T._an();$.getJSON(O.url,$.extend(d,O.cgiParamsUser),function(r){if(T._x){return;}var c;if(T._q==r.q){c=T._c.gi();if(c.hr(r,O.ajaxError,this)){T._anx();T._f2(false,c.rn?0:r.p);c.rn=false;}else{}}else{c=T._c.ch(r.q);if(c){if(!c.hr(r,O.ajaxError,this)){}}}});},_m:function(){var T=this;if(!T._va){return;}T._gi(true,true);},_f:function(k){k=k||false;var T=this;if(!k){T._f2(true,0);return;}T._ct();function g(){T._f2(true,0);}T._t=setTimeout(g,T.options.delay);},_cu:function(){var T=this;T._fi=-1;T._ci=-1;T._vi=[];T._ul.empty();T._ul.get(0).scrollTop=0;T._anx();},_ft:function(s){if(this._va||(!this._q.length)){return true;}return(s.toLowerCase().indexOf(this._q)>=0);},_nr:function(d,s){s=s||1;var T=this,a=T._gi(false,false),L=a?a.length:0,i=T._ci,ni=-1,u,l,j=0,o=-1;if(!L){return;}if(d){i+=1;if(i>=L){i=0;}for(;i<L;i++){if(T._ft(a[i].text)){o=i;j++;if(j>=s){ni=i;break;}}}}else{i-=1;if(i<0){i=L-1;}for(;i>=0;i--){if(T._ft(a[i].text)){o=i;j++;if(j>=s){ni=i;break;}}}}if(j&&((ni<0)||(ni>=L))){ni=o;}if(d){if((ni==-1)&&(T._ci>=0)){if(T._c&&(!T._c.gi().nm)){ni=T._ci;T._m();}}}T._ul.find('li.ui-state-highlight').toggleClass('ui-state-highlight',false);T._ci=ni;u=T._ul.get(0);if((ni>=0)&&(ni<L)){i=T._vi[ni];if(i>=0){i=T._ul.find('li:eq('+i+')').toggleClass('ui-state-highlight',true);if(i){l=i.get(0);if(!((l.offsetTop>=u.scrollTop)&&((l.offsetTop+l.offsetHeight)<=(u.scrollTop+u.clientHeight)))){l.scrollIntoView();}}}}else{T._fi2();u.scrollTop=0;}},_f2:function(x,p){x=x||false;p=p||0;var T=this,O=T.options,t=T._q,l=t.toLowerCase(),a=T._gi(x,false),L=a?a.length:0,ul=T._ul.get(0),i,n,s,j;if(!L){if(a===null){}else{T._cu();}return;}if(!p){T._cu();}j=T._ul.children('li').length;for(i=p*O.pageSize;i<L;i++){s=a[i].text;if(!T._ft(s)){T._vi[i]=-1;continue;}T._vi[i]=j++;if(T._fi<0){T._fi=i;}n=document.createElement('li');if(!n){return;}if(!ul.appendChild(n)){return;}if(O.showNumbers){n.appendChild(document.createTextNode((i+1)+'. '));}T._ap(n,s,l);n.className=(a[i].value==O.value)?'ui-state-active':'';$(n).bind('click.'+nsul,function(e){var k=T._ul.children('li').index(this),b;if(k>=0){k=$.inArray(k,T._vi);if(k>=0){b=T._gi(false,false);if(b&&(b.length>k)){T._os2(b[k].value,b[k].text);}}}return false;}).bind('mouseover.'+nsul,function(e){T._ul.find('li.ui-state-highlight').toggleClass('ui-state-highlight',false);$(this).addClass('ui-state-highlight');return false;}).bind('mouseout.'+nsul,function(e){$(this).toggleClass('ui-state-highlight',false);return false;});}},_ap:function(n,s,l){var x=s.toLowerCase(),L=s.length,j=0,i=0,b,M=l.length,y;if(!L){return;}if(!M){n.appendChild(document.createTextNode(s));return;}while(j<L){j=x.substring(i,L).indexOf(l);if(j<0){j=L;}else{j+=i;}if(j>0){y=s.substring(i,j);n.appendChild(document.createTextNode(y));}if(j<L){i=j+M;b=document.createElement('span');if(!b){return;}b.className='b';if(!n.appendChild(b)){return;}y=s.substring(j,i);if(!b.appendChild(document.createTextNode(y))){return;}}}},_kd:function(e){if(!e){return;}var T=this,O=T.options,a=T._gi(false,false),L=a?a.length:0,i,r=true;switch(e.keyCode){case 9:T._hd();r=false;break;case 13:i=(T._ci>=0)?T._ci:T._fi;if((0<=i)&&(i<L)){T._os2(a[i].value,a[i].text);}else{T._hd();}r=false;break;case 27:T._hd();r=false;break;case 33:T._nr(false,O.pageSize);r=false;break;case 34:T._nr(true,O.pageSize);r=false;break;case 38:T._nr(false,1);r=false;break;case 40:T._nr(true,1);r=false;break;}return r;},_ku:function(e,t){this._cq(t,true);return false;},_os:function(){this._sv(true);this._hd();return false;},_os2:function(v,t){var T=this;if(T.options.value!=v){T.options.value=v;T.options.text=t;return T._os();}T._hd();return false;},_cp:function(){var T=this,O=T.options,x,y;y='<div class="ui-widget ui-widget-content zzsuggestselectorpopup"></div>';T._d2=$(y).insertAfter(T._d).css('z-index',O.zIndex);$('<div class="caption"></div>').appendTo(T._d2).text(O.popupHint);T._i2=$('<input type="text"/>').appendTo(T._d2).attr("autocomplete","off").bind('keydown.'+ns,function(e){T._kd(e||window.event);}).bind('keyup.'+ns,function(e){T._ku(e||window.event,this.value);});T._ul=$('<ul class="ui-widget-content ui-widget"></ul>').appendTo(T._d2).bind('scroll',function(){var a=this;if(a.clientHeight&&((a.scrollTop+a.clientHeight+4)>a.scrollHeight)){T._m();}}).bind('keydown.'+ns,function(e){T._kd(e||window.event);});T._dm=null;if(T._va){T._dm=$('<div class="ui-state-disabled caption"></div>').appendTo(T._d2);}T._B=$('<div class="buttons"></div>').appendTo(T._d2);y='<button class="ui-corner-all ui-state-default"><span class="ui-icon ui-icon-circle-close"></span><span class="text"></span></button>';$(y).appendTo(T._B).bind('click.'+ns,function(){T._hd();return false;}).bind('mousedown.'+ns,function(){$(this).addClass('ui-state-active');}).bind('mouseup.'+ns,function(){$(this).removeClass('ui-state-active');}).bind('mouseover.'+ns,function(){$(this).addClass('ui-state-hover');}).bind('mouseout.'+ns,function(){$(this).removeClass('ui-state-hover');}).find('span.text').append(document.createTextNode(O.closeButtonCaption));T._w=$('<div class="wait ui-widget-content ui-state-highlight"></div>').appendTo(T._d2).text(O.loadingCaption).css('display','none');if(O.adjustDropdownWidth){x=T._d2.get(0);y=T._d.get(0);x.style.width=(y.clientWidth+x.clientWidth-x.offsetWidth-parseInt($.curCSS(x,'padding-left',false),10)-parseInt($.curCSS(x,'padding-right',false),10))+'px';}},n:function(){this._mc();},_mc:function(){var T=this,m;if(T._dm){m=T._c.gi().nm;T._dm.text(m?T.options.noMoreDataCaption:T.options.scrollDownCaption);}},_hd:function(){var T=this,x=parseInt(T._d2.css('z-index'),10);x=jQuery.inArray(x,z);if(x>=0){z.splice(x,1);}T._d2.css('z-index',T.options.zIndex).css('display','none');},_sw:function(){var T=this,x;T._d2.css('display','block');if(z.length){x=z[z.length-1]+1;z[z.length]=x;}else{x=T.options.zIndex;z[0]=x;}T._d2.css('z-index',x);this._mc();T._fi2();T._f(false);},_fi2:function(){var x=this._i2.get(0);x.select();x.focus();},_p:function(){var T=this;if(T._d2){if(T._d2.css('display')=='block'){T._hd();return;}}else{T._cp();}T._sw();},_sv:function(u){var T=this,O=T.options,s=T._s;if((O.value===false)){return;}if(T._h){T._h.val(O.value);}T._i.val(O.text);if(u){if(s){s.val(O.value);if(s.get(0).onchange){s.get(0).onchange.call(s.get(0));}}else if(O.onselect){O.onselect.call(T);}}},_bc:function(j){var T=this;j.bind('click.'+ns,function(e){T._p();return false;});},_ct:function(){if(this._t){clearTimeout(this._t);}},destroy:function(){var T=this;T._x=true;this._ct();if(T._c){T._c.z();}if(T._d2){T._d2.remove();}if(T._d){T._d.remove();}T._d2=null;T._d=null;if(T._s){T._s.removeClass('.ui-helper-hidden');}T._j.removeData(ns);}});$.extend($.ui.zzSuggestSelector.prototype,{version:'1.3.0',options:{name:false,value:false,text:'',onselect:null,items:null,url:false,pageSize:20,cacheMaxSize:50*1024,cgiParamKeyword:'q',cgiParamPagesize:'l',cgiParamPage:'p',cgiParamTimestamp:'t',cgiParamsUser:{},ajaxError:null,delay:500,inlineCSS:false,showButton:true,buttonCaption:'',popupHint:'Select an item from the list. Type a few letters to narrow the list.',loadingCaption:'Loading...',closeButtonCaption:'Close',scrollDownCaption:'Scroll down for more data',noMoreDataCaption:'All data for your query is in the list',zIndex:500,showNumbers:false,adjustDropdownWidth:true}});})(jQuery);
