function parseURL(url) {
    var a =  document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tp:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };
}

/**
 * jQuery.Preload - Multifunctional preloader
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
 * Dual licensed under MIT and GPL.
 * Date: 3/12/2008
 * @author Ariel Flesler
 * @version 1.0.7
 */
;(function($){var n=$.preload=function(c,d){if(c.split)c=$(c);d=$.extend({},n.defaults,d);var f=$.map(c,function(a){if(!a)return;if(a.split)return d.base+a+d.ext;var b=a.src||a.href;if(typeof d.placeholder=='string'&&a.src)a.src=d.placeholder;if(b&&d.find)b=b.replace(d.find,d.replace);return b||null}),g={loaded:0,failed:0,next:0,done:0,total:f.length};if(!g.total)return m();var h='<img/>',j=d.threshold;while(--j>0)h+='<img/>';h=$(h).load(k).error(k).bind('abort',k).each(l);function k(e){g.found=e.type=='load';g.image=this.src;var a=g.original=c[this.index];g[g.found?'loaded':'failed']++;g.done++;if(d.placeholder&&a.src)a.src=g.found?g.image:d.notFound||a.src;if(d.onComplete)d.onComplete(g);if(g.done<g.total)l(0,this);else{if(h.unbind)h.unbind('load').unbind('error').unbind('abort');h=null;m()}};function l(i,a,b){if($.browser.msie&&g.next&&g.next%n.gap==0&&!b){setTimeout(function(){l(i,a,1)},0);return!1}if(g.next==g.total)return!1;a.index=g.next;a.src=f[g.next++];if(d.onRequest){g.image=a.src;g.original=c[g.next-1];d.onRequest(g)}};function m(){if(d.onFinish)d.onFinish(g)}};n.gap=14;n.defaults={threshold:2,base:'',ext:'',replace:''};$.fn.preload=function(a){n(this,a);return this}})(jQuery);

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008
 * @author Ariel Flesler
 * @version 1.4
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(h){var m=h.scrollTo=function(b,c,g){h(window).scrollTo(b,c,g)};m.defaults={axis:'y',duration:1};m.window=function(b){return h(window).scrollable()};h.fn.scrollable=function(){return this.map(function(){var b=this.parentWindow||this.defaultView,c=this.nodeName=='#document'?b.frameElement||b:this,g=c.contentDocument||(c.contentWindow||c).document,i=c.setInterval;return c.nodeName=='IFRAME'||i&&h.browser.safari?g.body:i?g.documentElement:this})};h.fn.scrollTo=function(r,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};a=h.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=h(k),d=r,l,e={},p=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(d)){d=n(d);break}d=h(d,this);case'object':if(d.is||d.style)l=(d=h(d)).offset()}h.each(a.axis.split(''),function(b,c){var g=c=='x'?'Left':'Top',i=g.toLowerCase(),f='scroll'+g,s=k[f],t=c=='x'?'Width':'Height',v=t.toLowerCase();if(l){e[f]=l[i]+(p?0:s-o.offset()[i]);if(a.margin){e[f]-=parseInt(d.css('margin'+g))||0;e[f]-=parseInt(d.css('border'+g+'Width'))||0}e[f]+=a.offset[i]||0;if(a.over[i])e[f]+=d[v]()*a.over[i]}else e[f]=d[i];if(/^\d+$/.test(e[f]))e[f]=e[f]<=0?0:Math.min(e[f],u(t));if(!b&&a.queue){if(s!=e[f])q(a.onAfterFirst);delete e[f]}});q(a.onAfter);function q(b){o.animate(e,j,a.easing,b&&function(){b.call(this,r,a)})};function u(b){var c='scroll'+b,g=k.ownerDocument;return p?Math.max(g.documentElement[c],g.body[c]):k[c]}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery);

/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
	Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
	This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in swfobject){swfobject[q]=null}swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}();


