/****************

=Table of Contents
    =root_host
    =jQueryUI
	=jQueryAutocomplete
	=jQuery-Color-Animations
	=Shermanstravel_slideshow
	=toggleItem
    =collapseBoxes
	=thickbox
	=jquery regex
	=trim
    =parseQuery
	=top25_modal_signup
	=Header
		=dropdown
		=ShermansGraphic
        =ShowSignUp
	=SiteWide
		=Multi_Tab
		=QuickSearch
		=dealtree DEPRECIATED
		=newsletter
		=TransparentFlash
		=dealTabs
		=pagination
		=trackExternalLinks
		=slideshowPopup
	=Homepage
        =slideshow3
	=Blogs
		=Categories
		=commentForm
		=Print
		=Share
		=copyright
	=Sections
        =hotel_reviews
        =travel_guide
		=deals
		=top25
		=infoIcons
		=Gmap
		=tooltip
		=grabAndGo
		=luxury
		=slideshow
        =share
		=shermanmeter
			=ToggleDealTree
			=showArtical
	=DD_belatedPNG
	=Gink
	=Tynt
/****************/

// =root_host
var host_array = location.host.split('.');
var root_host = host_array.pop();
root_host = host_array.pop()+'.'+root_host;

//modal anywhere
var location_queries = parseQuery(location.href.replace(/^[^\?]+\??/,''));
if(location_queries.modal){
    var modal = {};
    //the .name is the modal value in the query string
    //ex: ?modal=interests
    modal.interests = '/top25/interests';
    var height = ((location_queries.modal_height != undefined) ? location_queries.modal_height : 430);
    var width = ((location_queries.modal_width != undefined) ? location_queries.modal_width : 700);
    
    if($.cookie("email") && !$.cookie(location_queries.modal+'_modal_opt_out')){
        $.cookie(location_queries.modal+'_modal_opt_out', '1', { path: '/', domain: '.'+root_host, expires: 90 });
        tb_show('', modal[location_queries.modal]+'#TB_iframe?height='+height+'&width='+width+'&modal=true', false);
    }
    // console.log(modal[location_queries.modal]);
}


