
/*
* jQuery FlexBox $Version: 0.9.2.2 $
*
* Copyright (c) 2008 Noah Heldman and Fairway Technologies (http://www.fairwaytech.com/flexbox)
* Licensed under Ms-PL (http://www.codeplex.com/flexbox/license)
*
* $Date: 2008-12-17 03:07:04 PM $
* $Rev: 0.9.2.2 $
*/
var objHttpFileDataRequest=null;(function($){$.flexbox=function(div,o){var timeout=false,cache=[],cacheData=[],cacheSize=0,delim='\u25CA',scrolling=false,pageSize=o.paging.pageSize,$div=$(div).css('position','relative').css('z-index',0);var $hdn=$(document.createElement('input')).attr('type','hidden').attr('id',$div.attr('id')+'_hidden').attr('name',$div.attr('id')).val(o.initialValue).appendTo($div);var $input=$(document.createElement('input')).attr('id',$div.attr('id')+'_input').attr('autocomplete','off').addClass(o.inputClass).css('width',o.width+'px').appendTo($div).click(function(e){if(o.watermark!==''&&this.value===o.watermark)
this.value='';else
this.select();}).focus(function(e){$(this).removeClass('watermark');}).blur(function(e){setTimeout(function(){if(!$input.attr('active'))hideResults();},200);}).keypress(processKey);if(o.initialValue!=='')
$input.val(o.initialValue).removeClass('watermark');else
$input.val(o.watermark).addClass('watermark');if($.browser.msie)
$input.keydown(processKey);var arrowWidth=0;if(o.showArrow&&o.showResults){var arrowClick=function(){if($ctr.is(':visible')){hideResults();}
else{$input.focus();if(o.watermark!==''&&$input.val()===o.watermark)
$input.val('');else
$input.select();if(timeout)
clearTimeout(timeout);timeout=setTimeout(function(){flexbox(1,true,o.arrowQuery);},o.queryDelay);}};var $arrow=$(document.createElement('span')).attr('id',$div.attr('id')+'_arrow').addClass(o.arrowClass).addClass('out').hover(function(){$(this).removeClass('out').addClass('over');},function(){$(this).removeClass('over').addClass('out');}).mousedown(function(){$(this).removeClass('over').addClass('active');}).mouseup(function(){$(this).removeClass('active').addClass('over');}).click(arrowClick).appendTo($div);arrowWidth=$arrow.outerWidth();$input.css('width',(o.width-$arrow.width())+'px');}
if(!o.allowInput)$input.click(arrowClick);var left=($.browser.msie&&$.browser.version.substr(0,1)==='6')?-($input.outerWidth()+arrowWidth):0;var $ctr=$(document.createElement('div')).attr('id',$div.attr('id')+'_ctr').css('width',($input.outerWidth()+arrowWidth-2)+'px').css('top',$input.outerHeight()).css('left',left).addClass(o.containerClass).appendTo($div).hide();var $content=$(document.createElement('div')).addClass(o.contentClass).appendTo($ctr).scroll(function(){scrolling=true;});var $paging=$(document.createElement('div')).appendTo($ctr);function processKey(e){var mod=0;if(typeof(e.ctrlKey)!=='undefined'){if(e.ctrlKey)mod|=1;if(e.shiftKey)mod|=2;}else{if(e.modifiers&Event.CONTROL_MASK)mod|=1;if(e.modifiers&Event.SHIFT_MASK)mod|=2;}
if(/16$|17$/.test(e.keyCode))return;var tab=e.keyCode===9;var tabWithModifiers=e.keyCode===9&&mod>0;var backspace=e.keyCode===8;if(tab)if(getCurr())selectCurr();if((/27$|38$|39$|37$/.test(e.keyCode)&&$ctr.is(':visible'))||(/13$|40$/.test(e.keyCode))||!o.allowInput){if(e.preventDefault)e.preventDefault();if(e.stopPropagation)e.stopPropagation();e.cancelBubble=true;e.returnValue=false;switch(e.keyCode){case 38:prevResult();break;case 40:if($ctr.is(':visible'))nextResult();else flexboxDelay(true);break;case 13:if(getCurr())selectCurr();else flexboxDelay(true);break;case 27:hideResults();break;case 39:$('#'+$div.attr('id')+'n').click();break;case 37:$('#'+$div.attr('id')+'p').click();break;default:if(!o.allowInput){return;}}}else if(!tab&&!tabWithModifiers){flexboxDelay(false,backspace);}}
function flexboxDelay(simulateArrowClick,increaseDelay){if(timeout)clearTimeout(timeout);var delay=increaseDelay?o.queryDelay*5:o.queryDelay;timeout=setTimeout(function(){flexbox(1,simulateArrowClick,'');},delay);}
function flexbox(p,arrowOrPagingClicked,prevQuery){var q=prevQuery&&prevQuery.length>0?prevQuery:$.trim($input.val());if(q.length>=o.minChars||arrowOrPagingClicked){$content.html('').attr('scrollTop',0);var cached=checkCache(q,p);if(cached){displayItems(cached.data,q);showPaging(p,cached.t);}
else{pageSize=pageSize===undefined?0:pageSize;var params={q:q,p:p,s:pageSize,contentType:'application/json; charset=utf-8'};var callback=function(data,overrideQuery){if(overrideQuery===true)q=overrideQuery;var totalResults=parseInt(data[o.totalProperty]);if(isNaN(totalResults)&&o.paging){if(o.maxCacheBytes<=0)alert('The "maxCacheBytes" configuration option must be greater\nthan zero when implementing client-side paging.');totalResults=data.results.length;var pages=totalResults/pageSize;if(totalResults%pageSize>0)pages=parseInt(++pages);for(var i=1;i<=pages;i++){var pageData={};pageData[o.totalProperty]=totalResults;pageData[o.resultsProperty]=data.results.splice(0,pageSize);if(i===1)totalSize=displayItems(pageData,q);updateCache(q,i,pageSize,totalResults,pageData,totalSize);}}
else{var totalSize=displayItems(data,q);updateCache(q,p,pageSize,totalResults,data,totalSize);}
showPaging(p,totalResults);};if(objHttpFileDataRequest){objHttpFileDataRequest.abort();}
if(typeof(o.source)==='object')callback(o.source,'');else if(o.method.toUpperCase()=='POST')objHttpFileDataRequest=$.post(o.source,params,callback,"json");else objHttpFileDataRequest=$.getJSON(o.source,params,callback);}}else
hideResults();}
function showPaging(p,totalResults){$paging.html('').removeClass(o.paging.cssClass);$content.css('height','auto');if(o.showResults&&o.paging&&totalResults>pageSize){var pages=totalResults/pageSize;if(totalResults%pageSize>0)pages=parseInt(++pages);outputPagingLinks(pages,p,totalResults);}}
function handleKeyPress(e,page,totalPages){if(/^13$|^39$|^37$/.test(e.keyCode)){if(e.preventDefault)
e.preventDefault();if(e.stopPropagation)
e.stopPropagation();e.cancelBubble=true;e.returnValue=false;switch(e.keyCode){case 13:if(/^\d+$/.test(page)&&page<=totalPages)
flexbox(page,true);else
alert('Please enter a page number less than or equal to '+totalPages);break;case 39:$('#'+$div.attr('id')+'n').click();break;case 37:$('#'+$div.attr('id')+'p').click();break;}}}
function handlePagingClick(e){$input.attr('active',true);flexbox(parseInt($(this).attr('page')),true,$input.attr('pq'));return false;}
function outputPagingLinks(totalPages,currentPage,totalResults){var first='&lt;&lt;',prev='&lt;',next='&gt;',last='&gt;&gt;',more='...';$paging.addClass(o.paging.cssClass);var $link=$(document.createElement('a')).attr('href','#').addClass('page').click(handlePagingClick),$span=$(document.createElement('span')).addClass('page'),divId=$div.attr('id');if(currentPage>1){$link.clone(true).attr('id',divId+'f').attr('page',1).html(first).appendTo($paging);$link.clone(true).attr('id',divId+'p').attr('page',currentPage-1).html(prev).appendTo($paging);}
else{$span.clone(true).html(first).appendTo($paging);$span.clone(true).html(prev).appendTo($paging);}
if(o.paging.style==='links'){var maxPageLinks=o.paging.maxPageLinks;if(totalPages<=maxPageLinks){for(var i=1;i<=totalPages;i++){if(i===currentPage){$span.clone(true).html(currentPage).appendTo($paging);}
else{$link.clone(true).attr('page',i).html(i).appendTo($paging);}}}
else{if((currentPage+parseInt(maxPageLinks/2))>totalPages){startPage=totalPages-maxPageLinks+1;}
else{startPage=currentPage-parseInt(maxPageLinks/2);}
if(startPage>1){$link.clone(true).attr('page',startPage-1).html(more).appendTo($paging);}
else{startPage=1;}
for(var i=startPage;i<startPage+maxPageLinks;i++){if(i===currentPage){$span.clone(true).html(i).appendTo($paging);}
else{$link.clone(true).attr('page',i).html(i).appendTo($paging);}}
if(totalPages>(startPage+maxPageLinks)){$link.clone(true).attr('page',i).html(more).appendTo($paging);}}}
else if(o.paging.style==='input'){var $pagingBox=$(document.createElement('input')).addClass('box').click(function(e){$input.attr('active',true);this.select();}).keypress(function(e){return handleKeyPress(e,this.value,totalPages);}).val(currentPage).appendTo($paging);}
if(currentPage<totalPages){var blort=$link.clone(true).attr('id',divId+'n').attr('page',+currentPage+1).html(next).appendTo($paging);$link.clone(true).attr('id',divId+'l').attr('page',totalPages).html(last).appendTo($paging);$content.css('height',($row.outerHeight()*pageSize)+'px');}
else{$span.clone(true).html(next).appendTo($paging);$span.clone(true).html(last).appendTo($paging);$content.css('height','auto');}
var startingResult=(currentPage-1)*pageSize+1;var endingResult=(startingResult>(totalResults-pageSize))?totalResults:startingResult+pageSize-1;if(o.paging.showSummary){var summaryData={"start":startingResult,"end":endingResult,"total":totalResults,"page":currentPage,"pages":totalPages};var html=o.paging.summaryTemplate.applyTemplate(summaryData);$(document.createElement('span')).addClass(o.paging.summaryClass).html(html).appendTo($paging);}}
function checkCache(q,p){var key=q+delim+p;if(cacheData[key]){for(var i=0;i<cache.length;i++){if(cache[i]===key){cache.unshift(cache.splice(i,1)[0]);return cacheData[key];}}}
return false;}
function updateCache(q,p,s,t,data,size){if(o.maxCacheBytes>0){while(cache.length&&(cacheSize+size>o.maxCacheBytes)){var cached=cache.pop();cacheSize-=cached.size;}
var key=q+delim+p;cacheData[key]={q:q,p:p,s:s,t:t,size:size,data:data};cache.push(key);cacheSize+=size;}}
function displayItems(d,q){var totalSize=0;if(!d)
return;if(parseInt(d[o.totalProperty])===0&&o.noResultsText&&o.noResultsText.length>0){$content.addClass(o.noResultsClass).html(o.noResultsText);$ctr.show();return;}else $content.removeClass(o.noResultsClass);for(var i=0;i<d[o.resultsProperty].length;i++){var data=d[o.resultsProperty][i],result=o.resultTemplate.applyTemplate(data),exactMatch=q===result,selectedMatch=false,hasHtmlTags=false;if(!exactMatch&&o.highlightMatches&&q!==''){var pattern=q,replaceString='<span class="'+o.matchClass+'">'+q+'</span>';if(result.match('<(.|\n)*?>')){hasHtmlTags=true;pattern='(>)([^<]*?)('+q+')((.|\n)*?)(<)';replaceString='$1$2<span class="'+o.matchClass+'">$3</span>$4$6';}
result=result.replace(new RegExp(pattern,o.highlightMatchesRegExModifier),replaceString);}
if(o.autoCompleteFirstMatch&&!hasHtmlTags&&i===0){var firstMatch=data[o.displayValue];if(q.length>0&&firstMatch.indexOf(q)===0){$input.attr('pq',q);$input.val(firstMatch);selectedMatch=selectRange(q.length,$input.val().length);}}
if(!o.showResults)return;$row=$(document.createElement('div')).attr('id',data[o.displayValue]).attr('val',data[o.hiddenValue]).addClass('row').html(result).click(function(e){$input.attr('active',true);}).appendTo($content);if((!o.paging||(o.paging&&pageSize>d[o.totalProperty]))&&i===d[o.resultsProperty].length-1){$row.css('border-bottom','none');}
if(exactMatch||selectedMatch){$row.addClass(o.selectClass);}
totalSize+=result.length;}
if(totalSize===0){hideResults();return;}
$ctr.parent().css('z-index',11000);$ctr.show();$content.children('div').mouseover(function(){$content.children('div').removeClass(o.selectClass);$(this).addClass(o.selectClass);}).click(function(e){e.preventDefault();e.stopPropagation();selectCurr();});if(o.maxVisibleRows>0){var maxHeight=Math.round($row.parent()[0].scrollHeight/d[o.totalProperty])*o.maxVisibleRows;$content.css('maxHeight',maxHeight);}
else
$content.css('height','auto');return totalSize;}
function selectRange(s,l){var tb=$input[0];if(tb.createTextRange){var r=tb.createTextRange();r.moveStart('character',s);r.moveEnd('character',l-tb.value.length);r.select();}else if(tb.setSelectionRange){tb.setSelectionRange(s,l);}
tb.focus();return true;}
String.prototype.applyTemplate=function(d){try{if(d==='')return this;return this.replace(/{([^{}]*)}/g,function(a,b){var r;if(b.indexOf('.')!==-1){var ary=b.split('.');var obj=d;for(var i=0;i<ary.length;i++)
obj=obj[ary[i]];r=obj;}
else
r=d[b];if(typeof r==='string'||typeof r==='number')return r;else throw(a);});}catch(ex){alert('Invalid JSON property '+ex+' found when trying to apply resultTemplate or paging.summaryTemplate.\nPlease check your spelling and try again.');}};function hideResults(){$input.attr('active',false);$div.css('z-index',0);$ctr.hide();}
function getCurr(){if(!$ctr.is(':visible'))
return false;var $curr=$content.children('div.'+o.selectClass);if(!$curr.length)
$curr=false;return $curr;}
function selectCurr(){$curr=getCurr();if($curr){$input.val($curr.attr('id')).focus();$hdn.val($curr.attr('val'));hideResults();if(o.onSelect){$input.attr('hiddenValue',$hdn.val());o.onSelect.apply($input[0]);}}}
function nextResult(){$curr=getCurr();if($curr&&$curr.next().length>0){$curr.removeClass(o.selectClass).next().addClass(o.selectClass);var scrollPos=$content.attr('scrollTop'),curr=$curr[0],parentBottom,bottom,height;if($.browser.mozilla&&parseInt($.browser.version)<=2){parentBottom=document.getBoxObjectFor($content[0]).y+$content.attr('offsetHeight');bottom=document.getBoxObjectFor(curr).y+$curr.attr('offsetHeight');height=document.getBoxObjectFor(curr).height;}
else{parentBottom=$content[0].getBoundingClientRect().bottom;var rect=curr.getBoundingClientRect();bottom=rect.bottom;height=bottom-rect.top;}
if(bottom>=parentBottom)
$content.attr('scrollTop',scrollPos+height);}
else if(!$curr)
$content.children('div:first-child').addClass(o.selectClass);}
function prevResult(){$curr=getCurr();if($curr&&$curr.prev().length>0){$curr.removeClass(o.selectClass).prev().addClass(o.selectClass);var scrollPos=$content.attr('scrollTop'),curr=$curr[0],parent=$curr.parent()[0],parentTop,top,height;if($.browser.mozilla&&parseInt($.browser.version)<=2){height=document.getBoxObjectFor(curr).height;parentTop=document.getBoxObjectFor($content[0]).y-(height*2);top=document.getBoxObjectFor(curr).y-document.getBoxObjectFor($content[0]).y;}
else{parentTop=parent.getBoundingClientRect().top;var rect=curr.getBoundingClientRect();top=rect.top;height=rect.bottom-top;}
if(top<=parentTop)
$content.attr('scrollTop',scrollPos-height);}
else if(!$curr)
$content.children('div:last-child').addClass(o.selectClass);}};$.fn.flexbox=function(source,options){if(!source)
return;try{var defaults=$.fn.flexbox.defaults;var o=$.extend({},defaults,options);for(var prop in o){if(defaults[prop]===undefined)throw('Invalid option specified: '+prop+'\nPlease check your spelling and try again.');}
o.source=source;if(options){o.paging=(options.paging||options.paging==null)?$.extend({},defaults.paging,options.paging):false;for(var prop in o.paging){if(defaults.paging[prop]===undefined)throw('Invalid option specified: '+prop+'\nPlease check your spelling and try again.');}
if(options.displayValue&&!options.hiddenValue){o.hiddenValue=options.displayValue;}}
this.each(function(){new $.flexbox(this,o);});return this;}catch(ex){if(typeof ex==='object')alert(ex.message);else alert(ex);}};$.fn.flexbox.defaults={method:'GET',queryDelay:100,allowInput:true,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'}};$.fn.setValue=function(val){var id='#'+this.attr('id');$(id+'_hidden,'+id+'_input').val(val).removeClass('watermark');};})(jQuery);