﻿/*!************************************************
* Logger
* paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
**************************************************/
//Usage: log('inside coolFunc', this, arguments);
window.log = function () {
    log.history = log.history || [];   //Store logs to an array for reference
    log.history.push(arguments);
    arguments.callee = arguments.callee.caller;
    if (this.console) console.log(Array.prototype.slice.call(arguments));
};
//Make it safe to use console.log always
(function (b) { function c() { } for (var d = "assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","), a; a = d.pop(); ) b[a] = b[a] || c })(window.console = window.console || {});

/*!************************************************
* jQuery Color Animations
* Copyright 2007 John Resig
* Released under the MIT and GPL licenses.
**************************************************/
(function(jQuery){jQuery.each(['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,attr){jQuery.fx.step[attr]=function(fx){if(fx.colorFunction==undefined||fx.state==0){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end);if(fx.start==undefined){fx.start=[255,255,255,0];}else{if(fx.start[3]==undefined)
fx.start[3]=1;if(fx.start[3]==0)
fx.start[0]=fx.start[1]=fx.start[2]=255;}
if(fx.end[3]==undefined)
fx.end[3]=1;fx.colorFunction=(fx.start[3]==1&&fx.end[3]==1?calcRGB:calcRGBa);}
fx.elem.style[attr]=fx.colorFunction();}});var calcRGB=function(){return'rgb('+
Math.max(Math.min(parseInt((this.pos*(this.end[0]-this.start[0]))+this.start[0]),255),0)+','+
Math.max(Math.min(parseInt((this.pos*(this.end[1]-this.start[1]))+this.start[1]),255),0)+','+
Math.max(Math.min(parseInt((this.pos*(this.end[2]-this.start[2]))+this.start[2]),255),0)+')';};
var calcRGBa=function(){return'rgba('+
Math.max(Math.min(parseInt((this.pos*(this.end[0]-this.start[0]))+this.start[0]),255),0)+','+
Math.max(Math.min(parseInt((this.pos*(this.end[1]-this.start[1]))+this.start[1]),255),0)+','+
Math.max(Math.min(parseInt((this.pos*(this.end[2]-this.start[2]))+this.start[2]),255),0)+','+
Math.max(Math.min(parseFloat((this.pos*(this.end[3]-this.start[3]))+this.start[3]),1),0)+')';};
function getRGB(color){var result;if(color&&color.constructor==Array&&color.length>=3)
return color;if(result=/rgba?\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,?\s*((?:[0-9](?:\.[0-9]+)?)?)\s*\)/.exec(color))
return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3]),parseFloat(result[4]||1)];if(result=/rgba?\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,?\s*((?:[0-9](?:\.[0-9]+)?)?)\s*\)/.exec(color))
return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55,parseFloat(result[4]||1)];if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)];if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)];var colorName=jQuery.trim(color).toLowerCase();if(colors[colorName]!=undefined)
return colors[colorName];return[255,255,255,0];}
function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if(color!=''&&color!='transparent'||jQuery.nodeName(elem,"body"))
break;attr="backgroundColor";}while(elem=elem.parentNode);return getRGB(color);};var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]};})(jQuery);

/*!************************************************
* jQuery Background Animations
* @author Alexander Farkas - http://www.protofunc.com/scripts/jquery/backgroundPosition/
* v. 1.21
**************************************************/
 (function($){if(!document.defaultView||!document.defaultView.getComputedStyle){var oldCurCSS=jQuery.curCSS;jQuery.curCSS=function(elem,name,force){if(name==='background-position'){name='backgroundPosition';}
if(name!=='backgroundPosition'||!elem.currentStyle||elem.currentStyle[name]){return oldCurCSS.apply(this,arguments);}
var style=elem.style;if(!force&&style&&style[name]){return style[name];}
return oldCurCSS(elem,'backgroundPositionX',force)+' '+oldCurCSS(elem,'backgroundPositionY',force);};}
var oldAnim=$.fn.animate;$.fn.animate=function(prop){if('background-position'in prop){prop.backgroundPosition=prop['background-position'];delete prop['background-position'];}
if('backgroundPosition'in prop){prop.backgroundPosition='('+prop.backgroundPosition;}
return oldAnim.apply(this,arguments);};function toArray(strg){strg=strg.replace(/left|top/g,'0px');strg=strg.replace(/right|bottom/g,'100%');strg=strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");var res=strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);return[parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];}
$.fx.step.backgroundPosition=function(fx){if(!fx.bgPosReady){var start=$.curCSS(fx.elem,'backgroundPosition');if(!start){start='0px 0px';}
start=toArray(start);fx.start=[start[0],start[2]];var end=toArray(fx.options.curAnim.backgroundPosition);fx.end=[end[0],end[2]];fx.unit=[end[1],end[3]];fx.bgPosReady=true;}
var nowPosX=[];nowPosX[0]=((fx.end[0]-fx.start[0])*fx.pos)+fx.start[0]+fx.unit[0];nowPosX[1]=((fx.end[1]-fx.start[1])*fx.pos)+fx.start[1]+fx.unit[1];fx.elem.style.backgroundPosition=nowPosX[0]+' '+nowPosX[1];};})(jQuery);

/*!************************************************
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 
* Open source under the BSD License. 
* Copyright © 2008 George McGinley Smith
* All rights reserved.
**************************************************/
jQuery.easing['jswing']=jQuery.easing['swing'];jQuery.extend(jQuery.easing,{def:'easeOutQuad',swing:function(x,t,b,c,d){return jQuery.easing[jQuery.easing.def](x,t,b,c,d);},easeInQuad:function(x,t,b,c,d){return c*(t/=d)*t+b;},easeOutQuad:function(x,t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeInOutQuad:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b;},easeInCubic:function(x,t,b,c,d){return c*(t/=d)*t*t+b;},easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b;},easeInOutCubic:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b;},easeInQuart:function(x,t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},easeInOutQuart:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b;},easeInQuint:function(x,t,b,c,d){return c*(t/=d)*t*t*t*t+b;},easeOutQuint:function(x,t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b;},easeInOutQuint:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t*t+b;return c/2*((t-=2)*t*t*t*t+2)+b;},easeInSine:function(x,t,b,c,d){return-c*Math.cos(t/d*(Math.PI/2))+c+b;},easeOutSine:function(x,t,b,c,d){return c*Math.sin(t/d*(Math.PI/2))+b;},easeInOutSine:function(x,t,b,c,d){return-c/2*(Math.cos(Math.PI*t/d)-1)+b;},easeInExpo:function(x,t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b;},easeOutExpo:function(x,t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b;},easeInOutExpo:function(x,t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b;},easeInCirc:function(x,t,b,c,d){return-c*(Math.sqrt(1-(t/=d)*t)-1)+b;},easeOutCirc:function(x,t,b,c,d){return c*Math.sqrt(1-(t=t/d-1)*t)+b;},easeInOutCirc:function(x,t,b,c,d){if((t/=d/2)<1)return-c/2*(Math.sqrt(1-t*t)-1)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b;},easeInElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},easeOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},easeInOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},easeInBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b;},easeOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},easeInOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},easeInBounce:function(x,t,b,c,d){return c-jQuery.easing.easeOutBounce(x,d-t,0,c,d)+b;},easeOutBounce:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;}},easeInOutBounce:function(x,t,b,c,d){if(t<d/2)return jQuery.easing.easeInBounce(x,t*2,0,c,d)*.5+b;return jQuery.easing.easeOutBounce(x,t*2-d,0,c,d)*.5+c*.5+b;}});