// =Ad_iframe_code
if($('.stAdUnit').length != 0) {
    var tile = 0; //order the ads apear on the page
    var pos = {}; //the order deals of similar size apear on the page

    $('.stAdUnit').each(function() {
        tile = tile + 1;

        var id =  $(this).attr('id');

        if(typeof pos[stAdUnits[id].type] != 'undefined') {
            pos[stAdUnits[id].type] = pos[stAdUnits[id].type] + 1;
        } else {
            pos[stAdUnits[id].type] = 1;
        }

        stAdUnits[id].url = stAdUnits[id].url.replace(/###TILE###/,tile);
        stAdUnits[id].url = stAdUnits[id].url.replace(/###POS###/, pos[stAdUnits[id].type]);

        //console.log(stAdUnits[id].url)
    });

    var global_ad_order = 0;
    var max_global_ad = $('.stAdUnit').length;
    var banner_ad_timeout;

    function load_ST_ads() {
        var ad = $('.stAdUnit:eq('+global_ad_order+')');
        if(ad.length == 1) {
            var id = ad.attr('id');
            //alert(stAdUnits[id].url);
            //alert(id);
            global_ad_order = global_ad_order + 1;

            var newIframe = $('<iframe>').attr({
                    'width': stAdUnits[id].width,
                    'height': stAdUnits[id].height,
                    'src': stAdUnits[id].url,
                    'scrolling': 'no',
                    'frameborder': 0,
                    'marginwidth': 0,
                    'marginheight': 0
                });
            ad.append(newIframe);

            // ghetto firefox fix :(
            newIframe.attr('src', stAdUnits[id].url);

            clearTimeout(banner_ad_timeout);
            if(global_ad_order != max_global_ad){
                banner_ad_timeout = setTimeout("load_ST_ads();",2000);
            }
            //$('.stAdUnit:eq('+tile+')').attr('src','');
        }
    }

    $(document).ready(function () {
        banner_ad_timeout = setTimeout("load_ST_ads()",5000);
        load_ST_ads();
    });
}//end if

var st_ad_buster = function(divId, contents) {
        var el = document.getElementById(divId);
        el.innerHTML = contents;
    };


// =jQueryUI
    //Jquery UI (1.6rc4) and DatePicker
    (function(B){var H=B.fn.remove,D=B.browser.mozilla&&(parseFloat(B.browser.version)<1.9);B.ui={version:"1.6rc4",plugin:{add:function(K,J,N){var M=B.ui[K].prototype;for(var L in N){M.plugins[L]=M.plugins[L]||[];M.plugins[L].push([J,N[L]])}},call:function(J,L,K){var N=J.plugins[L];if(!N){return }for(var M=0;M<N.length;M++){if(J.options[N[M][0]]){N[M][1].apply(J.element,K)}}}},contains:function(L,K){var J=B.browser.safari&&B.browser.version<522;if(L.contains&&!J){return L.contains(K)}if(L.compareDocumentPosition){return !!(L.compareDocumentPosition(K)&16)}while(K=K.parentNode){if(K==L){return true}}return false},cssCache:{},css:function(J){if(B.ui.cssCache[J]){return B.ui.cssCache[J]}var K=B('<div class="ui-gen">').addClass(J).css({position:"absolute",top:"-5000px",left:"-5000px",display:"block"}).appendTo("body");B.ui.cssCache[J]=!!((!(/auto|default/).test(K.css("cursor"))||(/^[1-9]/).test(K.css("height"))||(/^[1-9]/).test(K.css("width"))||!(/none/).test(K.css("backgroundImage"))||!(/transparent|rgba\(0, 0, 0, 0\)/).test(K.css("backgroundColor"))));try{B("body").get(0).removeChild(K.get(0))}catch(L){}return B.ui.cssCache[J]},hasScroll:function(L,J){if(B(L).css("overflow")=="hidden"){return false}var M=(J&&J=="left")?"scrollLeft":"scrollTop",K=false;if(L[M]>0){return true}L[M]=1;K=(L[M]>0);L[M]=0;return K},isOverAxis:function(J,L,K){return(J>L)&&(J<(L+K))},isOver:function(O,J,N,M,L,K){return B.ui.isOverAxis(O,N,L)&&B.ui.isOverAxis(J,M,K)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(D){var E=B.attr,C=B.fn.removeAttr,I="http://www.w3.org/2005/07/aaa",F=/^aria-/,G=/^wairole:/;B.attr=function(K,J,L){var M=L!==undefined;return(J=="role"?(M?E.call(this,K,J,"wairole:"+L):(E.apply(this,arguments)||"").replace(G,"")):(F.test(J)?(M?K.setAttributeNS(I,J.replace(F,"aaa:"),L):E.call(this,K,J.replace(F,"aaa:"))):E.apply(this,arguments)))};B.fn.removeAttr=function(J){return(F.test(J)?this.each(function(){this.removeAttributeNS(I,J.replace(F,""))}):C.call(this,J))}}B.fn.extend({remove:function(){B("*",this).add(this).each(function(){B(this).triggerHandler("remove")});return H.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var J;if((B.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){J=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(B.curCSS(this,"position",1))&&(/(auto|scroll)/).test(B.curCSS(this,"overflow",1)+B.curCSS(this,"overflow-y",1)+B.curCSS(this,"overflow-x",1))}).eq(0)}else{J=this.parents().filter(function(){return(/(auto|scroll)/).test(B.curCSS(this,"overflow",1)+B.curCSS(this,"overflow-y",1)+B.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!J.length?B(document):J}});B.extend(B.expr[":"],{data:function(K,L,J){return !!B.data(K,J[3])},tabbable:function(K,L,J){var N=K.nodeName.toLowerCase();function M(O){return !(B(O).is(":hidden")||B(O).parents(":hidden").length)}return(K.tabIndex>=0&&(("a"==N&&K.href)||(/input|select|textarea|button/.test(N)&&"hidden"!=K.type&&!K.disabled))&&M(K))}});function A(N,J,O,M){function L(Q){var P=B[N][J][Q]||[];return(typeof P=="string"?P.split(/,?\s+/):P)}var K=L("getter");if(M.length==1&&typeof M[0]=="string"){K=K.concat(L("getterSetter"))}return(B.inArray(O,K)!=-1)}B.widget=function(J,K){var L=J.split(".")[0];J=J.split(".")[1];B.fn[J]=function(P){var N=(typeof P=="string"),O=Array.prototype.slice.call(arguments,1);if(N&&P.substring(0,1)=="_"){return this}if(N&&A(L,J,P,O)){var M=B.data(this[0],J);return(M?M[P].apply(M,O):undefined)}return this.each(function(){var Q=B.data(this,J);(!Q&&!N&&B.data(this,J,new B[L][J](this,P)));(Q&&N&&B.isFunction(Q[P])&&Q[P].apply(Q,O))})};B[L]=B[L]||{};B[L][J]=function(N,O){var M=this;this.namespace=L;this.widgetName=J;this.widgetEventPrefix=B[L][J].eventPrefix||J;this.widgetBaseClass=L+"-"+J;this.options=B.extend({},B.widget.defaults,B[L][J].defaults,B.metadata&&B.metadata.get(N)[J],O);this.element=B(N).bind("setData."+J,function(Q,P,R){if(Q.target==N){return M._setData(P,R)}}).bind("getData."+J,function(Q,P){if(Q.target==N){return M._getData(P)}}).bind("remove",function(){return M.destroy()});this._init()};B[L][J].prototype=B.extend({},B.widget.prototype,K);B[L][J].getterSetter="option"};B.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(L,M){var K=L,J=this;if(typeof L=="string"){if(M===undefined){return this._getData(L)}K={};K[L]=M}B.each(K,function(N,O){J._setData(N,O)})},_getData:function(J){return this.options[J]},_setData:function(J,K){this.options[J]=K;if(J=="disabled"){this.element[K?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",K)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(K,L,M){var J=(K==this.widgetEventPrefix?K:this.widgetEventPrefix+K);L=L||B.event.fix({type:J,target:this.element[0]});return this.element.triggerHandler(J,[L,M],this.options[K])}};B.widget.defaults={disabled:false};B.ui.mouse={_mouseInit:function(){var J=this;this.element.bind("mousedown."+this.widgetName,function(K){return J._mouseDown(K)}).bind("click."+this.widgetName,function(K){if(J._preventClickEvent){J._preventClickEvent=false;return false}});if(B.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(B.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(L){(this._mouseStarted&&this._mouseUp(L));this._mouseDownEvent=L;var J=this,M=(L.which==1),K=(typeof this.options.cancel=="string"?B(L.target).parents().add(L.target).filter(this.options.cancel).length:false);if(!M||K||!this._mouseCapture(L)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){J.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(L)&&this._mouseDelayMet(L)){this._mouseStarted=(this._mouseStart(L)!==false);if(!this._mouseStarted){L.preventDefault();return true}}this._mouseMoveDelegate=function(N){return J._mouseMove(N)};this._mouseUpDelegate=function(N){return J._mouseUp(N)};B(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);if(!B.browser.safari){L.preventDefault()}return true},_mouseMove:function(J){if(B.browser.msie&&!J.button){return this._mouseUp(J)}if(this._mouseStarted){this._mouseDrag(J);return J.preventDefault()}if(this._mouseDistanceMet(J)&&this._mouseDelayMet(J)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,J)!==false);(this._mouseStarted?this._mouseDrag(J):this._mouseUp(J))}return !this._mouseStarted},_mouseUp:function(J){B(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=true;this._mouseStop(J)}return false},_mouseDistanceMet:function(J){return(Math.max(Math.abs(this._mouseDownEvent.pageX-J.pageX),Math.abs(this._mouseDownEvent.pageY-J.pageY))>=this.options.distance)},_mouseDelayMet:function(J){return this.mouseDelayMet},_mouseStart:function(J){},_mouseDrag:function(J){},_mouseStop:function(J){},_mouseCapture:function(J){return true}};B.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);(function($){$.extend($.ui,{datepicker:{version:"1.6rc4"}});var PROP_NAME="datepicker";function Datepicker(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._datepickerShowing=false;this._inDialog=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass="ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={clearText:"Clear",closeText:"Done",prevText:"Prev",prevBigText:"&#x3c;&#x3c;",nextText:"Next",nextBigText:"&#x3e;&#x3e;",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],dateFormat:"mm/dd/yy",firstDay:0,isRTL:false};this._defaults={showOn:"focus",showAnim:"show",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,showMonthAfterYear:false,yearRange:"-10:+10",showOtherMonths:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"normal",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false};$.extend(this._defaults,this.regional[""]);this.dpDiv=$('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}$.extend(Datepicker.prototype,{markerClassName:"hasDatepicker",log:function(){if(this.debug){console.log.apply("",arguments)}},setDefaults:function(settings){extendRemove(this._defaults,settings||{});return this},_attachDatepicker:function(target,settings){var inlineSettings=null;for(var attrName in this._defaults){var attrValue=target.getAttribute("date:"+attrName);if(attrValue){inlineSettings=inlineSettings||{};try{inlineSettings[attrName]=eval(attrValue)}catch(err){inlineSettings[attrName]=attrValue}}}var nodeName=target.nodeName.toLowerCase();var inline=(nodeName=="div"||nodeName=="span");if(!target.id){target.id="dp"+(++this.uuid)}var inst=this._newInst($(target),inline);inst.settings=$.extend({},settings||{},inlineSettings||{});if(nodeName=="input"){this._connectDatepicker(target,inst)}else{if(inline){this._inlineDatepicker(target,inst)}}},_newInst:function(target,inline){var id=target[0].id.replace(/([:\[\]\.])/g,"\\\\$1");return{id:id,input:target,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:inline,dpDiv:(!inline?this.dpDiv:$('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(target,inst){var input=$(target);if(input.hasClass(this.markerClassName)){return }var appendText=this._get(inst,"appendText");var isRTL=this._get(inst,"isRTL");if(appendText){input[isRTL?"before":"after"]('<span class="'+this._appendClass+'">'+appendText+"</span>")}var showOn=this._get(inst,"showOn");if(showOn=="focus"||showOn=="both"){input.focus(this._showDatepicker)}if(showOn=="button"||showOn=="both"){var buttonText=this._get(inst,"buttonText");var buttonImage=this._get(inst,"buttonImage");var trigger=$(this._get(inst,"buttonImageOnly")?$("<img/>").addClass(this._triggerClass).attr({src:buttonImage,alt:buttonText,title:buttonText}):$('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage==""?buttonText:$("<img/>").attr({src:buttonImage,alt:buttonText,title:buttonText})));input[isRTL?"before":"after"](trigger);trigger.click(function(){if($.datepicker._datepickerShowing&&$.datepicker._lastInput==target){$.datepicker._hideDatepicker()}else{$.datepicker._showDatepicker(target)}return false})}input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst)},_inlineDatepicker:function(target,inst){var divSpan=$(target);if(divSpan.hasClass(this.markerClassName)){return }divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker",function(event,key,value){inst.settings[key]=value}).bind("getData.datepicker",function(event,key){return this._get(inst,key)});$.data(target,PROP_NAME,inst);this._setDate(inst,this._getDefaultDate(inst));this._updateDatepicker(inst);this._updateAlternate(inst)},_dialogDatepicker:function(input,dateText,onSelect,settings,pos){var inst=this._dialogInst;if(!inst){var id="dp"+(++this.uuid);this._dialogInput=$('<input type="text" id="'+id+'" size="1" style="position: absolute; top: -100px;"/>');this._dialogInput.keydown(this._doKeyDown);$("body").append(this._dialogInput);inst=this._dialogInst=this._newInst(this._dialogInput,false);inst.settings={};$.data(this._dialogInput[0],PROP_NAME,inst)}extendRemove(inst.settings,settings||{});this._dialogInput.val(dateText);this._pos=(pos?(pos.length?pos:[pos.pageX,pos.pageY]):null);if(!this._pos){var browserWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var browserHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;this._pos=[(browserWidth/2)-100+scrollX,(browserHeight/2)-150+scrollY]}this._dialogInput.css("left",this._pos[0]+"px").css("top",this._pos[1]+"px");inst.settings.onSelect=onSelect;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);if($.blockUI){$.blockUI(this.dpDiv)}$.data(this._dialogInput[0],PROP_NAME,inst);return this},_destroyDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return }var nodeName=target.nodeName.toLowerCase();$.removeData(target,PROP_NAME);if(nodeName=="input"){$target.siblings("."+this._appendClass).remove().end().siblings("."+this._triggerClass).remove().end().removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress)}else{if(nodeName=="div"||nodeName=="span"){$target.removeClass(this.markerClassName).empty()}}},_enableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return }var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=false;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=false}).end().siblings("img."+this._triggerClass).css({opacity:"1.0",cursor:""})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().removeClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)})},_disableDatepicker:function(target){var $target=$(target);if(!$target.hasClass(this.markerClassName)){return }var nodeName=target.nodeName.toLowerCase();if(nodeName=="input"){target.disabled=true;$target.siblings("button."+this._triggerClass).each(function(){this.disabled=true}).end().siblings("img."+this._triggerClass).css({opacity:"0.5",cursor:"default"})}else{if(nodeName=="div"||nodeName=="span"){var inline=$target.children("."+this._inlineClass);inline.children().addClass("ui-state-disabled")}}this._disabledInputs=$.map(this._disabledInputs,function(value){return(value==target?null:value)});this._disabledInputs[this._disabledInputs.length]=target},_isDisabledDatepicker:function(target){if(!target){return false}for(var i=0;i<this._disabledInputs.length;i++){if(this._disabledInputs[i]==target){return true}}return false},_getInst:function(target){try{return $.data(target,PROP_NAME)}catch(err){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(target,name,value){var settings=name||{};if(typeof name=="string"){settings={};settings[name]=value}var inst=this._getInst(target);if(inst){if(this._curInst==inst){this._hideDatepicker(null)}extendRemove(inst.settings,settings);var date=new Date();extendRemove(inst,{rangeStart:null,endDay:null,endMonth:null,endYear:null,selectedDay:date.getDate(),selectedMonth:date.getMonth(),selectedYear:date.getFullYear(),currentDay:date.getDate(),currentMonth:date.getMonth(),currentYear:date.getFullYear(),drawMonth:date.getMonth(),drawYear:date.getFullYear()});this._updateDatepicker(inst)}},_changeDatepicker:function(target,name,value){this._optionDatepicker(target,name,value)},_refreshDatepicker:function(target){var inst=this._getInst(target);if(inst){this._updateDatepicker(inst)}},_setDateDatepicker:function(target,date,endDate){var inst=this._getInst(target);if(inst){this._setDate(inst,date,endDate);this._updateDatepicker(inst);this._updateAlternate(inst)}},_getDateDatepicker:function(target){var inst=this._getInst(target);if(inst&&!inst.inline){this._setDateFromField(inst)}return(inst?this._getDate(inst):null)},_doKeyDown:function(event){var inst=$.datepicker._getInst(event.target);var handled=true;var isRTL=inst.dpDiv.is(".ui-datepicker-rtl");inst._keyEvent=true;if($.datepicker._datepickerShowing){switch(event.keyCode){case 9:$.datepicker._hideDatepicker(null,"");break;case 13:var sel=$("td."+$.datepicker._dayOverClass+", td."+$.datepicker._currentClass,inst.dpDiv);if(sel[0]){$.datepicker._selectDay(event.target,inst.selectedMonth,inst.selectedYear,sel[0])}else{$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"))}return false;break;case 27:$.datepicker._hideDatepicker(null,$.datepicker._get(inst,"duration"));break;case 33:$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M");break;case 34:$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M");break;case 35:if(event.ctrlKey||event.metaKey){$.datepicker._clearDate(event.target)}handled=event.ctrlKey||event.metaKey;break;case 36:if(event.ctrlKey||event.metaKey){$.datepicker._gotoToday(event.target)}handled=event.ctrlKey||event.metaKey;break;case 37:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?+1:-1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?-$.datepicker._get(inst,"stepBigMonths"):-$.datepicker._get(inst,"stepMonths")),"M")}break;case 38:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,-7,"D")}handled=event.ctrlKey||event.metaKey;break;case 39:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,(isRTL?-1:+1),"D")}handled=event.ctrlKey||event.metaKey;if(event.originalEvent.altKey){$.datepicker._adjustDate(event.target,(event.ctrlKey?+$.datepicker._get(inst,"stepBigMonths"):+$.datepicker._get(inst,"stepMonths")),"M")}break;case 40:if(event.ctrlKey||event.metaKey){$.datepicker._adjustDate(event.target,+7,"D")}handled=event.ctrlKey||event.metaKey;break;default:handled=false}}else{if(event.keyCode==36&&event.ctrlKey){$.datepicker._showDatepicker(this)}else{handled=false}}if(handled){event.preventDefault();event.stopPropagation()}},_doKeyPress:function(event){var inst=$.datepicker._getInst(event.target);if($.datepicker._get(inst,"constrainInput")){var chars=$.datepicker._possibleChars($.datepicker._get(inst,"dateFormat"));var chr=String.fromCharCode(event.charCode==undefined?event.keyCode:event.charCode);return event.ctrlKey||(chr<" "||!chars||chars.indexOf(chr)>-1)}},_showDatepicker:function(input){input=input.target||input;if(input.nodeName.toLowerCase()!="input"){input=$("input",input.parentNode)[0]}if($.datepicker._isDisabledDatepicker(input)||$.datepicker._lastInput==input){return }var inst=$.datepicker._getInst(input);var beforeShow=$.datepicker._get(inst,"beforeShow");extendRemove(inst.settings,(beforeShow?beforeShow.apply(input,[input,inst]):{}));$.datepicker._hideDatepicker(null,"");$.datepicker._lastInput=input;$.datepicker._setDateFromField(inst);if($.datepicker._inDialog){input.value=""}if(!$.datepicker._pos){$.datepicker._pos=$.datepicker._findPos(input);$.datepicker._pos[1]+=input.offsetHeight}var isFixed=false;$(input).parents().each(function(){isFixed|=$(this).css("position")=="fixed";return !isFixed});if(isFixed&&$.browser.opera){$.datepicker._pos[0]-=document.documentElement.scrollLeft;$.datepicker._pos[1]-=document.documentElement.scrollTop}var offset={left:$.datepicker._pos[0],top:$.datepicker._pos[1]};$.datepicker._pos=null;inst.rangeStart=null;inst.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});$.datepicker._updateDatepicker(inst);offset=$.datepicker._checkOffset(inst,offset,isFixed);inst.dpDiv.css({position:($.datepicker._inDialog&&$.blockUI?"static":(isFixed?"fixed":"absolute")),display:"none",left:offset.left+"px",top:offset.top+"px"});if(!inst.inline){var showAnim=$.datepicker._get(inst,"showAnim")||"show";var duration=$.datepicker._get(inst,"duration");var postProcess=function(){$.datepicker._datepickerShowing=true;if($.browser.msie&&parseInt($.browser.version,10)<7){$("iframe.ui-datepicker-cover").css({width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4})}};if($.effects&&$.effects[showAnim]){inst.dpDiv.show(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[showAnim](duration,postProcess)}if(duration==""){postProcess()}if(inst.input[0].type!="hidden"){inst.input[0].focus()}$.datepicker._curInst=inst}},_updateDatepicker:function(inst){var dims={width:inst.dpDiv.width()+4,height:inst.dpDiv.height()+4};var self=this;inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({width:dims.width,height:dims.height}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){$(this).removeClass("ui-state-hover")}).bind("mouseover",function(){if(!self._isDisabledDatepicker(inst.inline?inst.dpDiv.parent()[0]:inst.input[0])){$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");$(this).addClass("ui-state-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();var numMonths=this._getNumberOfMonths(inst);var cols=numMonths[1];var width=17;if(cols>1){inst.dpDiv.addClass("ui-datepicker-multi-"+cols).css("width",(width*cols)+"em")}else{inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("")}inst.dpDiv[(numMonths[0]!=1||numMonths[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");inst.dpDiv[(this._get(inst,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");if(inst.input&&inst.input[0].type!="hidden"&&inst==$.datepicker._curInst){$(inst.input[0]).focus()}},_checkOffset:function(inst,offset,isFixed){var pos=inst.input?this._findPos(inst.input[0]):null;var browserWidth=window.innerWidth||(document.documentElement?document.documentElement.clientWidth:document.body.clientWidth);var browserHeight=window.innerHeight||(document.documentElement?document.documentElement.clientHeight:document.body.clientHeight);var scrollX=document.documentElement.scrollLeft||document.body.scrollLeft;var scrollY=document.documentElement.scrollTop||document.body.scrollTop;if(this._get(inst,"isRTL")||(offset.left+inst.dpDiv.width()-scrollX)>browserWidth){offset.left=Math.max((isFixed?0:scrollX),pos[0]+(inst.input?inst.input.width():0)-(isFixed?scrollX:0)-inst.dpDiv.width()-(isFixed&&$.browser.opera?document.documentElement.scrollLeft:0))}else{offset.left-=(isFixed?scrollX:0)}if((offset.top+inst.dpDiv.height()-scrollY)>browserHeight){offset.top=Math.max((isFixed?0:scrollY),pos[1]-(isFixed?scrollY:0)-(this._inDialog?0:inst.dpDiv.height())-(isFixed&&$.browser.opera?document.documentElement.scrollTop:0))}else{offset.top-=(isFixed?scrollY:0)}return offset},_findPos:function(obj){while(obj&&(obj.type=="hidden"||obj.nodeType!=1)){obj=obj.nextSibling}var position=$(obj).offset();return[position.left,position.top]},_hideDatepicker:function(input,duration){var inst=this._curInst;if(!inst||(input&&inst!=$.data(input,PROP_NAME))){return }if(inst.stayOpen){this._selectDate("#"+inst.id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear))}inst.stayOpen=false;if(this._datepickerShowing){duration=(duration!=null?duration:this._get(inst,"duration"));var showAnim=this._get(inst,"showAnim");var postProcess=function(){$.datepicker._tidyDialog(inst)};if(duration!=""&&$.effects&&$.effects[showAnim]){inst.dpDiv.hide(showAnim,$.datepicker._get(inst,"showOptions"),duration,postProcess)}else{inst.dpDiv[(duration==""?"hide":(showAnim=="slideDown"?"slideUp":(showAnim=="fadeIn"?"fadeOut":"hide")))](duration,postProcess)}if(duration==""){this._tidyDialog(inst)}var onClose=this._get(inst,"onClose");if(onClose){onClose.apply((inst.input?inst.input[0]:null),[(inst.input?inst.input.val():""),inst])}this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if($.blockUI){$.unblockUI();$("body").append(this.dpDiv)}}this._inDialog=false}this._curInst=null},_tidyDialog:function(inst){inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(event){if(!$.datepicker._curInst){return }var $target=$(event.target);if(($target.parents("#"+$.datepicker._mainDivId).length==0)&&!$target.hasClass($.datepicker.markerClassName)&&!$target.hasClass($.datepicker._triggerClass)&&$.datepicker._datepickerShowing&&!($.datepicker._inDialog&&$.blockUI)){$.datepicker._hideDatepicker(null,"")}},_adjustDate:function(id,offset,period){var target=$(id);var inst=this._getInst(target[0]);if(this._isDisabledDatepicker(target[0])){return }this._adjustInstDate(inst,offset,period);this._updateDatepicker(inst)},_gotoToday:function(id){var target=$(id);var inst=this._getInst(target[0]);if(this._get(inst,"gotoCurrent")&&inst.currentDay){inst.selectedDay=inst.currentDay;inst.drawMonth=inst.selectedMonth=inst.currentMonth;inst.drawYear=inst.selectedYear=inst.currentYear}else{var date=new Date();inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear()}this._notifyChange(inst);this._adjustDate(target)},_selectMonthYear:function(id,select,period){var target=$(id);var inst=this._getInst(target[0]);inst._selectingMonthYear=false;inst["selected"+(period=="M"?"Month":"Year")]=inst["draw"+(period=="M"?"Month":"Year")]=parseInt(select.options[select.selectedIndex].value,10);this._notifyChange(inst);this._adjustDate(target)},_clickMonthYear:function(id){var target=$(id);var inst=this._getInst(target[0]);if(inst.input&&inst._selectingMonthYear&&!$.browser.msie){inst.input[0].focus()}inst._selectingMonthYear=!inst._selectingMonthYear},_selectDay:function(id,month,year,td){var target=$(id);if($(td).hasClass(this._unselectableClass)||this._isDisabledDatepicker(target[0])){return }var inst=this._getInst(target[0]);inst.selectedDay=inst.currentDay=$("a",td).html();inst.selectedMonth=inst.currentMonth=month;inst.selectedYear=inst.currentYear=year;if(inst.stayOpen){inst.endDay=inst.endMonth=inst.endYear=null}this._selectDate(id,this._formatDate(inst,inst.currentDay,inst.currentMonth,inst.currentYear));if(inst.stayOpen){inst.rangeStart=this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay));this._updateDatepicker(inst)}},_clearDate:function(id){var target=$(id);var inst=this._getInst(target[0]);inst.stayOpen=false;inst.endDay=inst.endMonth=inst.endYear=inst.rangeStart=null;this._selectDate(target,"")},_selectDate:function(id,dateStr){var target=$(id);var inst=this._getInst(target[0]);dateStr=(dateStr!=null?dateStr:this._formatDate(inst));if(inst.input){inst.input.val(dateStr)}this._updateAlternate(inst);var onSelect=this._get(inst,"onSelect");if(onSelect){onSelect.apply((inst.input?inst.input[0]:null),[dateStr,inst])}else{if(inst.input){inst.input.trigger("change")}}if(inst.inline){this._updateDatepicker(inst)}else{if(!inst.stayOpen){this._hideDatepicker(null,this._get(inst,"duration"));this._lastInput=inst.input[0];if(typeof (inst.input[0])!="object"){inst.input[0].focus()}this._lastInput=null}}},_updateAlternate:function(inst){var altField=this._get(inst,"altField");if(altField){var altFormat=this._get(inst,"altFormat")||this._get(inst,"dateFormat");var date=this._getDate(inst);dateStr=this.formatDate(altFormat,date,this._getFormatConfig(inst));$(altField).each(function(){$(this).val(dateStr)})}},noWeekends:function(date){var day=date.getDay();return[(day>0&&day<6),""]},iso8601Week:function(date){var checkDate=new Date(date.getFullYear(),date.getMonth(),date.getDate());var firstMon=new Date(checkDate.getFullYear(),1-1,4);var firstDay=firstMon.getDay()||7;firstMon.setDate(firstMon.getDate()+1-firstDay);if(firstDay<4&&checkDate<firstMon){checkDate.setDate(checkDate.getDate()-3);return $.datepicker.iso8601Week(checkDate)}else{if(checkDate>new Date(checkDate.getFullYear(),12-1,28)){firstDay=new Date(checkDate.getFullYear()+1,1-1,4).getDay()||7;if(firstDay>4&&(checkDate.getDay()||7)<firstDay-3){return 1}}}return Math.floor(((checkDate-firstMon)/86400000)/7)+1},parseDate:function(format,value,settings){if(format==null||value==null){throw"Invalid arguments"}value=(typeof value=="object"?value.toString():value+"");if(value==""){return null}var shortYearCutoff=(settings?settings.shortYearCutoff:null)||this._defaults.shortYearCutoff;var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var year=-1;var month=-1;var day=-1;var doy=-1;var literal=false;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var getNumber=function(match){lookAhead(match);var origSize=(match=="@"?14:(match=="y"?4:(match=="o"?3:2)));var size=origSize;var num=0;while(size>0&&iValue<value.length&&value.charAt(iValue)>="0"&&value.charAt(iValue)<="9"){num=num*10+parseInt(value.charAt(iValue++),10);size--}if(size==origSize){throw"Missing number at position "+iValue}return num};var getName=function(match,shortNames,longNames){var names=(lookAhead(match)?longNames:shortNames);var size=0;for(var j=0;j<names.length;j++){size=Math.max(size,names[j].length)}var name="";var iInit=iValue;while(size>0&&iValue<value.length){name+=value.charAt(iValue++);for(var i=0;i<names.length;i++){if(name==names[i]){return i+1}}size--}throw"Unknown name at position "+iInit};var checkLiteral=function(){if(value.charAt(iValue)!=format.charAt(iFormat)){throw"Unexpected literal at position "+iValue}iValue++};var iValue=0;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{checkLiteral()}}else{switch(format.charAt(iFormat)){case"d":day=getNumber("d");break;case"D":getName("D",dayNamesShort,dayNames);break;case"o":doy=getNumber("o");break;case"m":month=getNumber("m");break;case"M":month=getName("M",monthNamesShort,monthNames);break;case"y":year=getNumber("y");break;case"@":var date=new Date(getNumber("@"));year=date.getFullYear();month=date.getMonth()+1;day=date.getDate();break;case"'":if(lookAhead("'")){checkLiteral()}else{literal=true}break;default:checkLiteral()}}}if(year==-1){year=new Date().getFullYear()}else{if(year<100){year+=new Date().getFullYear()-new Date().getFullYear()%100+(year<=shortYearCutoff?0:-100)}}if(doy>-1){month=1;day=doy;do{var dim=this._getDaysInMonth(year,month-1);if(day<=dim){break}month++;day-=dim}while(true)}var date=this._daylightSavingAdjust(new Date(year,month-1,day));if(date.getFullYear()!=year||date.getMonth()+1!=month||date.getDate()!=day){throw"Invalid date"}return date},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TIMESTAMP:"@",W3C:"yy-mm-dd",formatDate:function(format,date,settings){if(!date){return""}var dayNamesShort=(settings?settings.dayNamesShort:null)||this._defaults.dayNamesShort;var dayNames=(settings?settings.dayNames:null)||this._defaults.dayNames;var monthNamesShort=(settings?settings.monthNamesShort:null)||this._defaults.monthNamesShort;var monthNames=(settings?settings.monthNames:null)||this._defaults.monthNames;var lookAhead=function(match){var matches=(iFormat+1<format.length&&format.charAt(iFormat+1)==match);if(matches){iFormat++}return matches};var formatNumber=function(match,value,len){var num=""+value;if(lookAhead(match)){while(num.length<len){num="0"+num}}return num};var formatName=function(match,value,shortNames,longNames){return(lookAhead(match)?longNames[value]:shortNames[value])};var output="";var literal=false;if(date){for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{output+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":output+=formatNumber("d",date.getDate(),2);break;case"D":output+=formatName("D",date.getDay(),dayNamesShort,dayNames);break;case"o":var doy=date.getDate();for(var m=date.getMonth()-1;m>=0;m--){doy+=this._getDaysInMonth(date.getFullYear(),m)}output+=formatNumber("o",doy,3);break;case"m":output+=formatNumber("m",date.getMonth()+1,2);break;case"M":output+=formatName("M",date.getMonth(),monthNamesShort,monthNames);break;case"y":output+=(lookAhead("y")?date.getFullYear():(date.getYear()%100<10?"0":"")+date.getYear()%100);break;case"@":output+=date.getTime();break;case"'":if(lookAhead("'")){output+="'"}else{literal=true}break;default:output+=format.charAt(iFormat)}}}}return output},_possibleChars:function(format){var chars="";var literal=false;for(var iFormat=0;iFormat<format.length;iFormat++){if(literal){if(format.charAt(iFormat)=="'"&&!lookAhead("'")){literal=false}else{chars+=format.charAt(iFormat)}}else{switch(format.charAt(iFormat)){case"d":case"m":case"y":case"@":chars+="0123456789";break;case"D":case"M":return null;case"'":if(lookAhead("'")){chars+="'"}else{literal=true}break;default:chars+=format.charAt(iFormat)}}}return chars},_get:function(inst,name){return inst.settings[name]!==undefined?inst.settings[name]:this._defaults[name]},_setDateFromField:function(inst){var dateFormat=this._get(inst,"dateFormat");var dates=inst.input?inst.input.val():null;inst.endDay=inst.endMonth=inst.endYear=null;var date=defaultDate=this._getDefaultDate(inst);var settings=this._getFormatConfig(inst);try{date=this.parseDate(dateFormat,dates,settings)||defaultDate}catch(event){this.log(event);date=defaultDate}inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();inst.currentDay=(dates?date.getDate():0);inst.currentMonth=(dates?date.getMonth():0);inst.currentYear=(dates?date.getFullYear():0);this._adjustInstDate(inst)},_getDefaultDate:function(inst){var date=this._determineDate(this._get(inst,"defaultDate"),new Date());var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);return date},_determineDate:function(date,defaultDate){var offsetNumeric=function(offset){var date=new Date();date.setDate(date.getDate()+offset);return date};var offsetString=function(offset,getDaysInMonth){var date=new Date();var year=date.getFullYear();var month=date.getMonth();var day=date.getDate();var pattern=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;var matches=pattern.exec(offset);while(matches){switch(matches[2]||"d"){case"d":case"D":day+=parseInt(matches[1],10);break;case"w":case"W":day+=parseInt(matches[1],10)*7;break;case"m":case"M":month+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break;case"y":case"Y":year+=parseInt(matches[1],10);day=Math.min(day,getDaysInMonth(year,month));break}matches=pattern.exec(offset)}return new Date(year,month,day)};date=(date==null?defaultDate:(typeof date=="string"?offsetString(date,this._getDaysInMonth):(typeof date=="number"?(isNaN(date)?defaultDate:offsetNumeric(date)):date)));date=(date&&date.toString()=="Invalid Date"?defaultDate:date);if(date){date.setHours(0);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0)}return this._daylightSavingAdjust(date)},_daylightSavingAdjust:function(date){if(!date){return null}date.setHours(date.getHours()>12?date.getHours()+2:0);return date},_setDate:function(inst,date,endDate){var clear=!(date);var origMonth=inst.selectedMonth;var origYear=inst.selectedYear;date=this._determineDate(date,new Date());inst.selectedDay=inst.currentDay=date.getDate();inst.drawMonth=inst.selectedMonth=inst.currentMonth=date.getMonth();inst.drawYear=inst.selectedYear=inst.currentYear=date.getFullYear();if(origMonth!=inst.selectedMonth||origYear!=inst.selectedYear){this._notifyChange(inst)}this._adjustInstDate(inst);if(inst.input){inst.input.val(clear?"":this._formatDate(inst))}},_getDate:function(inst){var startDate=(!inst.currentYear||(inst.input&&inst.input.val()=="")?null:this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return startDate},_generateHTML:function(inst){var today=new Date();today=this._daylightSavingAdjust(new Date(today.getFullYear(),today.getMonth(),today.getDate()));var isRTL=this._get(inst,"isRTL");var showButtonPanel=this._get(inst,"showButtonPanel");var hideIfNoPrevNext=this._get(inst,"hideIfNoPrevNext");var navigationAsDateFormat=this._get(inst,"navigationAsDateFormat");var numMonths=this._getNumberOfMonths(inst);var showCurrentAtPos=this._get(inst,"showCurrentAtPos");var stepMonths=this._get(inst,"stepMonths");var stepBigMonths=this._get(inst,"stepBigMonths");var isMultiMonth=(numMonths[0]!=1||numMonths[1]!=1);var currentDate=this._daylightSavingAdjust((!inst.currentDay?new Date(9999,9,9):new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");var drawMonth=inst.drawMonth-showCurrentAtPos;var drawYear=inst.drawYear;if(drawMonth<0){drawMonth+=12;drawYear--}if(maxDate){var maxDraw=this._daylightSavingAdjust(new Date(maxDate.getFullYear(),maxDate.getMonth()-numMonths[1]+1,maxDate.getDate()));maxDraw=(minDate&&maxDraw<minDate?minDate:maxDraw);while(this._daylightSavingAdjust(new Date(drawYear,drawMonth,1))>maxDraw){drawMonth--;if(drawMonth<0){drawMonth=11;drawYear--}}}var prevText=this._get(inst,"prevText");prevText=(!navigationAsDateFormat?prevText:this.formatDate(prevText,this._daylightSavingAdjust(new Date(drawYear,drawMonth-stepMonths,1)),this._getFormatConfig(inst)));var prev=(this._canAdjustMonth(inst,-1,drawYear,drawMonth)?'<a class="ui-datepicker-prev ui-corner-all" onclick="jQuery.datepicker._adjustDate(\'#'+inst.id+"', -"+stepMonths+", 'M');\" title=\""+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+prevText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"e":"w")+'">'+prevText+"</span></a>"));var nextText=this._get(inst,"nextText");nextText=(!navigationAsDateFormat?nextText:this.formatDate(nextText,this._daylightSavingAdjust(new Date(drawYear,drawMonth+stepMonths,1)),this._getFormatConfig(inst)));var next=(this._canAdjustMonth(inst,+1,drawYear,drawMonth)?'<a class="ui-datepicker-next ui-corner-all" onclick="jQuery.datepicker._adjustDate(\'#'+inst.id+"', +"+stepMonths+", 'M');\" title=\""+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>":(hideIfNoPrevNext?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+nextText+'"><span class="ui-icon ui-icon-circle-triangle-'+(isRTL?"w":"e")+'">'+nextText+"</span></a>"));var currentText=this._get(inst,"currentText");var gotoDate=(this._get(inst,"gotoCurrent")&&inst.currentDay?currentDate:today);currentText=(!navigationAsDateFormat?currentText:this.formatDate(currentText,gotoDate,this._getFormatConfig(inst)));var controls='<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="jQuery.datepicker._hideDatepicker();">'+this._get(inst,"closeText")+"</button>";var buttonPanel=(showButtonPanel)?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(isRTL?controls:"")+(this._isInRange(inst,gotoDate)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="jQuery.datepicker._gotoToday(\'#'+inst.id+"');\">"+currentText+"</button>":"")+(isRTL?"":controls)+"</div>":"";var firstDay=parseInt(this._get(inst,"firstDay"));firstDay=(isNaN(firstDay)?0:firstDay);var dayNames=this._get(inst,"dayNames");var dayNamesShort=this._get(inst,"dayNamesShort");var dayNamesMin=this._get(inst,"dayNamesMin");var monthNames=this._get(inst,"monthNames");var monthNamesShort=this._get(inst,"monthNamesShort");var beforeShowDay=this._get(inst,"beforeShowDay");var showOtherMonths=this._get(inst,"showOtherMonths");var calculateWeek=this._get(inst,"calculateWeek")||this.iso8601Week;var endDate=inst.endDay?this._daylightSavingAdjust(new Date(inst.endYear,inst.endMonth,inst.endDay)):currentDate;var defaultDate=this._getDefaultDate(inst);var html="";for(var row=0;row<numMonths[0];row++){var group="";for(var col=0;col<numMonths[1];col++){var selectedDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,inst.selectedDay));var cornerClass=" ui-corner-all";var calender="";if(isMultiMonth){calender+='<div class="ui-datepicker-group ui-datepicker-group-';switch(col){case 0:calender+="first";cornerClass=" ui-corner-"+(isRTL?"right":"left");break;case numMonths[1]-1:calender+="last";cornerClass=" ui-corner-"+(isRTL?"left":"right");break;default:calender+="middle";cornerClass="";break}calender+='">'}calender+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+cornerClass+'">'+(/all|left/.test(cornerClass)&&row==0?(isRTL?next:prev):"")+(/all|right/.test(cornerClass)&&row==0?(isRTL?prev:next):"")+this._generateMonthYearHeader(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,row>0||col>0,monthNames,monthNamesShort)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var thead="";for(var dow=0;dow<7;dow++){var day=(dow+firstDay)%7;thead+="<th"+((dow+firstDay+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+dayNames[day]+'">'+dayNamesMin[day]+"</span></th>"}calender+=thead+"</tr></thead><tbody>";var daysInMonth=this._getDaysInMonth(drawYear,drawMonth);if(drawYear==inst.selectedYear&&drawMonth==inst.selectedMonth){inst.selectedDay=Math.min(inst.selectedDay,daysInMonth)}var leadDays=(this._getFirstDayOfMonth(drawYear,drawMonth)-firstDay+7)%7;var numRows=(isMultiMonth?6:Math.ceil((leadDays+daysInMonth)/7));var printDate=this._daylightSavingAdjust(new Date(drawYear,drawMonth,1-leadDays));for(var dRow=0;dRow<numRows;dRow++){calender+="<tr>";var tbody="";for(var dow=0;dow<7;dow++){var daySettings=(beforeShowDay?beforeShowDay.apply((inst.input?inst.input[0]:null),[printDate]):[true,""]);var otherMonth=(printDate.getMonth()!=drawMonth);var unselectable=otherMonth||!daySettings[0]||(minDate&&printDate<minDate)||(maxDate&&printDate>maxDate);tbody+='<td class="'+((dow+firstDay+6)%7>=5?" ui-datepicker-week-end":"")+(otherMonth?" ui-datepicker-other-month":"")+((printDate.getTime()==selectedDate.getTime()&&drawMonth==inst.selectedMonth&&inst._keyEvent)||(defaultDate.getTime()==printDate.getTime()&&defaultDate.getTime()==selectedDate.getTime())?" "+this._dayOverClass:"")+(unselectable?" "+this._unselectableClass+" ui-state-disabled":"")+(otherMonth&&!showOtherMonths?"":" "+daySettings[1]+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" "+this._currentClass:"")+(printDate.getTime()==today.getTime()?" ui-datepicker-today":""))+'"'+((!otherMonth||showOtherMonths)&&daySettings[2]?' title="'+daySettings[2]+'"':"")+(unselectable?"":" onclick=\"jQuery.datepicker._selectDay('#"+inst.id+"',"+drawMonth+","+drawYear+', this);return false;"')+">"+(otherMonth?(showOtherMonths?printDate.getDate():"&#xa0;"):(unselectable?printDate.getDate():'<a class="ui-state-default'+(printDate.getTime()==today.getTime()?" ui-state-highlight":"")+(printDate.getTime()>=currentDate.getTime()&&printDate.getTime()<=endDate.getTime()?" ui-state-active":"")+'" href="#">'+printDate.getDate()+"</a>"))+"</td>";printDate.setDate(printDate.getDate()+1);printDate=this._daylightSavingAdjust(printDate)}calender+=tbody+"</tr>"}drawMonth++;if(drawMonth>11){drawMonth=0;drawYear++}calender+="</tbody></table>"+(isMultiMonth?"</div>":"");group+=calender}html+=group}html+=(!inst.inline?buttonPanel:"")+($.browser.msie&&parseInt($.browser.version,10)<7&&!inst.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");inst._keyEvent=false;return html},_generateMonthYearHeader:function(inst,drawMonth,drawYear,minDate,maxDate,selectedDate,secondary,monthNames,monthNamesShort){minDate=(inst.rangeStart&&minDate&&selectedDate<minDate?selectedDate:minDate);var changeMonth=this._get(inst,"changeMonth");var changeYear=this._get(inst,"changeYear");var showMonthAfterYear=this._get(inst,"showMonthAfterYear");var html='<div class="ui-datepicker-title">';var monthHtml="";if(secondary||!changeMonth){monthHtml+='<span class="ui-datepicker-month">'+monthNames[drawMonth]+"</span> "}else{var inMinYear=(minDate&&minDate.getFullYear()==drawYear);var inMaxYear=(maxDate&&maxDate.getFullYear()==drawYear);monthHtml+='<select class="ui-datepicker-month" onchange="jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'M');\" onclick=\"jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(var month=0;month<12;month++){if((!inMinYear||month>=minDate.getMonth())&&(!inMaxYear||month<=maxDate.getMonth())){monthHtml+='<option value="'+month+'"'+(month==drawMonth?' selected="selected"':"")+">"+monthNamesShort[month]+"</option>"}}monthHtml+="</select>"}if(!showMonthAfterYear){html+=monthHtml+((secondary||changeMonth||changeYear)&&(!(changeMonth&&changeYear))?"&#xa0;":"")}if(secondary||!changeYear){html+='<span class="ui-datepicker-year">'+drawYear+"</span>"}else{var years=this._get(inst,"yearRange").split(":");var year=0;var endYear=0;if(years.length!=2){year=drawYear-10;endYear=drawYear+10}else{if(years[0].charAt(0)=="+"||years[0].charAt(0)=="-"){year=endYear=new Date().getFullYear();year+=parseInt(years[0],10);endYear+=parseInt(years[1],10)}else{year=parseInt(years[0],10);endYear=parseInt(years[1],10)}}year=(minDate?Math.max(year,minDate.getFullYear()):year);endYear=(maxDate?Math.min(endYear,maxDate.getFullYear()):endYear);html+='<select class="ui-datepicker-year" onchange="jQuery.datepicker._selectMonthYear(\'#'+inst.id+"', this, 'Y');\" onclick=\"jQuery.datepicker._clickMonthYear('#"+inst.id+"');\">";for(;year<=endYear;year++){html+='<option value="'+year+'"'+(year==drawYear?' selected="selected"':"")+">"+year+"</option>"}html+="</select>"}if(showMonthAfterYear){html+=(secondary||changeMonth||changeYear?"&#xa0;":"")+monthHtml}html+="</div>";return html},_adjustInstDate:function(inst,offset,period){var year=inst.drawYear+(period=="Y"?offset:0);var month=inst.drawMonth+(period=="M"?offset:0);var day=Math.min(inst.selectedDay,this._getDaysInMonth(year,month))+(period=="D"?offset:0);var date=this._daylightSavingAdjust(new Date(year,month,day));var minDate=this._getMinMaxDate(inst,"min",true);var maxDate=this._getMinMaxDate(inst,"max");date=(minDate&&date<minDate?minDate:date);date=(maxDate&&date>maxDate?maxDate:date);inst.selectedDay=date.getDate();inst.drawMonth=inst.selectedMonth=date.getMonth();inst.drawYear=inst.selectedYear=date.getFullYear();if(period=="M"||period=="Y"){this._notifyChange(inst)}},_notifyChange:function(inst){var onChange=this._get(inst,"onChangeMonthYear");if(onChange){onChange.apply((inst.input?inst.input[0]:null),[inst.selectedYear,inst.selectedMonth+1,inst])}},_getNumberOfMonths:function(inst){var numMonths=this._get(inst,"numberOfMonths");return(numMonths==null?[1,1]:(typeof numMonths=="number"?[1,numMonths]:numMonths))},_getMinMaxDate:function(inst,minMax,checkRange){var date=this._determineDate(this._get(inst,minMax+"Date"),null);return(!checkRange||!inst.rangeStart?date:(!date||inst.rangeStart>date?inst.rangeStart:date))},_getDaysInMonth:function(year,month){return 32-new Date(year,month,32).getDate()},_getFirstDayOfMonth:function(year,month){return new Date(year,month,1).getDay()},_canAdjustMonth:function(inst,offset,curYear,curMonth){var numMonths=this._getNumberOfMonths(inst);var date=this._daylightSavingAdjust(new Date(curYear,curMonth+(offset<0?offset:numMonths[1]),1));if(offset<0){date.setDate(this._getDaysInMonth(date.getFullYear(),date.getMonth()))}return this._isInRange(inst,date)},_isInRange:function(inst,date){var newMinDate=(!inst.rangeStart?null:this._daylightSavingAdjust(new Date(inst.selectedYear,inst.selectedMonth,inst.selectedDay)));newMinDate=(newMinDate&&inst.rangeStart<newMinDate?inst.rangeStart:newMinDate);var minDate=newMinDate||this._getMinMaxDate(inst,"min");var maxDate=this._getMinMaxDate(inst,"max");return((!minDate||date>=minDate)&&(!maxDate||date<=maxDate))},_getFormatConfig:function(inst){var shortYearCutoff=this._get(inst,"shortYearCutoff");shortYearCutoff=(typeof shortYearCutoff!="string"?shortYearCutoff:new Date().getFullYear()%100+parseInt(shortYearCutoff,10));return{shortYearCutoff:shortYearCutoff,dayNamesShort:this._get(inst,"dayNamesShort"),dayNames:this._get(inst,"dayNames"),monthNamesShort:this._get(inst,"monthNamesShort"),monthNames:this._get(inst,"monthNames")}},_formatDate:function(inst,day,month,year){if(!day){inst.currentDay=inst.selectedDay;inst.currentMonth=inst.selectedMonth;inst.currentYear=inst.selectedYear}var date=(day?(typeof day=="object"?day:this._daylightSavingAdjust(new Date(year,month,day))):this._daylightSavingAdjust(new Date(inst.currentYear,inst.currentMonth,inst.currentDay)));return this.formatDate(this._get(inst,"dateFormat"),date,this._getFormatConfig(inst))}});function extendRemove(target,props){$.extend(target,props);for(var name in props){if(props[name]==null||props[name]==undefined){target[name]=props[name]}}return target}function isArray(a){return(a&&(($.browser.safari&&typeof a=="object"&&a.length)||(a.constructor&&a.constructor.toString().match(/\Array\(\)/))))}$.fn.datepicker=function(options){if(!$.datepicker.initialized){$(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick);$.datepicker.initialized=true}var otherArgs=Array.prototype.slice.call(arguments,1);if(typeof options=="string"&&(options=="isDisabled"||options=="getDate")){return $.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this[0]].concat(otherArgs))}return this.each(function(){typeof options=="string"?$.datepicker["_"+options+"Datepicker"].apply($.datepicker,[this].concat(otherArgs)):$.datepicker._attachDatepicker(this,options)})};$.datepicker=new Datepicker();$.datepicker.initialized=false;$.datepicker.uuid=new Date().getTime();$.datepicker.version="1.6rc4"})(jQuery);

// ==jQueryAutocomplete
/*
 * jQuery Autocomplete plugin 1.1
 *
 * Copyright (c) 2009 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
 */

;(function($) {
	
$.fn.extend({
	autocomplete: function(urlOrData, options) {
		var isUrl = typeof urlOrData == "string";
		options = $.extend({}, $.Autocompleter.defaults, {
			url: isUrl ? urlOrData : null,
			data: isUrl ? null : urlOrData,
			delay: isUrl ? $.Autocompleter.defaults.delay : 10,
			max: options && !options.scroll ? 10 : 150
		}, options);
		
		// if highlight is set to false, replace it with a do-nothing function
		options.highlight = options.highlight || function(value) { return value; };
		
		// if the formatMatch option is not specified, then use formatItem for backwards compatibility
		options.formatMatch = options.formatMatch || options.formatItem;
		
		return this.each(function() {
			new $.Autocompleter(this, options);
		});
	},
	result: function(handler) {
		return this.bind("result", handler);
	},
	search: function(handler) {
		return this.trigger("search", [handler]);
	},
	flushCache: function() {
		return this.trigger("flushCache");
	},
	setOptions: function(options){
		return this.trigger("setOptions", [options]);
	},
	unautocomplete: function() {
		return this.trigger("unautocomplete");
	}
});

$.Autocompleter = function(input, options) {

	var KEY = {
		UP: 38,
		DOWN: 40,
		DEL: 46,
		TAB: 9,
		RETURN: 13,
		ESC: 27,
		COMMA: 188,
		PAGEUP: 33,
		PAGEDOWN: 34,
		BACKSPACE: 8
	};

	// Create $ object for input element
	var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);

	var timeout;
	var previousValue = "";
	var cache = $.Autocompleter.Cache(options);
	var hasFocus = 0;
	var lastKeyPressCode;
	var config = {
		mouseDownOnSelect: false
	};
	var select = $.Autocompleter.Select(options, input, selectCurrent, config);
	
	var blockSubmit;
	
	// prevent form submit in opera when selecting with return key
	$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
		if (blockSubmit) {
			blockSubmit = false;
			return false;
		}
	});
	
	// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
	$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
		// a keypress means the input has focus
		// avoids issue where input had focus before the autocomplete was applied
		hasFocus = 1;
		// track last key pressed
		lastKeyPressCode = event.keyCode;
		switch(event.keyCode) {
		
			case KEY.UP:
				event.preventDefault();
				if ( select.visible() ) {
					select.prev();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.DOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.next();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.PAGEUP:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageUp();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.PAGEDOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageDown();
				} else {
					onChange(0, true);
				}
				break;
			
			// matches also semicolon
			case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
			case KEY.TAB:
			case KEY.RETURN:
				if( selectCurrent() ) {
					// stop default to prevent a form submit, Opera needs special handling
					event.preventDefault();
					blockSubmit = true;
					return false;
				} else {
				    $(this).trigger('enter');
				}
				break;
				
			case KEY.ESC:
				select.hide();
				break;
				
			default:
				clearTimeout(timeout);
				timeout = setTimeout(onChange, options.delay);
				break;
		}
	}).focus(function(){
		// track whether the field has focus, we shouldn't process any
		// results if the field no longer has focus
		hasFocus++;
	}).blur(function() {
		hasFocus = 0;
		if (!config.mouseDownOnSelect) {
			hideResults();
		}
	}).click(function() {
		// show select when clicking in a focused field
		if ( hasFocus++ > 1 && !select.visible() ) {
			onChange(0, true);
		}
	}).bind("search", function() {
		// TODO why not just specifying both arguments?
		var fn = (arguments.length > 1) ? arguments[1] : null;
		function findValueCallback(q, data) {
			var result;
			if( data && data.length ) {
				for (var i=0; i < data.length; i++) {
					if( data[i].result.toLowerCase() == q.toLowerCase() ) {
						result = data[i];
						break;
					}
				}
			}
			if( typeof fn == "function" ) fn(result);
			else $input.trigger("result", result && [result.data, result.value]);
		}
		$.each(trimWords($input.val()), function(i, value) {
			request(value, findValueCallback, findValueCallback);
		});
	}).bind("flushCache", function() {
		cache.flush();
	}).bind("setOptions", function() {
		$.extend(options, arguments[1]);
		// if we've updated the data, repopulate
		if ( "data" in arguments[1] )
			cache.populate();
	}).bind("unautocomplete", function() {
		select.unbind();
		$input.unbind();
		$(input.form).unbind(".autocomplete");
	}).bind('autocomplete', function() {
	    hasFocus++;
	    lastKeyPressCode = null;
	    onChange(0, true);
	});
	
	
	function selectCurrent() {
		var selected = select.selected();
		if( !selected )
			return false;
		
		var v = selected.result;
		previousValue = v;
		
		if ( options.multiple ) {
			var words = trimWords($input.val());
			if ( words.length > 1 ) {
				var seperator = options.multipleSeparator.length;
				var cursorAt = $(input).selection().start;
				var wordAt, progress = 0;
				$.each(words, function(i, word) {
					progress += word.length;
					if (cursorAt <= progress) {
						wordAt = i;
						return false;
					}
					progress += seperator;
				});
				words[wordAt] = v;
				// TODO this should set the cursor to the right position, but it gets overriden somewhere
				//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
				v = words.join( options.multipleSeparator );
			}
			v += options.multipleSeparator;
		}
		
		$input.val(v);
		hideResultsNow();
		$input.trigger("result", [selected.data, selected.value]);
		return true;
	}
	
	function onChange(crap, skipPrevCheck) {
		if( lastKeyPressCode == KEY.DEL ) {
			select.hide();
			return;
		}
		
		var currentValue = $input.val();
		
		if ( !skipPrevCheck && currentValue == previousValue )
			return;
		
		previousValue = currentValue;
		currentValue = lastWord(currentValue);
		if ( currentValue.length >= options.minChars) {
			$input.addClass(options.loadingClass);
			if (!options.matchCase)
				currentValue = currentValue.toLowerCase();
			request(currentValue, receiveData, hideResultsNow);
		} else {
			stopLoading();
			select.hide();
		}
	};
	
	function trimWords(value) {
		if (!value)
			return [""];
		if (!options.multiple)
			return [$.trim(value)];
		return $.map(value.split(options.multipleSeparator), function(word) {
			return $.trim(value).length ? $.trim(word) : null;
		});
	}
	
	function lastWord(value) {
		if ( !options.multiple )
			return value;
		var words = trimWords(value);
		if (words.length == 1) 
			return words[0];
		var cursorAt = $(input).selection().start;
		if (cursorAt == value.length) {
			words = trimWords(value)
		} else {
			words = trimWords(value.replace(value.substring(cursorAt), ""));
		}
		return words[words.length - 1];
	}
	
	// fills in the input box w/the first match (assumed to be the best match)
	// q: the term entered
	// sValue: the first matching result
	function autoFill(q, sValue){
		// autofill in the complete box w/the first match as long as the user hasn't entered in more data
		// if the last user key pressed was backspace, don't autofill
		if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
			// fill in the value (keep the case the user has typed)
			$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
			// select the portion of the value not typed by the user (so the next character will erase)
			$(input).selection(previousValue.length, previousValue.length + sValue.length);
		}
	};

	function hideResults() {
		clearTimeout(timeout);
		timeout = setTimeout(hideResultsNow, 200);
	};

	function hideResultsNow() {
		var wasVisible = select.visible();
		select.hide();
		clearTimeout(timeout);
		stopLoading();
		if (options.mustMatch) {
			// call search and run callback
			$input.search(
				function (result){
					// if no value found, clear the input box
					if( !result ) {
						if (options.multiple) {
							var words = trimWords($input.val()).slice(0, -1);
							$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
						}
						else {
							$input.val( "" );
							$input.trigger("result", null);
						}
					}
				}
			);
		}
	};

	function receiveData(q, data) {
	    $input.trigger('receiveData', [data]);
		if ( data && data.length && hasFocus ) {
			stopLoading();
			select.display(data, q);
			autoFill(q, data[0].value);
			select.show();
		} else {
			hideResultsNow();
		}
	};

	function request(term, success, failure) {
		if (!options.matchCase)
			term = term.toLowerCase();
		var data = cache.load(term);
		// recieve the cached data
		if (data && data.length) {
			success(term, data);
		// if an AJAX url has been supplied, try loading the data now
		} else if( (typeof options.url == "string") && (options.url.length > 0) ){
			
			var extraParams = {
				timestamp: +new Date()
			};
			$.each(options.extraParams, function(key, param) {
				extraParams[key] = typeof param == "function" ? param() : param;
			});
			
			$.ajax({
				// try to leverage ajaxQueue plugin to abort previous requests
				mode: "abort",
				// limit abortion to this input
				port: "autocomplete" + input.name,
				dataType: options.dataType,
				url: options.url,
				data: $.extend({
					q: lastWord(term),
					limit: options.max
				}, extraParams),
				success: function(data) {
					var parsed = options.parse && options.parse(data) || parse(data);
					cache.add(term, parsed);
					success(term, parsed);
				}
			});
		} else {
			// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
			select.emptyList();
			failure(term);
		}
	};
	
	function parse(data) {
		var parsed = [];
		var rows = data.split("\n");
		for (var i=0; i < rows.length; i++) {
			var row = $.trim(rows[i]);
			if (row) {
				row = row.split("|");
				parsed[parsed.length] = {
					data: row,
					value: row[0],
					result: options.formatResult && options.formatResult(row, row[0]) || row[0]
				};
			}
		}
		return parsed;
	};

	function stopLoading() {
		$input.removeClass(options.loadingClass);
	};

};

$.Autocompleter.defaults = {
	inputClass: "ac_input",
	resultsClass: "ac_results",
	loadingClass: "ac_loading",
	minChars: 1,
	delay: 400,
	matchCase: false,
	matchSubset: true,
	matchContains: false,
	cacheLength: 10,
	max: 100,
	mustMatch: false,
	extraParams: {},
	selectFirst: true,
	formatItem: function(row) { return row[0]; },
	formatMatch: null,
	autoFill: false,
	width: 0,
	multiple: false,
	multipleSeparator: ", ",
	highlight: function(value, term) {
		return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
	},
    scroll: true,
    scrollHeight: 180
};

$.Autocompleter.Cache = function(options) {

	var data = {};
	var length = 0;
	
	function matchSubset(s, sub) {
		if (!options.matchCase) 
			s = s.toLowerCase();
		var i = s.indexOf(sub);
		if (options.matchContains == "word"){
			i = s.toLowerCase().search("\\b" + sub.toLowerCase());
		}
		if (i == -1) return false;
		return i == 0 || options.matchContains;
	};
	
	function add(q, value) {
		if (length > options.cacheLength){
			flush();
		}
		if (!data[q]){ 
			length++;
		}
		data[q] = value;
	}
	
	function populate(){
		if( !options.data ) return false;
		// track the matches
		var stMatchSets = {},
			nullData = 0;

		// no url was specified, we need to adjust the cache length to make sure it fits the local data store
		if( !options.url ) options.cacheLength = 1;
		
		// track all options for minChars = 0
		stMatchSets[""] = [];
		
		// loop through the array and create a lookup structure
		for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
			var rawValue = options.data[i];
			// if rawValue is a string, make an array otherwise just reference the array
			rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
			
			var value = options.formatMatch(rawValue, i+1, options.data.length);
			if ( value === false )
				continue;
				
			var firstChar = value.charAt(0).toLowerCase();
			// if no lookup array for this character exists, look it up now
			if( !stMatchSets[firstChar] ) 
				stMatchSets[firstChar] = [];

			// if the match is a string
			var row = {
				value: value,
				data: rawValue,
				result: options.formatResult && options.formatResult(rawValue) || value
			};
			
			// push the current match into the set list
			stMatchSets[firstChar].push(row);

			// keep track of minChars zero items
			if ( nullData++ < options.max ) {
				stMatchSets[""].push(row);
			}
		};

		// add the data items to the cache
		$.each(stMatchSets, function(i, value) {
			// increase the cache size
			options.cacheLength++;
			// add to the cache
			add(i, value);
		});
	}
	
	// populate any existing data
	setTimeout(populate, 25);
	
	function flush(){
		data = {};
		length = 0;
	}
	
	return {
		flush: flush,
		add: add,
		populate: populate,
		data: data,
		load: function(q) {
			if (!options.cacheLength || !length)
				return null;
			/* 
			 * if dealing w/local data and matchContains than we must make sure
			 * to loop through all the data collections looking for matches
			 */
			if( !options.url && options.matchContains ){
				// track all matches
				var csub = [];
				// loop through all the data grids for matches
				for( var k in data ){
					// don't search through the stMatchSets[""] (minChars: 0) cache
					// this prevents duplicates
					if( k.length > 0 ){
						var c = data[k];
						$.each(c, function(i, x) {
							// if we've got a match, add it to the array
							if (matchSubset(x.value, q)) {
								csub.push(x);
							}
						});
					}
				}				
				return csub;
			} else 
			// if the exact item exists, use it
			if (data[q]){
				return data[q];
			} else
			if (options.matchSubset) {
				for (var i = q.length - 1; i >= options.minChars; i--) {
					var c = data[q.substr(0, i)];
					if (c) {
						var csub = [];
						$.each(c, function(i, x) {
							if (matchSubset(x.value, q)) {
								csub[csub.length] = x;
							}
						});
						return csub;
					}
				}
			}
			return null;
		}
	};
};

$.Autocompleter.Select = function (options, input, select, config) {
	var CLASSES = {
		ACTIVE: "ac_over"
	};
	
	var listItems,
		active = -1,
		data,
		term = "",
		needsInit = true,
		element,
		list;
	
	// Create results
	function init() {
		if (!needsInit)
			return;
		element = $("<div/>")
		.hide()
		.addClass(options.resultsClass)
		.css("position", "absolute")
		.appendTo(document.body);
	
		list = $("<ul/>").appendTo(element).mouseover( function(event) {
			if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
	            active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
			    $(target(event)).addClass(CLASSES.ACTIVE);            
	        }
		}).click(function(event) {
			$(target(event)).addClass(CLASSES.ACTIVE);
			select();
			// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
			input.focus();
			return false;
		}).mousedown(function() {
			config.mouseDownOnSelect = true;
		}).mouseup(function() {
			config.mouseDownOnSelect = false;
		});
		
		if( options.width > 0 )
			element.css("width", options.width);
			
		needsInit = false;
	} 
	
	function target(event) {
		var element = event.target;
		while(element && element.tagName != "LI")
			element = element.parentNode;
		// more fun with IE, sometimes event.target is empty, just ignore it then
		if(!element)
			return [];
		return element;
	}

	function moveSelect(step) {
		listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
		movePosition(step);
        var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
        if(options.scroll) {
            var offset = 0;
            listItems.slice(0, active).each(function() {
				offset += this.offsetHeight;
			});
            if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
                list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
            } else if(offset < list.scrollTop()) {
                list.scrollTop(offset);
            }
        }
	};
	
	function movePosition(step) {
		active += step;
		if (active < 0) {
			active = listItems.size() - 1;
		} else if (active >= listItems.size()) {
			active = 0;
		}
	}
	
	function limitNumberOfItems(available) {
		return options.max && options.max < available
			? options.max
			: available;
	}
	
	function fillList() {
		list.empty();
		var max = limitNumberOfItems(data.length);
		for (var i=0; i < max; i++) {
			if (!data[i])
				continue;
			var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
			if ( formatted === false )
				continue;
			var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
			$.data(li, "ac_data", data[i]);
		}
		listItems = list.find("li");
		if ( options.selectFirst ) {
			listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
			active = 0;
		}
		// apply bgiframe if available
		if ( $.fn.bgiframe )
			list.bgiframe();
	}
	
	return {
		display: function(d, q) {
			init();
			data = d;
			term = q;
			fillList();
		},
		next: function() {
			moveSelect(1);
		},
		prev: function() {
			moveSelect(-1);
		},
		pageUp: function() {
			if (active != 0 && active - 8 < 0) {
				moveSelect( -active );
			} else {
				moveSelect(-8);
			}
		},
		pageDown: function() {
			if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
				moveSelect( listItems.size() - 1 - active );
			} else {
				moveSelect(8);
			}
		},
		hide: function() {
			element && element.hide();
			listItems && listItems.removeClass(CLASSES.ACTIVE);
			active = -1;
		},
		visible : function() {
			return element && element.is(":visible");
		},
		current: function() {
			return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
		},
		show: function() {
			var offset = $(input).offset();
			element.css({
				width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
				top: offset.top + input.offsetHeight,
				left: offset.left
			}).show();
            if(options.scroll) {
                list.scrollTop(0);
                list.css({
					maxHeight: options.scrollHeight,
					overflow: 'auto'
				});
				
                if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
					var listHeight = 0;
					listItems.each(function() {
						listHeight += this.offsetHeight;
					});
					var scrollbarsVisible = listHeight > options.scrollHeight;
                    list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
					if (!scrollbarsVisible) {
						// IE doesn't recalculate width when scrollbar disappears
						listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
					}
                }
                
            }
		},
		selected: function() {
			var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
			return selected && selected.length && $.data(selected[0], "ac_data");
		},
		emptyList: function (){
			list && list.empty();
		},
		unbind: function() {
			element && element.remove();
		}
	};
};

$.fn.selection = function(start, end) {
	if (start !== undefined) {
		return this.each(function() {
			if( this.createTextRange ){
				var selRange = this.createTextRange();
				if (end === undefined || start == end) {
					selRange.move("character", start);
					selRange.select();
				} else {
					selRange.collapse(true);
					selRange.moveStart("character", start);
					selRange.moveEnd("character", end);
					selRange.select();
				}
			} else if( this.setSelectionRange ){
				this.setSelectionRange(start, end);
			} else if( this.selectionStart ){
				this.selectionStart = start;
				this.selectionEnd = end;
			}
		});
	}
	var field = this[0];
	if ( field.createTextRange ) {
		var range = document.selection.createRange(),
			orig = field.value,
			teststring = "<->",
			textLength = range.text.length;
		range.text = teststring;
		var caretAt = field.value.indexOf(teststring);
		field.value = orig;
		this.selection(caretAt, caretAt + textLength);
		return {
			start: caretAt,
			end: caretAt + textLength
		}
	} else if( field.selectionStart !== undefined ){
		return {
			start: field.selectionStart,
			end: field.selectionEnd
		}
	}
};

})(jQuery);

  var qsAutoSuggestOptions = {
    resultsClass: 'search_suggest',
    loadingClass: 'search_suggest_loading',
	  selectOverClass: "search_suggest_over",
	  cacheLength: 200,
	  matchContains: 1,
    width: 252,
    delay: 10,
    timestampRequests: false,
    scrollHeight: 300,
    minChars: 3,
    forceFill: true,
    max: 6,
    formatItem: function(row, pos, count){
      if (row.length == 1) {
        var data = row[0].split(", ");
        return '<a href="#"><b>'+data.shift()+'</b><br /><span class="inline">'+row[0]+'</span></a>';
      } else {
        return '<a href="#"><b>'+row[0]+'</b><br /><span class="inline">'+row[1]+'</span></a>';
      }
    },
    formatResult: function(row){
      return row[row.length-2];
    }
  };

  var ac_root_host = '';
  if (location.host.indexOf('widersite.qa.shermanstravel') != 0) { 
    ac_root_host = 'http://www.shermanstravel.com';
  }
  $(".qsFlightFrom, .qsFlightTo").autocomplete(ac_root_host+'/search/qs/flights/suggestions', qsAutoSuggestOptions);
  $(".qsPackageFrom, .qsPackageTo").autocomplete(ac_root_host+'/search/qs/packages/suggestions', qsAutoSuggestOptions);
  $(".qsCarsFrom, .qsCarsTo").autocomplete(ac_root_host+'/search/qs/cars/suggestions', qsAutoSuggestOptions);
  $(".qsHotelDestination").autocomplete(ac_root_host+'/search/qs/hotels/suggestions', qsAutoSuggestOptions);

// =jQuery-Color-Animations

		/*
		 * jQuery Color Animations
		 * Copyright 2007 John Resig
		 * Released under the MIT and GPL licenses.
		 */
		(function(jQuery){jQuery.each(['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,attr){jQuery.fx.step[attr]=function(fx){if(fx.state==0){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end);}
		fx.elem.style[attr]="rgb("+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(",")+")";}});function getRGB(color){var result;if(color&&color.constructor==Array&&color.length==3)
		return color;if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
		return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])];if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
		return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55];if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
		return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)];if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
		return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)];return colors[jQuery.trim(color).toLowerCase()];}
		function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if(color!=''&&color!='transparent'||jQuery.nodeName(elem,"body"))
		break;attr="backgroundColor";}while(elem=elem.parentNode);return getRGB(color);};var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]};})(jQuery);



