﻿/*  Copyright Mikhail Antropov, 2007, 2008, 2009  |  http://www.convincingmail.com/
 * ---------------------------------------------------------------------------
 *
 * The AutoComplete extender
 *
 * Details and latest version at:
 * http://www.convincingmail.com/
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
 * 
 * Please don't remove this header! 
 * If you like this control you can contribute to me by a link back  from your site
 *
 * v2.0.2.4
 */
 
Type.registerNamespace("ConvincingMail.AdvancedAutoSuggest");ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior=function(h){ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior.initializeBase(this,[h]);this._inputFieldId=null;this._updateFieldId=null;this._delay=100;this._serviceUrl=null;this._lastCall=new Date().getTime();this._additionalFields=new Array(0);this._suggestionsDivId="suggestionsDiv";this._suggestionsDiv=$(this._suggestionsDivId);this._loadingDiv=null;this._loadingText=null;this._suggestOnEmptyField=false;this._template=null;this._footerTemplate=null;this._headerTemplate=null;this._doHide=true;this._tableCss="suggestionsTable";this._tableTrCss="suggestionsTr";this._tableTdCss="suggestionsTd";this._titleTrCss="titleTr";this._titleTdCss="titleTd";this._commentsTrCss="commentsTr";this._commentsTdCss="commentsTd";this._hilightedTrCss="suggestionsHilightedTr";this._loadingDivCss="suggestionsLoadingDiv";this._currentResults=null;this._selectedIndex=0;this._suggestionsList=[];this._suggestionsTrList=[];this._saveDisableSelect=[];this._iframeElement=null;this.UpdateAdditionalFields=function g(r){if(r&&r!==""){this._additionalFields.push(r)}};this.ShowSuggestions=function q(u){var v;var t=u.keyCode?u.keyCode:u.rawEvent?u.rawEvent.keyCode:null;if(t!=Sys.UI.Key.esc&&t!=Sys.UI.Key.up&&t!=Sys.UI.Key.down&&t!=Sys.UI.Key.enter){var s=$(this._inputFieldId);var x;var r="";if(s!==null){x=s.value;if((x!==null&&""!==x)||this._suggestOnEmptyField){this._additionalFields.each(function(y){if(y.indexOf("=")>0){r+="&additionalParams=";r+=y.split("=")[0];r+="|";r+=$F(y.split("=")[1])}else{r+="&additionalParams=";r+=$(y);r+="|";r+=$F(y)}});if(r===""){r="&additionalParams="}var w=new Sys.CancelEventArgs();w.Text=x;this.raisePopulating(w);if(!w.get_cancel()){this.ShowLoading();v=new Ajax.Request(this._serviceUrl,{method:"post",parameters:"tryValue="+encodeURIComponent(x)+r,onSuccess:this.OnSuccess.bindAsEventListener(this)})}}else{this._doHide=true;this.HideSuggestions()}}}};this.ShowLoading=function k(){if(this._loadingText&&!this._loadingText.blank()){this.PositionBox(this._inputFieldId,this._loadingDiv)}else{}};this.HideLoading=function d(){this._loadingDiv.style.display="none"};this.OnSuccess=function n(G){this.HideLoading();this._suggestionsDiv.style.display="none";while(this._suggestionsDiv.firstChild){this._suggestionsDiv.removeChild(this._suggestionsDiv.firstChild)}var B=G.responseText.stripTags().evalJSON(true);this._currentResults=B;var A=B.Items;var J,C,D;var v=new Element("table",{cellSpacing:"0",cellPadding:"0"});var z=new Element("tbody");var t,x,s,u,y,F,I,r,w,H;this._suggestionsDiv.appendChild(v);v.appendChild(z);Element.extend(v);v.addClassName(this._tableCss);var E;Array.clear(this._suggestionsList);Array.clear(this._suggestionsTrList);this._selectedIndex=-1;if(this._headerTemplate!==null&&this._headerTemplate!=="undefined"){s=new Element("tr");x=new Element("td");z.appendChild(s);s.appendChild(x);t=new Element("div");x.appendChild(t);t.update(this._headerTemplate.evaluate(B.Header))}for(E=0;E<A.length;E++){J=A[E].Title.replace("\r\n","");C=A[E].TitleValue.replace("\r\n","");D=A[E].Description;H=A[E].Id;s=new Element("tr",{"class":this._tableTrCss});x=new Element("td",{"class":this._tableTdCss});s.addClassName(this._tableTrCss);x.addClassName(this._tableTdCss);z.appendChild(s);s.appendChild(x);Array.add(this._suggestionsList,A[E]);Event.observe(x,"click",this.ReplaceValue.bindAsEventListener(this,E));Event.observe(x,"mouseover",this.DisableHide.bindAsEventListener(this,E));Event.observe(x,"mouseout",this.EnableHide.bindAsEventListener(this,E));if(this._template!==null&&this._template!=="undefined"){t=new Element("div");x.appendChild(t);Array.add(this._suggestionsTrList,t);t.update(this._template.evaluate(A[E]))}else{I=new Element("table");F=new Element("tbody");Array.add(this._suggestionsTrList,I);u=new Element("tr",{"class":this._titleTrCss});y=new Element("td",{"class":this._titleTdCss});u.addClassName(this._titleTrCss);y.addClassName(this._titleTdCss);x.appendChild(I);I.appendChild(F);F.appendChild(u);u.appendChild(y);y.update(this.FixText(J));if(D!==null&&D!==""){r=new Element("tr",{"class":this._commentsTrCss});w=new Element("td",{"class":this._commentsTdCss});r.addClassName(this._commentsTrCss);w.addClassName(this._commentsTdCss);F.appendChild(r);r.appendChild(w);w.update(this.FixText(D))}}}if(this._footerTemplate!==null&&this._footerTemplate!=="undefined"){s=new Element("tr");x=new Element("td");z.appendChild(s);s.appendChild(x);t=new Element("div");x.appendChild(t);t.update(this._footerTemplate.evaluate(B.Footer))}this.raisePopulated(B);this.PositionBox(this._inputFieldId,this._suggestionsDiv);this._doHide=true};this.FixText=function b(r){r=r.replace(/\+\+\+\+/g,",");r=r.replace(/\-\-\-\-/g,"|");return r};this.PositionBox=function o(x,A){var v=$(x);var z=0;if(A.style.display=="none"){if(this._suggestionsDiv==A){var r=new Sys.CancelEventArgs();this.raiseShowing(r);if(r.get_cancel()){return}}var s=v.offsetTop+v.offsetHeight;var y=v.offsetLeft;while(v.offsetParent!==null){v=v.offsetParent;s+=v.offsetTop;y+=v.offsetLeft;if(v.style.zIndex&&v.style.zIndex>z){z=v.style.zIndex}}A.style.display="";A.style.zIndex=z+1;A.style.top=s+"px";A.style.left=y+"px";A.style.width=$(x).offsetWidth+"px";A.style.overflow="auto";if((Sys.Browser.agent===Sys.Browser.InternetExplorer)&&(Sys.Browser.version<7)){var w,u;var C;w=0;for(u=0;u<this._saveDisableSelect.length;u++){this._saveDisableSelect[u].tag.disabled=this._saveDisableSelect[u].visib}this._saveDisableSelect.clear();C=document.getElementsByTagName("SELECT");for(u=0;u<C.length;u++){this._saveDisableSelect[w]={tag:C[u],visib:C[u].disabled};C[u].disabled=true;w++}var B=this._iframeElement;var t=A;B.style.top=t.style.top;B.style.left=t.style.left;B.style.width=t.offsetWidth+"px";B.style.height=t.offsetHeight+"px";B.style.display=t.style.display;if(t.currentStyle&&t.currentStyle.zIndex){B.style.zIndex=t.currentStyle.zIndex}else{if(t.style.zIndex){B.style.zIndex=t.style.zIndex}}}if(this._suggestionsDiv==A){this.raiseShown(Sys.EventArgs.Empty)}}};this.OnKeyDown=function p(s){var r=s.keyCode?s.keyCode:s.rawEvent.keyCode;if(r===Sys.UI.Key.esc){this._doHide=true;this.HideSuggestions();Event.stop(s)}else{if(r===Sys.UI.Key.up){if(this._selectedIndex>0){this.RemoveHighLight(s,-1);this._selectedIndex--;this.HighLight(s,-1);this._doHide=true;Event.stop(s)}}else{if(r===Sys.UI.Key.down){if(this._selectedIndex<(this._suggestionsList.length-1)){this.RemoveHighLight(s,-1);this._selectedIndex++;this.HighLight(s,-1);this._doHide=true;Event.stop(s)}}else{if(r===Sys.UI.Key.enter){if(this._selectedIndex!==-1){this.ReplaceValue(s,this._selectedIndex);Event.stop(s)}}}}}if(r!==Sys.UI.Key.tab){}};this.ReplaceValue=function m(s,r){this._selectedIndex=r;$(this._inputFieldId).value=this._suggestionsList[this._selectedIndex].TitleValue.replace("\r\n","").unescapeHTML();if(this._updateFieldId&&$(this._updateFieldId)){$(this._updateFieldId).value=this._suggestionsList[this._selectedIndex].Id}this._doHide=true;this.raiseItemSelected(this._suggestionsList[this._selectedIndex]);this.HideSuggestions()};this.CleanUpdateField=function f(s){var r=s.keyCode?s.keyCode:s.rawEvent?s.rawEvent.keyCode:null;if(r!=Sys.UI.Key.esc&&r!=Sys.UI.Key.up&&r!=Sys.UI.Key.down&&r!=Sys.UI.Key.enter){if(this._updateFieldId&&$(this._updateFieldId)){$(this._updateFieldId).value=""}}};this.HideSuggestions=function a(){if(this._doHide){this.raiseHiding(Sys.EventArgs.Empty);if((Sys.Browser.agent==Sys.Browser.InternetExplorer)&&(Sys.Browser.version<7)){for(var r=0;r<this._saveDisableSelect.length;r++){this._saveDisableSelect[r].tag.disabled=this._saveDisableSelect[r].visib}}this._suggestionsDiv.style.display="none";if(this._iframeElement){this._iframeElement.style.display="none"}this.raiseHidden(Sys.EventArgs.Empty)}};this.EnableHide=function l(s,r){this.RemoveHighLight(s,r);this._doHide=true};this.DisableHide=function c(s,r){this.HighLight(s,r);this._doHide=false};this.RemoveHighLight=function i(t,r){if(r==-1){r=this._selectedIndex}if(r!=-1){var s=this._suggestionsTrList[r];Element.extend(s);s=s.ancestors().find(this.FindRow.bindAsEventListener(this));if(s!==null){if(s.hasClassName(this._hilightedTrCss)){s.removeClassName(this._hilightedTrCss);this.raiseItemOut(this._currentResults.Items[r])}}}};this.HighLight=function e(t,r){if(this._selectedIndex!=-1){this.RemoveHighLight(t,-1)}if(r==-1){r=this._selectedIndex}else{this._selectedIndex=r}if(r!=-1){var s=this._suggestionsTrList[r];Element.extend(s);s=s.ancestors().find(this.FindRow.bindAsEventListener(this));if(s!==null){if(!s.hasClassName(this._hilightedTrCss)){s.addClassName(this._hilightedTrCss);this.raiseItemOver(this._currentResults.Items[r])}}}};this.FindRow=function j(r){Element.extend(r);if(r&&r.tagName&&r.tagName.toLowerCase()=="td"&&r.hasClassName(this._tableTdCss)){return r}}};ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior.prototype={initialize:function(){ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior.callBaseMethod(this,"initialize");var c;this._inputFieldId=this.get_element().id;if(this._inputFieldId){c=new Form.Element.DelayedObserver(this._inputFieldId,this._delay,this.ShowSuggestions.bindAsEventListener(this));Event.observe(this._inputFieldId,"keydown",this.OnKeyDown.bindAsEventListener(this));Event.observe(this._inputFieldId,"keyup",this.CleanUpdateField.bindAsEventListener(this));Event.observe(this._inputFieldId,"blur",this.HideSuggestions.bindAsEventListener(this));Event.observe(this._inputFieldId,"focus",this.ShowSuggestions.bindAsEventListener(this));this.get_element().autocomplete="off"}if(!this._suggestionsDiv){this._suggestionsDiv=new Element("div",{style:"display:none;position:absolute;"});$$("body")[0].appendChild(this._suggestionsDiv)}if((Sys.Browser.agent===Sys.Browser.InternetExplorer)&&(Sys.Browser.version<7)){var b;var a=this._suggestionsDiv;b=document.createElement("iframe");b.src="about:blank";b.style.position="absolute";b.style.display="none";b.scrolling="no";b.frameBorder="0";b.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";a.parentNode.insertBefore(b,a);this._iframeElement=b}this._loadingDiv=new Element("div",{style:"display:none;position:absolute;","class":this._loadingDivCss});this._loadingDiv.addClassName(this._loadingDivCss);this._loadingDiv.update(this._loadingText);$$("body")[0].appendChild(this._loadingDiv)},dispose:function(){ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior.callBaseMethod(this,"dispose")},get_UpdateField:function(){return this._updateFieldId},set_UpdateField:function(a){this._updateFieldId=a},get_Delay:function(){return this._delay},set_Delay:function(a){this._delay=a===0?100:a},get_SuggestOnEmptyField:function(){return this._suggestOnEmptyField},set_SuggestOnEmptyField:function(a){this._suggestOnEmptyField=a},get_ServiceUrl:function(){return this._serviceUrl},set_ServiceUrl:function(a){this._serviceUrl=a},get_AdditionalFields:function(){return this._additionalFields},set_AdditionalFields:function(a){if(a){a.split(",").each(this.UpdateAdditionalFields.bindAsEventListener(this))}},get_SuggestionsDivId:function(){return this._suggestionsDivId},set_SuggestionsDivId:function(a){if(a&&a!==""){this._suggestionsDivId=a}},add_itemSelected:function(a){this.get_events().addHandler("itemSelected",a)},remove_itemSelected:function(a){this.get_events().removeHandler("itemSelected",a)},raiseItemSelected:function(a){var b=this.get_events().getHandler("itemSelected");if(b){b(this,a)}},add_populating:function(a){this.get_events().addHandler("populating",a)},remove_populating:function(a){this.get_events().removeHandler("populating",a)},raisePopulating:function(a){var b=this.get_events().getHandler("populating");if(b){b(this,a)}},add_populated:function(a){this.get_events().addHandler("populated",a)},remove_populated:function(a){this.get_events().removeHandler("populated",a)},raisePopulated:function(a){var b=this.get_events().getHandler("populated");if(b){b(this,a)}},add_showing:function(a){this.get_events().addHandler("showing",a)},remove_showing:function(a){this.get_events().removeHandler("showing",a)},raiseShowing:function(a){var b=this.get_events().getHandler("showing");if(b){b(this,a)}},add_shown:function(a){this.get_events().addHandler("shown",a)},remove_shown:function(a){this.get_events().removeHandler("shown",a)},raiseShown:function(a){var b=this.get_events().getHandler("shown");if(b){b(this,a)}},add_hiding:function(a){this.get_events().addHandler("hiding",a)},remove_hiding:function(a){this.get_events().removeHandler("hiding",a)},raiseHiding:function(a){var b=this.get_events().getHandler("hiding");if(b){b(this,a)}},add_hidden:function(a){this.get_events().addHandler("hidden",a)},remove_hidden:function(a){this.get_events().removeHandler("hidden",a)},raiseHidden:function(a){var b=this.get_events().getHandler("hidden");if(b){b(this,a)}},add_itemOver:function(a){this.get_events().addHandler("itemOver",a)},remove_itemOver:function(a){this.get_events().removeHandler("itemOver",a)},raiseItemOver:function(a){var b=this.get_events().getHandler("itemOver");if(b){b(this,a)}},add_itemOut:function(a){this.get_events().addHandler("itemOut",a)},remove_itemOut:function(a){this.get_events().removeHandler("itemOut",a)},raiseItemOut:function(a){var b=this.get_events().getHandler("itemOut");if(b){b(this,a)}},get_Template:function(){return this._template},set_Template:function(a){this._template=new Template(a)},get_FooterTemplate:function(){return this._footerTemplate},set_FooterTemplate:function(a){this._footerTemplate=new Template(a)},get_HeaderTemplate:function(){return this._headerTemplate},set_HeaderTemplate:function(a){this._headerTemplate=new Template(a)},get_LoadingText:function(){return this._loadingText},set_LoadingText:function(a){if(a&&a!==""){this._loadingText=a}},get_CurrentResults:function(){return this._loadingText},set_CurrentResults:function(a){if(a&&a!==""){this._loadingText=a}},get_TableCss:function(){return this._tableCss},set_TableCss:function(a){if(a&&a!==""){this._tableCss=a}},get_TableTrCss:function(){return this._tableTrCss},set_TableTrCss:function(a){if(a&&a!==""){this._tableTrCss=a}},get_TableTdCss:function(){return this._tableTdCss},set_TableTdCss:function(a){if(a&&a!==""){this._tableTdCss=a}},get_TitleTrCss:function(){return this._titleTrCss},set_TitleTrCss:function(a){if(a&&a!==""){this._titleTrCss=a}},get_TitleTdCss:function(){return this._titleTdCss},set_TitleTdCss:function(a){if(a&&a!==""){this._titleTdCss=a}},get_CommentsTrCss:function(){return this._commentsTrCss},set_CommentsTrCss:function(a){if(a&&a!==""){this._commentsTrCss=a}},get_CommentsTdCss:function(){return this._commentsTdCss},set_CommentsTdCss:function(a){if(a&&a!==""){this._commentsTdCss=a}},get_HilightedTrCss:function(){return this._hilightedTrCss},set_HilightedTrCss:function(a){if(a&&a!==""){this._hilightedTrCss=a}},get_LoadingDivCss:function(){return this._loadingDivCss},set_LoadingDivCss:function(a){if(a&&a!==""){this._loadingDivCss=a}}};ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior.registerClass("ConvincingMail.AdvancedAutoSuggest.AdvancedAutoSuggestBehavior",AjaxControlToolkit.BehaviorBase);Form.Element.DelayedObserver=Class.create();Form.Element.DelayedObserver.prototype={initialize:function(b,a,c){this.delay=a||500;this.element=$(b);this.callback=c;this.timer=null;this.lastValue=$F(this.element);Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this))},delayedListener:function(a){if(this.lastValue==$F(this.element)){return}if(this.timer){clearTimeout(this.timer)}this.timer=setTimeout(this.onTimerEvent.bind(this),this._delay);this.lastValue=$F(this.element)},onTimerEvent:function(){this.timer=null;this.callback(this.element,$F(this.element))}};
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();