/*!************************************************
* Javascript Object Oriented Timer, version 1.0 - http://abcoder.com/javascript/core_javascript/javascript_timer
* Copyright (C) 2008 zp bappi | zpbappi (at) gmail (dot) com
* This script is distributed under the GNU Lesser General Public License (Version 3, 29 June 2007 or later).
**************************************************/
var Timer=function(millis,callback){return this._init(millis,callback);}
Timer.prototype={VERSION:1.0,_init:function(millis,callback){this._interval=1000;this._timer=null;this._cbs=[];this._multipliers=[];this._tickCounts=[];this._canRun=[];this._stoppedThreads=0;this._runOnce=false;this._startedAt=-1;this._pausedAt=-1;if(typeof(millis)=='number')this._interval=millis;this.addCallback(callback);return this;},_preset:function(){this._stoppedThreads=0;this._startedAt=-1;this._pausedAt=-1;for(var i=0;i<this._cbs.length;i++){this._canRun[i]=true;this._tickCounts[i]=0;}},_ticks:function(initInterval){var me=this;for(var i=0;i<this._cbs.length;i++){if(typeof(this._cbs[i])=='function'&&this._canRun[i]){this._tickCounts[i]++;if(this._tickCounts[i]==this._multipliers[i]){this._tickCounts[i]=0;if(this.runOnce()){this._canRun[i]=false;this._stoppedThreads++;}
window.setTimeout(me._cbs[i],0);}}}
if(this.runOnce()&&this._stoppedThreads==this._cbs.length)
this.stop();if(typeof(initInterval)=='number'){this.stop().start(null,true);}},runOnce:function(isRunOnce){if(typeof(isRunOnce)=='undefined')return this._runOnce;else if(typeof(isRunOnce)=='boolean')this._runOnce=isRunOnce;else alert("Invalid argument for runOnce(...).\n\nUsage: runOnce(true | false) /*Default value: false*/\nor, runOnce() to get status");return this;},interval:function(millis){if(typeof(millis)=='undefined')return this._interval;else if(typeof(millis)=='number')this._interval=Math.floor(millis);return this;},stop:function(isPausing){if(this._timer){if(!isPausing)this._pausedAt=-1;try{window.clearInterval(this._timer);}
catch(ex){}
this._timer=null;}
return this;},isStopped:function(){return((this._timer==null)&&!this.isPaused());},start:function(_initialInterval,_withoutPreset){if(this.isPaused())
return this.resume();if(!this.isStopped())
return this;if(!_withoutPreset)
this._preset();var tmpInterval=this._interval;if(typeof(_initialInterval)=='number')tmpInterval=_initialInterval;var me=this;this._timer=window.setInterval(function(){me._ticks(_initialInterval);},tmpInterval);this._startedAt=(new Date()).getTime();this._startedAt-=(this._interval-tmpInterval);return this;},pause:function(){if(this._timer){this._pausedAt=(new Date()).getTime();this.stop(true);}
return this;},isPaused:function(){return(this._pausedAt>=0);},resume:function(){if(this.isPaused()){var tempInterval=this._interval-((this._pausedAt-this._startedAt)%this._interval);this._pausedAt=-1;this.start(tempInterval,true);}
return this;},restart:function(){return this.stop().start();},addCallback:function(callback,N){if(typeof(callback)=='function'){this._cbs.push(callback);if(typeof(N)=='number'){N=Math.floor(N)
this._multipliers.push((N<1?1:N));}
else
this._multipliers.push(1);this._tickCounts.push(0);this._canRun.push(true);}
return this;},clearCallbacks:function(){this._cbs.length=0;this._multipliers.length=0;this._canRun.length=0;this._tickCounts.length=0;this._stoppedThreads=0;return this;}};