// =Shermanstravel_slideshow
(function($){

    $.fn.ShermansTravel_Slideshow = function(vars) {

        var slideArray              = (vars.slideArray != undefined) ? vars.slideArray : console.log('You must set a slideArray to show slides.');
        if(!slideArray[0]) 			{ return false; } //make sure there are slides.
		var element                 = this;
        var timeOut                 = (vars.timeOut != undefined) ? vars.timeOut : 7000;
        var pause                   = false;
        var prev_next               = (vars.prev_next != undefined) ? vars.prev_next : true;
        var play_pause              = (vars.play_pause != undefined) ? vars.play_pause : true;
        var pagination              = (vars.pagination != undefined) ? vars.pagination : true;
        var SlideFade               = (vars.SlideFade != undefined) ? vars.SlideFade : "slow";
        var CaptionAnimate          = (vars.CaptionAnimate != undefined) ? vars.CaptionAnimate : "slow";
        var CaptionAnimateDelay     = (vars.CaptionAnimateDelay != undefined) ? vars.CaptionAnimateDelay : 500;
        var SlideShowPopup          = (vars.SlideShowPopup != undefined) ? vars.SlideShowPopup : false;
        var current                 = null;
        var timeOutFn               = null;
        var wrapper                 = jQuery("#" + element[0].id);


        //set up structure
        for(var i=1; i<slideArray.length; i++) {
            wrapper
                .append('<li class="slide"></li>\n')
                .find('li:last')
                .append('<a href="'+ slideArray[i]['link'] +'" target="'+slideArray[i]['target']+'"><img src="" alt="'+ slideArray[i]['caption'] +'" /></a>\n')
                .append('<span></span>\n');
            if(slideArray[i]['caption'] || slideArray[i]['subcaption']) {
                wrapper.find('li.slide:last span')
                    .append('\n<div class="caption">'+ slideArray[i]['caption'] +'</div>\n<div class="subcaption">'+ slideArray[i]['subcaption'] +'</div>\n');
            } else {
                //the span must exist for the animation to fire correctly.
                wrapper.find('li.slide:last span').css('padding','0px').css('height','0px');
            }
        }//end for

        if(SlideShowPopup) {
            wrapper.find('li a').click(function(){
                popup(this.href, 'slideshow_window', {height: 680, width: 750, center: true}); return false;
            });
        }

        //now that structure is in place grab the elements
        var items       = jQuery("#" + element[0].id + " .slide");
        var itemsSpan   = items.find("span");

        //preload 2nd slide
        wrapper.find('li.slide:eq(1) img').attr("src", slideArray[1]['url']);
        wrapper.find('li.slide:eq(1)').addClass("next");

        //Set up slideSelect to load. Not needed if JS is not on.
        if(pagination) {
            var slideSelect = "<div class=\"slideSelect\">\n";
            for(var i = 0; i < items.length; i++) {
                slideSelect += "<div>"+(i+1)+"</div>\n";
            }
            if(play_pause) {
                slideSelect += "<span class=\"pause\"></span>\n";
            }
            slideSelect += "</div>\n";
            wrapper.append(slideSelect);
        }

        //Set up slideSelect to load. Not needed if JS is not on.
        if(prev_next) {
            var pager = "<div class=\"prev-next\">\n";
            pager += " <span class=\"prev\">Previous</span> |";
            pager += " <span class=\"next\">Next</span>\n";
            pager += " </div>\n";
            wrapper.append(pager);
        }

        wrapper.find('div.slideSelect div:eq(0)').addClass("selected");
        wrapper.find('li.slide:eq(0) span').slideDown("slow");

        //go to href around image
        items.find('span').click(function(){
            if(SlideShowPopup) {
                popup(jQuery(this).parent().find("a").attr('href'), 'slideshow_window', {height: 680, width: 750, center: true}); return false;
            } else {
                location.href = jQuery(this).parent().find("a").attr('href');
            }
        });//end onClick

        //play or pause button
        wrapper.find('div.slideSelect span').click(function(){
            if(jQuery(this).hasClass('pause')) { //pause the animation
                $(this).removeClass("pause").addClass("play");
                pause = true;
                window.clearTimeout(timeOutFn);
            } else { //start animation
                $(this).addClass("pause").removeClass("play");
                window.clearTimeout(timeOutFn); //clear timout just to be careful
                pause = false;
                showSlide();
            }

        });//end onClick

        //go to a specific slide
        wrapper.find('div.slideSelect div').click(function(){
            current = $(this).text()-1; //set this as the next slide to show
            wrapper.find("li.next").removeClass("next"); //remove the slide that was set to show next
            wrapper.find("li:eq("+current+")").addClass("next"); //add this slide as next to show
            window.clearTimeout(timeOutFn);
            showSlide();
        });//end onClick

        //go to previous slide
        wrapper.find('div.prev-next .prev').click(function(){
            current = current-2; //-2 because count has already be incrimented to the next slide and you need to fall 2 back
            wrapper.find("li.next").removeClass("next"); //remove the slide that was set to show next
            wrapper.find("li:eq("+current+")").addClass("next"); //add this slide as next to show
            window.clearTimeout(timeOutFn);
            showSlide();
        });//end onClick

        //go to next slide
        wrapper.find('div.prev-next .next').click(function(){
            window.clearTimeout(timeOutFn);
            showSlide();
        });

        function showSlide() {
            current = (current != null) ? current : 1;
            current = (current == slideArray.length) ? 0 : current; //if you are 1 past the last slide go back to beginning

            var thisSlide = wrapper.find('li.slide:eq('+current+')');
            if(thisSlide.find('img').attr("src") == '') { thisSlide.find('img').attr("src", slideArray[current]['url']); }

            wrapper.find('li.show span').slideUp(CaptionAnimate, function(){
                $(this).parent().fadeOut(SlideFade, function(){

                    wrapper.find('div.slideSelect .selected').removeClass("selected");
                    wrapper.find('div.slideSelect div:eq('+current+')').addClass("selected");

                    wrapper.find("li.show").removeClass('show');
                    wrapper.find("li.next span")
                        .animate({opacity: 0.7}, CaptionAnimateDelay) //this is a trick to pause a jquery chain
                        .slideDown(CaptionAnimate)
                        .parent()
                        .removeClass("next")
                        .addClass("show");

                    //make sure you are not at end of slides
                    if (current == (slideArray.length-1)) { wrapper.find('li.slide:eq(0)').addClass('next');  }
                    else { wrapper.find('li.slide:eq('+(current+1)+')').addClass('next');  }

                    current++; //get ready for next slide

                    items.css('display',"block"); //un-fade the slide you fadedOut;
                    if(!pause) {
                        timeOutFn = setTimeout(showSlide, timeOut);
                    }

                });
            });


        }//end showSlide()
        timeOutFn = setTimeout(showSlide, timeOut);

    }//end shermansSlideshow

})(jQuery);

        if($('#ST_Page_Body.usatoday_slideshow_trigger #HomepageSlideshow').length){
            $('#ST_Page_Body.usatoday_slideshow_trigger #HomepageSlideshow').ShermansTravel_Slideshow({
                timeOut: 7000,
                slideArray:   ((typeof homepage_slideshow_images != "undefined") ? homepage_slideshow_images : '')
            });
        }


        $('.hotel_reviews #Slideshow').ShermansTravel_Slideshow({
            timeOut: 7000,
            SlideShowPopup: true,
            slideArray: ((typeof hotel_reviews_slideshow_images != "undefined") ? hotel_reviews_slideshow_images : '')
        });