(function($) {

	$.fn.evtSlideshow = function( options )
	{
		return this.each(function(){
			
			var currentSlideNum, inner, outer, items, itemsType, totalItems, leftSide, rightSide, autoplay, autoplayWait, opts;
			
			// set options, distinct for each slideshow on the page
			opts = $.extend({}, $.fn.evtSlideshow.defaults, options);
			
			inner = $(this); // slideshow UL

			inner.wrap('<div class="'+opts.wrapperClass+'"></div>');
			outer = inner.parent('.'+opts.wrapperClass);
	
			items = inner.children();
			
			totalItems = items.size();
			currentSlideNum = opts.startSlide;
			
			width = getWidth();
			height = getHeight();
			
			setStyles();
			setupEvents();
			
			if ( opts.autoplay ) start();
			
			inner.trigger( 'evtSlideshow_finishedSetup', [opts.startSlide, totalItems] );
			
			///////////////////////////////////////////////////////////////////////////////////
			
			function getWidth () { return inner.eq(0).width() };
			function getHeight() { return inner.eq(0).height() };
		
			function setStyles()
			{
				outer.css({ 'position': 'relative', 'overflow' : 'hidden', 'height' : height, 'width' : width });
				inner.css({ 'position': 'absolute', 'top': 0, 'left': 0, 'overflow' : 'hidden', 'list-style' : 'none', 'height' : height });
				$.fn.evtSlideshow.transitions[ opts.transition ].style( inner, outer, items, opts );
			};
	
			function setupEvents()
			{
				calculateEventAreas();
		
				// listen out for events
				inner.bind( 'evtSlideshow_goTo', function( e, slideNum, callback ){ goTo( slideNum, callback ); });
				inner.bind( 'evtSlideshow_goNext', function( e, callback ){ goNext(); });
				inner.bind( 'evtSlideshow_goPrev', function( e, callback ){ goPrev(); });
				inner.bind( 'evtSlideshow_start', function(){ start(); });
				inner.bind( 'evtSlideshow_pause', function( e, preventStart ){ pause( preventStart ); });
		
				// some helper event triggers
				$().mousemove( function( e ) { inner.trigger( 'evtSlideshow_mouseOver', side( e ) ) });
		
				inner.click(function( e ){ inner.trigger( 'evtSlideshow_click', side( e ) ) });
		
				$().keyup( function( e ) {
					if ( e.keyCode == 39 ) inner.trigger( 'evtSlideshow_keyUp', ['right'] );
					else if ( e.keyCode == 37 ) inner.trigger( 'evtSlideshow_keyUp', ['left'] );
				});
			};
	
			function goTo( slideNum, extraCallback )
			{
				slideNum = parseInt(slideNum);
				var callback = function()
				{
					currentSlideNum = slideNum;
					inner.trigger( 'evtSlideshow_finishedGoTo', slideNum );
					
					if ( currentSlideNum == 0 ) inner.trigger( 'evtSlideshow_reachedFirstSlide' );
					if ( currentSlideNum == totalItems - 1 ) inner.trigger( 'evtSlideshow_reachedLastSlide' );
					
					if ( extraCallback != undefined ) extraCallback();
				};
								
				if ( currentSlideNum != slideNum && ! items.eq( currentSlideNum ).is(':animated') && ! inner.is(":animated") )
				{
					inner.trigger( 'evtSlideshow_startedGoTo', slideNum );
	
					$.fn.evtSlideshow.transitions[ opts.transition ].action( inner, outer, items, slideNum, currentSlideNum, opts, callback ); // call the appropriate transition function
				}
				else
				{
					// callback();
				}
			};
	
			// convenience methods for going to next/prev slides
			function goNext( callback ) { goTo( getNextId(), callback ) };
			function goPrev( callback ) { goTo( getPrevId(), callback ) };
	
			function getNextId()
			{
				if ( opts.loopType != 'stop' && currentSlideNum == totalItems - 1 ) return 0; // jump to first one
				else if ( opts.loopType == 'stop' && ( currentSlideNum == totalItems - 1 ) ) return currentSlideNum; // don't go any further
				else return currentSlideNum + 1;
			};
	
			function getPrevId()
			{
				if ( opts.loopType != 'stop' && currentSlideNum == 0 )	return totalItems - 1 // jump to last one
				else if ( opts.loopType == 'stop' && currentSlideNum == 0 ) return currentSlideNum; // don't go any further
				else return currentSlideNum - 1;
			};
	
			// start slideshow playing
			function start( direction )
			{
				clearInterval( autoplay );
				clearTimeout( autoplayWait );
				var action = ( direction == 'backwards' ) ? goPrev : goNext;
				autoplay = setInterval( function(){ action() }, opts.autoplaySpeed );
			};
	
			function pause( preventRestart )
			{
				clearInterval( autoplay );
				clearTimeout( autoplayWait );
				var preventRestart = ( preventRestart === true ) ? true : false; // preventRestart overrides the autoplayRestart, if required.
				if ( opts.autoplay && opts.autoplayRestart && ! preventRestart ) autoplayWait = setTimeout( function(){ start() }, opts.autoplayRestartWait );
			};
	
			function getEventPos( e )
			{
				var posx = 0;
				var posy = 0;
				if (!e) var e = window.event;
				if (e.pageX || e.pageY)
				{
					posx = e.pageX;
					posy = e.pageY;
				}
				else if (e.clientX || e.clientY)
				{
					posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
					posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
				}
		 
				return { x : posx, y : posy };
			};
		
			function calculateEventAreas()
			{
				var wrapperpos = outer.position();
				offset = wrapperpos.left;
				var offset_top = wrapperpos.top;
				var halfwidth = width / 2;
		
				leftSide = { xMax : offset+ halfwidth, xMin : offset , yMax : offset_top + height , yMin : offset_top };
				rightSide = { xMax : offset + width , xMin : offset + halfwidth , yMax : offset_top + height , yMin : offset_top };
			};
	
			function side( event )
			{	
				var pos = getEventPos( event );
				if ( pos.x >= leftSide.xMin && pos.x <= leftSide.xMax && pos.y >= leftSide.yMin && pos.y <= leftSide.yMax ) return 'left';
				else if ( pos.x >= rightSide.xMin && pos.x <= rightSide.xMax && pos.y >= rightSide.yMin && pos.y <= rightSide.yMax ) return 'right';
				else return false;
			};
			
		});
		
	};

	
	$.fn.evtSlideshow.transitions = {
		
		slide : {
			
			style : function( inner, outer, items, opts )
			{
				inner.width('10000000px');
				items.css({ 'float': 'left', 'height' : height, 'width' : width });
				var startLeft = (opts.startSlide * width) * -1;
				inner.css({'marginLeft':startLeft});
			},
			
			action : function( inner, outer, items, slideNum, currentSlideNum, opts, callback )
			{
				totalItems = items.size();
				
				if ( slideNum == 0 && currentSlideNum == totalItems - 1 && opts.loopType == 'loop' )
				{
					// going forwards, last slide			
					//put the first slide after the last one, temporarily
					var dummy = items.eq(0).clone();
					inner.append(dummy);
			
					var leftpos = (items.eq(totalItems-1).position().left + width)*-1;
					inner.animate( { "marginLeft" : leftpos }, opts.speed, function(){
						inner.css({'marginLeft' : 0 });
						dummy.remove();
						callback();
					});
				}	
				else if ( slideNum == totalItems - 1 && currentSlideNum == 0 && opts.loopType == 'loop' )
				{
					// going backwards, first slide		
					//put the last slide before the first one, temporarily
					var dummy = items.eq(slideNum).clone();
					var tempLeft = width * -1;
					inner.prepend(dummy).css({ 'marginLeft': tempLeft });
			
					var leftpos =  0;
					inner.animate( { "marginLeft" : leftpos }, opts.speed, function(){
						dummy.remove();
						inner.css({'marginLeft' : (items.eq(slideNum).position().left * -1) });
						callback();
					});
				}
				else
				{
					var leftpos = -1 * items.eq( slideNum ).position().left;
					inner.animate( { "marginLeft" : leftpos }, opts.speed, callback );
				}
			}
		},
		
		fade : {
			
			style : function( inner, outer, items, opts )
			{
				items.css({ 'position': 'absolute', 'top': 0, 'left': 0, 'height' : height, 'width' : width, 'display' : 'none' });
				items.eq(opts.startSlide).css({'display':'block', 'visibility': "visible"});
			},
			
			action : function( inner, outer, items, slideNum, currentSlideNum, opts, callback )
			{
				items.eq( currentSlideNum ).fadeOut( opts.speed );
				items.eq( slideNum ).fadeIn( opts.speed, callback );			
			}
		},
		
		jump : {
			
			style : function( inner, outer, items, opts )
			{
				items.css({ 'display' : 'none' });
				items.eq(opts.startSlide).css({'display':'block'});
			},
			
			action : function( inner, outer, items, slideNum, currentSlideNum, opts, callback )
			{
				if ( currentSlideNum != slideNum )
				{
					items.eq( currentSlideNum ).hide();
					items.eq( slideNum ).show();
					callback();
				}
			}
		}
	}

	$.fn.evtSlideshow.defaults = {
		startSlide : 0,
		speed: 500,
		transition: 'slide', // slide, fade, jump
		autoplay : false,
		autoplaySpeed : 2000,
		autoplayRestart : false,
		autoplayRestartWait : 3000,
		loopType : 'rewind', // rewind, loop, stop
		wrapperClass : 'evtSlideshow_wrapper'
	};
	
})(jQuery);