/*!************************************************
* calendarPicker - http://bugsvoice.com/applications/bugsVoice/site/test/calendarPickerDemo.jsp
**************************************************/
jQuery.fn.calendarPicker=function(options){if(!options.date){options.date=new Date();}
if(typeof(options.years)=="undefined")
options.years=1;if(typeof(options.months)=="undefined")
options.months=3;if(typeof(options.days)=="undefined")
options.days=4;if(typeof(options.showDayArrows)=="undefined")
options.showDayArrows=true;if(typeof(options.useWheel)=="undefined")
options.useWheel=true;if(typeof(options.callbackDelay)=="undefined")
options.callbackDelay=500;if(typeof(options.monthNames)=="undefined")
options.monthNames=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];if(typeof(options.dayNames)=="undefined")
options.dayNames=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];var calendar={currentDate:options.date};calendar.options=options;var theDiv=this.eq(0);theDiv.addClass("calBox");theDiv.empty();var divYears=$("<div>").addClass("calYear");var divMonths=$("<div>").addClass("calMonth");var divDays=$("<div>").addClass("calDay");theDiv.append(divYears).append(divMonths).append(divDays);calendar.changeDate=function(date,clicked){calendar.currentDate=date;var fillYears=function(date){var year=date.getFullYear();var t=new Date();divYears.empty();var nc=options.years*2+1;var w=parseInt((theDiv.width()-4-(nc)*4)/nc)+"px";for(var i=year-options.years;i<=year+options.years;i++){var d=new Date(date);d.setFullYear(i);var span=$("<span>").addClass("calElement").addClass("calYearElement").attr("millis",d.getTime()).html(i).css("width",w);if(d.getYear()==t.getYear())
span.addClass("today");if(d.getYear()==calendar.currentDate.getYear())
span.addClass("selected");divYears.append(span);}}
var fillMonths=function(date){var month=date.getMonth();var t=new Date();divMonths.empty();var oldday=date.getDay();var nc=options.months*2+1;var w=parseInt((theDiv.width()-4-(nc)*4)/nc)+"px";for(var i=-options.months;i<=options.months;i++){var d=new Date(date);var oldday=d.getDate();d.setMonth(month+i);if(d.getDate()!=oldday){d.setMonth(d.getMonth()-1);d.setDate(28);}
var span=$("<span>").addClass("calElement").addClass("calMonthElement").attr("millis",d.getTime()).html(options.monthNames[d.getMonth()]).css("width",w);if(d.getYear()==t.getYear()&&d.getMonth()==t.getMonth())
span.addClass("today");if(d.getYear()==calendar.currentDate.getYear()&&d.getMonth()==calendar.currentDate.getMonth())
span.addClass("selected");divMonths.append(span);}}
var fillDays=function(date){var day=date.getDate();var t=new Date();divDays.empty();var nc=options.days*2+1;var w=parseInt((theDiv.width()-4-(options.showDayArrows?12:0)-(nc)*4)/(nc-(options.showDayArrows?2:0)))+"px";for(var i=-options.days;i<=options.days;i++){var d=new Date(date);d.setDate(day+i)
var span=$("<span>").addClass("calElement").addClass("calDayElement").attr("millis",d.getTime())
if(i==-options.days&&options.showDayArrows){span.addClass("prev");}else if(i==options.days&&options.showDayArrows){span.addClass("next");}else{span.html("<span class=dayNumber>"+d.getDate()+"</span><br>"+options.dayNames[d.getDay()]).css("width",w);if(d.getYear()==t.getYear()&&d.getMonth()==t.getMonth()&&d.getDate()==t.getDate())
span.addClass("today");if(d.getYear()==calendar.currentDate.getYear()&&d.getMonth()==calendar.currentDate.getMonth()&&d.getDate()==calendar.currentDate.getDate())
span.addClass("selected");}
divDays.append(span);}}
var deferredCallBack=function(){if(typeof(options.callback)=="function"){if(calendar.timer)
clearTimeout(calendar.timer);calendar.timer=setTimeout(function(){options.callback(calendar,clicked);},options.callbackDelay);}}
fillYears(date);fillMonths(date);fillDays(date);deferredCallBack();}
theDiv.click(function(ev){var el=$(ev.target).closest(".calElement");if(el.hasClass("calElement")){var clicked='';if(!el.hasClass('prev')&&!el.hasClass('next')){if(el.hasClass('calYearElement')){clicked='year';}else if(el.hasClass('calMonthElement')){clicked='month';}else if(el.hasClass('calDayElement')){clicked='day';}}
calendar.changeDate(new Date(parseInt(el.attr("millis"))),clicked);}});if($.event.special.mousewheel&&options.useWheel){divYears.mousewheel(function(event,delta){var d=new Date(calendar.currentDate.getTime());d.setFullYear(d.getFullYear()+delta);calendar.changeDate(d);return false;});divMonths.mousewheel(function(event,delta){var d=new Date(calendar.currentDate.getTime());d.setMonth(d.getMonth()+delta);calendar.changeDate(d);return false;});divDays.mousewheel(function(event,delta){var d=new Date(calendar.currentDate.getTime());d.setDate(d.getDate()+delta);calendar.changeDate(d);return false;});}
calendar.changeDate(options.date);return calendar;};