// =toggleItem
(function($){
    $.fn.toggleItem = function(vars) {
		var toggleButton = (vars.toggleButton != undefined) ? vars.toggleButton : jQuery(this);
		var forceIERedraw = (vars.forceIERedraw != undefined) ? vars.forceIERedraw : false;
		var PreToggleText = (vars.PreToggleText != undefined) ? vars.PreToggleText : 'Show All';
		var PostToggleText = (vars.PostToggleText != undefined) ? vars.PostToggleText : 'Hide All';
		var toggleTarget = (vars.toggleTarget != undefined) ? vars.toggleTarget : false;

		toggleButton.click(function(){
			toggleTarget.toggle();
			if(toggleButton.text() == PreToggleText) {
				toggleButton.text(PostToggleText);
			} else {
				toggleButton.text(PreToggleText);
			}
			if(forceIERedraw.length) { forceIERedraw.css('display','none').css('display','block'); }
			return false;
		});
	}
})(jQuery);

// =collapseBoxes
$('.collapseBoxes').find('.collapseBox .header').click(function(){
    if($(this).parents('.open').length == 1){
        $(this).parents('.open').removeClass('open').addClass('closed');
    } else {
        $(this).parents('.closed').removeClass('closed').addClass('open');
    }
});


// =thickbox

