/* --- vspfiles/templates/ShoreEx/js/scriptaculous.js --- */ 
// script.aculo.us scriptaculous.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// For details, see the script.aculo.us web site: http://script.aculo.us/
var Scriptaculous={Version:'1.8.0',require:function(libraryName){document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');},REQUIRED_PROTOTYPE:'1.6.0',load:function(){function convertVersionString(versionString){var r=versionString.split('.');return parseInt(r[0])*100000+parseInt(r[1])*1000+parseInt(r[2]);}
if((typeof Prototype=='undefined')||(typeof Element=='undefined')||(typeof Element.Methods=='undefined')||(convertVersionString(Prototype.Version)<convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
throw("script.aculo.us requires the Prototype JavaScript framework >= "+
Scriptaculous.REQUIRED_PROTOTYPE);$A(document.getElementsByTagName("script")).findAll(function(s){return(s.src&&s.src.match(/scriptaculous\.js(\?.*)?$/))}).each(function(s){var path=s.src.replace(/scriptaculous\.js(\?.*)?$/,'');var includes=s.src.match(/\?.*load=([a-z,]*)/);(includes?includes[1]:'builder,effects,dragdrop,controls,slider,sound').split(',').each(function(include){Scriptaculous.require(path+include+'.js')});});}}
Scriptaculous.load();
/* --- vspfiles/templates/ShoreEx/js/effects.js --- */ 
// script.aculo.us effects.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor=function(){var color='#';if(this.slice(0,4)=='rgb('){var cols=this.slice(4,this.length-1).split(',');var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);}else{if(this.slice(0,1)=='#'){if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();if(this.length==7)color=this.toLowerCase();}}
return(color.length==7?color:(arguments[0]||this));};Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):''));}).flatten().join('');};Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):''));}).flatten().join('');};Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+'em'});if(Prototype.Browser.WebKit)window.scrollBy(0,0);return element;};Element.getInlineOpacity=function(element){return $(element).style.opacity||'';};Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(' ');element.appendChild(n);element.removeChild(n);}catch(e){}};var Effect={_elementDoesNotExistError:{name:'ElementDoesNotExistError',message:'The specified DOM element does not exist, but is required for this effect to operate'},Transitions:{linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+0.5;},reverse:function(pos){return 1-pos;},flicker:function(pos){var pos=((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;return pos>1?1:pos;},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;},pulse:function(pos,pulses){pulses=pulses||5;return(((pos%(1/pulses))*pulses).round()==0?((pos*pulses*2)-(pos*pulses*2).floor()):1-((pos*pulses*2)-(pos*pulses*2).floor()));},spring:function(pos){return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6));},none:function(pos){return 0;},full:function(pos){return 1;}},DefaultOptions:{duration:1.0,fps:100,sync:false,from:0.0,to:1.0,delay:0.0,queue:'parallel'},tagifyText:function(element){var tagifyStyle='position:relative';if(Prototype.Browser.IE)tagifyStyle+=';zoom:1';element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(new Element('span',{style:tagifyStyle}).update(character==' '?String.fromCharCode(160):character),child);});Element.remove(child);}});},multiple:function(element,effect){var elements;if(((typeof element=='object')||Object.isFunction(element))&&(element.length))
elements=element;else
elements=$(element).childNodes;var options=Object.extend({speed:0.1,delay:0.0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));});},PAIRS:{'slide':['SlideDown','SlideUp'],'blind':['BlindDown','BlindUp'],'appear':['Appear','Fade']},toggle:function(element,effect){element=$(element);effect=(effect||'appear').toLowerCase();var options=Object.extend({queue:{position:'end',scope:(element.id||'global'),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null;},_each:function(iterator){this.effects._each(iterator);},add:function(effect){var timestamp=new Date().getTime();var position=Object.isString(effect.options.queue)?effect.options.queue:effect.options.queue.position;switch(position){case'front':this.effects.findAll(function(e){return e.state=='idle'}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn;});break;case'with-last':timestamp=this.effects.pluck('startOn').max()||timestamp;break;case'end':timestamp=this.effects.pluck('finishOn').max()||timestamp;break;}
effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit))
this.effects.push(effect);if(!this.interval)
this.interval=setInterval(this.loop.bind(this),15);},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null;}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++)
this.effects[i]&&this.effects[i].loop(timePos);}});Effect.Queues={instances:$H(),get:function(queueName){if(!Object.isString(queueName))return queueName;return this.instances.get(queueName)||this.instances.set(queueName,new Effect.ScopedQueue());}};Effect.Queue=Effect.Queues.get('global');Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+'Internal']?'this.options.'+eventName+'Internal(this);':'')+
(options[eventName]?'this.options.'+eventName+'(this);':''));}
if(options&&options.transition===false)options.transition=Effect.Transitions.linear;this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state='idle';this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;eval('this.render = function(pos){ '+'if (this.state=="idle"){this.state="running";'+
codeForEvent(this.options,'beforeSetup')+
(this.setup?'this.setup();':'')+
codeForEvent(this.options,'afterSetup')+'};if (this.state=="running"){'+'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+'this.position=pos;'+
codeForEvent(this.options,'beforeUpdate')+
(this.update?'this.update(pos);':'')+
codeForEvent(this.options,'afterUpdate')+'}}');this.event('beforeStart');if(!this.options.sync)
Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).add(this);},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1.0);this.cancel();this.event('beforeFinish');if(this.finish)this.finish();this.event('afterFinish');return;}
var pos=(timePos-this.startOn)/this.totalTime,frame=(pos*this.totalFrames).round();if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame;}}},cancel:function(){if(!this.options.sync)
Effect.Queues.get(Object.isString(this.options.queue)?'global':this.options.queue.scope).remove(this);this.state='finished';},event:function(eventName){if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);if(this.options[eventName])this.options[eventName](this);},inspect:function(){var data=$H();for(property in this)
if(!Object.isFunction(this[property]))data.set(property,this[property]);return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(effects){this.effects=effects||[];this.start(arguments[1]);},update:function(position){this.effects.invoke('render',position);},finish:function(position){this.effects.each(function(effect){effect.render(1.0);effect.cancel();effect.event('beforeFinish');if(effect.finish)effect.finish(position);effect.event('afterFinish');});}});Effect.Tween=Class.create(Effect.Base,{initialize:function(object,from,to){object=Object.isString(object)?$(object):object;var args=$A(arguments),method=args.last(),options=args.length==5?args[3]:null;this.method=Object.isFunction(method)?method.bind(object):Object.isFunction(object[method])?object[method].bind(object):function(value){object[method]=value};this.start(Object.extend({from:from,to:to},options||{}));},update:function(position){this.method(position);}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}));},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});var options=Object.extend({from:this.element.getOpacity()||0.0,to:1.0},arguments[1]||{});this.start(options);},update:function(position){this.element.setOpacity(position);}});Effect.Move=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({x:0,y:0,mode:'relative'},arguments[1]||{});this.start(options);},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle('left')||'0');this.originalTop=parseFloat(this.element.getStyle('top')||'0');if(this.options.mode=='absolute'){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop;}},update:function(position){this.element.setStyle({left:(this.options.x*position+this.originalLeft).round()+'px',top:(this.options.y*position+this.originalTop).round()+'px'});}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};Effect.Scale=Class.create(Effect.Base,{initialize:function(element,percent){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:'box',scaleFrom:100.0,scaleTo:percent},arguments[2]||{});this.start(options);},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle('position');this.originalStyle={};['top','left','width','height','fontSize'].each(function(k){this.originalStyle[k]=this.element.style[k];}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle('font-size')||'100%';['em','px','%','pt'].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType;}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=='box')
this.dims=[this.element.offsetHeight,this.element.offsetWidth];if(/^content/.test(this.options.scaleMode))
this.dims=[this.element.scrollHeight,this.element.scrollWidth];if(!this.dims)
this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];},update:function(position){var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);if(this.options.scaleContent&&this.fontSize)
this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);},finish:function(position){if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);},setDimensions:function(height,width){var d={};if(this.options.scaleX)d.width=width.round()+'px';if(this.options.scaleY)d.height=height.round()+'px';if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=='absolute'){if(this.options.scaleY)d.top=this.originalTop-topd+'px';if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';}else{if(this.options.scaleY)d.top=-topd+'px';if(this.options.scaleX)d.left=-leftd+'px';}}
this.element.setStyle(d);}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});this.start(options);},setup:function(){if(this.element.getStyle('display')=='none'){this.cancel();return;}
this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle('background-image');this.element.setStyle({backgroundImage:'none'});}
if(!this.options.endcolor)
this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff');if(!this.options.restorecolor)
this.options.restorecolor=this.element.getStyle('background-color');this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart());}.bind(this))});},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));}});Effect.ScrollTo=function(element){var options=arguments[1]||{},scrollOffsets=document.viewport.getScrollOffsets(),elementOffsets=$(element).cumulativeOffset(),max=(window.height||document.body.scrollHeight)-document.viewport.getHeight();if(options.offset)elementOffsets[1]+=options.offset;return new Effect.Tween(null,scrollOffsets.top,elementOffsets[1]>max?max:elementOffsets[1],options,function(p){scrollTo(scrollOffsets.left,p.round())});};Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1.0,to:0.0,afterFinishInternal:function(effect){if(effect.options.to!=0)return;effect.element.hide().setStyle({opacity:oldOpacity});}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle('display')=='none'?0.0:element.getOpacity()||0.0),to:1.0,afterFinishInternal:function(effect){effect.element.forceRerendering();},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show();}},arguments[1]||{});return new Effect.Opacity(element,options);};Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle('position'),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:1.0,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element)},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle);}},arguments[1]||{}));};Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping();}},arguments[1]||{}));};Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.element.undoClipping();}},arguments[1]||{}));};Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity});}})}},arguments[1]||{}));};Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle('top'),left:element.getStyle('left'),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0.0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);}},arguments[1]||{}));};Effect.Shake=function(element){element=$(element);var options=Object.extend({distance:20,duration:0.5},arguments[1]||{});var distance=parseFloat(options.distance);var split=parseFloat(options.duration)/10.0;var oldStyle={top:element.getStyle('top'),left:element.getStyle('left')};return new Effect.Move(element,{x:distance,y:0,duration:split,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance,y:0,duration:split,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle);}})}})}})}})}})}});};Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().setStyle({height:'0px'}).show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle('bottom');var elementDimensions=element.getDimensions();return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:'box',scaleFrom:100,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera)effect.element.setStyle({top:''});effect.element.makeClipping().show();},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+'px'});},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}},arguments[1]||{}));};Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping();},afterFinishInternal:function(effect){effect.element.hide().undoClipping();}});};Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case'top-left':initialMoveX=initialMoveY=moveX=moveY=0;break;case'top-right':initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case'bottom-left':initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case'bottom-right':initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case'center':initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break;}
return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned();},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1.0,from:0.0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:'0px'}).show();},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);}},options))}});};Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:'center',moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case'top-left':moveX=moveY=0;break;case'top-right':moveX=dims.width;moveY=0;break;case'bottom-left':moveX=0;moveY=dims.height;break;case'bottom-right':moveX=dims.width;moveY=dims.height;break;case'center':moveX=dims.width/2;moveY=dims.height/2;break;}
return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0.0,from:1.0,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping();},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle);}},options));};Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{};var oldOpacity=element.getInlineOpacity();var transition=options.transition||Effect.Transitions.sinoidal;var reverser=function(pos){return transition(1-Effect.Transitions.pulse(pos,options.pulses))};reverser.bind(transition);return new Effect.Opacity(element,Object.extend(Object.extend({duration:2.0,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}},options),{transition:reverser}));};Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle);}});}},arguments[1]||{}));};Effect.Morph=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element)throw(Effect._elementDoesNotExistError);var options=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(options.style))this.style=$H(options.style);else{if(options.style.include(':'))
this.style=options.style.parseStyle();else{this.element.addClassName(options.style);this.style=$H(this.element.getStyles());this.element.removeClassName(options.style);var css=this.element.getStyles();this.style=this.style.reject(function(style){return style.value==css[style.key];});options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){effect.element.style[transform.style]='';});}}}
this.start(options);},setup:function(){function parseColor(color){if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16)});}
this.transforms=this.style.map(function(pair){var property=pair[0],value=pair[1],unit=null;if(value.parseColor('#zzzzzz')!='#zzzzzz'){value=value.parseColor();unit='color';}else if(property=='opacity'){value=parseFloat(value);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});}else if(Element.CSS_LENGTH.test(value)){var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value=parseFloat(components[1]);unit=(components.length==3)?components[2]:null;}
var originalValue=this.element.getStyle(property);return{style:property.camelize(),originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=='color'?parseColor(value):value,unit:unit};}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!='color'&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))))});},update:function(position){var style={},transform,i=this.transforms.length;while(i--)
style[(transform=this.transforms[i]).style]=transform.unit=='color'?'#'+
(Math.round(transform.originalValue[0]+
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+
(Math.round(transform.originalValue[1]+
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+
(Math.round(transform.originalValue[2]+
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():(transform.originalValue+
(transform.targetValue-transform.originalValue)*position).toFixed(3)+
(transform.unit===null?'':transform.unit);this.element.setStyle(style,true);}});Effect.Transform=Class.create({initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks);},addTracks:function(tracks){tracks.each(function(track){track=$H(track);var data=track.values().first();this.tracks.push($H({ids:track.keys().first(),effect:Effect.Morph,options:{style:data}}));}.bind(this));return this;},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var ids=track.get('ids'),effect=track.get('effect'),options=track.get('options');var elements=[$(ids)||$$(ids)].flatten();return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))});}).flatten(),this.options);}});Element.CSS_PROPERTIES=$w('backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+'borderRightColor borderRightStyle borderRightWidth borderSpacing '+'borderTopColor borderTopStyle borderTopWidth bottom clip color '+'fontSize fontWeight height left letterSpacing lineHeight '+'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+'right textIndent top width wordSpacing zIndex');Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement('div');String.prototype.parseStyle=function(){var style,styleRules=$H();if(Prototype.Browser.WebKit)
style=new Element('div',{style:this}).style;else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';style=String.__parseStyleElement.childNodes[0].style;}
Element.CSS_PROPERTIES.each(function(property){if(style[property])styleRules.set(property,style[property]);});if(Prototype.Browser.IE&&this.include('opacity'))
styleRules.set('opacity',this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);return styleRules;};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(element){var css=document.defaultView.getComputedStyle($(element),null);return Element.CSS_PROPERTIES.inject({},function(styles,property){styles[property]=css[property];return styles;});};}else{Element.getStyles=function(element){element=$(element);var css=element.currentStyle,styles;styles=Element.CSS_PROPERTIES.inject({},function(hash,property){hash.set(property,css[property]);return hash;});if(!styles.opacity)styles.set('opacity',element.getOpacity());return styles;};};Effect.Methods={morph:function(element,style){element=$(element);new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element;},visualEffect:function(element,effect,options){element=$(element)
var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1);new Effect[klass](element,options);return element;},highlight:function(element,options){element=$(element);new Effect.Highlight(element,options);return element;}};$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+'pulsate shake puff squish switchOff dropOut').each(function(effect){Effect.Methods[effect]=function(element,options){element=$(element);Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options);return element;}});$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(function(f){Effect.Methods[f]=Element[f];});Element.addMethods(Effect.Methods);
/* --- vspfiles/templates/ShoreEx/js/cumberland.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2009 Brand Labs LLC
 * 
 * Cumberland
 * 
 * Version 1.4.0
 * 
 *--------------------------------------------------------------------------*/
var Cumberland={Volusion:{Environment:{isHomePage:function(aa){if(null==aa){return false;}
else{return(aa.toLowerCase()=='/'||aa.toLowerCase()=='/default.asp');}},isProductDetailPage:function(ba){if(null==ba){return false;}
else{return(ba.toLowerCase()=='/productdetails.asp'||ba.toLowerCase().indexOf('-p/')!=-1||ba.toLowerCase().indexOf('_p/')!=-1);}},getProductCodeFromURL:function(ca){var da=null;if(ca==null){return null;}
da=ca.match(/.*[\?|&]ProductCode=([^&;]*)/i);if(da!=null&&da.length>=2){return unescape(da[1]);}
da=ca.match(/[_-]p\/(.+)\.htm/i);if(da!=null&&da.length>=2){return unescape(da[1]);}
return null;},isCategoryPage:function(ea){if(null==ea){return false;}
else{return(ea.toLowerCase()=='/searchresults.asp'||ea.toLowerCase().indexOf('-s/')!=-1||ea.toLowerCase().indexOf('_s/')!=-1);}},getCategoryIdFromURL:function(fa){var ga=null;if(fa==null){return null;}
ga=fa.match(/\/searchresults\.asp.*[\?&]cat=(\w+)/i);if(ga!=null&&ga.length>=2){return unescape(ga[1]);}
ga=fa.match(/[_-]s\/(\w+)\.htm/i);if(ga!=null&&ga.length>=2){return unescape(ga[1]);}
return null;},isShoppingCartPage:function(ha){if(null==ha){return false;}
else{return(ha.toLowerCase()=='/shoppingcart.asp');}},isOnePageCheckoutPage:function(ia){if(null==ia){return false;}
else{return(ia.toLowerCase()=='/one-page-checkout.asp');}}}}};
/* --- vspfiles/templates/ShoreEx/js/remove_add.min.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2010 Brand Labs LLC
 * 
 *--------------------------------------------------------------------------*/