/*!************************************************
* Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. 
* Version: 3.0.2  
* Requires: 1.2.2+
**************************************************/
(function($){var types=['DOMMouseScroll','mousewheel'];$.event.special.mousewheel={setup:function(){if(this.addEventListener)
for(var i=types.length;i;)
this.addEventListener(types[--i],handler,false);else
this.onmousewheel=handler;},teardown:function(){if(this.removeEventListener)
for(var i=types.length;i;)
this.removeEventListener(types[--i],handler,false);else
this.onmousewheel=null;}};$.fn.extend({mousewheel:function(fn){return fn?this.bind("mousewheel",fn):this.trigger("mousewheel");},unmousewheel:function(fn){return this.unbind("mousewheel",fn);}});function handler(event){var args=[].slice.call(arguments,1),delta=0,returnValue=true;event=$.event.fix(event||window.event);event.type="mousewheel";if(event.wheelDelta)delta=event.wheelDelta/120;if(event.detail)delta=-event.detail/3;args.unshift(event,delta);return $.event.handle.apply(this,args);}})(jQuery);

/*!************************************************
* Version: 1.0 Alpha-1 
* Build Date: 13-Nov-2007
* Copyright (c) 2006-2007, Coolite Inc. (http://www.coolite.com/). All rights reserved.
* License: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/. 
* Website: http://www.datejs.com/ or http://www.coolite.com/datejs/
**************************************************/
Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};
Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
if(x.month||x.months){this.addMonths(x.month||x.months);}
if(x.year||x.years){this.addYears(x.year||x.years);}
if(x.day||x.days){this.addDays(x.day||x.days);}
return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
if(!x.second&&x.second!==0){x.second=-1;}
if(!x.minute&&x.minute!==0){x.minute=-1;}
if(!x.hour&&x.hour!==0){x.hour=-1;}
if(!x.day&&x.day!==0){x.day=-1;}
if(!x.month&&x.month!==0){x.month=-1;}
if(!x.year&&x.year!==0){x.year=-1;}
if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
if(x.timezone){this.setTimezone(x.timezone);}
if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};
Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};
(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
break;}
return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
rx.push(r[0]);s=r[1];}
return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
try{r=(px[i].call(this,s));}catch(e){r=null;}
if(r){return r;}}
throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
rx.push(r[0]);s=r[1];}
return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
s=q[1];}
if(!r){throw new $P.Exception(s);}
if(q){throw new $P.Exception(q[1]);}
if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
if(!last&&q[1].length===0){last=true;}
if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
if(rx[1].length<best[1].length){best=rx;}
if(best[1].length===0){break;}}
if(best[0].length===0){return best;}
if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
best[1]=q[1];}
return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
return rx;};Date.Grammar={};Date.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=((s.length==3)?Date.getMonthNumberFromName(s):(Number(s)-1));};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];var now=new Date();this.year=now.getFullYear();this.month=now.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
if(this.now){return new Date();}
var today=Date.today();var method=null;var expression=!!(this.days!=null||this.orient||this.operator);if(expression){var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";gap=(Date.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
if(this.month){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
if(!this.unit){this.unit="day";}
if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
if(this.unit=="week"){this.unit="day";this.value=this.value*7;}
this[this.unit+"s"]=this.value*orient;}
return today.add(this);}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour;}
if(this.weekday&&!this.day){this.day=(today.addDays((Date.getDayNumberFromName(this.weekday)-today.getDay()))).getDate();}
if(this.month&&!this.day){this.day=1;}
return today.set(this);}}};var _=Date.Parsing.Operators,g=Date.Grammar,t=Date.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=Date.CultureInfo.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
fn=_C[keys]=_.any.apply(null,px);}
return fn;};g.ctoken2=function(key){return _.rtoken(Date.CultureInfo.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.mm,g.ss],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^(\+|\-)\s*\d\d\d\d/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[Date.CultureInfo.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw Date.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
return g._start.call({},s);};}());Date._parse=Date.parse;Date.parse=function(s){var r=null;if(!s){return null;}
try{r=Date.Grammar.start.call({},s);}catch(e){return null;}
return((r[1].length===0)?r[0]:null);};Date.getParseFunction=function(fx){var fn=Date.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
return((r[1].length===0)?r[0]:null);};};Date.parseExact=function(s,fx){return Date.getParseFunction(fx)(s);};

