$.fn.CustomDropdown=function(n){function tu(){if(!n)throw new Error("No options specified");if(n.grouped){if(!n.groupsFetchUrl||n.groupsFetchUrl.trim()==="")throw new Error("No groupsFetchUrl specified when grouped is enabled");if(n.groupFetchType===v[0]&&!n.optionGroupProperty)throw new Error("No optionGroupProperty specified when groupFetchType is "+v[0]);if(n.groupFetchType===v[1]&&!n.optionsInGroupProperty)throw new Error("No optionsInGroupProperty specified when groupFetchType is "+v[1]);}if(!n.targetInputId||n.targetInputId.trim()==="")throw new Error("No targetInputId specified");if(n.multi===!0){var t=$("#"+n.targetInputId);if(!t.is("select")||!t.prop("multiple"))throw new Error("Target input must be a multiple select element");}}function iu(){var n="";n+='<div id="'+ot+'" class="custom-dropdown-input-box">';pr&&(n+='   <div class="custom-dropdown-head">',n+=yr,n+='       <span class="custom-dropdown-close"><i class="icon-left-small"><\/i><\/span>',n+="   <\/div>");n+='   <div class="custom-dropdown-search-bar">';n+='       <input type="text" class="custom-dropdown-search" autocomplete="off" maxlength="30" placeholder="Search by keyword" />';n+='       <span class="btn-search-icon"><i class="icon-search"><\/i><\/span>';n+="   <\/div>";n+='   <div class="custom-dropdown-option-list-container">';t.length>0?f?i.length>0&&(n+=cr(t,i)):n+=or(t):n+='<div class="custom-dropdown-placeholder"><\/div>';n+="   <\/div>";n+="<\/div>";ot.indexOf("Popup")>-1?$("#ctsDropdownPopup").append(n):ot.indexOf("SellCar")>-1?ci!=undefined&&$("#ctsComboboxSellCar #"+ci).append(n):$("#ctsDropdown").append(n)}function nt(){var n=o.val();e||r===undefined||n===r.toString()?e&&r!==undefined&&!fr(n,r)?ct.removeClass("custom-dropdown-default-value-box").addClass("custom-dropdown-has-value-box2"):ct.removeClass("custom-dropdown-has-value-box").addClass("custom-dropdown-default-value-box"):(n>0||n!="0"&&n!=undefined&&n!="")&&ct.removeClass("custom-dropdown-default-value-box").addClass("custom-dropdown-has-value-box")}function kt(n){window.CustomDropdownCache=window.CustomDropdownCache||{};var i=hi(ei,wt,bt,ri);if(window.CustomDropdownCache[i]&&(t=window.CustomDropdownCache[i],n instanceof Function))return n(!0);t=[];$.ajax({url:wt,type:bt,data:ri,success:function(u){if(c&&it===k[0]&&t.push({value:r,text:l,highlight:!1}),u&&u.length>0){for(var e=0;e<u.length;e++)t.push({value:u[e][rt],text:ui?u[e][ut]+" - "+u[e][rt]:u[e][ut],groupId:f?u[e][wr]:undefined,highlight:e<kr?!0:!1});window.CustomDropdownCache[i]=t}c&&it===k[1]&&t.push({value:r,text:l,highlight:!1});n instanceof Function&&n(!0)},error:function(){n instanceof Function&&n(!1)}})}function bi(){u.addClass("show");$("#popup-mask").length&&($("#popup-mask .bread-crum").addClass("show"),$("#popup-mask").removeClass("hidden"),ru());y();fu();ai instanceof Function&&ai()}function ki(){u.removeClass("show");$("#popup-mask").length&&($("#popup-mask .bread-crum").removeClass("show"),$("#popup-mask").addClass("hidden"))}function ru(){try{var i=u.parent(),n=i.attr("id"),t=n!=""?n.replace("step",""):0;parseInt(t)>0&&stepPost.change(parseInt(t))}catch(r){}}function di(){t.length>=dr?u.find(".custom-dropdown-search-bar").addClass("show"):u.find(".custom-dropdown-search-bar").removeClass("show")}function y(){var n=u.find(".custom-dropdown-option-item.active"),t;n.length>0&&(t=n.offset().top-u.find(".custom-dropdown-option-list").offset().top-105,u.find(".custom-dropdown-option-list-container").scrollTop(t))}function uu(){u.find(".custom-dropdown-option-list-container").scrollTop(0)}function si(n){var t='<div class="custom-dropdown-search-no-results">';t+='No results match <span class="keyword">'+n+"<\/span>";t+="<\/div>";u.find(".custom-dropdown-option-list-container").html(t)}function hi(n,t,i,r){var f="",u,e,o;if(t&&(f+=t),i&&(f+=i),typeof r=="object"&&(f+=JSON.stringify(r)),f==="")return undefined;for(u=0,e=0;e<f.length;e++)o=f.charCodeAt(e),u=(u<<5)-u+o,u=u&u;return n+u.toString()}function fu(){var n,t;$("body").attr("style")===undefined&&(n=$("body").width(),$("body").css("overflow","hidden"),t=$("body").width()-n,$("body").css("margin-right",t+"px"))}function gi(){$("body").removeAttr("style")}function eu(){alert("Dropdown list is disabled")}function nr(n){$(n).removeClass("active")}function ht(n){$(n).addClass("active")}function dt(){u.find(".custom-dropdown-option-item.active").removeClass("active")}function gt(){var n,i;t=[];g=!1;n=o.val();o.val(r);i=o.val();w instanceof Function&&(e||n===i?e&&!fr(n,i)&&w():w());b.html(l);pi instanceof Function&&pi();f?a(t,f):p(t);e?et():h();nt()}function tr(n){var r=o.val(),i;o.val($(n).attr("data-value"));s&&gr.val($(n).attr("data-group-id"));i=o.val();w instanceof Function&&r!==i&&w();let t=$(n).text();if(f){let i=$(n).prevAll(".custom-dropdown-group-item").first().text();!i||(t=i+" "+t)}b.text(t)}function ni(n){var t=u.find('.custom-dropdown-option-item[data-value="'+n+'"]');t.length>0&&(tr(t),dt(),ht(u.find('.custom-dropdown-option-item[data-value="'+n+'"]')))}function h(){dt();var n=o.val();ht(u.find('.custom-dropdown-option-item[data-value="'+n+'"]'))}function ou(n){var r=$(n).attr("data-value"),u=!0,t=o.val(),i;if(t&&t.length>0)for(i=0;i<t.length;i++)if(r===t[i]){u=!1;break}u&&(t||(t=[]),t.push(r),o.val(t),w instanceof Function&&previousVal!==currentVal&&w())}function ir(n){var r=$(n).attr("data-value"),t=o.val(),i;if(t&&t.length>0)for(i=0;i<t.length;i++)if(r===t[i]){t=jQuery.grep(t,function(n){return n!==r});o.val(t);w instanceof Function&&previousVal!==currentVal&&w();break}}function su(n,t){var i='<option value="'+n+'" selected>'+t+"<\/option>";o.append(i)}function rr(n){o.find('option[value="'+n+'"]').remove()}function hu(n,t){b.find(".custom-dropdown-selected-option").length===0&&b.empty();var i='<span class="custom-dropdown-selected-option">'+t+'<span class="custom-dropdown-remove-selected" data-value="'+n+'"><\/span><\/span>';b.append(i)}function ur(n){b.find('.custom-dropdown-remove-selected[data-value="'+n+'"]').parent().remove();b.find(".custom-dropdown-selected-option").length===0&&b.html(l)}function et(){var n,t;if(dt(),n=o.val(),n&&n.length)for(t=0;t<n.length;t++)ht(u.find('.custom-dropdown-option-item[data-value="'+n[t]+'"]'))}function fr(n,t){if(!n&&!t)return!0;if(!n&&t||n&&!t)return!1;if(n.length===0&&n.length===t.length)return!0;if(n.length>0&&(!t||t.length===0)||(!n||n.length===0)&&t.length>0||n.length!==t.length)return!1;n=n.sort(function(n,t){return n-t});t=t.sort(function(n,t){return n-t});for(var i=0,r=n.length;i<r;i++)if(n[i]!==t[i])return!1;return!0}function er(n){var r=[],i,u;if(!n)return r;for(lowercaseParam=n.toLowerCase(),i=0;i<t.length;i++)t[i].text.toLowerCase().indexOf(lowercaseParam)===0&&(u=t[i].text.slice(0,n.length),r.push({value:t[i].value,text:t[i].text.replace(u,'<span class="custom-dropdown-highlight">'+u+"<\/span>"),highlight:t[i].highlight}));return r}function p(n){t.length>0?u.find(".custom-dropdown-option-list-container").html(or(n)):u.find(".custom-dropdown-option-list-container").html("");di()}function or(n){for(var i='<ul class="custom-dropdown-option-list">',t=0;t<n.length;t++)ti?i+='   <li class="custom-dropdown-option-item'+(n[t].value===r?" custom-dropdown-default-option":"")+(n[t].highlight?" highlight":"")+'" data-value="'+n[t].value+'">'+n[t].text+"<\/li>":n[t].value!==r&&(i+='   <li class="custom-dropdown-option-item'+(n[t].highlight?" highlight":"")+'" data-value="'+n[t].value+'">'+n[t].text+"<\/li>");return i+"<\/ul>"}function sr(n){window.CustomDropdownCache=window.CustomDropdownCache||{};var t=hi(ei,at,vt,yt);if(window.CustomDropdownCache[t])return i=window.CustomDropdownCache[t],n(!0);$.ajax({url:at,type:vt,data:yt,success:function(r){if(r&&r.length>0){for(var u=0;u<r.length;u++)s?i.push({value:r[u][tt],text:r[u][pt].trim(),link:r[u][ii]}):i.push({value:r[u][tt],text:r[u][pt].trim()});window.CustomDropdownCache[t]=i}n instanceof Function&&n(!0)},error:function(){n instanceof Function&&n(!1)}})}function hr(n){window.CustomDropdownCache=window.CustomDropdownCache||{};var u=hi(ei,at,vt,yt);if(window.CustomDropdownCache[u])return i=window.CustomDropdownCache[u].groups,t=window.CustomDropdownCache[u].options,n(!0);$.ajax({url:at,type:vt,data:yt,success:function(f){var h,e,o;if(c&&it===k[0]&&t.push({value:r,text:l,highlight:!1}),f&&f.length>0){for(h=0;h<f.length;h++)if(s?i.push({value:f[h][tt],text:f[h][pt].trim(),link:f[h][ii]}):i.push({value:f[h][tt],text:f[h][pt].trim()}),e=f[h][br],e&&e.length>0)for(o=0;o<e.length;o++)s?t.push({value:e[o][rt],text:ui?e[o][ut]+" - "+e[o][rt]:e[o][ut],link:e[o][li],groupId:f[h][tt]}):t.push({value:e[o][rt],text:ui?e[o][ut]+" - "+e[o][rt]:e[o][ut],groupId:f[h][tt]});window.CustomDropdownCache[u]={groups:i,options:t}}c&&it===k[1]&&t.push({value:r,text:l,highlight:!1});n instanceof Function&&n(!0)},error:function(){n instanceof Function&&n(!1)}})}function cu(n){var f={options:[],groups:[]},o,e,u,h;if(!n)return f;for(o=[],lowercaseParam=n.toLowerCase(),u=0;u<i.length;u++)i[u].text.toLowerCase().indexOf(lowercaseParam)===0&&(e=i[u].text.slice(0,n.length),s?f.groups.push({value:i[u].value,text:i[u].text.replace(e,'<span class="custom-dropdown-highlight">'+e+"<\/span>"),highlight:i[u].highlight,link:i[u].link}):f.groups.push({value:i[u].value,text:i[u].text.replace(e,'<span class="custom-dropdown-highlight">'+e+"<\/span>"),highlight:i[u].highlight}),o.push(i[u].value));for(h=[],u=0;u<t.length;u++)t[u].text.toLowerCase().indexOf(lowercaseParam)===0?(e=t[u].text.slice(0,n.length),s?f.options.push({value:t[u].value,text:t[u].text.replace(e,'<span class="custom-dropdown-highlight">'+e+"<\/span>"),groupId:t[u].groupId,highlight:t[u].highlight,link:t[u].link}):f.options.push({value:t[u].value,text:t[u].text.replace(e,'<span class="custom-dropdown-highlight">'+e+"<\/span>"),groupId:t[u].groupId,highlight:t[u].highlight}),t[u].value!==r&&h.push(t[u].groupId)):o.indexOf(t[u].groupId)>-1&&(s?f.options.push({value:t[u].value,text:t[u].text,groupId:t[u].groupId,highlight:t[u].highlight,link:t[u].link}):f.options.push({value:t[u].value,text:t[u].text,groupId:t[u].groupId,highlight:t[u].highlight}));for(u=0;u<i.length;u++)h.indexOf(i[u].value)>-1&&o.indexOf(i[u].value)<0&&(s?f.groups.push({value:i[u].value,text:i[u].text,highlight:i[u].highlight,link:i[u].link}):f.groups.push({value:i[u].value,text:i[u].text,highlight:i[u].highlight}));return f}function lu(n,t){var r={},i,u;if(n.length>0)for(i=0;i<n.length;i++){if(!r[n[i].groupId])for(r[n[i].groupId]={options:[]},u=0;u<t.length;u++)if(t[u].value===n[i].groupId){r[n[i].groupId].name=t[u].text;s&&(r[n[i].groupId].link=t[u].link);break}r[n[i].groupId].options.push(n[i])}return r}function a(n,i){t.length>0?u.find(".custom-dropdown-option-list-container").html(cr(n,i)):u.find(".custom-dropdown-option-list-container").html("");di()}function cr(n,t){var e=lu(n,t),c='<ul class="custom-dropdown-option-list">',h="",l="",f,u,i,o;for(f in e)if(e[f].options.length>0)for(f!=="undefined"&&(h+=s?'<li class="custom-dropdown-group-item custom-dropdown-option-item" data-group-id="'+f+'" data-group-link="'+e[f].link+'" >'+e[f].name+"<\/li>":'<li class="custom-dropdown-group-item" data-group-id="'+f+'">'+e[f].name+"<\/li>"),u=e[f].options,i=0;i<u.length;i++)u[i].value===r?(o=typeof e[f]!="undefined"?typeof e[f].name!="undefined"?e[f].name.indexOf("<")==-1?e[f].name.trim():"":"":"",l+=s?'<li class="custom-dropdown-option-item'+(f!=="undefined"?" grouped":"")+(u[i].value===r?" custom-dropdown-default-option":"")+(u[i].highlight?" highlight":"")+'" data-value="'+o+'" data-group-name="'+o+'" data-group-link="'+u[i].link+'" >'+u[i].text+"<\/li>":'<li class="custom-dropdown-option-item'+(f!=="undefined"?" grouped":"")+(u[i].value===r?" custom-dropdown-default-option":"")+(u[i].highlight?" highlight":"")+'" data-value="'+o+'" data-group-name="'+o+'">'+u[i].text+"<\/li>"):h+=s?'<li class="custom-dropdown-option-item'+(f!=="undefined"?" grouped":"")+(u[i].value===r?" custom-dropdown-default-option":"")+(u[i].highlight?" highlight":"")+'" data-value="'+u[i].value+'" data-group-name="'+o+'" data-group-link="'+u[i].link+'" >'+u[i].text+"<\/li>":'<li class="custom-dropdown-option-item'+(f!=="undefined"?" grouped":"")+(u[i].value===r?" custom-dropdown-default-option":"")+(u[i].highlight?" highlight":"")+'" data-value="'+u[i].value+'" data-group-name="'+o+'">'+u[i].text+"<\/li>";return it===k[0]?c+=ti?l+h:h:it===k[1]&&(c+=ti?l+h:h),c+"<\/ul>"}var k=["top","bottom"],v=["separated","merged"],ct=$(this),ii,e,c,r,li;tu();var d={},lr=n.targetInputId,ar=n.targetTextId,vr=n.targetGroupInputId,ot=n.boxId||(new Date).getTime(),yr=n.boxTitle||"Select an option",ci=n.parentId,ti=n.isShowDefaultOption!=undefined?n.isShowDefaultOption:!0,pr=n.isHeader!=undefined?n.isHeader:!0,f=n.grouped===!0,s=n.groupedLink===!0;if(f){var st=v.indexOf(n.groupFetchType)>0?n.groupFetchType:v[0],i=n.groupList||[],lt=i.length>0,at=n.groupsFetchUrl,vt=n.groupsFetchMethod||"get",yt=n.groupsFetchData,tt=n.groupValueProperty||"GroupId",pt=n.groupTextProperty||"GroupName",wr=n.optionGroupProperty||"GroupId",br=n.optionsInGroupProperty||"Options";s&&(ii=n.groupLinkProperty||"GroupLink")}e=n.multi===!0;c=!0;n.defaultOptionAppend===!1&&(c=n.defaultOptionAppend);r=e?n.defaultValue!==undefined?n.defaultValue:null:n.defaultValue!==undefined?n.defaultValue:0;var l=n.defaultText||"Select an option",it=k.indexOf(n.defaultOptionPosition)>0?n.defaultOptionPosition:k[0],kr=n.highlightCount||0,t=n.optionList||[],g=t.length>0,wt=n.optionsFetchUrl,bt=n.optionsFetchMethod||"get",ri=n.optionsFetchData,rt=n.optionValueProperty||"Id",ut=n.optionTextProperty||"Name",ui=n.appendValueAfterText||!1;s&&(li=n.optionLinkProperty||"Link");var dr=n.enableTextSearchThreshold||10,ft=n.disabled===!0,fi={NORMAL:"cd",GROUPED:"cdg",GROUPED_MERGED:"cdgm"},ei=(f&&st===v[0]?fi.GROUPED:f?fi.GROUPED_MERGED:fi.NORMAL)+ot;var ai=n.onShow,vi=n.onHide,yi=n.onSelected,pi=n.onReset,wi=n.onClickWhenDisabled||eu,w=n.onValueChanged,o=$("#"+lr),b=$("#"+ar),gr=$("#"+vr);iu();nt();var u=$("#"+ot),nu=u.find(".custom-dropdown-close"),oi=u.find(".custom-dropdown-search");ct.click(function(){if(ft){wi instanceof Function&&wi();return}g||(f?f&&st===v[0]?kt(function(n){if(!n){c&&t.push({value:r,text:l,highlight:!1});a(t,i);o.val(r);return}g=!0;lt||sr(function(n){n&&(lt=!0,a(t,i),e?et():h(),y())})}):f&&st===v[1]&&hr(function(n){if(!n){c&&t.push({value:r,text:l,highlight:!1});a(t,i);o.val(r);return}lt=!0;g=!0;a(t,i);e?et():h();y()}):kt(function(n){if(!n){c&&t.push({value:r,text:l,highlight:!1});p(t);o.val(r);return}g=!0;t.length>0&&(p(t),e?et():h(),y())}));bi()});nu.click(function(){ki();gi();vi instanceof Function&&vi()});oi.keyup(function(){var n,r,u;if(ft){oi.val("");return}uu();n=$(this).val();n&&n!==""?f&&!e?(u=cu(n),u.options.length>0||u.groups.length>0?(a(u.options,u.groups),h()):si(n)):!f&&e?(r=er(n),r.length>0?(p(r),et()):si(n)):f||e||(r=er(n),r.length>0?(p(r),h()):si(n)):f&&!e?(a(t,i),h(),y()):!f&&e?(p(t),et(),y()):f||e||(p(t),h(),y())});u.on("click",".custom-dropdown-option-item",function(){var n,r,u;ft||(n=this,e?f||(r=$(n).attr("data-value"),u=$(n).text(),$(n).hasClass("active")?(ir(n),nr(n),rr(r),ur(r)):(ou(n),ht(n),hu(r,u),su(r,u))):(tr(n),dt(),ht(n),ki(),oi.val(""),setTimeout(function(){f?(a(t,i),h()):(p(t),h())},300),gi()),nt(),yi instanceof Function&&yi())});b.on("click",".custom-dropdown-remove-selected",function(n){n.stopPropagation();var r=$(this),t=$(r).attr("data-value"),i=u.find('.custom-dropdown-option-item[data-value="'+t+'"]');ir(i);nr(i);rr(t);ur(t);nt()});return d.changeStatus=function(n){ft===n&&(ft=!n,gt())},d.changeOptionsFetchUrl=function(n){wt!==n&&(wt=n,gt())},d.changeOptionsFetchData=function(n){ri=n;gt()},d.changeOptionsFetchMethod=function(n){bt!==n&&(bt=n,gt())},d.changeValue=function(n){if(!ft&&!e){if(t.length>0){ni(n);nt();return}f?f&&st===v[0]?kt(function(u){if(!u){c&&t.push({value:r,text:l,highlight:!1});a(t,i);return}sr(function(r){r&&(g=!0,t.length>0&&(a(t,i),h(),y(),ni(n),nt()))})}):f&&st===v[1]&&hr(function(u){if(!u){c&&t.push({value:r,text:l,highlight:!1});a(t,i);return}lt=!0;g=!0;t.length>0&&(a(t,i),h(),y(),ni(n),nt())}):kt(function(i){if(!i){c&&t.push({value:r,text:l,highlight:!1});p(t);return}g=!0;t.length>0&&(p(t),h(),y(),ni(n),nt())})}},d.scrollToActive=function(){y()},d.showPopup=function(){bi()},d}