var RemoveAdd={changeMenuFunction:null,load:function(){try{if(Cumberland.Volusion.Environment.isProductDetailPage(window.location.pathname)){RemoveAdd.remove();}}
catch(e){}},remove:function(){if(typeof changeMenu!='undefined'){RemoveAdd.changeMenuFunction=changeMenu;changeMenu=RemoveAdd.changeMenuProxy;}
RemoveAdd.fixOptions();},fixOptions:function(){var options=$$('#content_area form select[name^="SELECT___"] option');options.each(function(option){if(option==null||option.innerHTML==null){return;}
option.update(option.innerHTML.replace(/\s*\[Add \$(\d|\.|,)+\]$/,''));});},changeMenuProxy:function(){RemoveAdd.changeMenuFunction();RemoveAdd.fixOptions();}};document.observe('dom:loaded',RemoveAdd.load);
/* --- vspfiles/templates/ShoreEx/js/remove_ship_to.min.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2009 Brand Labs LLC
 * 
 *--------------------------------------------------------------------------*/
var RemoveShipTo={load:function(){try{if(Cumberland.Volusion.Environment.isOnePageCheckoutPage(window.location.pathname)){RemoveShipTo.remove();}}
catch(e){}},remove:function(){var shipToSelect=$$('select[name="ShipTo"]').first();var mySavedShipping=$$('select[name="My_Saved_Shipping"]').first();var shippingChoice=$$('select[name="ShippingSpeedChoice"]').first();if(mySavedShipping!=undefined&&mySavedShipping!=null){try{mySavedShipping.up('table').up('td').hide();}catch(e){}}
if(shipToSelect!=undefined&&shipToSelect!=null){try{shipToSelect.up('table').up('td').hide();$A(shipToSelect.options).each(function(option){if(option.innerHTML.toLowerCase()=='my billing address'){option.selected=true;shipToSelect.selectedIndex=option.index;}});}catch(e){}}
if(shippingChoice!=undefined&&shippingChoice!=null){try{var noShippingOption=shippingChoice.down('option[value="501"]');shippingChoice.up('table').up('table').hide();if(noShippingOption==undefined||noShippingOption==null){var newNoShippingOption=new Element('option',{value:501,selected:""});shippingChoice.insert({bottom:newNoShippingOption});newNoShippingOption.selected=true;shippingChoice.selectedIndex=newNoShippingOption.index;}}catch(e){}}}};document.observe('dom:loaded',RemoveShipTo.load);
/* --- vspfiles/templates/ShoreEx/js/continue_shopping.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2008 Brand Labs LLC
 * 
 * Continue shopping which uses the referrer to redirect to
 * 
 * Version 1.0.2
 * 
 *--------------------------------------------------------------------------*/

function continueShopping(){var aa=null;var ba=null;var ca='/';var da=window.location.pathname;var ea=window.location.host;var fa=null;var ga;if(document.referrer){aa=document.referrer;}
try{fa=getProductHistoryURL();}
catch(e){fa=null;}
ca=(fa==null?ca:fa);if(aa==null||aa==''){window.location.href=ca;return;}
try{ga=aa.indexOf(ea);if(ga==-1){window.location.href=ca;return;}
ba=aa.substring((ga+ea.length));if(ba.toLowerCase().indexOf(da.toLowerCase())==0){window.location.href=ca;return;}
window.location.href=ba;return;}
catch(e){window.location.href=ca;return;}}
function getProductHistoryURL(){var ha='%2FHistory';var ia=null;var ja=null;var ka=null;var la=null;if(!document.cookie||document.cookie==null){return null;}
ia=document.cookie.split(';');for(index=0;index<ia.length;index++){ja=ia[index];while(ja.charAt(0)==' '){ja=ja.substring(1,ja.length);}
if(ja.indexOf(ha+'=')==0){ka=ja.substring(ha.length+1);if(ka==null||ka==''){return null;}
la=ka.split('%2C');return '/ProductDetails.asp?ProductCode='+la[0];}}
return null;}
/* --- vspfiles/templates/ShoreEx/js/input_text_default_temporary.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2008 Brand Labs LLC
 * 
 * Default value temporary for user
 * 
 * Version 1.0.1
 * 
 *--------------------------------------------------------------------------*/

function inputTextClicked(aa,ba){if(aa.value==aa.defaultValue){aa.value='';aa.style.color=ba;}}
function inputTextBlurred(ca,da){if(ca.value!=''){return;}
ca.style.color=da;ca.value=ca.defaultValue;}
/* --- vspfiles/templates/ShoreEx/js/popup.min.js --- */ 
function popup(mylink,windowname)
{if(!window.focus)return true;var href;if(typeof(mylink)=='string'){href=mylink;}
else{href=mylink.href;}
window.open(href,windowname,'width=400,height=400,scrollbars=yes');return false;}
/* --- vspfiles/templates/ShoreEx/js/sharethis_load.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * ShareThis(C) Integration
 * 
 * Version 1.0.0
 * 
 * Copyright (C) 2009 Brand Labs LLC
 * 
 *--------------------------------------------------------------------------*/

//Skip if under SSL
if('https:' != document.location.protocol) {
	document.write('<' + 'script type="text/javascript" src="http://w.sharethis.com/button/sharethis.js#publisher=3df7fb78-db3c-40c6-a503-4fa868a6ce61&amp;type=website&amp;post_services=facebook%2Ctwitter%2Cdigg%2Cdelicious%2Cblogger%2Cmyspace%2Cybuzz%2Cstumbleupon%2Creddit%2Ctechnorati%2Cmixx%2Cwordpress%2Ctypepad%2Cgoogle_bmarks%2Cwindows_live%2Cfark%2Cbus_exchange%2Cpropeller%2Cnewsvine%2Clinkedin&amp;headerbg=%2300467F&amp;headerTitle=Share%20Shore%20Excursions%20Group"><' + '/script>');
	document.write('<' + 'script type="text/javascript" src="//media1.shoreexcursionsgroup.com/v/vspfiles/templates/ShoreEx/js/sharethis.js"><' + '/script>');
}
/* --- lightwindow/javascript/lightwindow.min.js --- */ 
// lightwindow.js v2.0
//
// Copyright (c) 2007 stickmanlabs
// Author: Kevin P Miller | http://www.stickmanlabs.com
// 
// LightWindow is freely distributable under the terms of an MIT-style license.
//
// I don't care what you think about the file size...
//   Be a pro: 
//	    http://www.thinkvitamin.com/features/webapps/serving-javascript-fast
//      http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compressing_javascript_and_css_files
//