/*!************************************************
* navHighlight jQuery plugin
* Based on http://css-tricks.com/jquery-magicline-navigation/
**************************************************/
(function ($) {
    //Define default settings
    var settings = {
        'containerCssClass': 'navHighlight',
        'highlightItemTemplate': '<li class="{0}" />',
        'highlightItemCssClass': 'navHighlightItem',
        'activeItemSelector': 'li.active',
        'animSpeed': 500,
        'defaultHighlightProps': { left: -20, width: 20, opacity: 0 },
        'easingFunc': 'easeOutQuad'
    };

    //Define publicly available methods
    //Available by calling $('instanceSelector').navHighlight('methodName', args);
    var methods = {
        init: function (options) {
            //If options exist, lets merge them with our default settings
            var opts = settings;
            if (options) {
                opts = $.extend({}, settings, options);
            }

            return this.each(function () {
                //Initialise plugin data
                var instance = $(this),
                    data = instance.data('navHighlight');

                //If this instance has already been initialised, destroy it first
                if (typeof data !== 'undefined') {
                    instance.navHighlight('destroy');
                }

                //Setup the container
                instance.addClass(opts.containerCssClass);
                instance.data('navHighlight', {
                    containerCssClass: opts.containerCssClass,
                    highlightItemCssClass: opts.highlightItemCssClass
                });

                //Setup the initial properties of the highlight
                var highlightElem = $(opts.highlightItemTemplate.replace('{0}', opts.highlightItemCssClass));
                instance.append(highlightElem);

                //Append the highlight to the container and set its initial state                
                var activeItem = $(opts.activeItemSelector, instance),
                    initialProps = getAnimProperties(activeItem, opts.defaultHighlightProps);
                highlightItem(highlightElem, initialProps, 0, opts.easingFunc);
                
                //Animate the highlight on hover
                var items = $('li', instance);
                items.bind('mouseover.navHighlight', function() {
                    var itemProps = getAnimProperties($(this), opts.defaultHighlightProps);
                    highlightItem(highlightElem, itemProps, opts.speed, opts.easingFunc);
                });
                items.bind('mouseout.navHighlight', function() {
                    highlightItem(highlightElem, initialProps, opts.speed, opts.easingFunc);  
                });
            });
        },
        destroy: function () {
            return this.each(function () {
                //Get plugin data
                var instance = $(this),
                    data = instance.data('navHighlight');

                //Apply plugin specific instance destruction code
                instance.remove('.' + data.highlightItemCssClass);
                instance.removeClass(data.containerCssClass);

                //Unbind any events and remove data
                var items = $('li', instance);
                items.unbind('.navHighlight');
                instance.removeData('navHighlight');
            })
        }
    };

    //Private functions
    function getAnimProperties(item, defaultProps) {
        var props = $.extend({}, defaultProps);
        if (item.length > 0) {
            props.left = item.position().left;
            props.width = item.outerWidth(true);
            props.opacity = 1;
        }
        return props;
    };

    function highlightItem(highlightElem, properties, speed, easingFunc) {
        highlightElem.stop().animate(properties, speed, easingFunc);
    };

    //Add the plugin to the jQuery fn object
    $.fn.navHighlight = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        else {
            $.error('Method ' + method + ' does not exist on jQuery.navHighlight');
        }
    };
})(jQuery);