/*
 * Modified by www.bitethebullet.co.uk to display
 * Google Maps in a modal window
 */

/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/

//var tb_pathToImage = "images/loadingAnimation.gif";

var BTB_GM_MAP;

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//on page load call tb_init
jQuery(document).ready(function(){
	tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
	//imgLoader = new Image();// preload image
	//imgLoader.src = tb_pathToImage;
});

//add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){
	jQuery(domChunk).click(function(){
	var t = this.title || this.name || null;
	var a = this.href || this.alt;
	var g = this.rel || false;
	tb_show(t,a,g);
	this.blur();
	return false;
	});
}

function tb_show(caption, url, imageGroup, callback) {//function called when the user clicks on a thickbox link

	try {
		var queryString = url.replace(/^[^\?]+\??/,'');
		var params = tb_parseQuery( queryString );


		TB_CLASS = (params['class'] != undefined) ? params['class'] : '';

		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			jQuery("body","html").css({height: "100%", width: "100%"});
			jQuery("html").css("overflow","hidden");
			if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
				jQuery("body").append("<iframe id='TB_HideSelect'></iframe>" + ((params['hideOverlay'] == undefined) ? "<div id='TB_overlay'></div>" : "") + "<div id='TB_window' class='"+TB_CLASS+"'></div>");
				jQuery("#TB_overlay").click(tb_remove);
			}
		}else{//all others
			if(document.getElementById("TB_overlay") === null){
				jQuery("body").append(((params['hideOverlay'] == undefined) ? "<div id='TB_overlay'></div>" : "") + "<div id='TB_window' class='"+TB_CLASS+"'></div>");
				jQuery("#TB_overlay").click(tb_remove);
			}
		}

		if(tb_detectMacXFF()){
			jQuery("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
		}else{
			jQuery("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
		}

		if(caption===null){caption="";}
		//jQuery("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
		jQuery('#TB_load').show();//show loader

		var baseURL;
	   if(url.indexOf("?")!==-1){ //ff there is a query string involved
			baseURL = url.substr(0, url.indexOf("?"));
	   }else{
	   		baseURL = url;
	   }

	   var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
	   var urlType = baseURL.toLowerCase().match(urlString);

		if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images

			TB_PrevCaption = "";
			TB_PrevURL = "";
			TB_PrevHTML = "";
			TB_NextCaption = "";
			TB_NextURL = "";
			TB_NextHTML = "";
			TB_imageCount = "";
			TB_FoundURL = false;
			if(imageGroup){
				TB_TempArray = jQuery("a[@rel="+imageGroup+"]").get();
				for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
					var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
						if (!(TB_TempArray[TB_Counter].href == url)) {
							if (TB_FoundURL) {
								TB_NextCaption = TB_TempArray[TB_Counter].title;
								TB_NextURL = TB_TempArray[TB_Counter].href;
								TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>";
							} else {
								TB_PrevCaption = TB_TempArray[TB_Counter].title;
								TB_PrevURL = TB_TempArray[TB_Counter].href;
								TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Prev</a></span>";
							}
						} else {
							TB_FoundURL = true;
							TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length);
						}
				}
			}

			imgPreloader = new Image();
			imgPreloader.onload = function(){
			imgPreloader.onload = null;

			// Resizing large images - orginal by Christian Montoya edited by me.
			var pagesize = tb_getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth);
				imageWidth = x;
				if (imageHeight > y) {
					imageWidth = imageWidth * (y / imageHeight);
					imageHeight = y;
				}
			} else if (imageHeight > y) {
				imageWidth = imageWidth * (y / imageHeight);
				imageHeight = y;
				if (imageWidth > x) {
					imageHeight = imageHeight * (x / imageWidth);
					imageWidth = x;
				}
			}
			// End Resizing

			TB_WIDTH = imageWidth + 30;
			TB_HEIGHT = imageHeight + 60;
			jQuery("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a></div>");

			jQuery("#TB_closeWindowButton").click(tb_remove);

			if (!(TB_PrevHTML === "")) {
				function goPrev(){
					if(jQuery(document).unbind("click",goPrev)){jQuery(document).unbind("click",goPrev);}
					jQuery("#TB_window").remove();
					jQuery("body").append("<div id='TB_window'></div>");
					tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
					return false;
				}
				jQuery("#TB_prev").click(goPrev);
			}

			if (!(TB_NextHTML === "")) {
				function goNext(){
					jQuery("#TB_window").remove();
					jQuery("body").append("<div id='TB_window'></div>");
					tb_show(TB_NextCaption, TB_NextURL, imageGroup);
					return false;
				}
				jQuery("#TB_next").click(goNext);

			}

			document.onkeydown = function(e){
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				} else if(keycode == 190){ // display previous image
					if(!(TB_NextHTML == "")){
						document.onkeydown = "";
						goNext();
					}
				} else if(keycode == 188){ // display next image
					if(!(TB_PrevHTML == "")){
						document.onkeydown = "";
						goPrev();
					}
				}
			};

			tb_position();
			jQuery("#TB_load").remove();
			jQuery("#TB_ImageOff").click(tb_remove);
			jQuery("#TB_window").css({display:"block"}); //for safari using css instead of show
			};

			imgPreloader.src = url;
		}else{//code to show html



			TB_STYLE = (params['style'] != undefined) ? (params['style']*1) : 1;
			if(TB_STYLE) {
				TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
				TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
				ajaxContentW = TB_WIDTH - 30;
				ajaxContentH = TB_HEIGHT - 45;
			} else {
				TB_WIDTH = (params['width']*1) || 630; //defaults to 630 if no paramaters were added to URL
				TB_HEIGHT = (params['height']*1) || 440; //defaults to 440 if no paramaters were added to URL
				ajaxContentW = TB_WIDTH;
				ajaxContentH = TB_HEIGHT;
			}

			if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window
					urlNoQuery = url.split('TB_');
					jQuery("#TB_iframeContent").remove();
					if(params['modal'] != "true"){//iframe no modal
						jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");
					}else{//iframe modal
					jQuery("#TB_overlay").unbind();
						jQuery("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' scrolling=no id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
					}
			}else{// not an iframe, ajax
					if(jQuery("#TB_window").css("display") != "block"){
						if(params['modal'] != "true"){//ajax no modal
						jQuery("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>close</a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
						}else{//ajax modal
						jQuery("#TB_overlay").unbind();
						jQuery("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");
						}
					}else{//this means the window is already up, we are just loading new content via ajax
						jQuery("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
						jQuery("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
						jQuery("#TB_ajaxContent")[0].scrollTop = 0;
						jQuery("#TB_ajaxWindowTitle").html(caption);
					}
			}


			jQuery("#TB_closeWindowButton").click(tb_remove);

				if(url.indexOf('TB_inline') != -1){
					jQuery("#TB_ajaxContent").append(jQuery('#' + params['inlineId']).children());
					jQuery("#TB_window").unload(function () {
						jQuery('#' + params['inlineId']).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished
					});
					tb_position();
                    if(params['showAdType'] == 1) {
                        tb_loadBanner();
                    }
					jQuery("#TB_load").remove();
					jQuery("#TB_window").css({display:"block"});
				}else if(url.indexOf('TB_googleMap') != -1){
					var mapDiv =  document.createElement('div');
					mapDiv.id = 'googleMap';

					jQuery('#TB_ajaxContent').append(mapDiv);
					jQuery('#TB_ajaxContent').css({overflow:"hidden"});

					jQuery('#googleMap').css({width:ajaxContentW-12, height:ajaxContentH});

					jQuery('#TB_window').unload(function(){
						jQuery("#googleMap").remove();
						BTB_GM_MAP = null;
						GUnload();
					});

					tb_position();
					jQuery("#TB_load").remove();
					jQuery("#TB_window").css({display:"block"});

					loadGoogleMap(params["lat"], params["lng"], params["zoom"], params["markerText"], params);

				}else if(url.indexOf('TB_iframe') != -1){
					tb_position();
					if($.browser.safari){//safari needs help because it will not fire iframe onload
						jQuery("#TB_load").remove();
						jQuery("#TB_window").css({display:"block"});
					}
				}else{
					jQuery("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
						tb_position();
						jQuery("#TB_load").remove();
						tb_init("#TB_ajaxContent a.thickbox");
						jQuery("#TB_window").css({display:"block"});
						if(typeof(callback) == 'function') {
							callback(jQuery('#TB_ajaxContent'));
						}
					});
				}

		}

		if(!params['modal']){
			document.onkeyup = function(e){
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				}
			};
		}

	} catch(e) {
		//nothing here
	}
}


function loadGoogleMap(lat, lon, zoom, html, params){
    if(GBrowserIsCompatible()){

			  //get all the points we need to mark
			  var points = new Array();
			  var i = 0;

			  for(var item in params){
					if(item.substring(0,3) == 'lat'){
							var point = {};
							//get the numberof marker
							var itemNumber = 0;
							if(item.length > 3){
							  itemNumber = parseInt(item.substring(3));
								point.lat = params["lat"+itemNumber];
								point.lng = params["lng"+itemNumber];
								point.text = params["markerText"+itemNumber];
							}else{
								point.lat = params["lat"];
								point.lng = params["lng"];
								point.text = params["markerText"];
							}

							points[i] = point;
							i++;
					}
			  }


        BTB_GM_MAP = new GMap2(document.getElementById("googleMap"));
				BTB_GM_MAP.enableScrollWheelZoom();
        BTB_GM_MAP.addControl(new GSmallMapControl());
        BTB_GM_MAP.addControl(new GMapTypeControl());


        var point = new GLatLng(lat, lon);
        BTB_GM_MAP.setCenter(point, 0);
        BTB_GM_MAP.clearOverlays();

        var bounds = new GLatLngBounds();


				for(var j = 0; j < points.length; j++){

					var markerPoint = new GLatLng(points[j].lat, points[j].lng);
					var marker = createMarker(markerPoint, points[j].text);
					var label = new ELabel(new GLatLng(points[j].lat,points[j].lng), points[j].text, "tooltip", new GSize(15,0), 75);
					BTB_GM_MAP.addOverlay(label);

					BTB_GM_MAP.addOverlay(marker);

					bounds.extend(markerPoint);
				}

				if(zoom != null)
				{
					BTB_GM_MAP.setZoom(parseInt(zoom));
				}
				else
				{
					BTB_GM_MAP.setZoom(BTB_GM_MAP.getBoundsZoomLevel(bounds));
					BTB_GM_MAP.setCenter(bounds.getCenter());
				}


				}


}

function createMarker(point, text){

  var marker = new GMarker(point);

  if(text && text != ''){
	  GEvent.addListener(marker, "click", function(){
		  marker.openInfoWindowHtml(text);
		});

  }

  return marker;
}

//helper functions below
function tb_showIframe(){
	jQuery("#TB_load").remove();
	jQuery("#TB_window").css({display:"block"});
}

function tb_remove() {
 	jQuery("#TB_imageOff").unbind("click");
	jQuery("#TB_closeWindowButton").unbind("click");
	jQuery("#TB_window").fadeOut("fast",function(){jQuery('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
	jQuery("#TB_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		jQuery("body","html").css({height: "auto", width: "auto"});
		jQuery("html").css("overflow","");
	}
	document.onkeydown = "";
	document.onkeyup = "";
	return false;
}

function tb_position() {
jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
	if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
		jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
	}
}

function tb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function tb_getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	arrayPageSize = [w,h];
	return arrayPageSize;
}

function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}