/*-----------------------------------------------------------------------------------------------*/
if(typeof Effect=='undefined')
throw("lightwindow.js requires including script.aculo.us' effects.js library!");try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}
var lightwindow=Class.create();lightwindow.prototype={element:null,contentToFetch:null,windowActive:false,dataEffects:[],dimensions:{cruft:null,container:null,viewport:{height:null,width:null,offsetTop:null,offsetLeft:null}},pagePosition:{x:0,y:0},pageDimensions:{width:null,height:null},preloadImage:[],preloadedImage:[],galleries:[],resizeTo:{height:null,heightPercent:null,width:null,widthPercent:null,fixedTop:null,fixedLeft:null},scrollbarOffset:18,navigationObservers:{previous:null,next:null},containerChange:{height:0,width:0},activeGallery:false,galleryLocation:{current:0,total:0},initialize:function(options){this.options=Object.extend({resizeSpeed:8,contentOffset:{height:20,width:20},dimensions:{image:{height:250,width:250},page:{height:250,width:250},inline:{height:250,width:250},media:{height:250,width:250},external:{height:250,width:250},titleHeight:25},classNames:{standard:'lightwindow',action:'lightwindow_action'},fileTypes:{page:['asp','aspx','cgi','cfm','htm','html','pl','php4','php3','php','php5','phtml','rhtml','shtml','txt','vbs','rb'],media:['aif','aiff','asf','avi','divx','m1v','m2a','m2v','m3u','mid','midi','mov','moov','movie','mp2','mp3','mpa','mpa','mpe','mpeg','mpg','mpg','mpga','pps','qt','rm','ram','swf','viv','vivo','wav'],image:['bmp','gif','jpg','png','tiff']},mimeTypes:{avi:'video/avi',aif:'audio/aiff',aiff:'audio/aiff',gif:'image/gif',bmp:'image/bmp',jpeg:'image/jpeg',m1v:'video/mpeg',m2a:'audio/mpeg',m2v:'video/mpeg',m3u:'audio/x-mpequrl',mid:'audio/x-midi',midi:'audio/x-midi',mjpg:'video/x-motion-jpeg',moov:'video/quicktime',mov:'video/quicktime',movie:'video/x-sgi-movie',mp2:'audio/mpeg',mp3:'audio/mpeg3',mpa:'audio/mpeg',mpa:'video/mpeg',mpe:'video/mpeg',mpeg:'video/mpeg',mpg:'audio/mpeg',mpg:'video/mpeg',mpga:'audio/mpeg',pdf:'application/pdf',png:'image/png',pps:'application/mspowerpoint',qt:'video/quicktime',ram:'audio/x-pn-realaudio-plugin',rm:'application/vnd.rn-realmedia',swf:'application/x-shockwave-flash',tiff:'image/tiff',viv:'video/vivo',vivo:'video/vivo',wav:'audio/wav',wmv:'application/x-mplayer2'},classids:{mov:'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',swf:'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',wmv:'clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6'},codebases:{mov:'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',swf:'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0',wmv:'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715'},viewportPadding:10,EOLASFix:'swf,wmv,fla,flv',overlay:{opacity:0.7,image:'/v/lightwindow/images/black.png',presetImage:'/v/lightwindow/images/black-70.png'},skin:{main:'<div id="lightwindow_container" >'+'<div id="lightwindow_title_bar" >'+'<div id="lightwindow_title_bar_inner" >'+'<span id="lightwindow_title_bar_title"></span>'+'<a id="lightwindow_title_bar_close_link" >close</a>'+'</div>'+'</div>'+'<div id="lightwindow_stage" >'+'<div id="lightwindow_contents" >'+'</div>'+'<div id="lightwindow_navigation" >'+'<a href="#" id="lightwindow_previous" >'+'<span id="lightwindow_previous_title"></span>'+'</a>'+'<a href="#" id="lightwindow_next" >'+'<span id="lightwindow_next_title"></span>'+'</a>'+'<iframe name="lightwindow_navigation_shim" id="lightwindow_navigation_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>'+'</div>'+'<div id="lightwindow_galleries">'+'<div id="lightwindow_galleries_tab_container" >'+'<a href="#" id="lightwindow_galleries_tab" >'+'<span id="lightwindow_galleries_tab_span" class="up" >Galleries</span>'+'</a>'+'</div>'+'<div id="lightwindow_galleries_list" >'+'</div>'+'</div>'+'</div>'+'<div id="lightwindow_data_slide" >'+'<div id="lightwindow_data_slide_inner" >'+'<div id="lightwindow_data_details" >'+'<div id="lightwindow_data_gallery_container" >'+'<span id="lightwindow_data_gallery_current"></span>'+' of '+'<span id="lightwindow_data_gallery_total"></span>'+'</div>'+'<div id="lightwindow_data_author_container" >'+'by <span id="lightwindow_data_author"></span>'+'</div>'+'</div>'+'<div id="lightwindow_data_caption" >'+'</div>'+'</div>'+'</div>'+'</div>',loading:'<div id="lightwindow_loading" >'+'<img src="/v/lightwindow/images/ajax-loading.gif" alt="loading" />'+'<span>Loading or <a href="javascript: myLightWindow.deactivate();">Cancel</a></span>'+'<iframe name="lightwindow_loading_shim" id="lightwindow_loading_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>'+'</div>',iframe:'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'+'<html xmlns="http://www.w3.org/1999/xhtml">'+'<body>'+'{body_replace}'+'</body>'+'</html>',gallery:{top:'<div class="lightwindow_galleries_list">'+'<h1>{gallery_title_replace}</h1>'+'<ul>',middle:'<li>'+'{gallery_link_replace}'+'</li>',bottom:'</ul>'+'</div>'}},formMethod:'get',hideFlash:false,hideGalleryTab:false,showTitleBar:true,animationHandler:false,navigationHandler:false,transitionHandler:false,finalAnimationHandler:false,formHandler:false,galleryAnimationHandler:false,showGalleryCount:true},options||{});this.duration=((11-this.options.resizeSpeed)*0.15);this._setupLinks();this._getScroll();this._getPageDimensions();this._browserDimensions();this._addLightWindowMarkup(false);this._setupDimensions();this.buildGalleryList();},activate:function(e,link){this._clearWindowContents(true);this._addLoadingWindowMarkup();this._setupWindowElements(link);this._getScroll();this._browserDimensions();this._setupDimensions();this._toggleTroubleElements('hidden',false);this._displayLightWindow('block','hidden');this._setStatus(true);this._monitorKeyboard(true);this._prepareIE(true);this._loadWindow();},deactivate:function(){this.windowActive=false;this.activeGallery=false;if(!this.options.hideGalleryTab){this._handleGalleryAnimation(false);}
this.animating=false;this.element=null;this._displayLightWindow('none','visible');this._clearWindowContents(false);var queue=Effect.Queues.get('lightwindowAnimation').each(function(e){e.cancel();});this._prepareIE(false);this._setupDimensions();this._toggleTroubleElements('visible',false);this._monitorKeyboard(false);},createWindow:function(element,attributes){this._processLink($(element));},activateWindow:function(options){this.element=Object.extend({href:null,title:null,author:null,caption:null,rel:null,top:null,left:null,type:null,showImages:null,height:null,width:null,loadingAnimation:null,iframeEmbed:null,form:null},options||{});this.contentToFetch=this.element.href;this.windowType=this.element.type?this.element.type:this._fileType(this.element.href);this._clearWindowContents(true);this._addLoadingWindowMarkup();this._getScroll();this._browserDimensions();this._setupDimensions();this._toggleTroubleElements('hidden',false);this._displayLightWindow('block','hidden');this._setStatus(true);this._monitorKeyboard(true);this._prepareIE(true);this._loadWindow();},submitForm:function(e){if(this.options.formHandler){this.options.formHandler(e);}else{this._defaultFormHandler(e);}},openWindow:function(element){var element=$(element);this.windowActive=true;this._clearWindowContents(true);this._addLoadingWindowMarkup();this._setupWindowElements(element);this._setStatus(true);this._handleTransition();},navigateWindow:function(direction){this._handleNavigation(false);if(direction=='previous'){this.openWindow(this.navigationObservers.previous);}else if(direction=='next'){this.openWindow(this.navigationObservers.next);}},buildGalleryList:function(){var output='';var galleryLink;for(i in this.galleries){if(typeof this.galleries[i]=='object'){output+=(this.options.skin.gallery.top).replace('{gallery_title_replace}',unescape(i));for(j in this.galleries[i]){if(typeof this.galleries[i][j]=='object'){galleryLink='<a href="#" id="lightwindow_gallery_'+i+'_'+j+'" >'+unescape(j)+'</a>';output+=(this.options.skin.gallery.middle).replace('{gallery_link_replace}',galleryLink);}}
output+=this.options.skin.gallery.bottom;}}
new Insertion.Top('lightwindow_galleries_list',output);for(i in this.galleries){if(typeof this.galleries[i]=='object'){for(j in this.galleries[i]){if(typeof this.galleries[i][j]=='object'){Event.observe($('lightwindow_gallery_'+i+'_'+j),'click',this.openWindow.bind(this,this.galleries[i][j][0]),false);$('lightwindow_gallery_'+i+'_'+j).onclick=function(){return false;};}}}}},_setupLinks:function(){var links=$$('.'+this.options.classNames.standard);links.each(function(link){this._processLink(link);}.bind(this));},_processLink:function(link){if((this._fileType(link.getAttribute('href'))=='image'||this._fileType(link.getAttribute('href'))=='media')){if(gallery=this._getGalleryInfo(link.rel)){if(!this.galleries[gallery[0]]){this.galleries[gallery[0]]=new Array();}
if(!this.galleries[gallery[0]][gallery[1]]){this.galleries[gallery[0]][gallery[1]]=new Array();}
this.galleries[gallery[0]][gallery[1]].push(link);}}
var url=link.getAttribute('href');if(url.indexOf('?')>-1){url=url.substring(0,url.indexOf('?'));}
var container=url.substring(url.indexOf('#')+1);if($(container)){$(container).setStyle({display:'none'});}
Event.observe(link,'click',this.activate.bindAsEventListener(this,link),false);link.onclick=function(){return false;};},_setupActions:function(){var links=$$('#lightwindow_container .'+this.options.classNames.action);links.each(function(link){Event.observe(link,'click',this[link.getAttribute('rel')].bindAsEventListener(this,link),false);link.onclick=function(){return false;};}.bind(this));},_addLightWindowMarkup:function(rebuild){var overlay=Element.extend(document.createElement('div'));overlay.setAttribute('id','lightwindow_overlay');if(Prototype.Browser.Gecko){overlay.setStyle({backgroundImage:'url('+this.options.overlay.presetImage+')',backgroundRepeat:'repeat',height:this.pageDimensions.height+'px'});}else{overlay.setStyle({opacity:this.options.overlay.opacity,backgroundImage:'url('+this.options.overlay.image+')',backgroundRepeat:'repeat',height:this.pageDimensions.height+'px'});}
var lw=document.createElement('div');lw.setAttribute('id','lightwindow');lw.innerHTML=this.options.skin.main;var body=document.getElementsByTagName('body')[0];body.appendChild(overlay);body.appendChild(lw);if($('lightwindow_title_bar_close_link')){Event.observe('lightwindow_title_bar_close_link','click',this.deactivate.bindAsEventListener(this));$('lightwindow_title_bar_close_link').onclick=function(){return false;};}
Event.observe($('lightwindow_previous'),'click',this.navigateWindow.bind(this,'previous'),false);$('lightwindow_previous').onclick=function(){return false;};Event.observe($('lightwindow_next'),'click',this.navigateWindow.bind(this,'next'),false);$('lightwindow_next').onclick=function(){return false;};if(!this.options.hideGalleryTab){Event.observe($('lightwindow_galleries_tab'),'click',this._handleGalleryAnimation.bind(this,true),false);$('lightwindow_galleries_tab').onclick=function(){return false;};}
if(Prototype.Browser.IE){Event.observe(document,'mousewheel',this._stopScrolling.bindAsEventListener(this),false);}else{Event.observe(window,'DOMMouseScroll',this._stopScrolling.bindAsEventListener(this),false);}
Event.observe(overlay,'click',this.deactivate.bindAsEventListener(this),false);overlay.onclick=function(){return false;};},_addLoadingWindowMarkup:function(){$('lightwindow_contents').innerHTML+=this.options.skin.loading;},_setupWindowElements:function(link){this.element=link;this.element.title=null?'':link.getAttribute('title');this.element.author=null?'':link.getAttribute('author');this.element.caption=null?'':link.getAttribute('caption');this.element.rel=null?'':link.getAttribute('rel');this.element.params=null?'':link.getAttribute('params');this.contentToFetch=this.element.href;this.windowType=this._getParameter('lightwindow_type')?this._getParameter('lightwindow_type'):this._fileType(this.contentToFetch);},_clearWindowContents:function(contents){if($('lightwindow_iframe')){Element.remove($('lightwindow_iframe'));}
if($('lightwindow_media_primary')){try{$('lightwindow_media_primary').Stop();}catch(e){}
Element.remove($('lightwindow_media_primary'));}
if($('lightwindow_media_secondary')){try{$('lightwindow_media_secondary').Stop();}catch(e){}
Element.remove($('lightwindow_media_secondary'));}
this.activeGallery=false;this._handleNavigation(this.activeGallery);if(contents){$('lightwindow_contents').innerHTML='';$('lightwindow_contents').setStyle({overflow:'hidden'});if(!this.windowActive){$('lightwindow_data_slide_inner').setStyle({display:'none'});$('lightwindow_title_bar_title').innerHTML='';}
$('lightwindow_data_slide').setStyle({height:'auto'});}
this.resizeTo.height=null;this.resizeTo.width=null;},_setStatus:function(status){this.animating=status;if(status){Element.show('lightwindow_loading');}
if(!(/MSIE 6./i.test(navigator.userAgent))){this._fixedWindow(status);}},_fixedWindow:function(status){if(status){if(this.windowActive){this._getScroll();$('lightwindow').setStyle({position:'absolute',top:parseFloat($('lightwindow').getStyle('top'))+this.pagePosition.y+'px',left:parseFloat($('lightwindow').getStyle('left'))+this.pagePosition.x+'px'});}else{$('lightwindow').setStyle({position:'absolute'});}}else{if(this.windowActive){this._getScroll();$('lightwindow').setStyle({position:'fixed',top:parseFloat($('lightwindow').getStyle('top'))-this.pagePosition.y+'px',left:parseFloat($('lightwindow').getStyle('left'))-this.pagePosition.x+'px'});}else{if($('lightwindow_iframe')){this._browserDimensions();}
$('lightwindow').setStyle({position:'fixed',top:(parseFloat(this._getParameter('lightwindow_top'))?parseFloat(this._getParameter('lightwindow_top'))+'px':this.dimensions.viewport.height/2+'px'),left:(parseFloat(this._getParameter('lightwindow_left'))?parseFloat(this._getParameter('lightwindow_left'))+'px':this.dimensions.viewport.width/2+'px')});}}},_prepareIE:function(setup){if(Prototype.Browser.IE){var height,overflowX,overflowY;if(setup){var height='100%';}else{var height='auto';}
var body=document.getElementsByTagName('body')[0];var html=document.getElementsByTagName('html')[0];html.style.height=body.style.height=height;}},_stopScrolling:function(e){if(this.animating){if(e.preventDefault){e.preventDefault();}
e.returnValue=false;}},_getScroll:function(){if(typeof(window.pageYOffset)=='number'){this.pagePosition.x=window.pageXOffset;this.pagePosition.y=window.pageYOffset;}else if(document.body&&(document.body.scrollLeft||document.body.scrollTop)){this.pagePosition.x=document.body.scrollLeft;this.pagePosition.y=document.body.scrollTop;}else if(document.documentElement){this.pagePosition.x=document.documentElement.scrollLeft;this.pagePosition.y=document.documentElement.scrollTop;}},_setScroll:function(x,y){document.documentElement.scrollLeft=x;document.documentElement.scrollTop=y;},_toggleTroubleElements:function(visibility,content){if(content){var selects=$('lightwindow_contents').getElementsByTagName('select');}else{var selects=document.getElementsByTagName('select');}
for(var i=0;i<selects.length;i++){selects[i].style.visibility=visibility;}
if(!content){if(this.options.hideFlash){var objects=document.getElementsByTagName('object');for(i=0;i!=objects.length;i++){objects[i].style.visibility=visibility;}
var embeds=document.getElementsByTagName('embed');for(i=0;i!=embeds.length;i++){embeds[i].style.visibility=visibility;}}
var iframes=document.getElementsByTagName('iframe');for(i=0;i!=iframes.length;i++){iframes[i].style.visibility=visibility;}}},_getPageDimensions:function(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=document.body.scrollWidth;yScroll=window.innerHeight+window.scrollMaxY;}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight;}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight;}
var windowWidth,windowHeight;if(self.innerHeight){windowWidth=self.innerWidth;windowHeight=self.innerHeight;}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight;}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight;}
if(yScroll<windowHeight){this.pageDimensions.height=windowHeight;}else{this.pageDimensions.height=yScroll;}
if(xScroll<windowWidth){this.pageDimensions.width=windowWidth;}else{this.pageDimensions.width=xScroll;}},_displayLightWindow:function(display,visibility){$('lightwindow_overlay').style.display=$('lightwindow').style.display=$('lightwindow_container').style.display=display;$('lightwindow_overlay').style.visibility=$('lightwindow').style.visibility=$('lightwindow_container').style.visibility=visibility;},_setupDimensions:function(){var originalHeight,originalWidth;switch(this.windowType){case'page':originalHeight=this.options.dimensions.page.height;originalWidth=this.options.dimensions.page.width;break;case'image':originalHeight=this.options.dimensions.image.height;originalWidth=this.options.dimensions.image.width;break;case'media':originalHeight=this.options.dimensions.media.height;originalWidth=this.options.dimensions.media.width;break;case'external':originalHeight=this.options.dimensions.external.height;originalWidth=this.options.dimensions.external.width;break;case'inline':originalHeight=this.options.dimensions.inline.height;originalWidth=this.options.dimensions.inline.width;break;default:originalHeight=this.options.dimensions.page.height;originalWidth=this.options.dimensions.page.width;break;}
var offsetHeight=this._getParameter('lightwindow_top')?parseFloat(this._getParameter('lightwindow_top'))+this.pagePosition.y:this.dimensions.viewport.height/2+this.pagePosition.y;var offsetWidth=this._getParameter('lightwindow_left')?parseFloat(this._getParameter('lightwindow_left'))+this.pagePosition.x:this.dimensions.viewport.width/2+this.pagePosition.x;$('lightwindow').setStyle({top:offsetHeight+'px',left:offsetWidth+'px'});$('lightwindow_container').setStyle({height:originalHeight+'px',width:originalWidth+'px',left:-(originalWidth/2)+'px',top:-(originalHeight/2)+'px'});$('lightwindow_contents').setStyle({height:originalHeight+'px',width:originalWidth+'px'});},_fileType:function(url){var image=new RegExp("[^\.]\.("+this.options.fileTypes.image.join('|')+")\s*$","i");if(image.test(url))return'image';if(url.indexOf('#')>-1&&(document.domain==this._getDomain(url)))return'inline';if(url.indexOf('?')>-1)url=url.substring(0,url.indexOf('?'));var type='unknown';var page=new RegExp("[^\.]\.("+this.options.fileTypes.page.join('|')+")\s*$","i");var media=new RegExp("[^\.]\.("+this.options.fileTypes.media.join('|')+")\s*$","i");if(document.domain!=this._getDomain(url))type='external';if(media.test(url))type='media';if(type=='external'||type=='media')return type;if(page.test(url)||url.substr((url.length-1),url.length)=='/')type='page';return type;},_fileExtension:function(url){if(url.indexOf('?')>-1){url=url.substring(0,url.indexOf('?'));}
var extenstion='';for(var x=(url.length-1);x>-1;x--){if(url.charAt(x)=='.'){return extenstion;}
extenstion=url.charAt(x)+extenstion;}},_monitorKeyboard:function(status){if(status)document.onkeydown=this._eventKeypress.bind(this);else document.onkeydown='';},_eventKeypress:function(e){if(e==null){var keycode=event.keyCode;}else{var keycode=e.which;}
switch(keycode){case 27:this.deactivate();break;case 13:return;default:break;}
if(this.animating){return false;}
switch(String.fromCharCode(keycode).toLowerCase()){case'p':if(this.navigationObservers.previous){this.navigateWindow('previous');}
break;case'n':if(this.navigationObservers.next){this.navigateWindow('next');}
break;default:break;}},_getGalleryInfo:function(rel){if(!rel)return false;if(rel.indexOf('[')>-1){return new Array(escape(rel.substring(0,rel.indexOf('['))),escape(rel.substring(rel.indexOf('[')+1,rel.indexOf(']'))));}else{return false;}},_getDomain:function(url){var leadSlashes=url.indexOf('//');var domainStart=leadSlashes+2;var withoutResource=url.substring(domainStart,url.length);var nextSlash=withoutResource.indexOf('/');var domain=withoutResource.substring(0,nextSlash);if(domain.indexOf(':')>-1){var portColon=domain.indexOf(':');domain=domain.substring(0,portColon);}
return domain;},_getParameter:function(parameter,parameters){if(!this.element)return false;if(parameter=='lightwindow_top'&&this.element.top){return unescape(this.element.top);}else if(parameter=='lightwindow_left'&&this.element.left){return unescape(this.element.left);}else if(parameter=='lightwindow_type'&&this.element.type){return unescape(this.element.type);}else if(parameter=='lightwindow_show_images'&&this.element.showImages){return unescape(this.element.showImages);}else if(parameter=='lightwindow_height'&&this.element.height){return unescape(this.element.height);}else if(parameter=='lightwindow_width'&&this.element.width){return unescape(this.element.width);}else if(parameter=='lightwindow_loading_animation'&&this.element.loadingAnimation){return unescape(this.element.loadingAnimation);}else if(parameter=='lightwindow_iframe_embed'&&this.element.iframeEmbed){return unescape(this.element.iframeEmbed);}else if(parameter=='lightwindow_form'&&this.element.form){return unescape(this.element.form);}else{if(!parameters){if(this.element.params)parameters=this.element.params;else return;}
var value;var parameterArray=parameters.split(',');var compareString=parameter+'=';var compareLength=compareString.length;for(var i=0;i<parameterArray.length;i++){if(parameterArray[i].substr(0,compareLength)==compareString){var currentParameter=parameterArray[i].split('=');value=currentParameter[1];break;}}
if(!value)return false;else return unescape(value);}},_browserDimensions:function(){if(Prototype.Browser.IE){this.dimensions.viewport.height=document.documentElement.clientHeight;this.dimensions.viewport.width=document.documentElement.clientWidth;}else{this.dimensions.viewport.height=window.innerHeight;this.dimensions.viewport.width=document.width||document.body.offsetWidth;}},_getScrollerWidth:function(){var scrollDiv=Element.extend(document.createElement('div'));scrollDiv.setAttribute('id','lightwindow_scroll_div');scrollDiv.setStyle({position:'absolute',top:'-10000px',left:'-10000px',width:'100px',height:'100px',overflow:'hidden'});var contentDiv=Element.extend(document.createElement('div'));contentDiv.setAttribute('id','lightwindow_content_scroll_div');contentDiv.setStyle({width:'100%',height:'200px'});scrollDiv.appendChild(contentDiv);var body=document.getElementsByTagName('body')[0];body.appendChild(scrollDiv);var noScroll=$('lightwindow_content_scroll_div').offsetWidth;scrollDiv.style.overflow='auto';var withScroll=$('lightwindow_content_scroll_div').offsetWidth;Element.remove($('lightwindow_scroll_div'));this.scrollbarOffset=noScroll-withScroll;},_addParamToObject:function(name,value,object,id){var param=document.createElement('param');param.setAttribute('value',value);param.setAttribute('name',name);if(id){param.setAttribute('id',id);}
object.appendChild(param);return object;},_outerHTML:function(object){if(Prototype.Browser.IE){return object.outerHTML;}else{var clone=object.cloneNode(true);var cloneDiv=document.createElement('div');cloneDiv.appendChild(clone);return cloneDiv.innerHTML;}},_convertToMarkup:function(object,closeTag){var markup=this._outerHTML(object).replace('</'+closeTag+'>','');if(Prototype.Browser.IE){for(var i=0;i<object.childNodes.length;i++){markup+=this._outerHTML(object.childNodes[i]);}
markup+='</'+closeTag+'>';}
return markup;},_appendObject:function(object,closeTag,appendTo){if(Prototype.Browser.IE){appendTo.innerHTML+=this._convertToMarkup(object,closeTag);if(this.options.EOLASFix.indexOf(this._fileType(this.element.href))>-1){var objectElements=document.getElementsByTagName('object');for(var i=0;i<objectElements.length;i++){if(objectElements[i].getAttribute("data"))objectElements[i].removeAttribute('data');objectElements[i].outerHTML=objectElements[i].outerHTML;objectElements[i].style.visibility="visible";}}}else{appendTo.appendChild(object);}},_appendIframe:function(scroll){var iframe=document.createElement('iframe');iframe.setAttribute('id','lightwindow_iframe');iframe.setAttribute('name','lightwindow_iframe');iframe.setAttribute('src','about:blank');iframe.setAttribute('height','100%');iframe.setAttribute('width','100%');iframe.setAttribute('frameborder','0');iframe.setAttribute('marginwidth','0');iframe.setAttribute('marginheight','0');iframe.setAttribute('scrolling',scroll);this._appendObject(iframe,'iframe',$('lightwindow_contents'));},_writeToIframe:function(content){var template=this.options.skin.iframe;template=template.replace('{body_replace}',content);if($('lightwindow_iframe').contentWindow){$('lightwindow_iframe').contentWindow.document.open();$('lightwindow_iframe').contentWindow.document.write(template);$('lightwindow_iframe').contentWindow.document.close();}else{$('lightwindow_iframe').contentDocument.open();$('lightwindow_iframe').contentDocument.write(template);$('lightwindow_iframe').contentDocument.close();}},_loadWindow:function(){switch(this.windowType){case'image':var current=0;var images=[];this.checkImage=[];this.resizeTo.height=this.resizeTo.width=0;this.imageCount=this._getParameter('lightwindow_show_images')?parseInt(this._getParameter('lightwindow_show_images')):1;if(gallery=this._getGalleryInfo(this.element.rel)){for(current=0;current<this.galleries[gallery[0]][gallery[1]].length;current++){if(this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href)>-1){break;}}
if(this.galleries[gallery[0]][gallery[1]][current-this.imageCount]){this.navigationObservers.previous=this.galleries[gallery[0]][gallery[1]][current-this.imageCount];}else{this.navigationObservers.previous=false;}
if(this.galleries[gallery[0]][gallery[1]][current+this.imageCount]){this.navigationObservers.next=this.galleries[gallery[0]][gallery[1]][current+this.imageCount];}else{this.navigationObservers.next=false;}
this.activeGallery=true;}else{this.navigationObservers.previous=false;this.navigationObservers.next=false;this.activeGallery=false;}
for(var i=current;i<(current+this.imageCount);i++){if(gallery&&this.galleries[gallery[0]][gallery[1]][i]){this.contentToFetch=this.galleries[gallery[0]][gallery[1]][i].href;this.galleryLocation={current:(i+1)/this.imageCount,total:(this.galleries[gallery[0]][gallery[1]].length)/this.imageCount};if(!this.galleries[gallery[0]][gallery[1]][i+this.imageCount]){$('lightwindow_next').setStyle({display:'none'});}else{$('lightwindow_next').setStyle({display:'block'});$('lightwindow_next_title').innerHTML=this.galleries[gallery[0]][gallery[1]][i+this.imageCount].title;}
if(!this.galleries[gallery[0]][gallery[1]][i-this.imageCount]){$('lightwindow_previous').setStyle({display:'none'});}else{$('lightwindow_previous').setStyle({display:'block'});$('lightwindow_previous_title').innerHTML=this.galleries[gallery[0]][gallery[1]][i-this.imageCount].title;}}
images[i]=document.createElement('img');images[i].setAttribute('id','lightwindow_image_'+i);images[i].setAttribute('border','0');images[i].setAttribute('src',this.contentToFetch);$('lightwindow_contents').appendChild(images[i]);this.checkImage[i]=new PeriodicalExecuter(function(i){if(!(typeof $('lightwindow_image_'+i).naturalWidth!="undefined"&&$('lightwindow_image_'+i).naturalWidth==0)){this.checkImage[i].stop();var imageHeight=$('lightwindow_image_'+i).getHeight();if(imageHeight>this.resizeTo.height){this.resizeTo.height=imageHeight;}
this.resizeTo.width+=$('lightwindow_image_'+i).getWidth();this.imageCount--;$('lightwindow_image_'+i).setStyle({height:'100%'});if(this.imageCount==0){this._processWindow();}}}.bind(this,i),1);}
break;case'media':var current=0;this.resizeTo.height=this.resizeTo.width=0;if(gallery=this._getGalleryInfo(this.element.rel)){for(current=0;current<this.galleries[gallery[0]][gallery[1]].length;current++){if(this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href)>-1){break;}}
if(this.galleries[gallery[0]][gallery[1]][current-1]){this.navigationObservers.previous=this.galleries[gallery[0]][gallery[1]][current-1];}else{this.navigationObservers.previous=false;}
if(this.galleries[gallery[0]][gallery[1]][current+1]){this.navigationObservers.next=this.galleries[gallery[0]][gallery[1]][current+1];}else{this.navigationObservers.next=false;}
this.activeGallery=true;}else{this.navigationObservers.previous=false;this.navigationObservers.next=false;this.activeGallery=false;}
if(gallery&&this.galleries[gallery[0]][gallery[1]][current]){this.contentToFetch=this.galleries[gallery[0]][gallery[1]][current].href;this.galleryLocation={current:current+1,total:this.galleries[gallery[0]][gallery[1]].length};if(!this.galleries[gallery[0]][gallery[1]][current+1]){$('lightwindow_next').setStyle({display:'none'});}else{$('lightwindow_next').setStyle({display:'block'});$('lightwindow_next_title').innerHTML=this.galleries[gallery[0]][gallery[1]][current+1].title;}
if(!this.galleries[gallery[0]][gallery[1]][current-1]){$('lightwindow_previous').setStyle({display:'none'});}else{$('lightwindow_previous').setStyle({display:'block'});$('lightwindow_previous_title').innerHTML=this.galleries[gallery[0]][gallery[1]][current-1].title;}}
if(this._getParameter('lightwindow_iframe_embed')){this.resizeTo.height=this.dimensions.viewport.height;this.resizeTo.width=this.dimensions.viewport.width;}else{this.resizeTo.height=this._getParameter('lightwindow_height');this.resizeTo.width=this._getParameter('lightwindow_width');}
this._processWindow();break;case'external':this._appendIframe('auto');this.resizeTo.height=this.dimensions.viewport.height;this.resizeTo.width=this.dimensions.viewport.width;this._processWindow();break;case'page':var newAJAX=new Ajax.Request(this.contentToFetch,{method:'get',parameters:'',onComplete:function(response){$('lightwindow_contents').innerHTML+=response.responseText;this.resizeTo.height=$('lightwindow_contents').scrollHeight+(this.options.contentOffset.height);this.resizeTo.width=$('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);this._processWindow();}.bind(this)});break;case'inline':var content=this.contentToFetch;if(content.indexOf('?')>-1){content=content.substring(0,content.indexOf('?'));}
content=content.substring(content.indexOf('#')+1);new Insertion.Top($('lightwindow_contents'),$(content).innerHTML);this.resizeTo.height=$('lightwindow_contents').scrollHeight+(this.options.contentOffset.height);this.resizeTo.width=$('lightwindow_contents').scrollWidth+(this.options.contentOffset.width);this._toggleTroubleElements('hidden',true);this._processWindow();break;default:throw("Page Type could not be determined, please amend this lightwindow URL "+this.contentToFetch);break;}},_resizeWindowToFit:function(){if(this.resizeTo.height+this.dimensions.cruft.height>this.dimensions.viewport.height){var heightRatio=this.resizeTo.height/this.resizeTo.width;this.resizeTo.height=this.dimensions.viewport.height-this.dimensions.cruft.height-(2*this.options.viewportPadding);if(this.windowType=='image'||(this.windowType=='media'&&!this._getParameter('lightwindow_iframe_embed'))){this.resizeTo.width=this.resizeTo.height/heightRatio;$('lightwindow_data_slide_inner').setStyle({width:this.resizeTo.width+'px'});}}
if(this.resizeTo.width+this.dimensions.cruft.width>this.dimensions.viewport.width){var widthRatio=this.resizeTo.width/this.resizeTo.height;this.resizeTo.width=this.dimensions.viewport.width-2*this.dimensions.cruft.width-(2*this.options.viewportPadding);if(this.windowType=='image'||(this.windowType=='media'&&!this._getParameter('lightwindow_iframe_embed'))){this.resizeTo.height=this.resizeTo.width/widthRatio;$('lightwindow_data_slide_inner').setStyle({height:this.resizeTo.height+'px'});}}},_presetWindowSize:function(){if(this._getParameter('lightwindow_height')){this.resizeTo.height=parseFloat(this._getParameter('lightwindow_height'));}
if(this._getParameter('lightwindow_width')){this.resizeTo.width=parseFloat(this._getParameter('lightwindow_width'));}},_processWindow:function(){this.dimensions.dataEffects=[];if(this.element.caption||this.element.author||(this.activeGallery&&this.options.showGalleryCount)){if(this.element.caption){$('lightwindow_data_caption').innerHTML=this.element.caption;$('lightwindow_data_caption').setStyle({display:'block'});}else{$('lightwindow_data_caption').setStyle({display:'none'});}
if(this.element.author){$('lightwindow_data_author').innerHTML=this.element.author;$('lightwindow_data_author_container').setStyle({display:'block'});}else{$('lightwindow_data_author_container').setStyle({display:'none'});}
if(this.activeGallery&&this.options.showGalleryCount){$('lightwindow_data_gallery_current').innerHTML=this.galleryLocation.current;$('lightwindow_data_gallery_total').innerHTML=this.galleryLocation.total;$('lightwindow_data_gallery_container').setStyle({display:'block'});}else{$('lightwindow_data_gallery_container').setStyle({display:'none'});}
$('lightwindow_data_slide_inner').setStyle({width:this.resizeTo.width+'px',height:'auto',visibility:'visible',display:'block'});$('lightwindow_data_slide').setStyle({height:$('lightwindow_data_slide').getHeight()+'px',width:'1px',overflow:'hidden',display:'block'});}else{$('lightwindow_data_slide').setStyle({display:'none',width:'auto'});$('lightwindow_data_slide_inner').setStyle({display:'none',visibility:'hidden',width:this.resizeTo.width+'px',height:'0px'});}
if(this.element.title!='null'){$('lightwindow_title_bar_title').innerHTML=this.element.title;}else{$('lightwindow_title_bar_title').innerHTML='';}
var originalContainerDimensions={height:$('lightwindow_container').getHeight(),width:$('lightwindow_container').getWidth()};$('lightwindow_container').setStyle({height:'auto',width:$('lightwindow_container').getWidth()+this.options.contentOffset.width-(this.windowActive?this.options.contentOffset.width:0)+'px'});var newContainerDimensions={height:$('lightwindow_container').getHeight(),width:$('lightwindow_container').getWidth()};this.containerChange={height:originalContainerDimensions.height-newContainerDimensions.height,width:originalContainerDimensions.width-newContainerDimensions.width};this.dimensions.container={height:$('lightwindow_container').getHeight(),width:$('lightwindow_container').getWidth()};this.dimensions.cruft={height:this.dimensions.container.height-$('lightwindow_contents').getHeight()+this.options.contentOffset.height,width:this.dimensions.container.width-$('lightwindow_contents').getWidth()+this.options.contentOffset.width};this._presetWindowSize();this._resizeWindowToFit();if(!this.windowActive){$('lightwindow_container').setStyle({left:-(this.dimensions.container.width/2)+'px',top:-(this.dimensions.container.height/2)+'px'});}
$('lightwindow_container').setStyle({height:this.dimensions.container.height+'px',width:this.dimensions.container.width+'px'});this._displayLightWindow('block','visible');this._animateLightWindow();},_animateLightWindow:function(){if(this.options.animationHandler){this.options.animationHandler().bind(this);}else{this._defaultAnimationHandler();}},_handleNavigation:function(display){if(this.options.navigationHandler){this.options.navigationHandler().bind(this,display);}else{this._defaultDisplayNavigation(display);}},_handleTransition:function(){if(this.options.transitionHandler){this.options.transitionHandler().bind(this);}else{this._defaultTransitionHandler();}},_handleFinalWindowAnimation:function(delay){if(this.options.finalAnimationHandler){this.options.finalAnimationHandler().bind(this,delay);}else{this._defaultfinalWindowAnimationHandler(delay);}},_handleGalleryAnimation:function(list){if(this.options.galleryAnimationHandler){this.options.galleryAnimationHandler().bind(this,list);}else{this._defaultGalleryAnimationHandler(list);}},_defaultDisplayNavigation:function(display){if(display){$('lightwindow_navigation').setStyle({display:'block',height:$('lightwindow_contents').getHeight()+'px',width:'100%',marginTop:this.options.dimensions.titleHeight+'px'});}else{$('lightwindow_navigation').setStyle({display:'none',height:'auto',width:'auto'});}},_defaultAnimationHandler:function(){if(this.element.caption||this.element.author||(this.activeGallery&&this.options.showGalleryCount)){$('lightwindow_data_slide').setStyle({display:'none',width:'auto'});this.dimensions.dataEffects.push(new Effect.SlideDown('lightwindow_data_slide',{sync:true}),new Effect.Appear('lightwindow_data_slide',{sync:true,from:0.0,to:1.0}));}
$('lightwindow_title_bar_inner').setStyle({height:'0px',marginTop:this.options.dimensions.titleHeight+'px'});this.dimensions.dataEffects.push(new Effect.Morph('lightwindow_title_bar_inner',{sync:true,style:{height:this.options.dimensions.titleHeight+'px',marginTop:'0px'}}),new Effect.Appear('lightwindow_title_bar_inner',{sync:true,from:0.0,to:1.0}));if(!this.options.hideGalleryTab){this._handleGalleryAnimation(false);if($('lightwindow_galleries_tab_container').getHeight()==0){this.dimensions.dataEffects.push(new Effect.Morph('lightwindow_galleries_tab_container',{sync:true,style:{height:'20px',marginTop:'0px'}}));$('lightwindow_galleries').setStyle({width:'0px'});}}
var resized=false;var ratio=this.dimensions.container.width-$('lightwindow_contents').getWidth()+this.resizeTo.width+this.options.contentOffset.width;if(ratio!=$('lightwindow_container').getWidth()){new Effect.Parallel([new Effect.Scale('lightwindow_contents',100*(this.resizeTo.width/$('lightwindow_contents').getWidth()),{scaleFrom:100*($('lightwindow_contents').getWidth()/($('lightwindow_contents').getWidth()+(this.options.contentOffset.width))),sync:true,scaleY:false,scaleContent:false}),new Effect.Scale('lightwindow_container',100*(ratio/(this.dimensions.container.width)),{sync:true,scaleY:false,scaleFromCenter:true,scaleContent:false})],{duration:this.duration,delay:0.25,queue:{position:'end',scope:'lightwindowAnimation'}});}
ratio=this.dimensions.container.height-$('lightwindow_contents').getHeight()+this.resizeTo.height+this.options.contentOffset.height;if(ratio!=$('lightwindow_container').getHeight()){new Effect.Parallel([new Effect.Scale('lightwindow_contents',100*(this.resizeTo.height/$('lightwindow_contents').getHeight()),{scaleFrom:100*($('lightwindow_contents').getHeight()/($('lightwindow_contents').getHeight()+(this.options.contentOffset.height))),sync:true,scaleX:false,scaleContent:false}),new Effect.Scale('lightwindow_container',100*(ratio/(this.dimensions.container.height)),{sync:true,scaleX:false,scaleFromCenter:true,scaleContent:false})],{duration:this.duration,afterFinish:function(){if(this.dimensions.dataEffects.length>0){if(!this.options.hideGalleryTab){$('lightwindow_galleries').setStyle({width:this.resizeTo.width+'px'});}
new Effect.Parallel(this.dimensions.dataEffects,{duration:this.duration,afterFinish:function(){this._finishWindow();}.bind(this),queue:{position:'end',scope:'lightwindowAnimation'}});}}.bind(this),queue:{position:'end',scope:'lightwindowAnimation'}});resized=true;}
if(!resized&&this.dimensions.dataEffects.length>0){new Effect.Parallel(this.dimensions.dataEffects,{duration:this.duration,beforeStart:function(){if(!this.options.hideGalleryTab){$('lightwindow_galleries').setStyle({width:this.resizeTo.width+'px'});}
if(this.containerChange.height!=0||this.containerChange.width!=0){new Effect.MoveBy('lightwindow_container',this.containerChange.height,this.containerChange.width,{transition:Effect.Transitions.sinoidal});}}.bind(this),afterFinish:function(){this._finishWindow();}.bind(this),queue:{position:'end',scope:'lightwindowAnimation'}});}},_defaultfinalWindowAnimationHandler:function(delay){if(this.windowType=='media'||this._getParameter('lightwindow_loading_animation')){Element.hide('lightwindow_loading');this._handleNavigation(this.activeGallery);this._setStatus(false);}else{Effect.Fade('lightwindow_loading',{duration:0.75,delay:1.0,afterFinish:function(){if(this.windowType!='image'&&this.windowType!='media'&&this.windowType!='external'){$('lightwindow_contents').setStyle({overflow:'auto'});}
this._handleNavigation(this.activeGallery);this._defaultGalleryAnimationHandler();this._setStatus(false);}.bind(this),queue:{position:'end',scope:'lightwindowAnimation'}});}},_defaultGalleryAnimationHandler:function(list){if(this.activeGallery){$('lightwindow_galleries').setStyle({display:'block',marginBottom:$('lightwindow_data_slide').getHeight()+this.options.contentOffset.height/2+'px'});$('lightwindow_navigation').setStyle({height:$('lightwindow_contents').getHeight()-20+'px'});}else{$('lightwindow_galleries').setStyle({display:'none'});$('lightwindow_galleries_tab_container').setStyle({height:'0px',marginTop:'20px'});$('lightwindow_galleries_list').setStyle({height:'0px'});return false;}
if(list){if($('lightwindow_galleries_list').getHeight()==0){var height=$('lightwindow_contents').getHeight()*0.80;$('lightwindow_galleries_tab_span').className='down';}else{var height=0;$('lightwindow_galleries_tab_span').className='up';}
new Effect.Morph('lightwindow_galleries_list',{duration:this.duration,transition:Effect.Transitions.sinoidal,style:{height:height+'px'},beforeStart:function(){$('lightwindow_galleries_list').setStyle({overflow:'hidden'});},afterFinish:function(){$('lightwindow_galleries_list').setStyle({overflow:'auto'});},queue:{position:'end',scope:'lightwindowAnimation'}});}},_defaultTransitionHandler:function(){this.dimensions.dataEffects=[];if($('lightwindow_data_slide').getStyle('display')!='none'){this.dimensions.dataEffects.push(new Effect.SlideUp('lightwindow_data_slide',{sync:true}),new Effect.Fade('lightwindow_data_slide',{sync:true,from:1.0,to:0.0}));}
if(!this.options.hideGalleryTab){if($('lightwindow_galleries').getHeight()!=0&&!this.options.hideGalleryTab){this.dimensions.dataEffects.push(new Effect.Morph('lightwindow_galleries_tab_container',{sync:true,style:{height:'0px',marginTop:'20px'}}));}
if($('lightwindow_galleries_list').getHeight()!=0){$('lightwindow_galleries_tab_span').className='up';this.dimensions.dataEffects.push(new Effect.Morph('lightwindow_galleries_list',{sync:true,style:{height:'0px'},transition:Effect.Transitions.sinoidal,beforeStart:function(){$('lightwindow_galleries_list').setStyle({overflow:'hidden'});},afterFinish:function(){$('lightwindow_galleries_list').setStyle({overflow:'auto'});}}));}}
this.dimensions.dataEffects.push(new Effect.Morph('lightwindow_title_bar_inner',{sync:true,style:{height:'0px',marginTop:this.options.dimensions.titleHeight+'px'}}),new Effect.Fade('lightwindow_title_bar_inner',{sync:true,from:1.0,to:0.0}));new Effect.Parallel(this.dimensions.dataEffects,{duration:this.duration,afterFinish:function(){this._loadWindow();}.bind(this),queue:{position:'end',scope:'lightwindowAnimation'}});},_defaultFormHandler:function(e){var element=Event.element(e).parentNode;var parameterString=Form.serialize(this._getParameter('lightwindow_form',element.getAttribute('params')));if(this.options.formMethod=='post'){var newAJAX=new Ajax.Request(element.href,{method:'post',postBody:parameterString,onComplete:this.openWindow.bind(this,element)});}else if(this.options.formMethod=='get'){var newAJAX=new Ajax.Request(element.href,{method:'get',parameters:parameterString,onComplete:this.openWindow.bind(this,element)});}},_finishWindow:function(){if(this.windowType=='external'){$('lightwindow_iframe').setAttribute('src',this.element.href);this._handleFinalWindowAnimation(1);}else if(this.windowType=='media'){var outerObject=document.createElement('object');outerObject.setAttribute('classid',this.options.classids[this._fileExtension(this.contentToFetch)]);outerObject.setAttribute('codebase',this.options.codebases[this._fileExtension(this.contentToFetch)]);outerObject.setAttribute('id','lightwindow_media_primary');outerObject.setAttribute('name','lightwindow_media_primary');outerObject.setAttribute('width',this.resizeTo.width);outerObject.setAttribute('height',this.resizeTo.height);outerObject=this._addParamToObject('movie',this.contentToFetch,outerObject);outerObject=this._addParamToObject('src',this.contentToFetch,outerObject);outerObject=this._addParamToObject('controller','true',outerObject);outerObject=this._addParamToObject('wmode','transparent',outerObject);outerObject=this._addParamToObject('cache','false',outerObject);outerObject=this._addParamToObject('quality','high',outerObject);if(!Prototype.Browser.IE){var innerObject=document.createElement('object');innerObject.setAttribute('type',this.options.mimeTypes[this._fileExtension(this.contentToFetch)]);innerObject.setAttribute('data',this.contentToFetch);innerObject.setAttribute('id','lightwindow_media_secondary');innerObject.setAttribute('name','lightwindow_media_secondary');innerObject.setAttribute('width',this.resizeTo.width);innerObject.setAttribute('height',this.resizeTo.height);innerObject=this._addParamToObject('controller','true',innerObject);innerObject=this._addParamToObject('wmode','transparent',innerObject);innerObject=this._addParamToObject('cache','false',innerObject);innerObject=this._addParamToObject('quality','high',innerObject);outerObject.appendChild(innerObject);}
if(this._getParameter('lightwindow_iframe_embed')){this._appendIframe('no');this._writeToIframe(this._convertToMarkup(outerObject,'object'));}else{this._appendObject(outerObject,'object',$('lightwindow_contents'));}
this._handleFinalWindowAnimation(0);}else{this._handleFinalWindowAnimation(0);}
this._setupActions();}}
Event.observe(window,'load',lightwindowInit,false);var myLightWindow=null;function lightwindowInit(){myLightWindow=new lightwindow();}
/* --- cruises/js/cookies.min.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2010 Brand Labs LLC
 * 
 *--------------------------------------------------------------------------*/
function doesCookieExist(aa){var ba=null;ba=getCookieValue(aa);if(ba==null){return false;}
return true;}
function getCookieValue(ca){var da=null;var ea=null;var fa=null;var ga;if(!document.cookie||document.cookie==null){return null;}
da=document.cookie.split(';');for(ga=0;ga<da.length;ga++){ea=da[ga];while(ea.charAt(0)==' '){ea=ea.substring(1,ea.length);}
if(ea.indexOf(ca+'=')==0){fa=ea.substring(ca.length+1);if(fa==null||fa==''){return'';}
else{return fa;}}}
return null;}
function addCookie(ha,ia){document.cookie=escape(ha)+'='+escape(ia)+'; path=/';}
function deleteCookie(ja){document.cookie=escape(ja)+'=; expires=-1; path=/';}
/* --- cruises/js/product-detail.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2009-2011 Brand Labs LLC
 * 
 *--------------------------------------------------------------------------*/

//Add view cruise info button to product details, and add drop down with cruise info.
//Also auto selects product options for tour selection, if applicable based on product code

var ViewItinerary = Class.create({
	Settings:{
		ITINERARY_DETAILS_URL: new Template('/v/cruises/ajax-data/itinerary.html.asp?shipId=#{shipid}&arrival=#{arrival}&nights=#{nights}'),
		ITINERARY_JSON_URL: new Template('/v/cruises/ajax-data/itinerary.json.asp?shipId=#{shipid}&arrival=#{arrival}&nights=#{nights}'),
		TIME_OPTIONS_JSON_URL: new Template('/v/cruises/ajax-data/product-time-options.json.asp?shipId=#{shipid}&arrival=#{arrival}&nights=#{nights}&productcodes=#{productcodes}'),
		VIEW_ITINERARY_URL: new Template('/v/cruises/results.asp?shipId=#{shipid}&arrival=#{arrival}&nights=#{nights}'),
		ENTER_ITINERARY_URL: '/v/cruises/select.asp',
		DISPLAY_ITINERARY_DETAILS_BUTTON_URL: '/v/vspfiles/templates/ShoreEx/images/buttons/btn_view_itinerary.gif',
		CLOSE_ITINERARY_DETAILS_BUTTON_URL: '/v/vspfiles/templates/ShoreEx/images/buttons/btn_hide_itinerary.gif',
		DEFAULT_TEXT: '<div class="itinerary_details"><div class="port_list"><div class="port_details"><div class="port_details_inner">To view your cruise itinerary please<br>click the "Enter Cruise Information"<br>button at the top.</div></div></div></div><!--[if lte IE 6.5]><iframe></iframe><![endif]-->',
		COOKIE_NAME: 'CruiseSelection',
		OPTION_CATEGORY_ID_YEAR: 145,
		OPTION_CATEGORY_ID_DAY: 17,
		OPTION_CATEGORY_ID_MONTH: 16,	
		OPTION_CATEGORY_ID_TIME: 22,
		MONTHS: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
		BUNDLE_PRODUCTCODE_PREFIX: 'BNDL'
	},	
	
	initialize: function() {
		this.itinerary_details_element = null;	
		this.btn_element = null;
		this.current_animation = null;
		this.details_height = null;
		this.shipId = null;
		this.arrival = null;
		this.nights = null;
		this.productCode = null;
		this.eligibleTourOptions = null;
		
		var cookieVal = null;
		
		cookieVal = $H(unescape(getCookieValue(this.Settings.COOKIE_NAME)).evalJSON());		
		this.shipId = cookieVal.get('shipId');
		this.arrival = cookieVal.get('arrival');
		this.nights = cookieVal.get('nights');
		
		//Start once loaded if not on a bundle product page
		var productCode = this.getProductCodeFromURL(window.location.href);
		if (productCode != null && productCode.toUpperCase().indexOf(this.Settings.BUNDLE_PRODUCTCODE_PREFIX) == -1) {
			this.productCode = productCode;
			Event.observe(window, 'load', this.load.bind(this));
		}
	},
	
	load: function() {	
		try {
			if (this.isProductDetailPage(window.location.pathname)) {
				var firstOptionCell = null;				
				firstOptionCell= $$('select[name^="SELECT___"]').first().up('td');
				
				if (firstOptionCell == undefined || firstOptionCell == null) {
					return;
				}
				
				this.btn_element = new Element('img', {src: this.Settings.DISPLAY_ITINERARY_DETAILS_BUTTON_URL, id: 'view_itinerary_btn', alt: 'View My Cruise Itinerary', title: 'View My Cruise Itinerary'});
	       		Event.observe(this.btn_element, 'click', this.btnClicked.bindAsEventListener(this));  
	       		firstOptionCell.insert(this.btn_element);
	       		this.loadTimeOptionsJSON();
			}
		}
		catch(e){/*Ignore*/}	
	},
	
	loadBundlePage: function() {
		try {
			if (this.isProductDetailPage(window.location.pathname)) {
				var form = $$('.product-bundle-option-form').first();
				var firstOption = null;
				if (form == undefined || form == null) {
					return;
				}
				firstOption = form.findFirstElement();
				
				this.btn_element = new Element('img', {src: this.Settings.DISPLAY_ITINERARY_DETAILS_BUTTON_URL, id: 'view_itinerary_btn', alt: 'View My Cruise Itinerary', title: 'View My Cruise Itinerary'});
	       		Event.observe(this.btn_element, 'click', this.btnClicked.bindAsEventListener(this));  
	       		firstOption.insert({
					after: this.btn_element
				});	
			}
		}
		catch(e){/*Ignore*/}
	},
	
	btnClicked: function(){
		var url;
		
		if(this.shipId == undefined || this.shipId == null || this.arrival == undefined || this.arrival == null || this.nights == undefined || this.nights == null){
			url = this.Settings.ENTER_ITINERARY_URL;
			window.location.href = url;
		}
		else {
			if (this.itinerary_details_element == null || this.itinerary_details_element == undefined || !this.itinerary_details_element.visible()) {
				this.showItineraryDetails();
			} else {
				this.hideItineraryDetails();
			}
		}
	},
	
	formatDateforDB: function(date){
		var dateStr = '';
		var dateObj = new Date(date);
		var month = dateObj.getMonth() + 1
		var day = dateObj.getDate()
		if(month <= 9){
			month = "0" + month;
		}
		if(day <= 9){
			day = "0" + day;
		}
		dateStr = dateObj.getFullYear() + '-' + month + '-' + day;
		return dateStr;		
	},
	
	loadItinerary: function(){
		var url;	
		
		this.itinerary_details_element = new Element('div').addClassName('itinerary_container');
		
		if(this.shipId == undefined || this.shipId == null || this.arrival == undefined || this.arrival == null || this.nights == undefined || this.nights == null){
			this.itinerary_details_element.update(this.Settings.DEFAULT_TEXT);			
			this.btn_element.insert({after: this.itinerary_details_element});
			this.itinerary_details_element.setStyle({width: '216px'});
            this.details_height = this.itinerary_details_element.getHeight();
            this.itinerary_details_element.setStyle({height: '0px'});
            this.showItineraryDetails();
           	return;			
		}
		
		url = this.Settings.ITINERARY_DETAILS_URL.evaluate({shipid: escape(this.shipId), arrival: escape(this.arrival), nights: escape(this.nights)})
		
		new Ajax.Request(url, {
			method: 'get',
			evalJSON: false,			
			onSuccess: function(transport) {
				try {
					this.itinerary_details_element.update(transport.responseText);
					$$('body').first().insert(this.itinerary_details_element);
					this.details_height = this.itinerary_details_element.getHeight() + 50;
					this.itinerary_details_element.setStyle({height: '0px'});
					this.showItineraryDetails();
				}
				catch(e) {/*Ignore*/};
			}.bind(this)	
		});		
	},
	
	loadTimeOptionsJSON: function(){
		var url;
		
		if(this.shipId == undefined || this.shipId == null || this.arrival == undefined || this.arrival == null || this.nights == undefined || this.nights == null || this.productCode == undefined || this.productCode == null){
			return;			
		}
		
		url = this.Settings.TIME_OPTIONS_JSON_URL.evaluate({shipid: this.shipId, arrival: this.arrival, nights: this.nights, productcodes: this.productCode});
		
		new Ajax.Request(url, {
			method: 'get',
			evalJSON: true,			
			onSuccess: function(transport) {
				try {
					this.preSelectDates(transport.responseJSON);
				}
				catch(e) {/*Ignore*/};
			}.bind(this)		
		});		
		
	}, 
	
	toDate: function(timestamp){		
		var tmpDate = new Date(timestamp * 1000);
		var month = this.Settings.MONTHS[tmpDate.getMonth()];
		var day = tmpDate.getDate();
		return month + ' ' + day;
	},
	
	toTime: function(timestamp){
		var tmpDate = new Date(timestamp * 1000);
		var hour = tmpDate.getHours();
		var minute = tmpDate.getMinutes();
		var AMPM = 'am';
		if(hour >= 12){
			AMPM = 'pm';
			if(hour > 12){
				hour = hour - 12;
			}
		}
		
		if(minute < 10){
			minute = minute + '0';
		}
		return hour + ":" + minute + AMPM;
	},	
	
	showItineraryDetails: function(){
		var details_top;
		var details_left;
		var iframe_element;
		
		try {
			if(this.itinerary_details_element != null && this.itinerary_details_element != undefined){	
				iframe_element = $$('#' + this.itinerary_details_element.identify() + ' iframe').first();
				if(iframe_element != undefined && iframe_element != null && typeof(iframe_element) != 'undefined'){
					iframe_element.setStyle({width: this.itinerary_details_element.getWidth() + 'px', height: this.details_height + 'px'});
				}
				
				this.itinerary_details_element.show();
				this.itinerary_details_element.setStyle({position: 'absolute'});
				details_left = (this.btn_element.positionedOffset()[0] + this.btn_element.getWidth() + 25 - this.itinerary_details_element.getWidth()) + 'px';
				details_top = (this.btn_element.positionedOffset()[1] + (2 * this.btn_element.getHeight())) + 'px';
				this.itinerary_details_element.setStyle({left: details_left, top: details_top});
				if(this.current_animation != null){
					this.current_animation.cancel();
				}
				
				/*Change button image*/
				this.btn_element.writeAttribute({
					src:this.Settings.CLOSE_ITINERARY_DETAILS_BUTTON_URL,
					alt: 'Hide My Cruise Itinerary', 
					title: 'Hide My Cruise Itinerary'
				});
				
				/*Roll out details*/
				this.current_animation = new Effect.Morph(this.itinerary_details_element.identify(), {
					  style: 'height: ' + this.details_height + 'px;',
					  duration: 1
				});
			}
			else{			
				this.loadItinerary();
			}
		} catch(e) {/*Ignore*/}
	},
	
	hideItineraryDetails: function(){
		if(this.current_animation != null){
			this.current_animation.cancel();
		}
		
		/*Change button image*/
		this.btn_element.writeAttribute({
			src:this.Settings.DISPLAY_ITINERARY_DETAILS_BUTTON_URL,
			alt: 'View My Cruise Itinerary',
			title: 'View My Cruise Itinerary'
		});
		
		/*Roll up details*/
		this.current_animation = new Effect.Morph(this.itinerary_details_element.identify(), {
			  style: 'height: 0px;',
			  duration: 1,
			  afterFinish: function(){
			  	this.itinerary_details_element.hide();
			  }.bind(this)
		});
	},
	
	preSelectDates: function(jsonObj) {			
		var items = eval('jsonObj.'+this.productCode.toUpperCase());
		var dates = new Hash();
		var eligibleOptions = new Array();
		var yearOptions = new Array();
		var monthOptions = new Array();
		var dayOptions = new Array();
		var timeOptions = new Array();
		var firstEligibleDate = null;
		
		
		
		/*See if this tour has eligible time options*/
		if (items == undefined) {
			/*Remove all time options*/
			return;
		}
		
		/*Get dates and eligible tour options*/
		$H(items).each(function(item){
			dates.set(item.first(), item.last());
		}.bind(this));

		dates.keys().each(function(date) {
			var elements = $$('select[name^="SELECT___' + this.productCode.toUpperCase() + '"]');
			var tourTimeOptions = dates.get(date);
			var dateArray = date.split('-');
		
			/* Verify */
			if (elements == undefined || elements == null || elements.length < 1 || dateArray.length != 3 || tourTimeOptions.length < 1) {
				return;
			}
			
			/* Check if earlier date */
			if (firstEligibleDate == null || (parseInt(firstEligibleDate.replace(/-/g,''),10) > parseInt(date.replace(/-/g,''),10))) {
				firstEligibleDate = date;
			}
			
			
			/*Collect eligible options, select first*/
			elements.each(function(element){
				var elementName = element.readAttribute('name');
				var optionCategoryId = null;
				optionCategoryId = parseInt(elementName.substring(elementName.lastIndexOf('_')+1, elementName.length),10);
				if (isNaN(optionCategoryId)) {
					return;
				}
	
				if (optionCategoryId == this.Settings.OPTION_CATEGORY_ID_YEAR) {
					var options = element.select('option');
					if ( options != undefined || options != null) {
						try {
							options.each(function(option){/*Add non-null non-0 values to Option array*/
								if (!isNaN(parseInt(option.value,10)) && parseInt(option.value,10) > 0) {
									yearOptions.push(option);
									
									/*Is this option eligible? Add it to the list.*/
									if (parseInt(option.text,10) == parseInt(dateArray[0],10)) {
										eligibleOptions.push(option.value);
										/*Is this the earliest available date? Select this option.*/
										if (firstEligibleDate == date) {
											element.selectedIndex = option.index;
										}
									}
								}
							});
						} catch(e) {/*Ignore*/}					
					}
				} else if (optionCategoryId == this.Settings.OPTION_CATEGORY_ID_MONTH) {
					var options = element.select('option');
					if ( options != undefined || options != null) {
						try {
							options.each(function(option){
								/*Add non-null non-0 values to Option array*/
								if (!isNaN(parseInt(option.value,10)) && parseInt(option.value,10) > 0) {
									monthOptions.push(option);
									
									/*Is this option eligible?*/
									if (option.text.toUpperCase() == this.Settings.MONTHS[(parseInt(dateArray[1],10) - 1)].toUpperCase()) {
										eligibleOptions.push(option.value);
										/*Is this the earliest available date? Select this option.*/
										if (firstEligibleDate == date) {
											element.selectedIndex = option.index;
										}
									}
								}
							}.bind(this));
						} catch(e) {/*Ignore*/}					
					}
				} else if (optionCategoryId == this.Settings.OPTION_CATEGORY_ID_DAY) {
					var options = element.select('option');
					if (options != undefined || options != null) {
						try {
							options.each(function(option){
								/*Add non-null non-0 values to Option array*/
								if (!isNaN(parseInt(option.value,10)) && parseInt(option.value,10) > 0) {
									dayOptions.push(option);
									
									/*Is this option eligible?*/
									if (parseInt(option.text,10) == parseInt(dateArray[2],10)) {
										eligibleOptions.push(option.value);
										/*Is this the earliest available date? Select this option.*/
										if (firstEligibleDate == date) {
											element.selectedIndex = option.index;
										}
									}
								}
							});
						} catch (e) {/*Ignore*/}
					}
				} else if (optionCategoryId == this.Settings.OPTION_CATEGORY_ID_TIME) {
					var options = element.select('option');
					if (options != undefined || options != null) {
						try {
							options.each(function(option){
								/*Add non-null non-0 values to Option array*/
								if (!isNaN(parseInt(option.value,10)) && parseInt(option.value,10) > 0) {
									timeOptions.push(option);
									
									/*Is this option eligible?*/
									if (tourTimeOptions.indexOf(parseInt(option.value,10)) != -1) {
										eligibleOptions.push(option.value);
										/*Is this the earliest available date? Select this option.*/
										if (firstEligibleDate == date && (tourTimeOptions.indexOf(parseInt(element.value,10)) < 0 || option.index < element.selectedIndex)) {
											element.selectedIndex = option.index;
										}
									}
								}
							});
						} catch(e) {/*Ignore*/}
					}
				} 
			}.bind(this));
		}.bind(this));
		
		/*Make sure option entries are unique*/
		yearOptions = yearOptions.uniq();
		monthOptions = monthOptions.uniq();
		dayOptions = dayOptions.uniq();
		timeOptions = timeOptions.uniq();
		
		/*Remove Non-Eligible Options*/
		yearOptions.each(function(option) {
			if (eligibleOptions.indexOf(option.value) < 0) {
				Element.remove(option);
			}
		});
		monthOptions.each(function(option) {
			if (eligibleOptions.indexOf(option.value) < 0) {
				Element.remove(option);
			}
		});
		dayOptions.each(function(option) {
			if (eligibleOptions.indexOf(option.value) < 0) {
				Element.remove(option);
			}
		});
		timeOptions.each(function(option) {
			if (eligibleOptions.indexOf(option.value) < 0) {
				Element.remove(option);
			}
		});
	},
	
	isProductDetailPage: function(url) {
		if (null == url) {
			return false;
		} else {
			/* The product detail page (per Volusion KB) */	
			return (url.toLowerCase() == '/productdetails.asp' ||
					url.toLowerCase().indexOf('-p/') != -1 ||
					url.toLowerCase().indexOf('_p/') != -1);
		}
	},
	
	getProductCodeFromURL: function(url) {
		var matches = null;
		
		/* Make sure we do not have a null */
		if(url == null) {
			return null;
		}
		
		/* Check non-SEO URL */
		matches = url.match(/.*[\?|&]ProductCode=([^&;]*)/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
		
		/* Check SEO URL */
		matches = url.match(/[_-]p\/(.+)\.htm/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
	
		/* No product code available */
		return null;
	}

});

try{
	var ViewItineraryObject = new ViewItinerary();
} catch(e){/*ignore*/}
/* --- cruises/js/itinerary-validator.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2010-2011 Brand Labs LLC
 *  
 *--------------------------------------------------------------------------*/
var ItineraryValidator = Class.create({
	Settings: {
		PAGE_TYPES_ENABLED: {ProductDetail: true, Cart: false, Checkout: true, Results: true},
		COOKIE_NAME: 'CruiseSelection',
		NO_ITINERARY_DATA_COOKIE_NAME: 'NoItineraryData',
		WARNING_COOKIE_NAME: 'ItineraryCheckWarning',
		WARNING_COOKIE_VALUE_TEMPLATE: new Template('#{shipId}-#{startDate}-#{nights}'),
		WARNING_MESSAGE_TEMPLATE: new Template('Our schedule indicates that the tour(s) #{tourName} doesn\'t work on the day chosen. If your ship overnights in port, please choose "Cancel" and select a different day in the day dropdown.  If your ship does not overnight in port, please give us a call during normal business hours, which are Monday through Friday from 9:00 am to 6:00 pm EST. \n\nIf you would still like to add the tour to your cart, please click OK. Otherwise click "Cancel" to remain on this page and to change your selection.'),
		VALIDATE_ITINERARY_URL: '/v/cruises/ajax-data/validate-itinerary.asp',
		SUBMIT_ORDER_IMG_SRC: '/v/vspfiles/templates/ShoreEx/images/buttons/btn_1pagec_placeorder.gif',
		EXPEDITE_FEE_PRODUCTCODE: 'EXPEDITE',
		EXPEDITE_FEE_PRODUCT_OPTION_NAME: 'SELECT___EXPEDITE___1592',
		EXPEDITE_FEE_PRODUCT_OPTION_VALUE: '19595',
		EXPEDITE_FEE_MESSAGE: 'NOTE: Our deadline for booking excursions is 3 days prior to your cruise. If you choose to proceed, a $25 Expedite Fee will be added to your order.',
		EXPEDITE_FEE_SUCCESS_MESSAGE: 'The expedite fee has been added to your cart.',
		EXPEDITE_FEE_FAILURE_MESSAGE: 'The expedite fee could not be added to cart, this may cause your order to not be processed. Please contact our support at 866-999-6590 during normal business hours (Mon-Fri, 9am-6pm EST)',
		MINIMUM_TIME_BEFORE_SHIP_DEPARTURE:	259200000 /* 72 hours in milliseconds */
	},
	
	initialize: function() {
		/* Init this */
		this.PageType = {Cart: false, ProductDetail: false, Checkout: false, Results: false};
		this.ValidatorObject = null;
		this.WarningCookieValue = null;
		this.arrival = null;
		this.shipId = null;
		this.nights = null;
		this.processTourValidation = true;
			
		/* Get Page Type */
		this.PageType.ProductDetail = (this.Settings.PAGE_TYPES_ENABLED.ProductDetail && (window.location.pathname.toLowerCase() == '/productdetails.asp' 
							|| window.location.pathname.toLowerCase().indexOf('-p/') != -1 
							|| window.location.pathname.toLowerCase().indexOf('_p/') != -1)); /*Per Volusion KB*/
		this.PageType.Cart = (this.Settings.PAGE_TYPES_ENABLED.Cart && (window.location.pathname.toLowerCase().indexOf('shoppingcart.asp') != -1));
		this.PageType.Checkout = (this.Settings.PAGE_TYPES_ENABLED.Checkout && (window.location.pathname.toLowerCase().indexOf('one-page-checkout.asp') != -1));
		this.PageType.Results = (this.Settings.PAGE_TYPES_ENABLED.Results && (window.location.pathname.toLowerCase().indexOf('/v/cruises/results.asp') != -1));
			
		/* Verify valid page type for handling or quit */
		if (!this.PageType.ProductDetail && !this.PageType.Cart && !this.PageType.Checkout && !this.PageType.Results) {
			return;
		} 
		
		/* If not on the one-page-checkout and there isn't an itinerary selection cookie, quit */
		if (!this.PageType.Checkout && !doesCookieExist(this.Settings.COOKIE_NAME)) {
			this.processTourValidation = false;
		} else {
			/* Get cruise selection info and Set up warning cookie value for this itinerary selection */
			this.getCruiseSelectionFromCookie();
		}
				
		/* Check for No Itinerary Data Cookie */
		if (doesCookieExist(this.Settings.NO_ITINERARY_DATA_COOKIE_NAME) && getCookieValue(this.Settings.NO_ITINERARY_DATA_COOKIE_NAME).toLowerCase() == 'true') {
			/* There was no itinerary data found in the database, no point in trying to validate tours */
			this.processTourValidation = false;
		}
				
		/* If viewing the cart, and user has already been warned for this itinerary selection, don't bother them again */
		if (!this.PageType.ProductDetail && doesCookieExist(this.Settings.WARNING_COOKIE_NAME) 
		&& getCookieValue(this.Settings.WARNING_COOKIE_NAME) == this.WarningCookieValue) {
			this.processTourValidation = false;
		}
		
		/* Product Detail Page Handling */
		if (this.PageType.ProductDetail) {
			/* Should we actually bother validating the tour info? */
			if (this.processTourValidation) { 
				var productCode = this.getProductCodeFromURL(window.location.href);
				try {
					if (productCode.toUpperCase().substr(0,4) == 'BNDL') {
						/* Wait for the window to load */
						Event.observe(window, 'load', this.productBundlesWindowLoaded.bind(this));
					} else {					
						/* Wait for window load */
						Event.observe(window, 'load', this.windowLoaded.bind(this));
					}
				} catch(e) {/*Ignore*/}
			} else {
				return;
			}	
		} else {			
			/* Wait for window load */
			Event.observe(window, 'load', this.windowLoaded.bind(this));
		}
	}, 
	
	windowLoaded: function() {
		/* Set up appropriate validator class */
		if (this.PageType.ProductDetail) {
			this.ValidatorObject = new ProductItineraryValidator();
			/* Prep for validation */
			if (typeof ProductBundles != 'undefined') {
				/* Intercept add to cart click in order to validate items before processing bundle form */
				ProductBundles.OptionForm.btnAddToCart.stopObserving();	
			}
						
			/* Observe submit */
			Event.observe(this.ValidatorObject.submitButton, 'click', this.validate.bindAsEventListener(this));
		} else if (this.PageType.Cart || this.PageType.Checkout) {
			this.ValidatorObject = new CartItineraryValidator();
					
			/* Observe submit */
			if (this.PageType.Cart) {
				Event.observe(this.ValidatorObject.submitButton, 'click', this.validate.bindAsEventListener(this));
			} else if (this.PageType.Checkout) {
				if (typeof CruiseCheckout != 'undefined' && typeof CruiseCheckout.prototype.manualFormSubmission != 'undefined') {
					/* Intercept manual submission from shipping recalculation ajax */
					CruiseCheckout.addMethods({
						manualFormSubmission: function() {
							this.validate();
						}.bind(this)
					});
				} else {
					Event.observe(this.ValidatorObject.form, 'submit', this.validate.bindAsEventListener(this));
				}
			}
		} else if (this.PageType.Results) {
			var params = window.location.search.toQueryParams();
			try {
				if (!Object.isUndefined(params.arrival) && this.expediteFeeRequired(params.arrival, this.Settings.MINIMUM_TIME_BEFORE_SHIP_DEPARTURE)) {
					this.checkCartAndAddExpediteFee();
				} else {
					this.manualFormSubmission();
				}
			} catch(e) {
				/*Ignore*/
			}
		}
	},
	
	productBundlesWindowLoaded: function() {
		if (typeof ProductBundles != 'undefined') {
			this.addProductBundlesFormLoadedEvent();
		
			/* On Bundle Product Pages, we must wait for the form to exist before we can do much */
			Event.observe($$('body').first(), 'productBundleOptionForm:loaded', this.windowLoaded.bind(this));
		}
	},
	
	addProductBundlesFormLoadedEvent: function() {
		/* Fire a custom event when an instance of ProductBundleOptionForm calls "finishLoading"*/
		ProductBundleOptionForm.addMethods({
			finishLoading: function() {
				if (this.form == null || this.body == null) {
				return;
				}	
				try {
					ProductBundles.stopWaiting();
					this.stopWaiting(this.body);
					this.form.show();
					this.body.fire('productBundleOptionForm:loaded', this);
				} catch(e) {/*Ignore*/}
			}
		});
	},
	
	expediteFeeRequired: function(departureDateString, minimumTime) {
		var slashifiedDepartureDateString = null;
		var departureDate = null;
		var today = new Date().valueOf();
		var diff = 0;	
		
		try {
			/*Date string must be in american slash date format for IE*/
			if (departureDateString.indexOf('-') != -1) {
				var parts = departureDateString.split('-');
				slashifiedDepartureDateString = parts[1]+ "/" + parts[2]  + "/" + parts[0];
			} else {
				slashifiedDepartureDateString = departureDateString;
			}
			
			departureDate = Date.parse(slashifiedDepartureDateString);
			
			/* Calculate diff */
			diff = parseInt(departureDate) - parseInt(today);
		} catch(e) {/*Ignore*/}

		/* Does the given departure date require an expedite fee? */
		return (diff <= minimumTime)							
	},
	
	checkCartAndAddExpediteFee: function() {
		new Ajax.Request('/ajaxcart.asp', {
			method: 'post',
			evalJSON: true,
			sanitizeJSON: true,
			onComplete: function(transport) {
				var addExpediteFee = true;
				try {
					/*If the ajax cart returned, check if it's in the cart*/
					if (transport.status == 200) {
						var cartJSON = transport.responseText.evalJSON();
						cartJSON.Products.each(function(cartItem) {
							if (addExpediteFee) {
								addExpediteFee = (cartItem.ProductCode.toLowerCase() != this.Settings.EXPEDITE_FEE_PRODUCTCODE.toLowerCase())
							}
						}.bind(this));
					}
				} catch(e) {/*Ignore*/}
				
				/* Add expedite fee if missing */
				if (addExpediteFee) {
					if (confirm(this.Settings.EXPEDITE_FEE_MESSAGE)) {
						this.addExpediteFeeToCart();
					} else {
						this.resetFormActionChanges();
					} 
				} else {
					if (this.processTourValidation) {
						this.validateTours();
					} else {
						this.manualFormSubmission();
					}
					
				}
			}.bind(this)
		});
	},
	
	addExpediteFeeToCart: function() {
		var params = new Hash();
		params.set(this.Settings.EXPEDITE_FEE_PRODUCT_OPTION_NAME, this.Settings.EXPEDITE_FEE_PRODUCT_OPTION_VALUE);
		params.set('productcode', this.Settings.EXPEDITE_FEE_PRODUCTCODE);
		params.set('returnto', '/shoppingcart.asp');
		params.set('replacecartid', '');
		params.set('e', '');
		params.set('btnaddtocart.x', 0);
		params.set('btnaddtocart.y', 0);
		
		new Ajax.Request('/productdetails.asp?productcode=' + this.Settings.EXPEDITE_FEE_PRODUCTCODE, {
			method: 'post',
			evalJSON: false,
			sanitizeJSON: false,
			parameters: params,
			onSuccess: function(transport) {
				alert(this.Settings.EXPEDITE_FEE_SUCCESS_MESSAGE);
				
				if (this.PageType.Checkout) {
					window.location.replace(window.location.href);
				}
			}.bind(this), 
			onFailure: function(transport) {
				alert(this.Settings.EXPEDITE_FEE_FAILURE_MESSAGE);
				if(this.PageType.Checkout) {
					this.manualFormSubmission();
				}
			}.bind(this)
		});
	},
	
	validate: function(event) {
		if (event != undefined && event != null) {
			this.SubmitEvent = event;
			
			/* Already stopped, quit */
			if (event.stopped) {
				return;
			}
			
			if (this.PageType.Checkout) {
				/* Do not process anything if this isn't an order submission */
				try {
					if (event.explicitOriginalTarget.readAttribute('name').toLowerCase() != 'btnsubmitorder') {
						return;
					}
				} catch(e){/*Ignore*/}
			}
			
			/* Stop event! */
			Event.stop(event);
		}
		
		/* Check Expedite Fee before bothering to validate tours */
		try {
			this.getCruiseSelectionFromCookie();
		
			/* Handle cruise selection */
			if (this.PageType.Checkout) {
				/* this requires the CruiseCheckout prototype class object defined in checkout.js */
				if (typeof CruiseCheckout != 'undefined' && typeof CruiseCheckoutObject != 'undefined' && typeof CruiseCheckoutObject.selection != 'undefined') {
					/* Check against minimum time before tour */
					try {
						if (!(CruiseCheckoutObject.arrivalElement == null || Object.isUndefined(CruiseCheckoutObject.arrivalElement) || CruiseCheckoutObject.arrivalElement.value.blank())) {		
							/* Issue warning */
							if (this.expediteFeeRequired(CruiseCheckoutObject.arrivalElement.value, CruiseCheckoutObject.selection.MINIMUM_TIME_BEFORE_SHIP_DEPARTURE)) {
								this.checkCartAndAddExpediteFee();
								return;
							}
						}
					} catch(e) {/*Ignore*/}
				}
				
				/* Check for hotel or other, if so, process form */
				if (this.shipId < 1) {
					this.manualFormSubmission();	
					return;
				}
				
				/* Validate Tours */
				if (this.processTourValidation) {
					this.validateTours();
				} else {
					this.manualFormSubmission();
				}
			} else {
				this.validateTours();
			}
		} catch(e) {
			this.validateTours();
		};
	},
	
	validateTours: function() {		
		try {
			var tours = this.ValidatorObject.getTourInformation();

			/* Must have at least one tour to validate */
			if (tours.length < 1) {
				this.manualFormSubmission();
				return;
			}

			/* Ajax out the info, and then do this based on result */
			new Ajax.Request(this.Settings.VALIDATE_ITINERARY_URL, {
				method: 'get',
				evalJSON: false,
				sanitizeJSON: false,
				parameters: {
					'shipId': this.shipId,
					'arrival': this.arrival,
					'nights': this.nights, 
					'tours': tours.uniq()
				},
				onSuccess: function(transport) {
					var valid = true; /* Default to true in case of errors */
					var offendingTourName = '';
					try {
						if (transport.responseText != undefined && transport.responseText != null) {
							if (transport.responseText.toUpperCase() == 'TRUE' || transport.responseText == '') {
								valid = true;
							} else {
								valid = false;
								offendingTourName = transport.responseText;
							} 
						}		
										
						/* Handle invalid itinerary */
						if (!valid && offendingTourName != '') {
							if (confirm(this.Settings.WARNING_MESSAGE_TEMPLATE.evaluate({tourName: offendingTourName}))) {
								/* Set the cookie, they've been warned for this itinerary selection */
								deleteCookie(this.Settings.WARNING_COOKIE_NAME);
								addCookie(this.Settings.WARNING_COOKIE_NAME, this.WarningCookieValue);		
								
								this.manualFormSubmission();
							} else {				
								/* Checkout page has a special condition */
								if (this.PageType.Checkout) {
									/* Clear last form submit date */
									this.resetFormActionChanges();
								}
							}
						} else {		
							this.manualFormSubmission();
						}
					} catch(e) {/*Ignore*/}
				}.bind(this),
				onFailure: function(transport) {
					try {
						this.manualFormSubmission();	
					} catch(e) {/*Ignore*/}
				}.bind(this)
			});
		} catch(e) {
			this.manualFormSubmission();
		}
	},
	
	resetFormActionChanges: function() {
		/* Clear last form submit date */
		$('last-form-submit-date').writeAttribute({'value': ''});
		$('last-form-submit-date').value = '';
		
		/* Reset the place order button */
		this.ValidatorObject.submitButton.writeAttribute({src: this.Settings.SUBMIT_ORDER_IMG_SRC});
	},
	
	getCruiseSelectionFromCookie: function() {
		var cookieVal = null;
		
		cookieVal = $H(unescape(getCookieValue(this.Settings.COOKIE_NAME)).evalJSON());	
			
		this.shipId = cookieVal.get('shipId');
		this.arrival = cookieVal.get('arrival');
		this.nights = cookieVal.get('nights');

		/* Set warning cookie value */
		this.WarningCookieValue = this.Settings.WARNING_COOKIE_VALUE_TEMPLATE.evaluate({
			shipId: this.shipId,
			startDate: new Date(this.arrival).valueOf(),
			nights: this.nights
		});
	},
	
	manualFormSubmission: function() {
		/* Process the form if this is a bundle */
		if (typeof ProductBundles != 'undefined') {
			ProductBundles.OptionForm.processForm(this.SubmitEvent);
		} else {
			var form = this.ValidatorObject.form;
			
			/* Cart page has a special condition */
			if (this.PageType.Cart) {
				form = this.ValidatorObject.submitButton.up('form');	
			}
			
			//Must include this to manually submit form
			form.insert(new Element('input', {type: 'hidden', name: this.ValidatorObject.submitButton.readAttribute('name') + '.x', value: '0'}));
			form.insert(new Element('input', {type: 'hidden', name: this.ValidatorObject.submitButton.readAttribute('name') + '.y', value: '0'}));
	
			//Force the form submission
			form.submit();	
		}
	}, 
	
	getProductCodeFromURL: function(url) {
		var matches = null;
		
		/* Make sure we do not have a null */
		if(url == null) {
			return null;
		}
		
		/* Check non-SEO URL */
		matches = url.match(/.*[\?|&]ProductCode=([^&;]*)/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
		
		/* Check SEO URL */
		matches = url.match(/[_-]p\/(.+)\.htm/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
	
		/* No product code available */
		return null;
	}
});
try {
	ItineraryValidatorObject = new ItineraryValidator();
} catch(e) {/*Ignore*/}

var CartItineraryValidator = Class.create({
	initialize: function() {
		/* Initialize this */
		this.cartItems = new Array();
		this.tours = new Array();
		this.form = $$('form[name="form"], form[name="OnePageCheckoutForm"]').first();
		this.submitButton = $$('input[name="btn_checkout_guest"], input[name="btnSubmitOrder"]').first();
		
		/* Double check form exists, and button to observe exists */
		if (this.form == undefined || this.form == null || this.submitButton == undefined || this.submitButton == null) {
			return;
		}
		try {		
			/* Get cart items */
			if (this.form.readAttribute('name') == "form") { /* Cart page*/
				this.getCartItems();
			} else if (this.form.readAttribute('name') == "OnePageCheckoutForm") { /* Checkout page*/
				this.getCheckoutCartItems();
			}
		} catch(e) {/*Ignore*/}
	}, 
	
	getCartItems: function() {
		var anchors = this.form.select('a[href*="ProductDetails.asp?"],  a[href*="productdetails.asp?"], a[href*="-p/"], a[href*="_p/"], a[href*="-P/"], a[href*="_P/"]');
		anchors.each(function(anchor) {
			var cartItem = {productCode:null,year:null,month:null,day:null,time:null};
			var productOptionContainer = anchor.up('font');
			var productCode = this.getProductCodeFromURL(anchor.readAttribute('href'));
			
			/* Get product code or quit */
			if (productCode == null) {
				return;
			} else {
				cartItem.productCode = productCode;
			}
			
			/* Get product options to parse */
			if (productOptionContainer != undefined && productOptionContainer != null) {
				var options = null;
				var matches = null;
				
				/* Parse out option chunks */
				options = productOptionContainer.innerHTML.match(/(\[.*\:.*\])/i).first();
				if (options != undefined && options != null) {
					options = options.replace(/\]\[/g, '|');
					options = options.replace(/[\[\]]/g, '');
					options = options.split('|')
					
					/* Split chunks and get values */
					options.each(function(option){
						var pair = option.split(':');
						
						/* Option should split into either two  parts or three (time)*/
						if (pair.length > 1 && pair.length <= 3 && pair[0].blank()) {
							return;
						}
						
						/* Check year */
						if (pair[0].toLowerCase().indexOf('year') != -1) {
							cartItem.year = pair[1];
						} /* Check month */
						else if (pair[0].toLowerCase().indexOf('month') != -1) {
							cartItem.month = pair[1];
						} /* Check day */
						else if (pair[0].toLowerCase().indexOf('day') != -1) {
							cartItem.day = pair[1];
						} /* Check time, if the length of the split array isn't 3, this isn't a parseable time */
						else if (pair[0].toLowerCase().indexOf('time') != -1 && pair.length == 3 ) {
							cartItem.time = pair[1] + ":" + pair[2]; 
						}
					}.bind(this));
				}
			}
			/* Add to list */
			this.cartItems.push(cartItem);
		}.bind(this));
	},
	
	getCheckoutCartItems: function() {
		var products = new Array();
		var productCodeTable = $$('#span_Shopping_Cart_UnEditable table table').first();
		var productRows = (productCodeTable == undefined || null ? new Array() : productCodeTable.select('tr'));
		
		for(index = 1; index < productRows.length; index++){
			var cartItem = {productCode:null,year:null,month:null,day:null,time:null};
			var productOptionContainer = $('Quantity' + index);
			var productCodeContainer = productRows[index].down('td');
			
			/* Get product code or quit */
			if (productCodeContainer == undefined || productCodeContainer == null 
			|| productOptionContainer == undefined || productOptionContainer == null) {
				continue;
			}
			
			/* Assign product code */
			cartItem.productCode = productCodeContainer.innerHTML.strip();
			
			productOptionContainer = productOptionContainer.up('td').previous('td').previous('td').down('font');		
			/* Get product options to parse */
			if (productOptionContainer != undefined && productOptionContainer != null) {
				var options = null;
				var matches = null;
				
				/* Parse out option chunks */
				options = productOptionContainer.innerHTML.match(/(\[.*\:.*\])/i).first();
				if (options != undefined && options != null) {
					options = options.replace(/\]\[/g, '|');
					options = options.replace(/[\[\]]/g, '');
					options = options.split('|')
					
					/* Split chunks and get values */
					options.each(function(option){
						var pair = option.split(':');
						
						/* Option should split into either two  parts or three (time)*/
						if (pair.length > 1 && pair.length <= 3 && pair[0].blank()) {
							return;
						}
						
						/* Check year */
						if (pair[0].toLowerCase().indexOf('year') != -1) {
							cartItem.year = pair[1];
						} /* Check month */
						else if (pair[0].toLowerCase().indexOf('month') != -1) {
							cartItem.month = pair[1];
						} /* Check day */
						else if (pair[0].toLowerCase().indexOf('day') != -1) {
							cartItem.day = pair[1];
						} /* Check time, if the length of the split array isn't 3, this isn't a parseable time */
						else if (pair[0].toLowerCase().indexOf('time') != -1 && pair.length == 3 ) {
							cartItem.time = pair[1] + ":" + pair[2]; 
						}
					}.bind(this));
				}
			}
			/* Add to list */
			this.cartItems.push(cartItem);
		}
	},
	
	getTourInformation: function() {
		var tours = new Array;
		
		/* Validate there are cart items */
		if (this.cartItems.length < 1) {
			return tours;
		}
		
		this.cartItems.each(function(item) {
			/* Validate there are essential date items, get date values, add to group */
			if (item.month != null && item.day != null && item.year != null) {
				var month = item.month;
				var day = item.day;
				var year = item.year;
				var time = item.time;
				var tourTime = '';
				
				/* Validate date group element values exist */
				if ((month != null && month.blank()) || (day != null && day.blank()) || (year != null && year.blank())) {
					return;
				}
				
				/* Check time value is parseable, get selected tour date */
				if (time == null || time.indexOf(':') == -1) {
					/* Not a parseble time string */
					tourTime = month.strip() + '|' + day.strip() + '|' + year.strip();
				} else {
					tourTime = month.strip() + '|' + day.strip() + '|' + year.strip() + '|' + time.strip();
				}
				
				tours.push(item.productCode.toUpperCase() + '|' + tourTime);
			} else {
				/* Essential date group elements are missing, nothing to validate. */
				return;
			}
		}.bind(this));
		
		return tours;		
	}, 
	
	getProductCodeFromURL: function(url) {
		var matches = null;
		
		/* Make sure we do not have a null */
		if(url == null) {
			return null;
		}
		
		/* Check non-SEO URL */
		matches = url.match(/.*[\?|&]ProductCode=([^&;]*)/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
		
		/* Check SEO URL */
		matches = url.match(/[_-]p\/(.+)\.htm/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
	
		/* No product code available */
		return null;
	}
});

var ProductItineraryValidator = Class.create({
	initialize: function() {
		/* Initialize this */
		this.dateElementGroups = new Array();
		this.tours = new Array();
		this.form = $$('form[name="MainForm"]').first();
		this.submitButton = $$('input[name="btnaddtocart"]').first();
		
		/* Double check form exists, and button to observe exists */
		if (this.form == undefined || this.form == null || this.submitButton == undefined || this.submitButton == null) {
			/* Check if possibly a bundle product page */
			if (typeof ProductBundles == 'undefined') {
				return;
			} else { 
				/* ProductBundles namespace object variable exists! Assume this is a bundle product page */
				this.form == null;
				this.submitButton == null;
				this.getBundleDateElements();
			}
		} else {
			/* Get product date elements */
			this.getProductDateElements();
		} 
	},
	
	getProductDateElements: function() {
		var productCode = this.getProductCodeFromURL(window.location.href);
		var elements = this.form.select('select');
		var dateElementGroup = {productCode:null,year:null,month:null,day:null,time:null};
		
		/* Verify there's a product code and some selects */
		if (productCode == null || elements.length < 3) {
			return;
		} else {
			dateElementGroup.productCode = productCode;
		}
		
		/* Get and assign date elements */
		elements.each(function(element){
		   var text = element.up('tr').down('td').innerHTML.stripTags();
		
			/* Check year */
			if (text.toLowerCase().indexOf('year') != -1) {
				dateElementGroup.year = element;
			} /* Check month */
			else if (text.toLowerCase().indexOf('month') != -1) {
				dateElementGroup.month = element;
			} /* Check day */
			else if (text.toLowerCase().indexOf('day') != -1) {
				dateElementGroup.day = element;
			} /* Check time */
			else if (text.toLowerCase().indexOf('time') != -1) {
				dateElementGroup.time = element; 
			}
		}.bind(this));
		
		/* Add to list */
		this.dateElementGroups.push(dateElementGroup);
	},
	
	/* *
	 * The class names and assumed html structure the element collection in this function relies on 
	 * is based upon the settings found in the product-bundles/js/configuration.js file, and html structure 
	 * output of the bundle product form as set forth by the funcitons within the ProductBundles 
	 * namespace object variable found in the product-bundles/js/product-bundles.js file.
	 */
	getBundleDateElements: function() {
		/* Check for ProductBundles */
		if (typeof ProductBundles == 'undefined' || ProductBundles == undefined || Object.isUndefined(ProductBundles)) {
			return;
		} 

		/* Check ProductBundles has a form, a button, and some products */
		if (ProductBundles.OptionForm == null || ProductBundles.OptionForm.form == null  
		|| ProductBundles.OptionForm.btnAddToCart == null || ProductBundles.OptionForm.products == null 
		|| ProductBundles.OptionForm.products.keys().length < 1) {
			return;
		} else {
			/* Assign button and form to this */
			this.form = ProductBundles.OptionForm.form;
			this.submitButton = ProductBundles.OptionForm.btnAddToCart;
		}
		
		ProductBundles.OptionForm.products.values().each(function(product){
			var elements = product.optionSection.select('select');
			var dateElementGroup = {productCode:null,year:null,month:null,day:null,time:null};
			
			/* Verify there's a product code and some selects */
			if (product.productCode == null || elements.length < 3) {
				return;
			} else {
				dateElementGroup.productCode = product.productCode;
			}
			
			/* Get and assign date elements */
			elements.each(function(element){
			   var text = element.previous('div.option-category-label').innerHTML.stripTags();
			
				/* Check year */
				if (text.toLowerCase().indexOf('year') != -1) {
					dateElementGroup.year = element;
				} /* Check month */
				else if (text.toLowerCase().indexOf('month') != -1) {
					dateElementGroup.month = element;
				} /* Check day */
				else if (text.toLowerCase().indexOf('day') != -1) {
					dateElementGroup.day = element;
				} /* Check time */
				else if (text.toLowerCase().indexOf('time') != -1) {
					dateElementGroup.time = element; 
				}
			}.bind(this));
			
			/* Add to list */
			this.dateElementGroups.push(dateElementGroup);
		}.bind(this));
		
		/* Now that products are aquired, get tour durations */
	},
	
	getTourInformation: function() {
		var tours = new Array();
		
		/* Validate there are date element groups to process */
		if (this.dateElementGroups.length < 1) {
			return tours;
		}
		
		/* Get date values, assemble date strings */
		this.dateElementGroups.each(function(group) {			
			/* Validate there are essential date items, get date values, add to group */
			if (group.month != null && group.day != null && group.year != null) {
				var month = (group.month.selectedIndex < 0) ? null : group.month.options[group.month.selectedIndex].innerHTML.stripTags();
				var day = (group.day.selectedIndex < 0) ? null : group.day.options[group.day.selectedIndex].innerHTML.stripTags();
				var year = (group.year.selectedIndex < 0) ? null : group.year.options[group.year.selectedIndex].innerHTML.stripTags();
				var time = (group.time.selectedIndex < 0) ? null : group.time.options[group.time.selectedIndex].innerHTML.stripTags();
				var tourTime = '';
				
				/* Validate date group element values exist */
				if ((month == null || month.blank()) || (day == null || day.blank()) || (year == null || year.blank())) {
					return;
				}
				
				/* Check time value is parseable, get selected tour date */
				if (time == null || time.indexOf(':') == -1) {
					/* Not a parseble time string */
					tourTime = month.strip() + '|' + day.strip() + '|' + year.strip();
				} else {
					tourTime = month.strip() + '|' + day.strip() + '|' + year.strip() + '|' + time.strip();
				}
				
				tours.push(group.productCode.toUpperCase() + '|' + tourTime);
			} else {
				/* Essential date group elements are missing, nothing to validate. */
				return;
			}
		}.bind(this));	
		
		return tours;
	}, 
	
	getProductCodeFromURL: function(url) {
		var matches = null;
		
		/* Make sure we do not have a null */
		if(url == null) {
			return null;
		}
		
		/* Check non-SEO URL */
		matches = url.match(/.*[\?|&]ProductCode=([^&;]*)/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
		
		/* Check SEO URL */
		matches = url.match(/[_-]p\/(.+)\.htm/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
	
		/* No product code available */
		return null;
	}
});

/* --- cruises/js/blackout-date-validator.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2011 Brand Labs LLC
 *  
 *--------------------------------------------------------------------------*/

var BlackoutDateValidator = Class.create({
	BLACKOUT_DATE_VALIDATOR_URL: '/v/cruises/ajax-data/blackout-dates-for-products.asp',
	PRODUCT_WARNING_MESSAGE: 'Unfortunately this tour is not available on that date.  To see all tours that are available on the date your ship is in port, please choose "Enter Cruise Information" in the box above, and enter your itinerary information.',
	BUNDLE_WARNING_MESSAGE_TEMPLATE: new Template('Unfortunately #{InvalidToursString} not available on the chosen date.  To see all tours and packages that are available for your specific itinerary, please choose "Enter Cruise Information" in the box above, and enter your itinerary information.'),
	PRODUCT_FORM_ELEMENT_SELECTOR: 'form[name="MainForm"]',
	MONTHS_LIST: $H({'january':'01', 'february':'02', 'march':'03', 'april':'04', 'may':'05', 'june':'06', 'july':'07', 'august':'08', 'september':'09', 'october':'10', 'november':'11', 'december':'12'}),
	
	initialize: function() {
		var productCode = this.getProductCodeFromURL(window.location.href);
		
		/*This*/
		this.SubmitEvent = null;
		this.Form = null;
		this.TourSentIndex = -1;
		this.ProcessingTourDates = false;
		this.DateElementGroups = Array();
		this.UnavailableToursList = Array();
		
		/*Product Detail Pages Only*//*Per Volusion KB*/
		if (productCode != null && (window.location.pathname.toLowerCase() == '/productdetails.asp' || window.location.pathname.toLowerCase().indexOf('-p/') != -1 
		|| window.location.pathname.toLowerCase().indexOf('_p/') != -1)) {
			/*Is itinerary validation going to take place?*/
			if (typeof ItineraryValidatorObject == 'undefined' || !ItineraryValidatorObject.processTourValidation) {
				try {
					if (productCode.toUpperCase().substr(0,4) == 'BNDL') {
						
						/*Observe bundle loaded event*/
						Event.observe(window, 'load', function() {
							/*Wait for the window to load, then set up the bundle loaded trigger*/
							this.addProductBundlesFormLoadedEvent();
							Event.observe($$('body').first(), 'productBundleOptionForm:loaded', this.bundleWindowLoaded.bind(this));
						}.bind(this));
					} else {					
						/*Wait for window load*/
						Event.observe(window, 'load', this.productWindowLoaded.bind(this));
					}
				}catch(e){/*Ignore*/}
			}
		}
								
	},
	
	addProductBundlesFormLoadedEvent: function() {
		/*Fire a custom event when an instance of ProductBundleOptionForm calls "finishLoading"*/
		ProductBundleOptionForm.addMethods({
			finishLoading: function() {
				if (this.form == null || this.body == null) {
					return;
				}	
				try {
					ProductBundles.stopWaiting();
					this.stopWaiting(this.body);
					this.form.show();
					this.body.fire('productBundleOptionForm:loaded', this);
				} catch(e) {/*Ignore*/}
			}
		});
	},
	
	productWindowLoaded: function() {
		var form = $$(this.PRODUCT_FORM_ELEMENT_SELECTOR);
		
		/*Set Form*/
		if (form.first() != undefined) {
			this.Form = form.first();
		}
		
		/*Get date info*/
		this.getProductDateElements();
		
		Event.observe(this.Form, 'submit', this.validateProductTour.bindAsEventListener(this));
	},
	
	bundleWindowLoaded: function() {
			/*Intercept add to cart click in order to validate items before processing bundle form*/
			ProductBundles.OptionForm.btnAddToCart.stopObserving();	
			
			/*Set Form*/
			this.Form = ProductBundles.OptionForm.form;
			
			/*Get product date elements*/
			this.getBundleDateElements();
			
			/*Observe submit*/
			Event.observe(ProductBundles.OptionForm.btnAddToCart, 'click', this.validateBundleTours.bindAsEventListener(this));
	},
	
	validateProductTour: function (event) {
		/*Check event exists and is not stopped*/
		if (event != undefined && event != null && !event.stopped && !this.ProcessingTourDates) {
			this.SubmitEvent = event;
			
			/*Stop event!*/
			Event.stop(event);
						
			/*Validate*/		
			this.TourSentIndex = -1;
			this.ProcessingTourDates = true;
			this.validateTourList();
		}
	},
	
	validateBundleTours: function (event) {
		/*Check event exists and is not stopped*/
		if (event != undefined && event != null && !event.stopped && !this.ProcessingTourDates) {
			this.SubmitEvent = event;
			
			/*Stop event!*/
			Event.stop(event);
						
			/*Validate Tour List*/
			this.TourSentIndex = -1;
			this.ProcessingTourDates = true;
			this.validateTourList();
		}
	},
	
	getProductDateElements: function() {
		var productCode = this.getProductCodeFromURL(window.location.href);
		var elements = this.Form.select('select');
		var dateElementGroup = {productCode:null,year:null,month:null,day:null};
		
		/*Verify there's a product code and some selects*/
		if (productCode == null || elements.length < 3) {
			return;
		} else {
			dateElementGroup.productCode = productCode;
		}
		
		/*Get and assign date elements*/
		elements.each(function(element){
			var text = element.up('tr');
			
			if (text == undefined || text == null) {
				return;
			} else {
				text = text.down('td').innerHTML.stripTags();
			}
		
			/*Check year*/
			if (text.toLowerCase().indexOf('year') != -1) {
				dateElementGroup.year = element;
			} /*Check month*/
			else if (text.toLowerCase().indexOf('month') != -1) {
				dateElementGroup.month = element;
			} /*Check day*/
			else if (text.toLowerCase().indexOf('day') != -1) {
				dateElementGroup.day = element;
			} 
		}.bind(this));
		
		/*Add to list*/
		this.DateElementGroups.push(dateElementGroup);
	},
	
	/**
	 * The class names and assumed html structure the element collection in this function relies on 
	 * is based upon the settings found in the product-bundles/js/configuration.js file, and html structure 
	 * output of the bundle product form as set forth by the funcitons within the ProductBundles 
	 * namespace object variable found in the product-bundles/js/product-bundles.js file.
	*/
	getBundleDateElements: function() {
		/*Check for ProductBundles*/
		if (typeof ProductBundles == 'undefined' || ProductBundles == undefined || Object.isUndefined(ProductBundles)) {
			return;
		} 

		/*Check ProductBundles has a form, a button, and some products*/
		if (ProductBundles.OptionForm == null || ProductBundles.OptionForm.form == null  
		|| ProductBundles.OptionForm.btnAddToCart == null || ProductBundles.OptionForm.products == null 
		|| ProductBundles.OptionForm.products.keys().length < 1) {
			return;
		} else {
			/*Assign button and form to this*/
			this.form = ProductBundles.OptionForm.form;
			this.submitButton = ProductBundles.OptionForm.btnAddToCart;
		}
		
		ProductBundles.OptionForm.products.values().each(function(product){
			var elements = product.optionSection.select('select');
			var dateElementGroup = {productCode:null,year:null,month:null,day:null};
			
			/*Verify there's a product code and some selects*/
			if (product.productCode == null || elements.length < 3) {
				return;
			} else {
				dateElementGroup.productCode = product.productCode;
			}
			
			/*Get and assign date elements*/
			elements.each(function(element){
			   var text = element.previous('div.option-category-label').innerHTML.stripTags();
			
				/*Check year*/
				if (text.toLowerCase().indexOf('year') != -1) {
					dateElementGroup.year = element;
				} /*Check month*/
				else if (text.toLowerCase().indexOf('month') != -1) {
					dateElementGroup.month = element;
				} /*Check day*/
				else if (text.toLowerCase().indexOf('day') != -1) {
					dateElementGroup.day = element;
				} 
			}.bind(this));
			
			/*Add to list*/
			this.DateElementGroups.push(dateElementGroup);
		}.bind(this));
		
	},
	
	validateTourList: function() {
		this.TourSentIndex++;
		
		/*Validate there are date element groups to process*/
		if (this.DateElementGroups.length < 1) {
			/*Continue with add to cart */
			this.processingComplete();
			return;
		}
		
		
		/*Validate Tour*/
		if (this.DateElementGroups.length > this.TourSentIndex) {
			var product = this.DateElementGroups[this.TourSentIndex];
			
			/*Validate there are essential date items, get date values, check for blackout*/
			if (product.month != null && product.day != null && product.year != null) {
				var month = (product.month.selectedIndex < 0) ? null : product.month.options[product.month.selectedIndex].innerHTML.stripTags();
				var day = (product.day.selectedIndex < 0) ? null : product.day.options[product.day.selectedIndex].innerHTML.stripTags();
				var year = (product.year.selectedIndex < 0) ? null : product.year.options[product.year.selectedIndex].innerHTML.stripTags();
				
				/*Validate date group element values exist*/
				if ((month == null || !this.MONTHS_LIST.get(month.toLowerCase().trim())) || (day == null || day.blank() || isNaN(day)) || (year == null || year.blank() || isNaN(year))) {
					/*Next*/
					this.validateTourList();
					return;
				}
				
				/*Clean up Month and Day*/
				month = this.MONTHS_LIST.get(month.toLowerCase().trim());
				day = (day < 10 ? ('0' + day) : day);			
				
				try {
					new Ajax.Request(this.BLACKOUT_DATE_VALIDATOR_URL, {
						method: 'GET',
						parameters: {
							productCode: product.productCode,
							tourDate: year + '-' + month + '-' + day
						},
						evalJSON: false,
						encoding: 'windows-1252',
						onSuccess: function(transport) {
							/*Valid tour date?*/
							try {
								if(transport.responseText.toLowerCase() == 'false'){
									var tour = this.DateElementGroups[this.TourSentIndex];
									if (this.DateElementGroups.length > 1) {
										this.UnavailableToursList.push(ProductBundles.OptionForm.products.get(product.productCode).name);
									} else {
										this.UnavailableToursList.push(this.DateElementGroups[0].productCode);
									}
								}
							} catch(e){/*Ignore*/}
							
							/*Next*/
							this.validateTourList();
						}.bind(this),
						onFailure: function(){ 
							/*Next*/
							this.validateTourList();
						}.bind(this)
					});
					return;
				} catch(e) {/*Ignore*/}
			} else {
				/*Not enough info for check, skip*/
				this.validateTourList();
				return;
			} 
		}
				
		/*Continue with add to cart */
		this.processingComplete();
	}, 
	
	processingComplete: function() {
		/*Mark processing as finished*/
		this.TourSentIndex = -1;
		this.ProcessingTourDates = false;
		
		if (this.UnavailableToursList.length > 0) {
			/*Display message*/
			if (this.DateElementGroups.length > 1) {
				var message =(this.UnavailableToursList.length > 1 ? "the tours \n(": '' ) + this.UnavailableToursList.join(", ") + (this.UnavailableToursList.length > 1 ? ') are': ' is' );
				alert(this.BUNDLE_WARNING_MESSAGE_TEMPLATE.evaluate({InvalidToursString: message}));
			} else {
				alert(this.PRODUCT_WARNING_MESSAGE);
			}
		} else {
			/*Submit*/
			this.manualFormSubmission();
		}
		
		this.UnavailableToursList = new Array();
		
	},
	
	manualFormSubmission: function() {
		/*Process the form if this is a bundle*/
		if (typeof ProductBundles != 'undefined') {
			ProductBundles.OptionForm.processForm(this.SubmitEvent);
		} else if (this.Form != null){
			//Must include this to manually submit form
			this.Form.insert(new Element('input', {type: 'hidden', name: 'btnaddtocart.x', value: '0'}));
			this.Form.insert(new Element('input', {type: 'hidden', name: 'btnaddtocart.y', value: '0'}));
			
			//Force the form submission
			this.Form.submit();
		}
	},
	
	getProductCodeFromURL: function(url) {
		var matches = null;
		
		/*Make sure we do not have a null*/
		if(url == null) {
			return null;
		}
		
		/*Check non-SEO URL*/
		matches = url.match(/.*[\?|&]ProductCode=([^&;]*)/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
		
		/*Check SEO URL*/
		matches = url.match(/[_-]p\/(.+)\.htm/i);	
		if(matches != null && matches.length >= 2) {
			return unescape(matches[1]);
		}
	
		/*No product code available*/
		return null;
	}
});
try {
	var BlackoutDateValidatorObject = new BlackoutDateValidator();
} catch(e){/*Ignore*/}

/* --- vspfiles/templates/ShoreEx/js/custom_field_fix.js --- */ 
jQuery('document').ready(function($){
	try{
		$('#cusFieldHide')[0].nextSibling.nodeValue = '';
	}catch(e){
		//Do Nothing
	}
	
});
/* --- groups/js/group-itinerary.min.js --- */ 
/*--------------------------------------------------------------------------*
 * 
 * Copyright (C) 2011 Brand Labs LLC
 *  
 *--------------------------------------------------------------------------*/
var GroupItinerary=Class.create({GROUP_ID_COOKIE_NAME:'GroupItineraryID',GROUP_ID_ASSIGNMENT_VARIABLE_NAME:'AssignItineraryGroupID',ITINERARY_HEADER_ELEMENT_SELECTOR:'#group_itinerary_header_content a',CONTINUE_SHOPPING_ELEMENT_SELECTOR:'#cart_continueshop a',REWRITE_URL_TEMPLATE:new Template('/group-itinerary-s/#{GroupID}.htm'),initialize:function(){this.RewriteLinks=false;this.GroupID=null;try{this.GroupID=getCookieValue(this.GROUP_ID_COOKIE_NAME);if(eval('typeof '+this.GROUP_ID_ASSIGNMENT_VARIABLE_NAME)!="undefined"){this.GroupID=this.getGroupIDFromURL(window.location.href);eval(this.GROUP_ID_ASSIGNMENT_VARIABLE_NAME+'='+this.GroupID);}
this.RewriteLinks=(this.GroupID!=null&&!isNaN(this.GroupID));if(this.RewriteLinks){document.write('<link type="text/css" rel="stylesheet" href="/v/groups/css/group-itinerary.css" />');addCookie(this.GROUP_ID_COOKIE_NAME,this.GroupID);Event.observe(window,'load',this.rewriteLinks.bind(this));}}catch(e){}},rewriteLinks:function(){var URL=this.REWRITE_URL_TEMPLATE.evaluate({GroupID:this.GroupID});var continueShoppingElement=$$(this.CONTINUE_SHOPPING_ELEMENT_SELECTOR).first();var groupItineraryHeaderElement=$$(this.ITINERARY_HEADER_ELEMENT_SELECTOR).first();if(groupItineraryHeaderElement!=undefined){groupItineraryHeaderElement.writeAttribute({href:URL});}
if(continueShoppingElement!=undefined){continueShoppingElement.writeAttribute({href:URL});}},getGroupIDFromURL:function(url){var matches=null;if(url==null){return null;}
matches=url.match(/\/searchresults\.asp.*[\?|&]cat=(\w+)/i);if(matches!=null&&matches.length>=2){return unescape(matches[1]);}
matches=url.match(/[_|-]s\/(\w+)\.htm/i);if(matches!=null&&matches.length>=2){return unescape(matches[1]);}
return null;}});var GroupItineraryObject=new GroupItinerary();