/*!************************************************
* slideshow jQuery plugin
**************************************************/
(function ($) {
    //Define default settings
    var settings = {
        'containerCssClass': 'slideshow',
        'itemCssClass': 'slideshowItem',
        'toggleCssClass': 'slideshowToggle',
        'infoCssClass': 'slideshowInfo',
        'activeItemCssClass': 'slideshowItemActive',
        'easingFunc': 'easeOutQuad',
        'speed': 800,
        'toggleSpeed': 400,
        'autoTransition': true,
        'autoTransitionInterval': 2200,
        'autoTransitionMaxLoops': 0
    };

    //Define publicly available methods
    //Availble by calling $('instanceSelector').slideshow('methodName', args);
    var methods = {
        init: function (options) {
            //If options exist, lets merge them with our default settings
            var opts = settings;
            if (options) {
                opts = $.extend({}, settings, options);
            }

            return this.each(function () {
                //Initialise plugin data
                var instance = $(this),
                    data = instance.data('slideshow');

                //Setup the container
                instance.addClass(opts.containerCssClass);
                instance.data('slideshow', {
                    opts: opts
                });

                //Setup the items
                var items = $('.' + opts.itemCssClass, instance);
                items.each(function() {
                    var item = $(this);

                    //Set the item data
                    var toggle = $('.' + opts.toggleCssClass, item);
                    item.data('slideshow', {
                        container: instance,
                        toggle: toggle,
                        info: $('.' + opts.infoCssClass, item),
                        opts: opts
                    });

                    setInitialItemProperties(item);

                    //Setup the click event to transition the slides
                    toggle.bind('click.slideshow', function() {
                        instance.slideshow('goToSlide', items.index(item));
                        //return false;
                    });
                });

                //Setup the auto transition
                if (opts.autoTransition) {
                    instance.slideshow('startAutoTransition');
                }
            });
        },
        goToSlide: function (index) {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow');

                //Check that the requested index is valid
                var items = $('.' + data.opts.itemCssClass, instance);
                if (index < 0 || (index + 1) > items.length) return;                    

                //Make sure that the requested item is not already active
                var activeItem = $('.' + data.opts.activeItemCssClass, instance);
                if (activeItem.length > 0) {
                    var activeItemIndex = items.index(activeItem);
                    if (activeItemIndex === index) return;
                }
                
                //Do the transition
                var newItem = $(items[index]);
                doTransition(activeItem, newItem);
            })
        },
        goToNextSlide: function () {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow');

                //Get the index of the current active slide
                var items = $('.' + data.opts.itemCssClass, instance),
                    activeItem = $('.' + data.opts.activeItemCssClass, instance),
                    activeItemIndex = items.index(activeItem);

                //Get the index of the next item or if the active item is the last item then the first item in the list and do the transition
                var nextItemIndex = ((activeItemIndex + 1) >= items.length) ? 0 : (activeItemIndex + 1);
                instance.slideshow('goToSlide', nextItemIndex);
            })
        },
        goToPrevSlide: function () {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow');

                //Get the index of the current active slide
                var items = $('.' + data.opts.itemCssClass, instance),
                    activeItem = $('.' + data.opts.activeItemCssClass, instance),
                    activeItemIndex = items.index(activeItem);

                //Get the index of the prev item or if the active item is the first item then the last item in the list and do the transition
                var prevItemIndex = (activeItemIndex == 0) ? (items.length - 1) : (activeItemIndex - 1);
                instance.slideshow('goToSlide', prevItemIndex);
            })
        },
        startAutoTransition: function () {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow'),
                    items = $('.' + data.opts.itemCssClass, instance);

                //Check we don't already have a timer and if so, remove it
                if (data.timerInfo) {
                    instance.slideshow('stopAutoTransition');
                }

                //Setup the timer
                var ct = 0;
                var timer = new Timer(data.opts.autoTransitionInterval, function() { doAutoTransition(instance); });
                instance.data('slideshow', {
                    opts: data.opts,
                    timerInfo: {
                        ct: ct,
                        timer: timer,
                        itemCt: items.length
                    }
                });

                //Setup the timer to pause and resume on mouseover / mouseout
                instance.bind('mouseover.slideshow', function() {
                    instance.slideshow('pauseAutoTransition');
                });
                instance.bind('mouseout.slideshow', function() {
                    instance.slideshow('resumeAutoTransition');
                });

                //Start the timer
                timer.start();
            })
        },
        stopAutoTransition: function () {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow'),
                    timerInfo = data.timerInfo;

                if (timerInfo) {
                    timerInfo.timer.stop();
                    instance.data('slideshow', {
                        opts: data.opts
                    });
                }
            });
        },
        pauseAutoTransition: function () {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow'),
                    timerInfo = data.timerInfo;

                if (timerInfo) {
                    if (!timerInfo.timer.isPaused()) {
                        timerInfo.timer.pause();
                    }
                }
            });
        },
        resumeAutoTransition: function () {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('slideshow'),
                    timerInfo = data.timerInfo;
                    
                if (timerInfo) {
                    if (timerInfo.timer.isPaused()) {
                        timerInfo.timer.resume();
                    }
                }
            });
        }
    };

    //Private functions
    function setInitialItemProperties(item) {
        var itemData = item.data('slideshow');

        //If this isn't currently active, set the info to be opaque
        if (!item.hasClass(itemData.opts.activeItemCssClass)) {
            itemData.info.css({ opacity: 0 });    
            itemData.toggle.css({ 'background-position': '50% 100%' });
        }
        else {            
            itemData.toggle.css({ 'background-position': '50% 0' });
        }

        //Add animation to the toggle inner
        var toggleInner = $('.inner', itemData.toggle),
            toggleLink = $('a', toggleInner),
            toggleImg = $('img', toggleInner),
            toggleText = $('p', toggleLink),
            toggleSlideshow = $('.slideshowInfo', itemData.container),
            toggleHeroText = $('p', toggleSlideshow),
            initialHeight = toggleText.outerHeight();

        //Setup the animation on the image
        toggleInner.bind('mouseover.slideshow', function() {
            if (!item.hasClass(itemData.opts.activeItemCssClass)) {
                toggleImg.stop().animate({ opacity: 1 }, itemData.opts.speed, itemData.opts.easingFunc);
            }
        });
        toggleInner.bind('mouseout.slideshow', function() {
            if (!item.hasClass(itemData.opts.activeItemCssClass)) {
                toggleImg.stop().animate({ opacity: 0.5 }, itemData.opts.speed, itemData.opts.easingFunc);
            }
        });

        //Setup the animation on the text
        toggleText.css({ height:  0, minHeight: 0 });
        toggleLink.bind('mouseover.slideshow', function() {
            toggleText.stop().animate({ height: initialHeight }, itemData.opts.toggleSpeed, itemData.opts.easingFunc);
        });
        toggleLink.bind('mouseout.slideshow', function() {
            toggleText.stop().animate({ height: 0 }, itemData.opts.toggleSpeed, itemData.opts.easingFunc);
        });

        //Setup the animation on the hero text
        toggleHeroText.css({ height:  0, minHeight: 0 });
        toggleSlideshow.bind('mouseover.slideshow', function() {
            toggleHeroText.stop().animate({ height: 25, paddingTop: 6 }, itemData.opts.toggleSpeed, itemData.opts.easingFunc);
        });
        toggleSlideshow.bind('mouseout.slideshow', function() {
            toggleHeroText.stop().animate({ height: 0, paddingTop: 0 }, itemData.opts.toggleSpeed, itemData.opts.easingFunc);
        });
    };

    function doTransition(activeItem, newItem) {
        var activeItemData = activeItem.data('slideshow'),
            newItemData = newItem.data('slideshow'),
            opts = newItemData.opts;

        //Switch the active class
        activeItem.removeClass(opts.activeItemCssClass);
        newItem.addClass(opts.activeItemCssClass);

        //Animate the toggles
        activeItemData.toggle.stop().animate(
            { backgroundPosition: '50% 100%' },
            opts.speed,
            opts.easingFunc
        );
        newItemData.toggle.stop().animate(
            { backgroundPosition: '50% 0' },
            opts.speed,
            opts.easingFunc
        );

        //Animate the toggle images
        $('.inner img', activeItemData.toggle).stop().animate({ opacity: 0.5 }, opts.speed, opts.easingFunc);
        $('.inner img', newItemData.toggle).stop().animate({ opacity: 1 }, opts.speed, opts.easingFunc);

        //Animate the infos
        activeItemData.info.stop().animate(
            { opacity: 0 },
            opts.speed,
            opts.easingFunc
        );
        newItemData.info.stop().animate(
            { opacity: 1 },
            opts.speed,
            opts.easingFunc
        );
    };

    function doAutoTransition(instance) {
        var data = instance.data('slideshow'),
            timerInfo = data.timerInfo;

        instance.slideshow('goToNextSlide');

        if (data.opts.autoTransitionMaxLoops > 0) {
            var ct = timerInfo.ct + 1;
            if ((ct / timerInfo.itemCt) >= data.opts.autoTransitionMaxLoops) {
                instance.slideshow('stopAutoTransition');
            }
        }
    };

    //Add the plugin to the jQuery fn object
    $.fn.slideshow = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        else {
            $.error('Method ' + method + ' does not exist on jQuery.slideshow');
        }
    };
})(jQuery);

