/*
* jQuery FlexBox $Version: 0.9.1 $
*
* Copyright (c) 2008 Noah Heldman and Fairway Technologies (http://www.fairwaytech.com/flexbox)
* Licensed under Ms-PL (http://www.codeplex.com/flexbox/license)
*
* $Date: 11-02-20 11:59 $
* $Rev: 0.9.1.0 $
*/
(function(A){A.flexbox=function(T,X){var P=false,U=[],g=[],R=0,f="\u25CA",S=false,d=X.paging.pageSize,e=A(T).css("position","relative").css("z-index",0);var W=A(document.createElement("input")).attr("type","hidden").attr("id",e.attr("id")+"_hidden").attr("name",e.attr("id")).val(X.initialValue).appendTo(e);var E=A(document.createElement("input")).attr("id",e.attr("id")+"_input").addClass(X.inputClass).css("width",X.width+"px").appendTo(e).click(function(i){if(X.watermark!==""&&this.value===X.watermark){this.value=""}else{this.select()}}).focus(function(i){A(this).removeClass("watermark")}).blur(function(i){setTimeout(function(){if(!E.attr("active")){Y()}},200)}).keypress(N);if(X.initialValue!==""){E.val(X.initialValue).removeClass("watermark")}else{E.val(X.watermark).addClass("watermark")}if(A.browser.msie){E.keydown(N)}var a=0;if(X.showArrow&&X.showResults){var Z=A(document.createElement("span")).attr("id",e.attr("id")+"_arrow").addClass(X.arrowClass).addClass("out").hover(function(){A(this).removeClass("out").addClass("over")},function(){A(this).removeClass("over").addClass("out")}).mousedown(function(){A(this).removeClass("over").addClass("active")}).mouseup(function(){A(this).removeClass("active").addClass("over")}).click(function(i){if(G.is(":visible")){Y()}else{E.focus();if(X.watermark!==""&&E.val()===X.watermark){E.val("")}else{E.select()}if(P){clearTimeout(P)}P=setTimeout(function(){K(1,true,X.arrowQuery)},X.queryDelay)}}).appendTo(e);a=Z.outerWidth();E.css("width",(X.width-Z.width())+"px")}var G=A(document.createElement("div")).attr("id",e.attr("id")+"_ctr").css("width",(E.outerWidth()+a-2)+"px").css("top",E.outerHeight()).css("left",0).addClass(X.containerClass).appendTo(e).hide();var H=A(document.createElement("div")).addClass(X.contentClass).appendTo(G).scroll(function(){S=true});var Q=A(document.createElement("div")).appendTo(G);function N(l){var j=0;if(typeof (l.ctrlKey)!=="undefined"){if(l.ctrlKey){j|=1}if(l.shiftKey){j|=2}}else{if(l.modifiers&Event.CONTROL_MASK){j|=1}if(l.modifiers&Event.SHIFT_MASK){j|=2}}if(/16$|17$/.test(l.keyCode)){return }var k=l.keyCode===9;var i=l.keyCode===9&&j>0;if(k){if(M()){J()}}if((/27$|38$|39$|37$/.test(l.keyCode)&&G.is(":visible"))||(/13$|40$/.test(l.keyCode))){if(l.preventDefault){l.preventDefault()}if(l.stopPropagation){l.stopPropagation()}l.cancelBubble=true;l.returnValue=false;switch(l.keyCode){case 38:L();break;case 40:if(G.is(":visible")){c()}else{C(true)}break;case 13:if(M()){J()}else{C(true)}break;case 27:Y();break;case 39:A("#"+e.attr("id")+"n").click();break;case 37:A("#"+e.attr("id")+"p").click();break}}else{if(!k&&!i){C(false)}}}function C(i){if(P){clearTimeout(P)}P=setTimeout(function(){K(1,i,"")},X.queryDelay)}function K(m,j,l){var k=l&&l.length>0?l:A.trim(E.val());if(k.length>=X.minChars||j){H.html("").attr("scrollTop",0);var i=h(k,m);if(i){I(i.data,k);B(m,i.t)}else{d=d===undefined?0:d;var n={q:k,p:m,s:d,contentType:"application/json; charset=utf-8"};var o=function(q){var p=I(q,k);totalResults=parseInt(q[X.totalProperty]);O(k,m,d,totalResults,q,p);B(m,totalResults)};A.post(X.source,n,o,"json")}}else{Y()}}function B(l,j){Q.html("").removeClass(X.paging.cssClass);H.css("height","auto");if(X.showResults&&X.paging&&j>d){var i=j/d,k=j%d;if(k>0){i=parseInt(++i)}F(i,l,j)}}function D(k,j,i){if(/^13$|^39$|^37$/.test(k.keyCode)){if(k.preventDefault){k.preventDefault()}if(k.stopPropagation){k.stopPropagation()}k.cancelBubble=true;k.returnValue=false;switch(k.keyCode){case 13:if(/^\d+$/.test(j)&&j<=i){K(j,true)}else{alert("Please enter a page number less than or equal to "+i)}break;case 39:A("#"+e.attr("id")+"n").click();break;case 37:A("#"+e.attr("id")+"p").click();break}}}function V(i){E.attr("active",true);K(parseInt(A(this).attr("page")),true,E.attr("pq"));return false}function F(AB,x,p){var m="&lt;&lt;",u="&lt;",v="&gt;",o="&gt;&gt;",l="...";Q.addClass(X.paging.cssClass);var s=A(document.createElement("a")).attr("href","#").addClass("page").click(V),AA=A(document.createElement("span")).addClass("page"),n=e.attr("id");if(x>1){s.clone(true).attr("id",n+"f").attr("page",1).html(m).appendTo(Q);s.clone(true).attr("id",n+"p").attr("page",x-1).html(u).appendTo(Q)}else{AA.clone(true).html(m).appendTo(Q);AA.clone(true).html(u).appendTo(Q)}if(X.paging.style==="links"){var j=X.paging.maxPageLinks;if(AB<=j){for(var y=1;y<=AB;y++){if(y===x){AA.clone(true).html(x).appendTo(Q)}else{s.clone(true).attr("page",y).html(y).appendTo(Q)}}}else{if((x+parseInt(j/2))>AB){startPage=AB-j+1}else{startPage=x-parseInt(j/2)}if(startPage>1){s.clone(true).attr("page",startPage-1).html(l).appendTo(Q)}else{startPage=1}for(var y=startPage;y<startPage+j;y++){if(y===x){AA.clone(true).html(y).appendTo(Q)}else{s.clone(true).attr("page",y).html(y).appendTo(Q)}}if(AB>(startPage+j)){s.clone(true).attr("page",y).html(l).appendTo(Q)}}}else{if(X.paging.style==="input"){var w=A(document.createElement("input")).addClass("box").click(function(i){E.attr("active",true);this.select()}).keypress(function(i){return D(i,this.value,AB)}).val(x).appendTo(Q)}}if(x<AB){var k=s.clone(true).attr("id",n+"n").attr("page",+x+1).html(v).appendTo(Q);s.clone(true).attr("id",n+"l").attr("page",AB).html(o).appendTo(Q);H.css("height",($row.outerHeight()*d)+"px")}else{AA.clone(true).html(v).appendTo(Q);AA.clone(true).html(o).appendTo(Q);H.css("height","auto")}var r=(x-1)*d+1;var t=(r>(p-d))?p:r+d-1;if(X.paging.showSummary){var z={start:r,end:t,total:p,page:x,pages:AB};var q=X.paging.summaryTemplate.applyTemplate(z);A(document.createElement("span")).addClass(X.paging.summaryClass).html(q).appendTo(Q)}}function h(l,m){var k=l+f+m;if(g[k]){for(var j=0;j<U.length;j++){if(U[j]===k){U.unshift(U.splice(j,1)[0]);return g[k]}}}return false}function O(o,r,m,k,n,j){if(X.maxCacheBytes>0){while(U.length&&(R+j>X.maxCacheBytes)){var l=U.pop();R-=l.size}var i=o+f+r;g[i]={q:o,p:r,s:m,t:k,size:j,data:n};U.push(i);R+=j}}function I(r,j){var s=0;if(!r){return }if(parseInt(r[X.totalProperty])===0&&X.noResultsText&&X.noResultsText.length>0){H.addClass(X.noResultsClass).html(X.noResultsText);G.show();return }else{H.removeClass(X.noResultsClass)}for(var n=0;n<r[X.resultsProperty].length;n++){var l=r[X.resultsProperty][n],w=X.resultTemplate.applyTemplate(l),m=j===w,k=false,u=false;if(!m&&X.highlightMatches&&j!==""){var p=j,o='<span class="'+X.matchClass+'">'+j+"</span>";if(w.match("<(.|\n)*?>")){u=true;p="(>)([^<]*?)("+j+")((.|\n)*?)(<)";o='$1$2<span class="'+X.matchClass+'">$3</span>$4$6'}w=w.replace(new RegExp(p,X.highlightMatchesRegExModifier),o)}if(X.autoCompleteFirstMatch&&!u&&n===0){var v=l[X.displayValue];if(j.length>0&&v.indexOf(j)===0){E.attr("pq",j);E.val(v);k=b(j.length,E.val().length)}}if(!X.showResults){return }$row=A(document.createElement("div")).attr("id",l[X.displayValue]).attr("val",l[X.hiddenValue]).addClass("row").html(w).click(function(i){E.attr("active",true)}).appendTo(H);if((!X.paging||(X.paging&&d>r[X.totalProperty]))&&n===r[X.resultsProperty].length-1){$row.css("border-bottom","none")}if(m||k){$row.addClass(X.selectClass)}s+=w.length}if(s===0){Y();return }G.parent().css("z-index",11000);G.show();H.children("div").mouseover(function(){H.children("div").removeClass(X.selectClass);A(this).addClass(X.selectClass)}).click(function(i){i.preventDefault();i.stopPropagation();J()});if(X.maxVisibleRows>0){var t=Math.round($row.parent()[0].scrollHeight/r[X.totalProperty])*X.maxVisibleRows;H.css("maxHeight",t)}else{H.css("height","auto")}return s}function b(k,j){var i=E[0];if(i.createTextRange){var m=i.createTextRange();m.moveStart("character",k);m.moveEnd("character",j-i.value.length);m.select()}else{if(i.setSelectionRange){i.setSelectionRange(k,j)}}i.focus();return true}String.prototype.applyTemplate=function(j){try{if(j===""){return this}return this.replace(/{([^{}]*)}/g,function(l,k){var o;if(k.indexOf(".")!==-1){var n=k.split(".");var p=j;for(var m=0;m<n.length;m++){p=p[n[m]]}o=p}else{o=j[k]}if(typeof o==="string"||typeof o==="number"){return o}else{throw (l)}})}catch(i){alert("Invalid JSON property "+i+" found when trying to apply resultTemplate or paging.summaryTemplate.\nPlease check your spelling and try again.")}};function Y(){E.attr("active",false);e.css("z-index",0);G.hide()}function M(){if(!G.is(":visible")){return false}var i=H.children("div."+X.selectClass);if(!i.length){i=false}return i}function J(){$curr=M();if($curr){E.val($curr.attr("id")).focus();W.val($curr.attr("val"));Y();if(X.onSelect){E.attr("hiddenValue",W.val());X.onSelect.apply(E[0])}}}function c(){$curr=M();if($curr&&$curr.next().length>0){$curr.removeClass(X.selectClass).next().addClass(X.selectClass);var n=H.attr("scrollTop"),m=$curr[0],l,j,i;if(A.browser.mozilla&&parseInt(A.browser.version)<=2){l=document.getBoxObjectFor(H[0]).y+H.attr("offsetHeight");j=document.getBoxObjectFor(m).y+$curr.attr("offsetHeight");i=document.getBoxObjectFor(m).height}else{l=H[0].getBoundingClientRect().bottom;var k=m.getBoundingClientRect();j=k.bottom;i=j-k.top}if(j>=l){H.attr("scrollTop",n+i)}}else{if(!$curr){H.children("div:first-child").addClass(X.selectClass)}}}function L(){$curr=M();if($curr&&$curr.prev().length>0){$curr.removeClass(X.selectClass).prev().addClass(X.selectClass);var o=H.attr("scrollTop"),n=$curr[0],j=$curr.parent()[0],l,m,i;if(A.browser.mozilla&&parseInt(A.browser.version)<=2){i=document.getBoxObjectFor(n).height;l=document.getBoxObjectFor(H[0]).y-(i*2);m=document.getBoxObjectFor(n).y-document.getBoxObjectFor(H[0]).y}else{l=j.getBoundingClientRect().top;var k=n.getBoundingClientRect();m=k.top;i=k.bottom-m}if(m<=l){H.attr("scrollTop",o-i)}}else{if(!$curr){H.children("div:last-child").addClass(X.selectClass)}}}};A.fn.flexbox=function(D,B){if(!D){return }try{var E=A.fn.flexbox.defaults;var F=A.extend({},E,B);for(var G in F){if(E[G]===undefined){throw ("Invalid option specified: "+G+"\nPlease check your spelling and try again.")}}F.source=D;if(B){F.paging=(B.paging||B.paging==null)?A.extend({},E.paging,B.paging):false;for(var G in F.paging){if(E.paging[G]===undefined){throw ("Invalid option specified: "+G+"\nPlease check your spelling and try again.")}}if(B.displayValue&&!B.hiddenValue){F.hiddenValue=B.displayValue}}this.each(function(){new A.flexbox(this,F)});return this}catch(C){if(typeof C==="object"){alert(C.message)}else{alert(C)}}};A.fn.flexbox.defaults={queryDelay:200,containerClass:"ffb",contentClass:"content",selectClass:"ffb-sel",inputClass:"ffb-input",arrowClass:"ffb-arrow",matchClass:"ffb-match",noResultsText:"No matching results",noResultsClass:"ffb-no-results",showResults:true,autoCompleteFirstMatch:true,highlightMatches:true,highlightMatchesRegExModifier:"i",minChars:1,showArrow:true,arrowQuery:"",onSelect:false,maxCacheBytes:32768,resultTemplate:"{name}",displayValue:"name",hiddenValue:"id",initialValue:"",watermark:"",width:200,resultsProperty:"results",totalProperty:"total",maxVisibleRows:0,paging:{style:"input",cssClass:"paging",pageSize:10,maxPageLinks:5,showSummary:true,summaryClass:"summary",summaryTemplate:"Displaying {start}-{end} of {total} results"}};A.fn.setValue=function(B){var C="#"+this.attr("id");A(C+"_hidden,"+C+"_input").val(B).removeClass("watermark")}})(jQuery);
