/*
HeapBox 0.9.0
(c) 2013 Filip Bartos
*/
(function(e,t,n,r){function o(t,n){this.element=t;this.options=e.extend({},s,n);this._defaults=s;this._name=i;this.instance;this.callbackManager=new Array;this.init()}var i="heapbox",s={effect:{type:"slide",speed:"slow"},emptyMessage:"Empty",openStart:function(){},openComplete:function(){},closeStart:function(){},closeComplete:function(){},onChange:function(){}};o.prototype={init:function(){this.instance=this.createInstance();this._createElements();this._hideSelect();this._setEvents()},createInstance:function(){return{heapId:Math.round(Math.random()*99999999),state:false}},_setEvents:function(){var t=this;e(n).on("click","html",function(e){e.stopPropagation();t._closeheap(true,function(){},function(){})})},_createElements:function(){var t=this;heapBoxEl=e("
",{id:"heapbox_"+this.instance.heapId,"class":"heapBox",data:{sourceElement:this.element}});heapBoxheapEl=this._getheap();isHeapEmpty=heapBoxheapEl==null?true:false;heapBoxHolderEl=this._createHolder(isHeapEmpty);heapBoxHandlerEl=e("",{href:"","class":"handler"});heapBoxEl.append(heapBoxHolderEl);heapBoxEl.append(heapBoxHandlerEl);heapBoxEl.append(heapBoxHandlerEl);heapBoxEl.append(heapBoxheapEl);this.heapBoxEl=heapBoxEl;e(this.element).before(this.heapBoxEl);this._setHeapboxControlsEvents(isHeapEmpty)},_setHeapboxControlsEvents:function(e){this._setHeapboxHolderEvents(e);this._setHeapboxHandlerEvents(e)},_setHeapboxHolderEvents:function(t){var n=this;heapBoxEl=e("div#heapbox_"+this.instance.heapId);if(t){heapBoxEl.find(".holder").click(function(e){e.preventDefault()})}else{heapBoxEl.find(".holder").click(function(e){e.preventDefault();e.stopPropagation();n._handlerClicked()})}},_setHeapboxHandlerEvents:function(t){var n=this;heapBoxEl=e("div#heapbox_"+this.instance.heapId);if(t){heapBoxEl.find(".handler").click(function(e){e.preventDefault()})}else{heapBoxEl.find(".handler").click(function(e){e.preventDefault();e.stopPropagation();n._handlerClicked()})}},_getheap:function(){var t=this;heapBoxheapEl=e("",{"class":"heap"});heapBoxheapOptionsEl=e("",{"class":"heapOptions"});heapBoxheapEl.append(heapBoxheapOptionsEl);e(this.element).children().each(function(){heapBoxOptionLiEl=e("",{"class":"heapOption"});heapBoxheapOptionAEl=e("",{href:"",rel:e(this).attr("value"),title:e(this).text(),text:e(this).text(),click:function(e){e.preventDefault();e.stopPropagation();t._heapChanged(t,this)}});heapBoxOptionLiEl.append(heapBoxheapOptionAEl);heapBoxheapOptionsEl.append(heapBoxOptionLiEl)});heapBoxheapEl.append(heapBoxheapOptionsEl);return e(this.element).children().length==0?null:heapBoxheapEl},_createHolder:function(t){heapBoxHolderEl=e("",{href:"","class":"holder",text:t?this.options.emptyMessage:e(this.element).children().first().text()});return heapBoxHolderEl},_handlerClicked:function(e){if(this.instance.state){this._closeheap()}else{if(!e)this._closeOthers();else this._openheap()}},_heapChanged:function(t,n){holderEl=e("#heapbox_"+this.instance.heapId).find(".holder");holderEl.text(e(n).text());holderEl.attr("rel",e(n).attr("rel"));this._closeheap(true,function(){},function(){});e(this.element).val(e(n).attr("rel"));this.options.onChange(e(n).attr("rel"))},_heapSetFirst:function(t){holderEl=e("#heapbox_"+this.instance.heapId).find(".holder");holderEl.text(e(this.element).children().first().text());holderEl.attr("rel",e(this.element).children().first().attr("value"));e(this.element).val(e(this.element).children().first().attr("value"))},_closeheap:function(t,n,r){heapEl=e("#heapbox_"+this.instance.heapId).find(".heap");if(heapEl.is(":animated")&&!t)return false;this.instance.state=false;if(t){n=n;r=r}else{n=this.options.closeStart;r=this.options.closeComplete}n.call();switch(this.options.effect.type){case"fade":heapEl.fadeOut(this.options.effect.speed,r);break;case"slide":heapEl.slideUp(this.options.effect.speed,r);break;case"standard":heapEl.css("display","none");r.call();break;default:heapEl.slideUp(this.options.effect.speed,r);break}},_openheap:function(){heapEl=e("#heapbox_"+this.instance.heapId).find(".heap");if(heapEl.is(":animated"))return false;this.instance.state=true;this.options.openStart.call();switch(this.options.effect.type){case"fade":heapEl.fadeIn(this.options.effect.speed,this.options.openComplete);break;case"slide":heapEl.slideDown(this.options.effect.speed,this.options.openComplete);break;case"standard":heapEl.css("display","block");this.options.openComplete.call();break;default:heapEl.slideDown(this.options.effect.speed,this.options.openComplete);break}},_closeOthers:function(){var t=this;e("div[id^=heapbox_]").each(function(n){el=e("div#"+e(this).attr("id"));if(el.data("sourceElement")){sourceEl=e.data(this,"sourceElement");heapBoxInst=e.data(sourceEl,"plugin_"+i);if(t.instance.heapId!=heapBoxInst.instance.heapId){if(heapBoxInst.instance.state){t._callbackManager("change","_closeOthers",true);heapBoxInst._closeheap(true,function(){},function(){t._callbackManager("change","_closeOthers",false)})}}}});t._callbackManager("test","_closeOthers")},_callbackManager:function(e,t,n){if(!this.callbackManager[t])this.callbackManager[t]=0;if(e=="change"){n?this.callbackManager[t]++:this.callbackManager[t]--;this._callbackManager("test",t)}else if(e=="test"){if(this.callbackManager[t]==0)this._handlerClicked(true)}},setData:function(t){self=this;var n=jQuery.parseJSON(t);e(this.element).find("option").remove();e.each(n,function(){option=e("",{value:this.value,text:this.text});e(self.element).append(option)});this.update()},update:function(){heap=this._getheap();e("div#heapbox_"+this.instance.heapId+" .heap").remove();e("div#heapbox_"+this.instance.heapId).append(heap);this._heapSetFirst(this)},_hideSelect:function(){e(this.element).css("display","none")},hide:function(){e("div#heapbox_"+this.instance.heapId).css("visibility","hidden")},show:function(){e("div#heapbox_"+this.instance.heapId).css("visibility","visible")},disable:function(){heapBoxEl=e("div#heapbox_"+this.instance.heapId);heapBoxEl.addClass("disabled");heapBoxEl.find(".holder").unbind("click");heapBoxEl.find(".holder").click(function(e){e.preventDefault()});heapBoxEl.find(".handler").unbind("click");heapBoxEl.find(".handler").click(function(e){e.preventDefault()});return this},enable:function(){heapBoxEl=e("div#heapbox_"+this.instance.heapId);heapBoxEl.removeClass("disabled");this._setHeapboxControlsEvents();return this}};e.fn[i]=function(t,n){return this.each(function(){if(!e.data(this,"plugin_"+i)){e.data(this,"plugin_"+i,new o(this,t))}else{heapBoxInst=e.data(this,"plugin_"+i);switch(t){case"update":heapBoxInst.update();break;case"set":heapBoxInst.setData(n);break;case"hide":heapBoxInst.hide();break;case"show":heapBoxInst.show();break;case"disable":heapBoxInst.disable();break;case"enable":heapBoxInst.enable();break}}})}})(jQuery,window,document)