/*!************************************************
* storyPanels jQuery plugin
**************************************************/
(function ($) {
    //Define default settings
    var settings = {
        'containerCssClass': 'storyPanels',
        'tabCssClass': 'tab',
        'activeTabCssClass': 'active',
        'panelContainerCssClass': 'storyPanelsContainer',
        'panelCssClass': 'storyPanel',
        'panelWrapCssClass': 'storyPanelWrap',
        'easingFunc': 'easeOutQuad',
        'speed': 800
    };

    //Define publicly available methods
    //Availble by calling $('instanceSelector').storyPanels('methodName', args);
    var methods = {
        init: function (options) {
            //If options exist, lets merge them with our default settings
            var opts = settings;
            if (options) {
                opts = $.extend({}, settings, options);
            }

            return this.each(function () {
                //Initialise plugin data
                var instance = $(this);

                //Setup the container
                instance.addClass(opts.containerCssClass);
                instance.data('storyPanels', {
                    opts: opts
                });

                //Setup the panels
                var panelContainer = $('.' + opts.panelContainerCssClass, instance),
                    panelWrap = $('<div class="' + opts.panelWrapCssClass + '" />'),
                    panels = $('.' + opts.panelCssClass, panelContainer),
                    tabs = $('.' + opts.tabCssClass, instance),
                    activeTab = tabs.filter('.' + opts.activeTabCssClass),
                    activeIndex = tabs.index(activeTab),
                    panelWidth = $(panels[0]).outerWidth(true),
                    activePanel = $(panels[activeIndex]),
                    activePanelHeight = activePanel.outerHeight(true); 
                    
                //Wrap the panels in another div that we will use to animate
                //We make the container a viewport for the wrap, which in turn acts as a strip that we will animate to go between panels
                panelContainer.append(panelWrap);
                panels.detach().appendTo(panelWrap);                           
                panelContainer.css({ position: 'relative', width: panelWidth, height: activePanelHeight, overflow: 'hidden' });
                panelWrap.css({ position: 'absolute', top: 0, left: 0, width: (panelWidth * panels.length) });
                panels.css({ float: 'left' });

                //Setup the tabs so they navigate between panels
                tabs.each(function() {
                    var tab = $(this),
                        tabIndex = tabs.index(tab);

                    //Add the tab data
                    tab.data('storyPanels', {
                        index: tabIndex,
                        panelLeft: -(tabIndex * panelWidth)
                    });

                    //Setup the tab images
                    var tabImg = $('img', tab);
                    tab.bind('mouseover.storyPanels', function() {
                        if (!tab.hasClass(opts.activeTabCssClass)) {
                            tabImg.stop().animate({ opacity: 1 }, opts.speed, opts.easingFunc);
                        }
                    });
                    tab.bind('mouseout.storyPanels', function() {
                        if (!tab.hasClass(opts.activeTabCssClass)) {
                            tabImg.stop().animate({ opacity: 0.5 }, opts.speed, opts.easingFunc);
                        }
                    });
                    if (!tab.hasClass(opts.activeTabCssClass)) {
                        tabImg.css({ opacity: 0.5 });
                    }

                    //Bind a click event to change the active panel
                    var tabLinks = $('a', tab);
                    tabLinks.bind('click.storyPanels', function() {
                        instance.storyPanels('goToPanel', tabIndex);
                        return false;
                    });
                });
            });
        },
        goToPanel: function (index) {
            return this.each(function () {
                var instance = $(this),
                    data = instance.data('storyPanels'),
                    tabs = $('.' + data.opts.tabCssClass, instance),
                    activeTab = tabs.filter('.' + data.opts.activeTabCssClass),
                    activeTabImg = $('a.imgLink img', activeTab),
                    newTab = $(tabs[index]),
                    newTabData = newTab.data('storyPanels'),
                    newTabImg = $('a.imgLink img', newTab),
                    panelContainer = $('.' + data.opts.panelContainerCssClass, instance),
                    panelWrap = $('.' + data.opts.panelWrapCssClass, panelContainer),
                    panels = $('.' + data.opts.panelCssClass, panelContainer),
                    newPanel = $(panels[index]);

                activeTab.removeClass(data.opts.activeTabCssClass);
                activeTabImg.stop().animate({ opacity: 0.5 }, data.opts.speed, data.opts.easingFunc);
                newTab.addClass(data.opts.activeTabCssClass);
                newTabImg.stop().animate({ opacity: 1 }, data.opts.speed, data.opts.easingFunc);
                panelContainer.stop().animate({ height: newPanel.outerHeight(true) }, data.opts.speed, data.opts.easingFunc);
                panelWrap.stop().animate({ left: newTabData.panelLeft + 'px' }, data.opts.speed, data.opts.easingFunc);
            })
        }
    };

    //Private functions

    //Add the plugin to the jQuery fn object
    $.fn.storyPanels = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        else {
            $.error('Method ' + method + ' does not exist on jQuery.storyPanels');
        }
    };
})(jQuery);