// =jquery regex
jQuery.url=function(){var segments={};var parsed={};var options={url:window.location,strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var parseUri=function(){str=decodeURI(options.url);var m=options.parser[options.strictMode?"strict":"loose"].exec(str);var uri={};var i=14;while(i--){uri[options.key[i]]=m[i]||""}uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1){uri[options.q.name][$1]=$2}});return uri};var key=function(key){if(!parsed.length){setUp()}if(key=="base"){if(parsed.port!==null&&parsed.port!==""){return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/"}else{return parsed.protocol+"://"+parsed.host+"/"}}return(parsed[key]==="")?null:parsed[key]};var param=function(item){if(!parsed.length){setUp()}return(parsed.queryKey[item]===null)?null:parsed.queryKey[item]};var setUp=function(){parsed=parseUri();getSegments()};var getSegments=function(){var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)=="/"?p.substring(1,p.length-1):path=p.substring(1)).split("/")};return{setMode:function(mode){strictMode=mode=="strict"?true:false;return this},setUrl:function(newUri){options.url=newUri===undefined?window.location:newUri;setUp();return this},segment:function(pos){if(!parsed.length){setUp()}if(pos===undefined){return segments.length}return(segments[pos]===""||segments[pos]===undefined)?null:segments[pos]},attr:key,param:param}}();


// =trim
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g,""); }


// =parseQuery
function parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

$.extend({
  // returns a hash of URL query parameters
  getUrlVars: function(){
    var vars = {}, hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
      hash = hashes[i].split('=');
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  // returns a single URL query parameter
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});

$(document).ready(function () {
  
  // Show QS popunder
  if (!($.getUrlVar('refer') != undefined && ($.getUrlVar('refer').indexOf("S-") === 0 || $.getUrlVar('refer').indexOf("s-") === 0))) {
    if (typeof(travelGuidePlaceId) != "undefined" && !$.cookie("qs_tg_popunder")) {
      var qsTgP = window.open(
        "/travel_search/flights/popunder/" + travelGuidePlaceId,
        "qsTgPopunder",
        "width=700,height=620,locationbar=0,menubar=0,resizable=0,scrollbars=0,status=1,titlebar=0,toolbar=0"
      );
      if (qsTgP != null) qsTgP.blur();
      window.focus();
      $.cookie("qs_tg_popunder", true, { path: '/', expires: 1});
    }
  }
  
  // =top25_modal_signup
  $("body").click(function(e) {
  	if (!$.cookie("ST_top25_signup_ajax_modal_opt_out") && !$.cookie("email") && !isUsatoday) {
    	// check again incase of link that opens in new window and thus does not refresh the page
    	if (!$.cookie("ST_top25_signup_ajax_modal_opt_out") && !$.cookie("email")) {

    		// test for a link.. or something inside of a link.
    		if (e.target.href ||
    			$(e.target).parents('a').attr('href') ||
    			$(e.target).parents('.single-deal').find('a').attr('href')) {

    			window.st_url_forward = ($(e.target).attr('href')) ? e.target.href : $(e.target).parents('a').attr('href');
    			window.st_url_forward = ($(e.target).parents('.single-deal').length) ? $(e.target).parents('.single-deal').find('a').attr('href') : window.st_url_forward;
    			window.st_url_forward_target = (e.target.target) ? e.target.target : $(e.target).parents('a').attr('target');
    			window.st_url_forward_target = (window.st_url_forward_target != undefined) ? window.st_url_forward_target : $(e.target).parents('.single-deal').find('a').attr('target');
    			window.st_url_forward_object = ($(e.target).parents('.single-deal').length) ? $(e.target).parents('.single-deal').find('a') : e.target;

    			// exclude some links and locations
    			var currentLoc = new String(window.location);
    			var currentLoc = currentLoc.split('/');
    			if ((currentLoc[3] != 'account') && //do not show in account area
              (currentLoc[3] != 'heart_texas') &&
    					(currentLoc[3] != 'TheWoodlands') &&
    					(currentLoc[3] != 'deal') && //do not show in deal area
    					(e.target.className != 'close') &&
    					(e.target.className != 'nothanks') &&
    					(e.target.className != 'more_links') &&
    					(e.target.className != 'no_modal_signup') &&
              !($(e.target).hasClass('close')) &&
              !($(e.target).hasClass('nothanks')) &&
              !($(e.target).hasClass('more_links')) &&
              !($(e.target).hasClass('no_modal_signup')) &&
              !($(e.target).parent().hasClass('no_modal_signup')) &&
              !($(e.target).parents('.no_modal_signup').length) &&
    					!($(e.target).parents('#minModalInner').length) &&
    					!($(e.target).parent().hasClass('pop_close')) &&
    					!($(e.target).parent().hasClass('close'))) {

    				$('body').after('<div id="hiddenAjax" style="display:none"></div>');
    				var ajaxURL = (location.href.indexOf('/blogs') != -1) ? '/blogs/wp-content/themes/shermanstravel/top25_ajax.php' : '/top25/signup_ajax';
    				$("#hiddenAjax").load(ajaxURL, {}, function(){
    					tb_show('', '#TB_inline?height=660&width=930&modal=true&inlineId=hiddenAjax', false);
              Omniture.trackModalNewsletterSignupWindowView();
    				});
    				return false;
    			}

    		}

    	}
  	}

  	// this lets you "click a link" programaticly and
  	// lets clicking on the hover effect on single-deals
  	var isDealLink = $(e.target).parents('.single-deal');
  	if (isDealLink.length && (e.target.tagName != 'A')) {
  		var link = isDealLink.find('a');
  		if (link.attr('target') == '_blank') {
  			window.open(link.attr('href'));
  		} else {
  			location.href = link.attr('href');
  		}
  	}

  });
  
  // Look for URL query params which should force the top25 on page load
  // http://www.shermanstravel.com/?t25_modal_show=1
  if ($.getUrlVar('t25_modal_show') == 1 && !$.cookie("email")) {
		$('body').after('<div id="hiddenAjax" style="display:none"></div>');
		var url = '/top25/signup_ajax?'+window.location.href.slice(window.location.href.indexOf('?') + 1);
    $("#hiddenAjax").load(url, {}, function(){
      tb_show('', '#TB_inline?height=660&width=930&modal=true&inlineId=hiddenAjax', false);
      Omniture.trackModalNewsletterSignupWindowView();
    });
  }
});


	/****************
		=Header
	/****************/

	// =dropdown
	$('ul#ST_main_nav > li').hover(
		function(){
			$(this).find('ul').show(); $(this).find(' > a').addClass('hover');
		},
		function(){ $(this).find('ul').hide(); $(this).find(' > a').removeClass('hover'); }
	);


	// =ShermansGraphic
	$('#sherman_graphic').mouseover(function(){ $('#sherman_alt').show(); }).mouseout(function(){ $('#sherman_alt').hide(); });

  // =ShowSignup
  if ($.cookie('open_signup')) {
      $.cookie('open_signup', null, { path: '/', domain: 'shermanstravel.com'});
      tb_show(null,$('#top_signup_modal_link').attr('href'),false);
  }

	/****************
		=SiteWide
	/****************/


	// =Multi_Tab
	$('.ST_tab_module .ST_tabs li').click(function(e){
		//hide current selection
		$(this).parents('.ST_tab_module').find('.module').hide();
		$(this).parent().find('li').removeClass('selected');
		//show new selection
		$(this).parents('.ST_tab_module').find('.'+$(this).text().toLowerCase().trim().replace(' ', '_')).show();
		$(this).addClass('selected');
	});

	// =quicksearch
  var returnDates  = $('input:odd.datepicker'),
      departDates  = $('input:even.datepicker');
	
  $('.datepicker').datepicker({
    mandatory: true,
    gotoCurrent: true,
    currentText: 'Current',
    changeMonth: true,
    yearRange: '2010:2015',
    numberOfMonths: 2,
    defaultDate: +7,
    minDate: 0,
    maxDate: '+2y',
    dateFormat: 'mm/dd/yy',
    onSelect: function(dateText, inst){
      var ele               = $(inst.input),
          next              = ele.parent().parent().nextUntil().find('.datepicker'),
          activeReturnDate  = $('input:odd.datepicker:visible'),
          activeDepartDate  = $('input:even.datepicker:visible'),
          newReturnDate     = Date.parse(ele.val()).addDays(7).toString('MM/dd/yyyy');
          
      if (next[0] != null) {
        next.val(newReturnDate);
        returnDates.val(newReturnDate);
        departDates.val(ele.val());
      } else {
        returnDates.val(ele.val());
      }
    }
  });
	$('img.calendar').click(function(){ $(this).prev().focus(); });

  // Standard left() and right() string functions that for whatever reason JavaScript
  // does not include. Used by extractIATACode()
  String.prototype.left = function(numChars) {
  	var str = this;
  	if (numChars <= 0) {
  		return "";
  	} else if (numChars > String(str).length) {
  		return str;
  	} else {
  		return String(str).substring(0, numChars);
  	}
  }
  String.prototype.right = function(numChars) {
  	var str = this;
  	if (numChars <= 0) {
  		return "";
  	} else if (numChars > String(str).length) {
  		return str;
  	} else {
  		var strLength = String(str).length;
  		return String(str).substring(strLength, strLength - numChars);
  	}
  }

	// Ajax autocomplete text is in the format 'Airport Name (3-char IATA code)'
	// Ex: 'Newark Liberty International Apt NJ USA (EWR)'
	// We need to extract 'EWR' from that string.
  function extractIATACode(locationString) {
  	if (locationString.length > 3) {
  		// Extract the 3-char IATA code from the end of the string
  		return locationString.toUpperCase().right(5).left(4).right(3);
  	} else {
  		// AJAX autocompleter did not run because user was too quick, just return the string as entered, in uppercase
  		return locationString.toUpperCase();
  	}
  }

  /**
   * Date.JS
   * Version: 1.0 Alpha-1 
   * Build Date: 13-Nov-2007
   * Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.
   * License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
   * Website: http://www.datejs.com/ or http://www.coolite.com/datejs/
   */
  Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};
  Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
  return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
  return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
  return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
  if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
  var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
  if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
  if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
  if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
  if(x.month||x.months){this.addMonths(x.month||x.months);}
  if(x.year||x.years){this.addYears(x.year||x.years);}
  if(x.day||x.days){this.addDays(x.day||x.days);}
  return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
  return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
  if(!x.second&&x.second!==0){x.second=-1;}
  if(!x.minute&&x.minute!==0){x.minute=-1;}
  if(!x.hour&&x.hour!==0){x.hour=-1;}
  if(!x.day&&x.day!==0){x.day=-1;}
  if(!x.month&&x.month!==0){x.month=-1;}
  if(!x.year&&x.year!==0){x.year=-1;}
  if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
  if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
  if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
  if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
  if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
  if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
  if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
  if(x.timezone){this.setTimezone(x.timezone);}
  if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
  return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
  var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
  return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};
  Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
  return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
  var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
  return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
  var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
  return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};
  (function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
  break;}
  return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
  rx.push(r[0]);s=r[1];}
  return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
  return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
  throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
  return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
  if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
  try{r=(px[i].call(this,s));}catch(e){r=null;}
  if(r){return r;}}
  throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
  try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
  rx.push(r[0]);s=r[1];}
  return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
  return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
  rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
  s=q[1];}
  if(!r){throw new $P.Exception(s);}
  if(q){throw new $P.Exception(q[1]);}
  if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
  return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
  rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
  if(!last&&q[1].length===0){last=true;}
  if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
  p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
  if(rx[1].length<best[1].length){best=rx;}
  if(best[1].length===0){break;}}
  if(best[0].length===0){return best;}
  if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
  best[1]=q[1];}
  return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
  return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
  if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
  var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
  return rx;};Date.Grammar={};Date.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=((s.length==3)?Date.getMonthNumberFromName(s):(Number(s)-1));};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];var now=new Date();this.year=now.getFullYear();this.month=now.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
  this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
  var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
  return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
  for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
  if(this.now){return new Date();}
  var today=Date.today();var method=null;var expression=!!(this.days!=null||this.orient||this.operator);if(expression){var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";gap=(Date.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
  if(this.month){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
  if(!this.unit){this.unit="day";}
  if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
  if(this.unit=="week"){this.unit="day";this.value=this.value*7;}
  this[this.unit+"s"]=this.value*orient;}
  return today.add(this);}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour;}
  if(this.weekday&&!this.day){this.day=(today.addDays((Date.getDayNumberFromName(this.weekday)-today.getDay()))).getDate();}
  if(this.month&&!this.day){this.day=1;}
  return today.set(this);}}};var _=Date.Parsing.Operators,g=Date.Grammar,t=Date.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=Date.CultureInfo.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
  fn=_C[keys]=_.any.apply(null,px);}
  return fn;};g.ctoken2=function(key){return _.rtoken(Date.CultureInfo.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.mm,g.ss],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^(\+|\-)\s*\d\d\d\d/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[Date.CultureInfo.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw Date.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
  return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
  return g._start.call({},s);};}());Date._parse=Date.parse;Date.parse=function(s){var r=null;if(!s){return null;}
  try{r=Date.Grammar.start.call({},s);}catch(e){return null;}
  return((r[1].length===0)?r[0]:null);};Date.getParseFunction=function(fx){var fn=Date.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
  return((r[1].length===0)?r[0]:null);};};Date.parseExact=function(s,fx){return Date.getParseFunction(fx)(s);};

  function departureDateValid(name)
  {
    var date = Date.parse($("#"+name).val());
  	if (!date) return false;
  	if (date.compareTo(Date.today()) < 0) return false;
  	return true;
  }
  function returnDateValid(depart_name, return_name)
  {
  	var departDate = Date.parse($("#"+depart_name).val());
  	var returnDate = Date.parse($("#"+return_name).val());
  	if (!returnDate) return false;
  	if (returnDate.compareTo(departDate) < 0) return false;
  	return true;
  }
  function dateDayDifference(depart_name, return_name)
  {
  	var departDate = Date.parse($("#" + depart_name).val());
  	var returnDate = Date.parse($("#" + return_name).val());

  	if (!returnDate || !departDate) return false;
	
  	var endDate = departDate.add(26).days();
  	if (returnDate.compareTo(endDate) > 0) return false;
  	return true;
  }

  // QS flight validations  
  $('.ST_tab_module .flights form').submit(function(){
    var from      = $(this).find('.qsFlightFrom'),
        fromValue = from.val(),
        to        = $(this).find('.qsFlightTo'),
        toValue   = to.val();;
    
  	if (fromValue == '') {
  		alert('To continue, please enter departure city or airport code.');
  		from.focus();
  		return false;
  	}
  	if (toValue == '') {
  		alert('To continue, please enter destination city or airport code.');
  		to.focus();
  		return false;
  	}
  	if (fromValue == toValue || extractIATACode(fromValue) == extractIATACode(toValue)) {
  		alert('To continue, your destination city or airport code must be different than '+
  		      'the departure city or airport code.');
  		to.select();
  		return false;
    }

    if (!departureDateValid('qsFlightDepartDate')) {
      alert("We cannot accept a departure date in the past or more than 330 days in the"+
            "future. Dates must be in the form of mm/dd/yy. To continue, please correct"+
            "the departure date.");
      $(this).find('#qsFlightDepartDate').focus();
      return false;
    }
    if (!returnDateValid('qsFlightDepartDate', 'qsFlightReturnDate')) {
      alert('Your chosen return date is invalid. To continue, please correct this.');
      $(this).find('#qsFlightReturnDate').focus();
      return false;
    }
    
    return true;
  });
  
  // QS package validations  
  $('.ST_tab_module .packages form').submit(function(){
    var from      = $(this).find('.qsPackageFrom'),
        fromValue = from.val(),
        to        = $(this).find('.qsPackageTo'),
        toValue   = to.val();;
    
  	if (fromValue == '') {
  		alert('To continue, please enter departure city or airport code.');
  		from.focus();
  		return false;
  	}
  	if (toValue == '') {
  		alert('To continue, please enter destination city or airport code.');
  		to.focus();
  		return false;
  	}
  	if (fromValue == toValue || extractIATACode(fromValue) == extractIATACode(toValue)) {
  		alert('To continue, your destination city or airport code must be different than '+
  		      'the departure city or airport code.');
  		to.select();
  		return false;
    }

    if (!departureDateValid('qsPackageDepartDate')) {
      alert("We cannot accept a departure date in the past or more than 330 days in the"+
            "future. Dates must be in the form of mm/dd/yy. To continue, please correct"+
            "the departure date.");
      $(this).find('#qsPackageDepartDate').focus();
      return false;
    }
    if (!returnDateValid('qsPackageDepartDate', 'qsPackageReturnDate')) {
      alert('Your chosen return date is invalid. To continue, please correct this.');
      $(this).find('#qsPackageReturnDate').focus();
      return false;
    }
    
    return true;
  });
  
  // QS flight validations  
  $('.ST_tab_module .cars form').submit(function(){
    var to        = $(this).find('.qsCarsTo'),
        toValue   = to.val();;
    
  	if (toValue == '') {
  		alert('To continue, please enter destination city or airport code.');
  		to.focus();
  		return false;
  	}

    if (!departureDateValid('qsCarsDepartDate')) {
      alert("We cannot accept a departure date in the past or more than 330 days in the"+
            "future. Dates must be in the form of mm/dd/yy. To continue, please correct"+
            "the departure date.");
      $(this).find('#qsCarsDepartDate').focus();
      return false;
    }
    if (!returnDateValid('qsCarsDepartDate', 'qsCarsReturnDate')) {
      alert('Your chosen return date is invalid. To continue, please correct this.');
      $(this).find('#qsCarsReturnDate').focus();
      return false;
    }
    
    return true;
  });

  // QS hotel validations
  $('.ST_tab_module .hotels form').submit(function(){
    var from      = $(this).find('.qsHotelDestination'),
        fromValue = from.val();
    
  	if (fromValue == '') {
  		alert('To continue, please enter your destination city.');
  		from.focus();
  		return false;
  	}
  	if ($(this).find('.qsHotelTravelers').value < $(this).find('.qsHotelRooms').value) {
      alert('The Number of rooms cannot be greater than the number of guests. Please correct this to continue.');
      $(this).find('.qsHotelRooms').focus();
      return false;
    }
  	if (($(this).find('.qsHotelTravelers').value / $(this).find('.qsHotelRooms').value) > 4) {
  		alert('Sorry, but no more than 4 guests can stay in a room. Please correct this to continue.');
  		$(this).find('.qsHotelRooms').focus();
  		return false;
  	}
  	
    if (!departureDateValid('qsHotelDepartDate')) {
      alert("We cannot accept a check-in date in the past or more than 330 days in the"+
            "future. Dates must be in the form of mm/dd/yy. To continue, please correct"+
            "the check-in date.");
      $(this).find('#qsHotelDepartDate').focus();
      return false;
    }
    if (!returnDateValid('qsHotelDepartDate', 'qsHotelReturnDate')) {
      alert('Your chosen check-out date is invalid. To continue, please correct this.');
      $(this).find('#qsHotelReturnDate').focus();
      return false;
    }
    
    return true;
  });
  
  // QS cruise validations
  $('.ST_tab_module .cruises form').submit(function(){
  	var today = new Date();
  	var month = today.getMonth()+1;
  	var year = today.getYear();
  	var day = today.getDate();

  	if (day < 10) day = "0" + day;
  	if (month < 10) month= "0" + month;
  	if (year < 1000) year += 1900;

  	if ($(this).find('.qsCruiseMonth').val() < month && $(this).find('.qsCruiseYear').val() == year) {
  		alert('Your departure date cannot be before the current month. To continue, please correct this.');
  		$(this).find('.qsCruiseMonth').focus();
  		return false;
  	}

    return true;
  });
  


	// =newsletter
	$('.dealsbox2 .top25Signup input[type=text], #ST_newsletter input[type=text], #top25_signup_2 input[type=text], #luxe15_newsletter input.text, #ST_newsletter_right input[type=text]').focus(function(){
		if($(this).val() == 'Enter email')
			$(this).val('');
	}).blur(function(){
		if($(this).val() == '')
			$(this).val('Enter email');
	});
	
	// =newsletter - validate email
	$('#ST_newsletter, #ST_newsletter_right, #ST_newsletter_right_hp').submit(function(){
		if (!emailValidatorRegex.test($(this).children('input.text').val())) {
			alert("Please Enter a Valid Email");
			return false;
		}
	});

	// =TransparentFlash
	if (document.getElementById("player")) {
		document.getElementById("centerCol").style.position = "static";
		var obj = document.getElementById("player").getElementsByTagName("object")[0];
		obj.innerHTML += '<param value="transparent" name="wmode"' + " />";
	}

	// =dealTabs
	$('.dealTabs').find('ul li a').click(function(){
		$(this).parents('.dealTabs').find('div > div').removeClass('show');
		$(this).parents('.dealTabs').find($(this).attr('href')).addClass('show');
		$(this).parents('ul').find('li').removeClass('selected');
		$(this).parents('li').addClass('selected');
		return false;
	});
	$('.dealsbox2 .priceHighlight .single-deal, .dealsbox2 .simpleList .single-deal').click(function(){
		if($(this).find('a').attr('target') == '_blank' || $(this).find('.editorsReview').length) {
			$(this).find('a').click();
		} else {
			location.href = $(this).find('a').attr('href');
		}
	});


	// =pagination
	$('.comment-pagination a').each(function(){
		this.href += ';#pagination';
	});


	// =trackExternalLinks

		$('a[href]').each(function(){
			var outsideLink = true;

			$.url.setUrl($(this).attr('href').toLowerCase());

			if($(this).attr('href') && $.url.attr("host")) {
				if($.url.attr("host").indexOf('shermanstravel.com') > -1) { return true;  }
			} else {
				return true;
			}

			if(outsideLink) {
				$(this).click(function(){
					$.url.setUrl($(this).attr('href'));
					Omniture.trackExternalLink(s_account, this.href, $(this).text());
				});//end click
			}

		});//end each

	// =slideshowPopup
		$('.slideshow_popup').click(function(){
			$(this).attr('target','slideshow_window')
			popup(this.href, this.target, {height: 680, width: 750, center: true}); return false;
		})

	/****************
		=Homepage
	/****************/
    
    $('.homepage_deals_list .lists .list li.more').click(function(){
        return false;
    });
    $('.homepage_deals_list .lists .list li.more a').mouseenter(function(){
        $(this).parents('.list').find('ul.more').show();
    });
    $('.homepage_deals_list .lists .list ul.more').mouseleave(function(){
        $(this).css('display','none');
    });

    

    $('#st_map .hoverMap').css('background-image','url(http://i.stcdn.net/design/homepage/map_rollover-png8.png)');

    //Shows the hover on the map
    $('#map_module').find('#st_map li a').each(function(){
        $(this).hover(function(){
            $(this).parents('#st_map').addClass($(this).attr('class'));
        },
        function(){
            $(this).parents('#st_map').removeClass($(this).attr('class'));
        });
    });


    //=slideshow3
    (function($){
    
        $.fn.ShermansTravel_Slideshow3 = function(vars) {
    
            var slideArray              = (vars.slideArray != undefined) ? vars.slideArray : console.log('You must set a slideArray to show slides.');
            if(!slideArray[0])          { return false; } //make sure there are slides.
            var element                 = this;
            var timeOut                 = (vars.timeOut != undefined) ? vars.timeOut : 7000;
            var pause                   = false;
            var prev_next               = (vars.prev_next != undefined) ? vars.prev_next : true;
            var play_pause              = (vars.play_pause != undefined) ? vars.play_pause : true;
            var pagination              = (vars.pagination != undefined) ? vars.pagination : true;
            var SlideFade               = (vars.SlideFade != undefined) ? vars.SlideFade : "slow";
            var CaptionAnimate          = (vars.CaptionAnimate != undefined) ? vars.CaptionAnimate : "slow";
            var CaptionAnimateDelay     = (vars.CaptionAnimateDelay != undefined) ? vars.CaptionAnimateDelay : 500;
            var SlideShowPopup          = (vars.SlideShowPopup != undefined) ? vars.SlideShowPopup : false;
            var current                 = null;
            var timeOutFn               = null;
            var wrapper                 = jQuery("#" + element[0].id);
    
    
            //set up structure
            for(var i=1; i<slideArray.length; i++) {
                wrapper
                    .append('<li class="slide"></li>\n')
                    .find('li:last')
                    .append('<a href="'+ slideArray[i]['link'] +'"><img src="" alt="'+ slideArray[i]['caption'] +'" /></a>\n')
                    .append('<span></span>\n');
                if(slideArray[i]['caption'] || slideArray[i]['subcaption']) {
                    wrapper.find('li.slide:last span')
                        .append('\n<div class="caption">'+ slideArray[i]['caption'] +'</div>\n<div class="subcaption">'+ slideArray[i]['subcaption'] +'</div>\n');
                } else {
                    //the span must exist for the animation to fire correctly.
                    wrapper.find('li.slide:last span').css('padding','0px').css('height','0px');
                }
            }//end for
    
            if(SlideShowPopup) {
                wrapper.find('li a').click(function(){
                    popup(this.href, 'slideshow_window', {height: 680, width: 750, center: true}); return false;
                });
            }
    
            //now that structure is in place grab the elements
            var items       = jQuery("#" + element[0].id + " .slide");
            var itemsSpan   = items.find("span");
    
            //preload 2nd slide
            wrapper.find('li.slide:eq(1) img').attr("src", slideArray[1]['url']);
            wrapper.find('li.slide:eq(1)').addClass("next");
    
            //Set up slideSelect to load. Not needed if JS is not on.
            if(pagination) {
                var slideSelect = "<div class=\"slideSelect\">\n";
                for(var i = 0; i < items.length; i++) {
                    slideSelect += "<div>"+(i+1)+"</div>\n";
                }
                if(play_pause) {
                    slideSelect += "<span class=\"pause\"></span>\n";
                }
                slideSelect += "</div>\n";
                wrapper.append(slideSelect);
            }
    
            //Set up slideSelect to load. Not needed if JS is not on.
            if(prev_next) {
                var pager = "<div class=\"prev-next\">\n";
                pager += " <span class=\"prev\">Previous</span> |";
                pager += " <span class=\"next\">Next</span>\n";
                pager += " </div>\n";
                wrapper.append(pager);
            }
    
            wrapper.find('div.slideSelect div:eq(0)').addClass("selected");
            // wrapper.find('li.slide:eq(0) span').slideDown("slow");
    
            //go to href around image
            items.find('span').click(function(){
                if(SlideShowPopup) {
                    popup(jQuery(this).parent().find("a").attr('href'), 'slideshow_window', {height: 680, width: 750, center: true}); return false;
                } else {
                    location.href = jQuery(this).parent().find("a").attr('href');
                }
            });//end onClick
    
            //play or pause button
            wrapper.find('div.slideSelect span').click(function(){
                if(jQuery(this).hasClass('pause')) { //pause the animation
                    $(this).removeClass("pause").addClass("play");
                    pause = true;
                    window.clearTimeout(timeOutFn);
                } else { //start animation
                    $(this).addClass("pause").removeClass("play");
                    window.clearTimeout(timeOutFn); //clear timout just to be careful
                    pause = false;
                    showSlide();
                }
    
            });//end onClick
    
            //go to a specific slide
            wrapper.find('div.slideSelect div').click(function(){
                current = $(this).text()-1; //set this as the next slide to show
                wrapper.find("li.next").removeClass("next"); //remove the slide that was set to show next
                wrapper.find("li:eq("+current+")").addClass("next"); //add this slide as next to show
                window.clearTimeout(timeOutFn);
                showSlide();
            });//end onClick
            
            //go to url
            wrapper.find('.slide_buttons .button').click(function(){
                if( 
                    $(this).parents('#HomepageSlideshow3').find('li.slide:eq('+$(this).index()+') a').attr('target') == '_new' ||
                    $(this).parents('#HomepageSlideshow3').find('li.slide:eq('+$(this).index()+') a').attr('target') == '_blank'
                ){
                    popup($(this).parents('#HomepageSlideshow3').find('li.slide:eq('+$(this).index()+') a').attr('href'), 'slideshow_window', {height: 680, width: 1000, center: true}); return false;
                } else {
                    location.href = $(this).parents('#HomepageSlideshow3').find('li.slide:eq('+$(this).index()+') a').attr('href');
                }
                return false;
            });//end onClick

            //go to a specific slide
            wrapper.find('.slide_buttons .button').mouseenter(function(){
                current = $(this).index(); //set this as the next slide to show
                wrapper.find("li.next").removeClass("next"); //remove the slide that was set to show next
                wrapper.find("li.slide:eq("+current+")").addClass("next"); //remove the slide that was set to show next
                window.clearTimeout(timeOutFn);
                showSlide();
            });//end onClick
    
            //go to previous slide
            wrapper.find('div.prev-next .prev').click(function(){
                current = current-2; //-2 because count has already be incrimented to the next slide and you need to fall 2 back
                current = (current < 0) ? slideArray.length-1 : current; //woops the number went negative
                wrapper.find("li.next").removeClass("next"); //remove the slide that was set to show next
                if (current == (slideArray.length-1)) { wrapper.find('li.slide:last').addClass('next');   }
                else { wrapper.find('li.slide:eq('+(current)+')').addClass('next'); }
                window.clearTimeout(timeOutFn);
                showSlide();
            });//end onClick
    
            //go to next slide
            wrapper.find('div.prev-next .next').click(function(){
                window.clearTimeout(timeOutFn);
                showSlide();
            });
    
            wrapper.find('li.slide').each(function(i, slide){
                if($(slide).find('img').attr("src") == '') { 
                    $(slide).find('img').attr("src", slideArray[i]['url']); 
                }
            });
    
            function showSlide() {
                current = (current != null) ? current : 1;
                current = (current == slideArray.length) ? 0 : current; //if you are 1 past the last slide go back to beginning
                var thisSlide = wrapper.find('li.slide:eq('+current+')');
                wrapper.find('li.slide:eq('+current+')');
                if(thisSlide.find('img').attr("src") == '') { thisSlide.find('img').attr("src", slideArray[current]['url']); }
    
                wrapper.find('li.show').fadeOut(SlideFade, function(){ 
                    
                        wrapper.find('div.slideSelect .selected, .slide_buttons .selected').removeClass("selected");
                        wrapper.find('div.slideSelect div:eq('+current+')').addClass("selected");
                        wrapper.find('.slide_buttons .button:eq('+current+')').addClass("selected");
    
                        wrapper.find("li.show").removeClass('show');
                        wrapper.find("li.next span")
                            .animate({opacity: 0.7}, CaptionAnimateDelay) //this is a trick to pause a jquery chain
                            // .slideDown(CaptionAnimate)
                            .parent()
                            .removeClass("next")
                            .addClass("show");
    
                        wrapper.find(".copyright").text(wrapper.find("li.show span div.subcaption").text());
    
                        //make sure you are not at end of slides
                        if (current == (slideArray.length-1)) { wrapper.find('li.slide:eq(0)').addClass('next');  }
                        else { wrapper.find('li.slide:eq('+(current+1)+')').addClass('next');  }
    
                        current++; //get ready for next slide
    
                        items.css('display',"block"); //un-fade the slide you fadedOut;
                        if(!pause) {
                            timeOutFn = setTimeout(showSlide, timeOut);
                        }
                });//fadeout
    
    
    
            }//end showSlide()
            timeOutFn = setTimeout(showSlide, timeOut);
    
        }//end shermansSlideshow
    
    })(jQuery);

    $('#ST_Page_Body.homepage #HomepageSlideshow3').ShermansTravel_Slideshow3({
        timeOut: 7000,
        slideArray:   ((typeof homepage_slideshow_images != "undefined") ? homepage_slideshow_images : ''),
        pagination: false,
        SlideFade: 0
    });



	// =trim
	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}

	/****************
		=Homepage
	/****************/




	/****************
		=Blogs
	/****************/

	// =Categories
	$('.blog_categories ul > li > span.click a , .blog_categories ul > li span.click').click(function(e){
		if($(this).parents('li').find('ul').html().trim() != '') {
			if($(this).parents('li').hasClass('selected')){
				$(this).parents('li').removeClass('selected');
				$(this).parents('li').find('.bullet').text('+');
			} else {
				$(this).parents('li').addClass('selected');
				$(this).parents('li').find('.bullet').html('&ndash;');
			}
			return false;
		}

	});

	// =commentForm
	$('.ST_Blogs #commentform #submit').click(function(){
		var errorMessage = '';
		if (!$('#commentform #email').val().match(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i))
		{
			errorMessage += "Please Enter a Valid Email \n";
		}
		if($('#commentform #author').val() == '') {
			errorMessage += 'Please Enter a Name';
		}
		if(errorMessage != '') {
			alert(errorMessage);
			return false;
		}

	});


	// =Print
	$(".blog_meta .print")
		.css('display','block')
		.click(function(){ window.print(); })
		.find('a')
		.click(function(){  window.print(); return false; });

	// =Share
	$(".blog_meta .share").css('display','block'); //only show if JS exists

	// =copyright
	addLoadEvent(function(){ //don't fire this too early
		if($('.post_body img[copyright]') && !($.browser.msie && ($.browser.version.substr(0,3)=="6.0"))) {
			$.each($('.post_body img[copyright]').parents('.blog_post'), function(n, post){
                $(this).find('.post_body img[copyright]').each(function(){
                     if($(this).attr('align') != '') { //if align is set on image then set it as float
                        $(this).css('float',$(this).attr('align'));
                    }

					$(this).css('margin','0px 0px 2px 0px')
					.wrap('<div class="copyrightImage"></div>')
					.parent()
					.css('width',$(this).attr('width'))
					.css('float',$(this).css('float'))
					.css('margin','0px 10px')
					.css('font-style','italic')
					.css('font-size','11px')
					.css('line-height','13px')
					.css('color','#AAA')
					.css('margin-'+$(this).css('float'),'0px');
                });//end each
				$(this).find('.post_body .copyrightImage').append($(this).find('img[copyright]').attr('copyright'));

                $(this).find('.post_body img[copyright]').each(function(){
                    //IE fix since it adds the padding to the width
                    if(($(this).css('border-left-width') == '1px') && (!$.browser.msie || $.browser.version.substr(0,3)=="8.0")){
                        var newWidth = parseInt($(this).parents('.copyrightImage').css('width').split("p")[0])+10;

                        $(this).parents('.copyrightImage').css('width',newWidth+'px');
                    }
                });//end each
			});//end each
		} else if ($('.post_body img[copyright]') && $.browser.version.substr(0,3)=="6.0")  { //IE6 bug caused center collumn to clear left... awesome
			$.each($('.post_body img[copyright]').parents('.blog_post'), function(n, post){
				$(this).find('.blog_meta').append('<div class="clear"></div><div class="copyright">'+$(this).find('img[copyright]').attr('copyright')+'</div>');
			});//end each
		}
		$('a .copyrightImage').parent().css('text-decoration','none'); //turns off underline if IMG is in an A tag.
	}); //end addLoadEvent

	/****************
		=Sections
	/****************/

    // =hotel_reviews
    if($("form.shermanmeterSearch input.search").length) {
        $("form.shermanmeterSearch input.search").autocomplete(locations, {
            minChars: 0,
            width: 236,
            matchContains: "guide",
            autoFill: false,
            formatItem: function(row, i, max) {
                return row.guide;
            },
            formatMatch: function(row, i, max) {
                return row.guide;
            },
            formatResult: function(row) {
                return row.guide;
            }
        });
    }
    
    // =travel_guide && =home_page autocomplete
    if($(".travel_guide_search input[type=text], #map_module form input[type=text]").length) {
        $(".travel_guide_search input[type=text], #map_module form input[type=text]").autocomplete(locations, {
            minChars: 0,
            width: 200,
            matchContains: false,
            autoFill: false,
            formatItem: function(row, i, max) {
                return row.guide;
            },
            formatMatch: function(row, i, max) {
                return row.guide;
            },
            formatResult: function(row) {
                return row.guide;
            }
        });

        $('.travel_guide_search input[type=text],#map_module form input[type=text]').focus(function(){
            if($(this).attr('value') == '' || $(this).attr('value') == $(this).attr('hover')) {
                $(this).attr('value', '');
                $(this).css('color', '#000');
            }
        }).blur(function(){
            if($(this).attr('value') == '' || $(this).attr('value') == $(this).attr('hover')) {
                $(this).attr('value', $(this).attr('hover'));
                $(this).css('color', '#AAA');
            }
        });
    
    
        $('.travel_guide_search form,#map_module form').submit(function(){
            var locationExists = false;
            var currentLocation = $(this).find('input[type=text]').attr('value');
            $.each(locations, function(i, val){
                if(val['guide'] == currentLocation){
                    locationExists = true;
                }
            });
            if(!locationExists) {
                alert('Please select a location from our list');
                return false;
            } else {
                document.location = '/travel_guides/'+currentLocation.replace(/\s/g,'_');
            }
            return false;
        });

    } //if exists


    
	// =deals
		jQuery(document).ready(function(){
		$('.sponsor_listing_wrapper').each(function(){
            var ad_count = 5;

			function setSponsorListingNav() {
				var wrapper = $('.sponsor_listing_wrapper');
				var prev = wrapper.find('.sponsor_listing.YouAreHere').prevAll('.hide').length;
				var next = wrapper.find('.sponsor_listing.YouAreHere').nextAll('.hide').length;
				if(prev) { wrapper.find('.prev').show(); }
				else { wrapper.find('.prev').hide(); }
				if(next) { wrapper.find('.next').show(); }
				else { wrapper.find('.next').hide(); }
			}
			setSponsorListingNav();

			$(this).find('.next').click(function(){
				var wrapper = $(this).parents('.sponsor_listing_wrapper');
				wrapper.find('.YouAreHere').removeClass('YouAreHere').nextAll('.hide:first').addClass('YouAreHere');
				wrapper.find('.sponsor_listing').addClass('hide');
				wrapper.find('.YouAreHere').removeClass('hide');
				var count = wrapper.find('.YouAreHere').nextAll('.hide').length;
				if(count > (ad_count-1)) { count = (ad_count-1); }
				for(var i=0; i < count; i++) {
					wrapper.find('.YouAreHere').nextAll('.hide:first').removeClass('hide');
				}
				setSponsorListingNav();
			});

			$(this).find('.prev').click(function(){
				var wrapper = $(this).parents('.sponsor_listing_wrapper');
				var eq = wrapper.find('.sponsor_listing').index($('.YouAreHere')) - ad_count;
				wrapper.find('.YouAreHere').removeClass('YouAreHere');
				wrapper.find('.sponsor_listing:eq('+eq+')').addClass('YouAreHere');
				wrapper.find('.sponsor_listing').addClass('hide');
				wrapper.find('.YouAreHere').removeClass('hide');
				var count = wrapper.find('.YouAreHere').nextAll('.hide').length;
				if(count > ad_count) { count = ad_count; }
				for(var i=1; i < count; i++) {
					wrapper.find('.YouAreHere').nextAll('.hide:first').removeClass('hide');
				}
				setSponsorListingNav();
			});

		});
		});//onReady

	// =top25
	$('p.top_25_index_top_text_premium:even').addClass('top25_table_index_blue');

	// =infoIcons
	(function() {
		var icons = $('img.icons');
		var i = 0;
		var str_splurge = "<span class='star'><img src='http://i.shermanstravel.com/img/smart_splurge.gif' alt='' width='12' height='11' /> <strong>Smart Splurge:</strong> Expensive but worth it.</span>";
		var str_value   = "<span class='check'><img src='http://i.shermanstravel.com/img/great_value.gif' alt='' width='14' height='14' /> <strong>Great Value:</strong> Exceeds expectations for the price.</span>";
		for (i=0; i<icons.length; i++) {
			(function() {
				var num = i;
				var classname = icons[i].className;
				icons[i].onmouseover = icons[i].onmouseout = function() {
					var curr_def  = document.getElementById("infoIcon" + (num+1));
					var curr_disp = curr_def.style.display;
					if (classname.indexOf('splurge') != -1) {
						curr_def.innerHTML = str_splurge;
					} else {
						curr_def.innerHTML = str_value;
					}
					curr_def.style.display = (curr_disp == "none" || curr_disp == "") ? "block" : "none";
				};
			})();
		}
	})();

	// =Gmap
	$.each($('#gmap'), function() {
		if ($("#changeMapDim").length) {
		  document.getElementById("changeMapDim").style.display = 'block';
		  document.getElementById("changeMapDim").style.fontSize = '11px';
			var defaultLabel = "Click to expand";
			var attributes, anim;
			$("#changeMapDim").click(function() {
					var label = document.getElementById("changeMapDim").lastChild.nodeValue;
					if (label == defaultLabel) {
						return expandGoogleMap();
					} else {
						return collapseGoogleMap();
						//map.closeInfoWindow();
						//map.setCenter(new GLatLng(marker.lat,marker.lng),14);
					}
				});

		}
	});//end gmap




	// =grabAndGo
	$('#grabAndGo').hover(
		function(){ $('#grabAndGoContent').css("height", "auto").css("paddingBottom", "20px"); },
		function(){ $('#grabAndGoContent').css("height", "0").css("paddingBottom", "0"); }
	);

	// =luxury
	$('#frmFreeNewsletterSignup input[type=text]').focus(function(){
		if($(this).val() == 'enter email here')
			$(this).val('');
	}).blur(function(){
		if($(this).val() == '')
			$(this).val('enter email here');
	});

	// =slideshow
	if($(".slideshow_here").length) {
		stSlideshow.slideDelay = 3000;
		stSlideshow.preloadImages = true;
		stSlideshow.preloadedImages = []
		stSlideshow.slideNumber = 0;

		stSlideshow.slideshow = function() {
			stSlideshow.container.style.background = 'URL("' + stSlideshow.slides[stSlideshow.slideNumber]['url'] + '")';

			if(stSlideshow.slideNumber+1 < stSlideshow.slides.length)
				{ $("<img>").attr("src", stSlideshow.slides[stSlideshow.slideNumber+1]['url']); }
			stSlideshow.container.innerHTML = '<div style="padding-top: ' + stSlideshow.captionOffsetTop + 'px; padding-right: ' + stSlideshow.captionOffsetRight + 'px; text-align: right;"><a href="' + stSlideshow.slides[stSlideshow.slideNumber]['link'] + '">' + stSlideshow.slides[stSlideshow.slideNumber]['caption'] + '</a></div>';
			stSlideshow.slideshowTimeout = setTimeout('stSlideshow.changeSlide(1)', stSlideshow.slideDelay);
			stSlideshow.copyright.innerHTML = (stSlideshow.slides[stSlideshow.slideNumber]['copyright']) ? stSlideshow.slides[stSlideshow.slideNumber]['copyright'] : '';
		}

		stSlideshow.changeSlide = function(slide) {
			clearTimeout(stSlideshow.slideshowTimeout);
			stSlideshow.slideNumber += slide;
			// Deal with array wrap-around
			if (stSlideshow.slideNumber == stSlideshow.slides.length) {
				stSlideshow.slideNumber = 0;
			} else if (stSlideshow.slideNumber < 0) {
				stSlideshow.slideNumber = stSlideshow.slides.length - 1;
			}
			stSlideshow.slideshow();
		}

		stSlideshow.startSlideshow = function() {
			if (typeof document.getElementById(stSlideshow.containerId) == 'undefined'
				|| document.getElementById(stSlideshow.containerId) == null) {
				$(".slideshow_here").append('<div id="' + stSlideshow.containerId + '"></div><div id="' + stSlideshow.copyrightId + '"></div><div class="stSlideshowPreviousNext"><a onclick="stSlideshow.changeSlide(-1)" title="previous slide">&laquo; previous</a> | <a onclick="stSlideshow.changeSlide(1)" title="next slide">next &raquo;</a></div>')
			}
			stSlideshow.container = document.getElementById(stSlideshow.containerId);
			stSlideshow.copyright = document.getElementById(stSlideshow.copyrightId);
			stSlideshow.container.style.width = stSlideshow.width + 'px';
			stSlideshow.container.style.height = stSlideshow.height + 'px';
			stSlideshow.slideshow();
		}

		stSlideshow.startSlideshow();

	}//slideshow

