/*
 Ajax Autocomplete
 Version: 1.2.1
 (c) 2013 DMXzone.com
 @build 13-06-2013 16:32:00
*/
(function(c){c.fn.extend({autocomplete:function(b,a){var h="string"==typeof b,i="GoogleAjax"==b,a=c.extend({},c.Autocompleter.defaults,{url:h?i?"http://maps.googleapis.com/maps/api/geocode/json?sensor=false":b:null,data:h?null:b,staticData:h?/(.txt|.xml)$/.test(b):!0,delay:h?c.Autocompleter.defaults.delay:10,isGoogleAjax:i},a);a.limitName="";a.limitCode="";if(a.isGoogleAjax&&(a.searchAll=!1,a.matchSubset=!1,(h=a.gRegion?a.gRegion.split("|"):[])&&1<h.length))if(h[0]&&(a.limitCode=h[0]),h[1])a.limitName=
h[1];return this.each(function(){new c.Autocompleter(this,a)})},result:function(b){return this.bind("result",b)},search:function(){return this.trigger("search")}});c.Autocompleter=function(b,a){function h(b,f,z){var j=q.selected();if(!j)return!1;var e=j.result;v=e;if(a.multiple){var l=m(o.val());1<l.length&&(e=l.slice(0,l.length-1).join(a.multipleSeparator)+a.multipleSeparator+e);e+=a.multipleSeparator}o.val(e);a.hiddenIdField&&""!=a.hiddenIdField&&(e=c('input[name="'+a.hiddenIdField+'"]'))&&e.val(j.idVal);
if(a.gStreetField&&""!=a.gStreetField&&(l=c('input[name="'+a.gStreetField+'"]')))(e=g(j.obj,"street_address"))||(e=g(j.obj,"route")),e&&e.short_name&&e.long_name?l.val(a.gStreetFieldShort?e.short_name:e.long_name):l.val("");if(a.gStreetNumberField&&""!=a.gStreetNumberField&&(l=c('input[name="'+a.gStreetNumberField+'"]')))(e=g(j.obj,"street_number"))&&e.long_name?l.val(e.long_name):l.val("");if(a.gCityField&&""!=a.gCityField&&(l=c('input[name="'+a.gCityField+'"]')))(e=g(j.obj,"locality"))&&e.short_name&&
e.long_name?l.val(a.gCityFieldShort?e.short_name:e.long_name):l.val("");if(a.gCountryField&&""!=a.gCountryField&&(l=c('input[name="'+a.gCountryField+'"]')))(e=g(j.obj,"country"))&&e.short_name&&e.long_name?l.val(a.gCountryFieldShort?e.short_name:e.long_name):l.val("");if(a.gStateField&&""!=a.gStateField&&(l=c('input[name="'+a.gStateField+'"]')))(e=g(j.obj,"administrative_area_level_1"))&&e.short_name&&e.long_name?l.val(a.gStateFieldShort?e.short_name:e.long_name):l.val("");if(a.gPostalCodeField&&
""!=a.gPostalCodeField&&(l=c('input[name="'+a.gPostalCodeField+'"]')))(e=g(j.obj,"postal_code"))&&e.short_name&&e.long_name?l.val(a.gPostalCodeFieldShort?e.short_name:e.long_name):l.val("");a.gLatField&&""!=a.gLatField&&(e=c('input[name="'+a.gLatField+'"]'))&&e.val(j.latLng.lat());a.gLngField&&""!=a.gLngField&&(e=c('input[name="'+a.gLngField+'"]'))&&e.val(j.latLng.lng());if(a.useMap&&""!=a.useMap&&!z&&(l=c("#"+a.useMap))&&l.gMap)if(e=l.data("gmap"))a.clearAllMarkers&&!f&&l.gMap("removeAllMarkers"),
f=e.gmap,f.panTo(j.obj.geometry.location),b=new google.maps.Marker({title:j.data,draggable:a.allowDragChange?!0:!1,animation:b?null:google.maps.Animation.DROP,map:f,position:j.obj.geometry.location}),a.allowDragChange&&google.maps.event.addListener(b,"dragend",function(a){(new google.maps.Geocoder).geocode({location:a.latLng},function(a,b){if(b==google.maps.GeocoderStatus.OK){var e=a[0].formatted_address,c=k(a);t.add(e,c);c=t.load(e);q.display(c,e);h(true)}})}),e.markers.push(b);d();z||o.trigger("result",
[j.data,j.value,j]);return!0}function i(b,c){if(x==f.DEL)q.hide();else{var d=o.val();if(c||d!=v)v=d,d=p(d),d.length>=a.minChars?(o.addClass(a.loadingClass),a.matchCase||(d=d.toLowerCase()),r(d,s,u)):(u(),q.hide())}}function m(b){if(!b)return[""];var b=b.split(c.trim(a.multipleSeparator)),d=[];c.each(b,function(a,b){c.trim(b)&&(d[a]=c.trim(b))});return d}function p(b){if(!a.multiple)return b;b=m(b);return b[b.length-1]}function d(){q.hide();clearTimeout(w);u();a.mustMatch&&o.search(function(a){a||
o.val("")})}function s(f,g){if(g&&g.length&&n){u();q.display(g,f);var k=g[0].value;a.autoFill&&(p(o.val()).toLowerCase()==f.toLowerCase()&&8!=x)&&o.val().toLowerCase()==k.substring(0,o.val().length).toLowerCase()&&(o.val(o.val()+k.substring(p(v).length)),c.Autocompleter.Selection(b,v.length,v.length+k.length));q.show()}else d()}function r(b,g,f){a.matchCase||(b=b.toLowerCase());var j=t.load(b);j&&j.length?g(b,j):"string"==typeof a.url&&0<a.url.length&&(!a.staticData||!j)?(a.matchContains&&(a.extraParams=
c.extend({mc:"true"},a.extraParams)),a.searchAll&&(a.extraParams=c.extend({sa:"true"},a.extraParams)),a.isGoogleAjax?(new google.maps.Geocoder).geocode(a.gRegion?{address:b+(!a.gLimitType&&a.limitName?","+a.limitName:""),region:a.limitCode}:{address:b},function(a,c){if(c==google.maps.GeocoderStatus.OK){var j=k(a);t.add(b,j);j=t.load(b);g(b,j)}else d()}):c.ajax({url:a.url,data:!a.staticData?c.extend({q:p(b),limit:a.max},a.extraParams):"",success:function(e){var d;if(!(d=a.parse&&a.parse(e))){d=[];
for(var e=e.split("\n"),j=0;j<e.length;j++){var f=c.trim(e[j]);if(f){f=f.split("|");d[d.length]={data:f,value:f[0],idVal:a.idField&&a.hiddenIdField?f[1]:"",result:a.formatResult&&a.formatResult(f)||f[0]}}}}t.add(b,d);d=t.load(b);g(b,d)},error:function(b){var a=c('<div id="error"/>').css({position:"absolute",width:"400px",height:"300px",left:"50%",top:"50%",border:"3px solid #f00",marginLeft:"-250px",marginTop:"-150px"}).appendTo("body");c("<div/>").css({width:"400px",height:"25px",backgroundColor:"#f00",
textAlign:"center",fontWeight:"bold",color:"#fff"}).text("Ajax AutoComplete Server Error").appendTo(a);c("<div/>").css({width:"400px",height:"275px",backgroundColor:"#fff",color:"#000",overflow:"auto"}).html(b.responseText).appendTo(a);c("<div/>").css({position:"absolute",width:"15px",height:"25px",top:"0px",right:"0px",fontWeight:"bold",color:"#fff",cursor:"pointer"}).text("X").click(function(){a.remove()}).appendTo(a)}})):f(b)}function k(b){for(var d=[],c=0;c<b.length;c++){var f=b[c];if(f&&("all"==
a.gLimitType||""==a.limitCode||a.limitCode==g(f,"country").short_name))d[d.length]={data:f.formatted_address,value:f.formatted_address,latLng:f.geometry.location,result:f.formatted_address,obj:f}}return d}function g(b,a){if(b&&b.address_components)for(var d=0;d<b.address_components.length;d++){var f=b.address_components[d];if(-1!=c.inArray(a,f.types))return f}return null}function u(){o.removeClass(a.loadingClass)}var f={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188},o=c(b).attr("autocomplete",
"off").addClass(a.inputClass),w,v="",t=c.Autocompleter.Cache(a),n=0,x,q=c.Autocompleter.Select(a,b,h),y;window.opera&&c(b.form).bind("submit.autocomplete",function(){if(y)return y=!1});o.bind((window.opera?"keypress":"keydown")+".autocomplete",function(b){n=1;x=b.keyCode;switch(b.keyCode){case f.UP:q.visible()?(b.preventDefault(),q.prev()):i(0,!0);break;case f.DOWN:q.visible()?(b.preventDefault(),q.next()):i(0,!0);break;case a.multiple&&","==c.trim(a.multipleSeparator)&&f.COMMA:case f.TAB:case f.RETURN:if(h())return b.preventDefault(),
y=!0,!1;break;case f.ESC:q.hide();break;default:clearTimeout(w),w=setTimeout(i,a.delay)}}).keypress(function(){}).focus(function(){n++}).blur(function(){n=0;clearTimeout(w);w=setTimeout(d,200)}).click(function(){1<n++&&!q.visible()&&i(0,!0)}).bind("search",function(){function b(a,d){var c;if(d&&d.length)for(var e=0;e<d.length;e++)if(d[e].result.toLowerCase()==a.toLowerCase()){c=d[e];break}o.trigger("result",c&&[c.data,c.value,c])}c.each(m(o.val()),function(a,d){r(d,b,b)})}).bind("select",function(b,
a,d,c,e){q.display([c],a);h(!0,!0,e)});d()};c.Autocompleter.defaults={highlightClass:"ac_highlight",inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:2,delay:500,matchCase:!1,matchSubset:!0,matchContains:!1,gRegion:"",gLimitType:"",gStreetField:"",gStreetNumberField:"",gStreetFieldShort:!1,gPostalCodeField:"",gPostalCodeFieldShort:!1,gCityField:"",gCityFieldShort:!1,gStateField:"",gStateFieldShort:!1,gCountryField:"",gCountryFieldShort:!1,gLatField:"",gLngField:"",
useMap:"",clearAllMarkers:!0,allowDragChange:!0,idField:"",hiddenIdField:"",cacheLength:10,mustMatch:!1,extraParams:{},selectFirst:!0,max:10,autoFill:!1,width:0,multiple:!1,multipleSeparator:", ",opacity:0.8,showFullItem:!0,searchAll:!1,itemSeparator:"<br/>"};c.Autocompleter.Cache=function(b){function a(a,c){var r=!1,k=!1;if("string"==typeof a){b.matchCase||(a=a.toLowerCase());var g=a.indexOf(c);return-1==g?!1:0==g||b.matchContains}for(var h=b.searchAll?a.length:1,g=0;g<h;g++){var f=a[g];b.matchCase||
(f=f.toLowerCase());f=f.indexOf(c);-1<f&&(r=!0);0==f&&(k=!0)}return!r?!1:k||b.matchContains}function h(a,c){p>b.cacheLength&&this.flush();m[a]||p++;m[a]=c}function i(){if(!b.data)return!1;var a={},i=0;b.url||(b.cacheLength=1);a[""]=[];c.each(b.data,function(c,k){value=b.formatItem?b.formatItem(k,k,c+1,b.data.length):k;var g=value.charAt(0).toLowerCase();a[g]||(a[g]=[]);var h={value:value,data:k,result:b.formatResult&&b.formatResult(k)||value};a[g].push(h);i++<b.max&&a[""].push(h)});c.each(a,function(a,
c){b.cacheLength++;h(a,c)})}var m={},p=0;setTimeout(i,25);return{flush:function(){m={};p=0},add:h,populate:i,load:function(d){if(!b.cacheLength||!p)return null;if(!b.url&&b.matchContains){var h=[],i;for(i in m)if(0<i.length){var k=m[i];c.each(k,function(b,c){a(c.data,d)&&h.push(c)})}return h}if(b.matchSubset)for(i=d.length;i>=b.minChars;i--){if(k=m[d.substr(0,i)])return h=[],c.each(k,function(b,c){a(c.data,d)&&(h[h.length]=c)}),h}else if(m[d])return m[d];return null}}};c.Autocompleter.Select=function(b,
a,h){function i(a){var b=a.target;"UL"==b.tagName&&(b=a.relatedTarget);for(;"LI"!=b.tagName;)b=b.parentNode;return b}function m(a){k+=a;0>k?k=r.size()-1:k>=r.size()&&(k=0);r.removeClass().eq(k).addClass(p.ACTIVE)}var p={ACTIVE:"ac_over"},d=c("<div/>").hide().addClass(b.resultsClass).css("position","absolute").appendTo("body");/MSIE 6.0/.test(navigator.userAgent)||d.css("opacity",b.opacity);var s=c("<ul/>").appendTo(d).mouseover(function(a){k=c("li",s).removeClass().index(i(a));c(i(a)).addClass(p.ACTIVE)}).mouseout(function(a){c(i(a)).removeClass()}).click(function(b){c(i(b)).addClass(p.ACTIVE);
h();a.focus();return!1}),r,k=-1,g,u="";0<b.width&&d.css("width",b.width);return{display:function(a,d){g=a;u=d;s.empty();for(var h=function(a){var c=u.replace(/(\.|\?|\||\(|\)|\[|\]|\{|\}|\$|\^|\*|\+|\\)/g,"\\$1");return b.highlightClass?a.replace(RegExp((b.matchContains?"":"^")+"("+c+")","gi"),"<span class='"+b.highlightClass+"'>$1</span>"):a.replace(RegExp((b.matchContains?"":"^")+"("+c+")","gi"),"<strong>$1</strong>")},i=function(a,c){if("string"!=typeof c&&1<c.length)for(var a="<span class='ac_title'>"+
a+"</span>",d=b.idField&&b.hiddenIdField?2:1;d<c.length;d++)a+=b.itemSeparator+c[d];return a},m=0<b.max&&b.max<g.length?b.max:g.length,n=0;n<m;n++)g[n]&&c("<li/>").html(b.formatItem?b.searchAll?h(b.formatItem(g[n].value,g[n].data,n+1,m)):b.formatItem(h(g[n].value),g[n].data,n+1,m):b.showFullItem?i(h(g[n].value),g[n].data):h(g[n].value)).appendTo(s);r=s.find("li");b.selectFirst&&(r.eq(0).addClass(p.ACTIVE),k=0);c.fn.bgiframe&&s.bgiframe()},next:function(){m(1)},prev:function(){m(-1)},hide:function(){if(b.onHide)b.onHide(d);
else if(b.fxHide)switch(b.fxHide.duration||(b.fxHide.duration="normal"),b.fxHide.type.toLowerCase()){case "slide":d.slideUp(b.fxHide.duration);break;case "fade":d.fadeOut(b.fxHide.duration);break;default:d.hide()}else d.hide();k=-1},visible:function(){return d&&d.is(":visible")},current:function(){return this.visible()&&(r.filter("."+p.ACTIVE)[0]||b.selectFirst&&r[0])},show:function(){var f=c(a).offset();d.css({width:0<b.width?b.width:c(a).width(),top:f.top+a.offsetHeight,left:f.left});if(b.onShow)b.onShow(d);
else if(b.fxShow)switch(b.fxShow.duration||(b.fxShow.duration="normal"),b.fxShow.type.toLowerCase()){case "slide":d.slideDown(b.fxShow.duration);break;case "fade":d.fadeIn(b.fxShow.duration);break;default:d.show()}else d.show()},selected:function(){return g&&g[k]},emptyList:function(){s&&s.empty()},unbind:function(){d&&d.remove()}}};c.Autocompleter.Selection=function(b,a,c){if(b.createTextRange){var i=b.createTextRange();i.collapse(!0);i.moveStart("character",a);i.moveEnd("character",c);i.select()}else b.setSelectionRange?
b.setSelectionRange(a,c):b.selectionStart&&(b.selectionStart=a,b.selectionEnd=c);b.focus()}})(jQuery);