/*!************************************************
* datePicker jQuery plugin
**************************************************/
(function ($) {
    //Define default settings
    var settings = {
        'inputCssClass': 'datePickerInput',
        'launcherCssClass': 'datePickerLauncher',
        'calCssClass': 'datePickerCal',
        'useWheel': true,
        'callbackDelay': 500,
        'years': 1,
        'months': 3,
        'days': 4,
        'showDayArrows': false
    };

    //Define publicly available methods
    //Availble by calling $('instanceSelector').datePicker('methodName', args);
    var methods = {
        init: function (options) {
            //If options exist, lets merge them with our default settings
            var opts = settings;
            if (options) {
                opts = $.extend({}, settings, options);
            }

            return this.each(function () {
                //Initialise plugin data
                var instance = $(this),
                    input = $('.' + opts.inputCssClass, instance);

                var launcher = $('<a href="#" class="' + opts.launcherCssClass + '">Pick a date</a>');
                instance.append(launcher);

                launcher.bind('click.datePicker', function() {
                    var cal = $('.' + opts.calCssClass, instance);
                    if (cal.length == 0) {
                        cal = $('<div class="' + opts.calCssClass + '" />');
                        instance.append(cal);

                        var date = new Date();
                        if (input.val().length > 0) {
                            date = Date.parse(input.val());
                            if (date === null) {
                                //Couldn't parse date so reset
                                input.val('');
                                date = new Date();
                            }
                        }

                        cal.css({ top: (input.outerHeight(true) + 2) });
                        cal.calendarPicker({
                            date: date,
                            useWheel: opts.useWheel,
                            callbackDelay: opts.callbackDelay,
                            years: opts.years,
                            months: opts.months,
                            days: opts.days,
                            showDayArrows: opts.showDayArrows,
                            callback: function (calendar, clicked) {
                                input.val(calendar.currentDate.toString('dd/MM/yyyy'));
                                if (clicked === 'day') {
                                    cal.remove();
                                }
                            }
                        });
                    }
                    else {
                        cal.remove();
                    }
                    return false;
                });
            });
        }
    };

    //Private functions

    //Add the plugin to the jQuery fn object
    $.fn.datePicker = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        else {
            $.error('Method ' + method + ' does not exist on jQuery.datePicker');
        }
    };
})(jQuery);

/*!************************************************
* jwVideo jQuery plugin
**************************************************/
(function ($) {
    //Define default settings
    var settings = {
        'jwPlayerBasePath': '/resources/flash/jwplayer/',
        'skin': '',
        'flashVer': '9'
    };

    //Define publicly available methods
    //Availble by calling $('instanceSelector').jwVideo('methodName', args);
    var methods = {
        init: function (options) {
            //If options exist, lets merge them with our default settings
            var opts = settings;
            if (options) {
                opts = $.extend({}, settings, options);
            }

            return this.each(function () {
                //Initialise plugin data
                var instance = $(this),
                    placeholder = $('img', instance),
                    videoUrl = instance.attr('href');

                var installedFlashVer = swfobject.getFlashPlayerVersion();
                if (installedFlashVer.major >= opts.flashVer) {
                    showFlashVideoPlayer(instance, placeholder, opts);
                }
                else {
                    //Check if we can display the video via html5
                    if (Modernizr.video && Modernizr.video.h264 && endsWith(videoUrl, '.mp4')) {
                        showHTMLVideoPlayer(instance, placeholder, opts);
                    }
                }
            });
        }
    };

    //Private functions
    function showFlashVideoPlayer(instance, placeholder, opts) {
        var file = instance.attr('href');
        var image = placeholder.attr('src');
        var skin = opts.skin;
        if (skin.length > 0) {
            skin = opts.jwPlayerBasePath + skin + '.zip';
        }
        var id = instance.attr('id');
        var videoId = id + '_JWVideo';
        var playerUrl = opts.jwPlayerBasePath + 'player.swf';
        var width = instance.width();
        var height = instance.height();

        var flashvars = {
            'file': file,
            'image': image,
            'skin': skin
        };

        var params = {
            'allowfullscreen': 'true',
            'allowscriptaccess': 'always'
        };
 
        var attributes = {
            'id': videoId,
            'name': videoId
        };

        swfobject.embedSWF(playerUrl, id, width, height, '9', 'false', flashvars, params, attributes);
    };

    function showHTMLVideoPlayer(instance, placeholder, opts) {
        var id = instance.attr('id');
        var videoId = id + '_JWVideo';
        var width = instance.width();
        var height = instance.height();
        var poster = placeholder.attr('src');
        var src = instance.attr('href');

        var video = $('<video />', {
            'id': videoId,
            'width': width,
            'height': height,
            'poster': poster,
            'controls': 'controls'
        }).append(
            $('<source></source>', {
                'src': src,
                'type': 'video/mp4'
            })
        );

        instance.replaceWith(video);
    };

    function endsWith(str, suffix) {
        return str.indexOf(suffix, str.length - suffix.length) !== -1;
    }

    //Add the plugin to the jQuery fn object
    $.fn.jwVideo = function (method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        }
        else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        }
        else {
            $.error('Method ' + method + ' does not exist on jQuery.jwVideo');
        }
    };
})(jQuery);

/*!-------------------------------------------------------------------- 
* sameHeights JQuery
--------------------------------------------------------------------*/
(function ($) {
    $.fn.sameHeights = function() {
        $(this).each(function(){
            var tallest = 0;
            $(this).children().each(function(i)
            {
                if (tallest < $(this).height()) { tallest = $(this).height(); }
            });
            $(this).children().css({'height': tallest});
        });
        return this;
    };
})(jQuery);