// =share
    
    $('div.sponsor_actions').find('.actions .share').click(function(){
        $(this).parents('div.sponsor_actions').find('.share_popup').show();
        $.get('/share/widget?u=http://www.shermanstravel.com'+window.location.pathname,function(data){
            $('.sponsor_actions').find('div.share_popup_target').html(data);
            var iframe = $('.sponsor_actions').find('div.sponsor span.image').html();
            $('.sponsor_actions').find('div.share_popup_target .sponsor').append(iframe);
            $('.sponsor_actions').find('div.share_popup').show();
            
            $('div.sponsor_actions').find('div.share_popup .close').click(function(){
                $(this).parents('.share_popup').hide();
                return false;
            });
        });//get
        return false;
    });


// =shermanmeter
	$(document).ready(function () {
		$('[score]:first').each(function(){
			var score = $('[score]').attr('score')
			if (score == 0) {
				//no nothing
			}
			else if(score <= 34) {
				$('.shermanmeter .bar')
				.animate({ width: score+"%", backgroundColor: "#E66565"}, 700, "linear" );
			}
			else if($('[score]').attr('score') <= 67) {
				$('.shermanmeter .bar')
				.animate({ width: "34%", backgroundColor: "#E66565"}, 700, "linear" )
				.animate({ width: score+'%', backgroundColor: "#E6D064"}, 700, "linear" );
			}
			else if($('[score]').attr('score') <= 100) {
				$('.shermanmeter .bar')
				.animate({ width: "34%", backgroundColor: "#E66565"}, 700, "linear" )
				.animate({ width: "67%", backgroundColor: "#E6D064"}, 700, "linear" )
				.animate({ width: score+'%', backgroundColor: "#91D256"}, 700, "linear" );
			}

		});

		//add background color to deal on hover
		$('.dealsbox1 .single-deal').hover(function(e){
				$(this).addClass('hover');
			},function(e){
				$(this).removeClass('hover');
			});

		// =filterHover
		$('#display-data-filters li:not(.spacer)').hover(function() {
			$(this).addClass('hover');
		}, function(){
			$(this).removeClass('hover');
		});
		//toggle more info
		$('#amenity-display-tags span.info').toggleItem({
			toggleTarget: $('#amenity-details'),
			PreToggleText: 'more info',
			PostToggleText: 'less info'
		});

		//toggle more info
		$('.fromConatiner a.toggle').toggleItem({
			toggleTarget: $('.fromConatiner ul li.more'),
			PreToggleText: 'view all',
			PostToggleText: 'view less',
			forceIERedraw: $('.establishment_map')
		});




		// =ToggleDealTree - close all but the selected
			$('#dealTree.toggle .deal_module').each(function(i){
				$(this).find('.title').click(function(){
					if($(this).hasClass('notALink')) { return false; }
					if($(this).attr('href') == '') { return false; }
				});

				$(this).toggleClass('hide');
				if($(this).hasClass('selected')){
					$(this).toggleClass('hide');
					$(this).toggleClass('show');
				}
				$(this).find('.title').click(function(){
					if($(this).hasClass('notALink')) {
						$(this).parent().toggleClass('hide');
						$(this).parent().toggleClass('show');
					}
				});
			}); //end each






	}); //document.ready




	// =showToolTip
	$(document).ready(function () {
		if($('.shermanmeter .about').length) {
			$('body').prepend('<div id="currentTooltip">'+tooltipText+'</div>');
		}
		$('.shermanmeter .about').hover(function(e){
				//need to remove the 'px' at the end of the height.
				var currentHeight = $('#currentTooltip .shermanmeter-tooltip').css('height').substr(0,$('#currentTooltip .shermanmeter-tooltip').css('height').length - 2);
				$($(this).find('span').attr('href') +' .shermanmeter-tooltip').css('top',e.pageY - currentHeight - 10).css('left',(e.pageX - 35));

				$($(this).find('span').attr('href') +' .shermanmeter-tooltip').css('display','block');
			}, function(){
				$($(this).find('span').attr('href') +' .shermanmeter-tooltip').css('display','none');
			});
		$('.shermanmeter .about span').click(function(){ return false; })
	});