(function($) {
	
	$.fn.evtPaginate = function( options )
	{
		return this.each(function(){
			
			var wrapper, items, pages = new Array(), totalItems, totalPages, currentPage;
						
			// set options
			opts = $.extend({}, $.fn.evtPaginate.defaults, options);
			
			wrapper = $(this);
			setupEvents();
			setUp();	
			
			///////////////////////////////////////////////
			
			function setUp()
			{
				items = wrapper.children();
				totalItems = items.size();
				
				totalPages = Math.ceil( totalItems / opts.perPage );
				
				items.show();
				
				currentPage = opts.startPage;
				
				for ( var i = 0; i < totalPages; i++ )
				{
					pages[i] = items.slice( ( i*opts.perPage ), ( i*opts.perPage ) + opts.perPage );
					pages[i].each(function(){ $(this).data( 'evtPaginate_pageNum', i ) });
					if ( i != opts.startPage ) pages[i].hide();
				}
				
				wrapper.trigger( 'evtPaginate_finishedSetup', [(opts.startPage+1), totalPages] );
			};
			
			function refresh() { setUp() }; // alias
			
			function goTo( pageNum )
			{
				if ( currentPage != pageNum && ! pages[currentPage].is(':animated') && ! wrapper.is(":animated") )
				{
					wrapper.trigger( 'evtPaginate_startedGoTo', pageNum );
			
					pages[currentPage].hide();
					pages[pageNum].show();
					currentPage = pageNum;
					
					wrapper.trigger( 'evtPaginate_finishedGoTo', pageNum );
					
					if ( currentPage == 0 ) wrapper.trigger( 'evtPaginate_reachedFirstPage' );
					if ( currentPage == totalPages - 1 ) wrapper.trigger( 'evtPaginate_reachedLastPage' );
				}
			};
			
			function goNext()
			{
				if ( opts.loopType == 'loop' ) var goToPage = ( currentPage == totalPages - 1 ) ? 0 : currentPage + 1; 
				else  var goToPage = ( currentPage == totalPages - 1 ) ? totalPages - 1 : currentPage + 1; // stop when getting to last page
				goTo( goToPage );
			};
			
			function goPrev()
			{
				if ( opts.loopType == 'loop' ) var goToPage = ( currentPage == 0 ) ? totalPages - 1 : currentPage - 1;
				else  var goToPage = ( currentPage == 0 ) ? 0 : currentPage - 1; // stop when getting to last page
				goTo( goToPage );
			};
			
			function setupEvents()
			{
				wrapper.bind( 'evtPaginate_goTo', function( e, pageNum ){ goTo( pageNum ); });
				wrapper.bind( 'evtPaginate_goNext', function(){ goNext(); });
				wrapper.bind( 'evtPaginate_goPrev', function(){ goPrev(); });
				wrapper.bind( 'evtPaginate_refresh', function(){ refresh(); });
				
				$().keyup( function( e ) {
					if ( e.keyCode == 39 ) wrapper.trigger( 'evtPaginate_keyUp', ['right'] );
					else if ( e.keyCode == 37 ) wrapper.trigger( 'evtPaginate_keyUp', ['left'] );
				});
			};
			
		});
		
	};

	$.fn.evtPaginate.defaults = {
		perPage : 2,
		startPage : 0,
		speed: 500,
		loopType : 'stop' // loop, stop
	};
	
})(jQuery);