function togglePopShare() {
	document.getElementById("iconPopEmail").style.display = "none";
	var share_div = document.getElementById("iconPopShare");
	share_div.style.display = (share_div.style.display == "block") ? "none" : "block";
	return false;
}
function togglePopEmail() {
	document.getElementById("iconPopShare").style.display = "none";
	var callback_div = document.getElementById("emailPopCallback");
	var email_div = document.getElementById("iconPopEmail");
	var text_field = document.getElementById("popEmail");
	var form = document.getElementById("frmPopEmail");
	var submitted = false;
	if (callback_div.style.display == "block") {
		callback_div.style.display = "none";
		submitted = true;
	}
	if (submitted) {
		email_div.style.display = "block";
		form.style.display = "block";	  // show the form
		text_field.value = ""; 			  // clear the textfield
		text_field.focus();				  // focus the cursor
	} else {
		if (email_div.style.display == "block") {
			email_div.style.display = "none";
		} else {
			email_div.style.display = "block";
			form.style.display = "block";	// show the form
			text_field.value = ""; 			// clear the textfield
			text_field.focus();				// focus the cursor
		}
	}
	return false;
}

function emailPage() {
	var text_field    = document.getElementById("popEmail");
	var callback_div  = document.getElementById("emailPopCallback");
	var form          = document.getElementById("frmPopEmail");
	if (text_field.value.length > 0) {
		form.style.display = "none"; 		  // hide the form
		callback_div.style.display = "block"; // show loading graphic
		var sUrl = "/email_page/" + base64_encode(text_field.value);
		var callback = {
			success: function(o) {
				// callback_div.innerHTML = "<p>Email sent!</p>";
				callback_div.innerHTML = o.responseText;;
				//document.getElementById('emailPopCallback').innerHTML =  o.responseText;
			},
			failure: function(o) {
				callback_div.innerHTML = "<p>A problem occurred. Plase try again.</p>";
			}
		}
		//var transaction = $.get( sUrl, , callback);
	} else {
		text_field.style.border = "2px solid #9D1231"; // set error status
		text_field.focus();
	}
	return false;
}


document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
};


function findPosX(obj)
{
var curleft = 0;
if(obj.offsetParent)
	while(1)
	{
	  curleft += obj.offsetLeft;
	  if(!obj.offsetParent)
		break;
	  obj = obj.offsetParent;
	}
else if(obj.x)
	curleft += obj.x;
return curleft;
}

function findPosY(obj)
{
var curtop = 0;
if(obj.offsetParent)
	while(1)
	{
	  curtop += obj.offsetTop;
	  if(!obj.offsetParent)
		break;
	  obj = obj.offsetParent;
	}
else if(obj.y)
	curtop += obj.y;
return curtop;
}



// =DD_belatedPNG
if($.browser.msie && (jQuery.browser.version.substr(0,1) < 7)) {


	/**
	* DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML <IMG/>.
	* Author: Drew Diller
	* Email: drew.diller@gmail.com
	* URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/
	* Version: 0.0.7a
	* Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license
	*
	* Example usage:
	* DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector
	* DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement
	**/

	/*
	PLEASE READ:
	Absolutely everything in this script is SILLY.  I know this.  IE's rendering of certain pixels doesn't make sense, so neither does this code!
	*/


	var DD_belatedPNG={ns:'DD_belatedPNG',imgSize:{},createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,'urn:schemas-microsoft-com:vml');}
	if(window.attachEvent){window.attachEvent('onbeforeunload',function(){DD_belatedPNG=null;});}},createVmlStyleSheet:function(){var style=document.createElement('style');document.documentElement.firstChild.insertBefore(style,document.documentElement.firstChild.firstChild);var styleSheet=style.styleSheet;styleSheet.addRule(this.ns+'\\:*','{behavior:url(#default#VML)}');styleSheet.addRule(this.ns+'\\:shape','position:absolute;');styleSheet.addRule('img.'+this.ns+'_sizeFinder','behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;');this.styleSheet=styleSheet;},readPropertyChange:function(){var el=event.srcElement;if(event.propertyName.search('background')!=-1||event.propertyName.search('border')!=-1){DD_belatedPNG.applyVML(el);}
	if(event.propertyName=='style.display'){var display=(el.currentStyle.display=='none')?'none':'block';for(var v in el.vml){el.vml[v].shape.style.display=display;}}
	if(event.propertyName.search('filter')!=-1){DD_belatedPNG.vmlOpacity(el);}},vmlOpacity:function(el){if(el.currentStyle.filter.search('lpha')!=-1){var trans=el.currentStyle.filter;trans=parseInt(trans.substring(trans.lastIndexOf('=')+1,trans.lastIndexOf(')')),10)/100;el.vml.color.shape.style.filter=el.currentStyle.filter;el.vml.image.fill.opacity=trans;}},handlePseudoHover:function(el){setTimeout(function(){DD_belatedPNG.applyVML(el);},1);},fix:function(selector){var selectors=selector.split(',');for(var i=0;i<selectors.length;i++){this.styleSheet.addRule(selectors[i],'behavior:expression(DD_belatedPNG.fixPng(this))');}},applyVML:function(el){el.runtimeStyle.cssText='';this.vmlFill(el);this.vmlOffsets(el);this.vmlOpacity(el);if(el.isImg){this.copyImageBorders(el);}},attachHandlers:function(el){var self=this;var handlers={resize:'vmlOffsets',move:'vmlOffsets'};if(el.nodeName=='A'){var moreForAs={mouseleave:'handlePseudoHover',mouseenter:'handlePseudoHover',focus:'handlePseudoHover',blur:'handlePseudoHover'};for(var a in moreForAs){handlers[a]=moreForAs[a];}}
	for(var h in handlers){el.attachEvent('on'+h,function(){self[handlers[h]](el);});}
	el.attachEvent('onpropertychange',this.readPropertyChange);},giveLayout:function(el){el.style.zoom=1;if(el.currentStyle.position=='static'){el.style.position='relative';}},copyImageBorders:function(el){var styles={'borderStyle':true,'borderWidth':true,'borderColor':true};for(var s in styles){el.vml.color.shape.style[s]=el.currentStyle[s];}},vmlFill:function(el){if(!el.currentStyle){return;}else{var elStyle=el.currentStyle;}
	for(var v in el.vml){el.vml[v].shape.style.zIndex=elStyle.zIndex;}
	el.runtimeStyle.backgroundColor='';el.runtimeStyle.backgroundImage='';var noColor=(elStyle.backgroundColor=='transparent');var noImg=true;if(elStyle.backgroundImage!='none'||el.isImg){if(!el.isImg){el.vmlBg=elStyle.backgroundImage;el.vmlBg=el.vmlBg.substr(5,el.vmlBg.lastIndexOf('")')-5);}
	else{el.vmlBg=el.src;}
	var lib=this;if(!lib.imgSize[el.vmlBg]){var img=document.createElement('img');lib.imgSize[el.vmlBg]=img;img.className=lib.ns+'_sizeFinder';img.runtimeStyle.cssText='behavior:none; position:absolute; left:-10000px; top:-10000px; border:none;';img.attachEvent('onload',function(){this.width=this.offsetWidth;this.height=this.offsetHeight;lib.vmlOffsets(el);});img.src=el.vmlBg;img.removeAttribute('width');img.removeAttribute('height');document.body.insertBefore(img,document.body.firstChild);}
	el.vml.image.fill.src=el.vmlBg;noImg=false;}
	el.vml.image.fill.on=!noImg;el.vml.image.fill.color='none';el.vml.color.shape.style.backgroundColor=elStyle.backgroundColor;el.runtimeStyle.backgroundImage='none';el.runtimeStyle.backgroundColor='transparent';},vmlOffsets:function(el){var thisStyle=el.currentStyle;var size={'W':el.clientWidth+1,'H':el.clientHeight+1,'w':this.imgSize[el.vmlBg].width,'h':this.imgSize[el.vmlBg].height,'L':el.offsetLeft,'T':el.offsetTop,'bLW':el.clientLeft,'bTW':el.clientTop};var fudge=(size.L+size.bLW==1)?1:0;var makeVisible=function(vml,l,t,w,h,o){vml.coordsize=w+','+h;vml.coordorigin=o+','+o;vml.path='m0,0l'+w+',0l'+w+','+h+'l0,'+h+' xe';vml.style.width=w+'px';vml.style.height=h+'px';vml.style.left=l+'px';vml.style.top=t+'px';};makeVisible(el.vml.color.shape,(size.L+(el.isImg?0:size.bLW)),(size.T+(el.isImg?0:size.bTW)),(size.W-1),(size.H-1),0);makeVisible(el.vml.image.shape,(size.L+size.bLW),(size.T+size.bTW),(size.W),(size.H),1);var bg={'X':0,'Y':0};var figurePercentage=function(axis,position){var fraction=true;switch(position){case'left':case'top':bg[axis]=0;break;case'center':bg[axis]=.5;break;case'right':case'bottom':bg[axis]=1;break;default:if(position.search('%')!=-1){bg[axis]=parseInt(position)*.01;}
	else{fraction=false;}}
	var horz=(axis=='X');bg[axis]=Math.ceil(fraction?((size[horz?'W':'H']*bg[axis])-(size[horz?'w':'h']*bg[axis])):parseInt(position));if(bg[axis]==0){bg[axis]++;}};for(var b in bg){figurePercentage(b,thisStyle['backgroundPosition'+b]);}
	el.vml.image.fill.position=(bg.X/size.W)+','+(bg.Y/size.H);var bgR=thisStyle.backgroundRepeat;var dC={'T':1,'R':size.W+fudge,'B':size.H,'L':1+fudge};var altC={'X':{'b1':'L','b2':'R','d':'W'},'Y':{'b1':'T','b2':'B','d':'H'}};if(bgR!='repeat'){var c={'T':(bg.Y),'R':(bg.X+size.w),'B':(bg.Y+size.h),'L':(bg.X)};if(bgR.search('repeat-')!=-1){var v=bgR.split('repeat-')[1].toUpperCase();c[altC[v].b1]=1;c[altC[v].b2]=size[altC[v].d];}
	if(c.B>size.H){c.B=size.H;}
	el.vml.image.shape.style.clip='rect('+c.T+'px '+(c.R+fudge)+'px '+c.B+'px '+(c.L+fudge)+'px)';}
	else{el.vml.image.shape.style.clip='rect('+dC.T+'px '+dC.R+'px '+dC.B+'px '+dC.L+'px)';}},fixPng:function(el){el.style.behavior='none';if(el.nodeName=='BODY'||el.nodeName=='TD'||el.nodeName=='TR'){return;}
	el.isImg=false;if(el.nodeName=='IMG'){if(el.src.toLowerCase().search(/\.png$/)!=-1){el.isImg=true;el.style.visibility='hidden';}
	else{return;}}
	else if(el.currentStyle.backgroundImage.toLowerCase().search('.png')==-1){return;}
	var lib=DD_belatedPNG;el.vml={color:{},image:{}};var els={shape:{},fill:{}};for(var r in el.vml){for(var e in els){var nodeStr=lib.ns+':'+e;el.vml[r][e]=document.createElement(nodeStr);}
	el.vml[r].shape.stroked=false;el.vml[r].shape.appendChild(el.vml[r].fill);el.parentNode.insertBefore(el.vml[r].shape,el);}
	el.vml.image.shape.fillcolor='none';el.vml.image.fill.type='tile';el.vml.color.fill.on=false;lib.attachHandlers(el);lib.giveLayout(el);lib.giveLayout(el.offsetParent);lib.applyVML(el);}};try{document.execCommand("BackgroundImageCache",false,true);}catch(r){}
	DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet();}//end if


        if($.browser.msie && (jQuery.browser.version.substr(0,1) < 7)) {
            DD_belatedPNG.fix('.shermanmeter-tooltip');
        }

    if($.browser.msie && (jQuery.browser.version.substr(0,1) < 7)) {
        DD_belatedPNG.fix('#st_map');
    }

/*
 * =Gink
 */
var hideGinkMessage = function() {
    var date = new Date();
    date.setTime(date.getTime() + (5000 * 24 * 60 * 60 * 1000));
    $.cookie('ginkDisableMessage', 1, { path: '/', expires: date });
    tb_remove();
};

var showGinkMessage = function(msg) {
    if(!$.cookie('ginkDisableMessage')) {
        $('.ginkMessageDiv').remove();
        $('<div style="display: none;" class="ginkMessageDiv"></div>').append(
            $('<div id="ginkMessageContainer"></div>').append('<div style="position: relative; width: 460px;" class="no_modal_signup">\
                <div style="padding: 15px; width: 430px;">\
                    <div style="float: left; font-size: 14px !important; color: #333;">\
                        <a href="/profile/me"><img src="http://i.stcdn.net/mytravel/share_MyTravel.gif"/></a>\
                    </div>\
                    <div style="float: left; font-size: 14px; margin-left: 10px; width: 330px;">'+msg+'</div>\
                    <div style="clear: both;"></div>\
                </div>\
                <div style="margin-top: 5px;">\
                    <div style="float: left; margin-right: 1px; background: #e1effa; padding: 3px; width: 400px; text-align: center;">\
                        <a href="javascript:;" onclick="hideGinkMessage();">Don\'t show this message again</a>\
                    </div>\
                    <div style="float: right; background: #e1effa; width: 47px; padding: 3px; text-align: center;">\
                        <a href="javascript:;" onclick="tb_remove();" style="color: #112a6a;">CLOSE</a>\
                    </div>\
                    <div style="clear:both;"></div>\
                </div>\
                <div style="position: absolute; top: -12px; right: -15px;">\
                    <a href="javascript:;" onclick="tb_remove();"><img src="http://i.stcdn.net/wig/flash_close.png"/></a>\
                </div>\
            </div>')
        ).appendTo('body');
        
        tb_show(null, '#TB_inline?inlineId=ginkMessageContainer&height=100&width=430&modal=true');
        
        $('#TB_ajaxContent').css({
            'overflow': 'visible',
            'padding': '0',
            'height': '142px'
        });
    }
};

// events for displaying popup when toggleing module on
$(document).bind('ginkBeen_bottom_complete', function(event, el, attributes, eventName) {
        showGinkMessage(attributes['name']+' was added to your <a class="link my-travel-link" href="/profile/map">Travel Map</a>');
    });
var goingWantCallback = function(event, el, attributes, eventName) {
        showGinkMessage(attributes['name']+' was added to your <a class="link my-travel-link" href="/profile/map">Travel Map</a> and <a class="link my-travel-link" href="/profile/me">Destination Watch</a>.  Now you\'ll receive targeted deals and advice.');
    };
$(document).bind('ginkGoing_bottom_complete', goingWantCallback);
$(document).bind('ginkWant_bottom_complete', goingWantCallback);

// events for recording clicks in omniture
var recordTravelAction = function(event, el, attributes, eventName) {
        Omniture.trackTravelAction('travel_guide', attributes['type']);
    };
$(document).bind('ginkBeen_bottom_click', recordTravelAction);
$(document).bind('ginkGoing_bottom_click', recordTravelAction);
$(document).bind('ginkWant_bottom_click', recordTravelAction);


/*
 * =Tynt
 */
var tyntVariables = {"ap":"Read more: ","el":"Discover <a style=\"color: #003399;\" href=\" http://www.shermanstravel.com/\" target=\"_blank\">Great Travel Deals</a>"};

/*
 * Fire bottom load event
 */
$(document).trigger('bottomLoad');
