
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/// html 5 boilerplate javascript for testing in chrome and firebug console
	/// -- make sure to comment out when u go live

		// usage: log('inside coolFunc', this, arguments);
		// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
		window.log = function(){
		  log.history = log.history || [];   // store logs to an array for reference
		  log.history.push(arguments);
		  if(this.console) {
			arguments.callee = arguments.callee.caller;
			var newarr = [].slice.call(arguments);
			(typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr));
		  }
		};
		
		// 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,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}})((function(){try
		{console.log();return window.console;}catch(err){return window.console={};}})());
		
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/// javascript constant variables we may uses in the following classes
	
		var testDir					= "ojoee/";
        var homeUrl                 = "http://" + window.location.host + "/" + testDir;
        var templateDir             = homeUrl + "wp-content/themes/turnAround/";
        var templateimagesDir       = templateDir + "img/";
        var uploadsDir              = homeUrl + "assets/";
		
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/// now include the following classes!!
	
		/* PLUGIN DIRECTORY
		
			What you can find in this file [listed in order they appear]
		
			   01.) jQuery bgiframe 			- http://brandonaaron.net/code/bgiframe/docs
			   02.) jQuery Supersubs 			- for super fish go to superfish link
			   03.) jQuery SuperFish			- http://users.tpg.com.au/j_birch/plugins/superfish/
			   04.) jQuery pjax					- https://github.com/defunkt/jquery-pjax
			   05.) jQuery Easing				- http://gsgd.co.uk/sandbox/jquery/easing/
			   06.) jQuery Cycle 				- http://jquery.malsup.com/cycle/
			   07.) jQuery Cookie				- https://github.com/carhartl/jquery-cookie
			   08.) jQuery Lightbox Evolution 	- http://codecanyon.net/item/jquery-lightbox-evolution/115655?ref=aeroalquimia
			   09.) jQuery Image Loader			- http://www.mariuscristiandonea.com
			   10.) jQuery Formalize 			- http://formalize.me/
			   11.) jQuery clueTip 				- http://plugins.learningjquery.com/cluetip/demo/
			   12.) jQuery corner plugin		- http://www.malsup.com/jquery/corner/
			   
		*/
	
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
		 * Licensed under the MIT License (LICENSE.txt).
		 *
		 * Version 2.1.3-pre
		 */
		
		(function($){
		
		$.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) {
			s = $.extend({
				top     : 'auto', // auto == .currentStyle.borderTopWidth
				left    : 'auto', // auto == .currentStyle.borderLeftWidth
				width   : 'auto', // auto == offsetWidth
				height  : 'auto', // auto == offsetHeight
				opacity : true,
				src     : 'javascript:false;'
			}, s);
			var html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
						   'style="display:block;position:absolute;z-index:-1;'+
							   (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
							   'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
							   'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
							   'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
							   'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
						'"/>';
			return this.each(function() {
				if ( $(this).children('iframe.bgiframe').length === 0 )
					this.insertBefore( document.createElement(html), this.firstChild );
			});
		} : function() { return this; });
		
		// old alias
		$.fn.bgIframe = $.fn.bgiframe;
		
		function prop(n) {
			return n && n.constructor === Number ? n + 'px' : n;
		}
		
		})(jQuery);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*
		 * Supersubs v0.2b - jQuery plugin
		 * Copyright (c) 2008 Joel Birch
		 *
		 * Dual licensed under the MIT and GPL licenses:
		 * 	http://www.opensource.org/licenses/mit-license.php
		 * 	http://www.gnu.org/licenses/gpl.html
		 *
		 *
		 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
		 * their longest list item children. If you use this, please expect bugs and report them
		 * to the jQuery Google Group with the word 'Superfish' in the subject line.
		 *
		 */
		
		;(function($){ // $ will refer to jQuery within this closure
		
			$.fn.supersubs = function(options){
				var opts = $.extend({}, $.fn.supersubs.defaults, options);
				// return original object to support chaining
				return this.each(function() {
					// cache selections
					var $$ = $(this);
					// support metadata
					var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
					// get the font size of menu.
					// .css('fontSize') returns various results cross-browser, so measure an em dash instead
					var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
						'padding' : 0,
						'position' : 'absolute',
						'top' : '-999em',
						'width' : 'auto'
					}).appendTo($$).width(); //clientWidth is faster, but was incorrect here
					// remove em dash
					$('#menu-fontsize').remove();
					// cache all ul elements
					$ULs = $$.find('ul');
					// loop through each ul in menu
					$ULs.each(function(i) {	
						// cache this ul
						var $ul = $ULs.eq(i);
						// get all (li) children of this ul
						var $LIs = $ul.children();
						// get all anchor grand-children
						var $As = $LIs.children('a');
						// force content to one line and save current float property
						var liFloat = $LIs.css('white-space','nowrap').css('float');
						// remove width restrictions and floats so elements remain vertically stacked
						var emWidth = $ul.add($LIs).add($As).css({
							'float' : 'none',
							'width'	: 'auto'
						})
						// this ul will now be shrink-wrapped to longest li due to position:absolute
						// so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
						.end().end()[0].clientWidth / fontsize;
						// add more width to ensure lines don't turn over at certain sizes in various browsers
						emWidth += o.extraWidth;
						// restrict to at least minWidth and at most maxWidth
						if (emWidth > o.maxWidth)		{ emWidth = o.maxWidth; }
						else if (emWidth < o.minWidth)	{ emWidth = o.minWidth; }
						emWidth += 'em';
						// set ul to width in ems
						$ul.css('width',emWidth);
						// restore li floats to avoid IE bugs
						// set li width to full width of this ul
						// revert white-space to normal
						$LIs.css({
							'float' : liFloat,
							'width' : '100%',
							'white-space' : 'normal'
						})
						// update offset position of descendant ul to reflect new width of parent
						.each(function(){
							var $childUl = $('>ul',this);
							var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
							$childUl.css(offsetDirection,emWidth);
						});
					});
					
				});
			};
			// expose defaults
			$.fn.supersubs.defaults = {
				minWidth		: 9,		// requires em unit.
				maxWidth		: 25,		// requires em unit.
				extraWidth		: 0			// extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
			};
			
		})(jQuery);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*
		 * Superfish v1.4.8 - jQuery menu widget
		 * Copyright (c) 2008 Joel Birch
		 *
		 * Dual licensed under the MIT and GPL licenses:
		 * 	http://www.opensource.org/licenses/mit-license.php
		 * 	http://www.gnu.org/licenses/gpl.html
		 *
		 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
		 */
		
		;(function($){
			$.fn.superfish = function(op){
		
				var sf = $.fn.superfish,
					c = sf.c,
					$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
					over = function(){
						var $$ = $(this), menu = getMenu($$);
						clearTimeout(menu.sfTimer);
						$$.showSuperfishUl().siblings().hideSuperfishUl();
					},
					out = function(){
						var $$ = $(this), menu = getMenu($$), o = sf.op;
						clearTimeout(menu.sfTimer);
						menu.sfTimer=setTimeout(function(){
							o.retainPath=($.inArray($$[0],o.$path)>-1);
							$$.hideSuperfishUl();
							if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
						},o.delay);	
					},
					getMenu = function($menu){
						var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
						sf.op = sf.o[menu.serial];
						return menu;
					},
					addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
					
				return this.each(function() {
					var s = this.serial = sf.o.length;
					var o = $.extend({},sf.defaults,op);
					o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
						$(this).addClass([o.hoverClass,c.bcClass].join(' '))
							.filter('li:has(ul)').removeClass(o.pathClass);
					});
					sf.o[s] = sf.op = o;
					
					$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
						if (o.autoArrows) addArrow( $('>a:first-child',this) );
					})
					.not('.'+c.bcClass)
						.hideSuperfishUl();
					
					var $a = $('a',this);
					$a.each(function(i){
						var $li = $a.eq(i).parents('li');
						$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
					});
					o.onInit.call(this);
					
				}).each(function() {
					var menuClasses = [c.menuClass];
					if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
					$(this).addClass(menuClasses.join(' '));
				});
			};
		
			var sf = $.fn.superfish;
			sf.o = [];
			sf.op = {};
			sf.IE7fix = function(){
				var o = sf.op;
				if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
					this.toggleClass(sf.c.shadowClass+'-off');
				};
			sf.c = {
				bcClass     : 'sf-breadcrumb',
				menuClass   : 'sf-js-enabled',
				anchorClass : 'sf-with-ul',
				arrowClass  : 'sf-sub-indicator',
				shadowClass : 'sf-shadow'
			};
			sf.defaults = {
				hoverClass	: 'sfHover',
				pathClass	: 'overideThisToUse',
				pathLevels	: 1,
				delay		: 800,
				animation	: {opacity:'show'},
				speed		: 'normal',
				autoArrows	: true,
				dropShadows : true,
				disableHI	: false,		// true disables hoverIntent detection
				onInit		: function(){}, // callback functions
				onBeforeShow: function(){},
				onShow		: function(){},
				onHide		: function(){}
			};
			$.fn.extend({
				hideSuperfishUl : function(){
					var o = sf.op,
						not = (o.retainPath===true) ? o.$path : '';
					o.retainPath = false;
					var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
							.find('>ul').hide().css('visibility','hidden');
					o.onHide.call($ul);
					return this;
				},
				showSuperfishUl : function(){
					var o = sf.op,
						sh = sf.c.shadowClass+'-off',
						$ul = this.addClass(o.hoverClass)
							.find('>ul:hidden').css('visibility','visible');
					sf.IE7fix.call($ul);
					o.onBeforeShow.call($ul);
					$ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
					return this;
				}
			});
		
		})(jQuery);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// jquery.pjax.js
		// copyright chris wanstrath
		// https://github.com/defunkt/jquery-pjax
		
		(function($){
		
		// When called on a link, fetches the href with ajax into the
		// container specified as the first parameter or with the data-pjax
		// attribute on the link itself.
		//
		// Tries to make sure the back button and ctrl+click work the way
		// you'd expect.
		//
		// Accepts a jQuery ajax options object that may include these
		// pjax specific options:
		//
		// container - Where to stick the response body. Usually a String selector.
		//             $(container).html(xhr.responseBody)
		//      push - Whether to pushState the URL. Defaults to true (of course).
		//   replace - Want to use replaceState instead? That's cool.
		//
		// For convenience the first parameter can be either the container or
		// the options object.
		//
		// Returns the jQuery object
		$.fn.pjax = function( container, options ) {
		  if ( options )
			options.container = container
		  else
			options = $.isPlainObject(container) ? container : {container:container}
		
		  // We can't persist $objects using the history API so we must use
		  // a String selector. Bail if we got anything else.
		  if ( options.container && typeof options.container !== 'string' ) {
			throw "pjax container must be a string selector!"
			return false
		  }
		
		  return this.live('click', function(event){
			// Middle click, cmd click, and ctrl click should open
			// links in a new tab as normal.
			if ( event.which > 1 || event.metaKey )
			  return true
		
			var defaults = {
			  url: this.href,
			  container: $(this).attr('data-pjax'),
			  clickedElement: $(this),
			  fragment: null
			}
		
			$.pjax($.extend({}, defaults, options))
		
			event.preventDefault()
		  })
		}
		
		
		// Loads a URL with ajax, puts the response body inside a container,
		// then pushState()'s the loaded URL.
		//
		// Works just like $.ajax in that it accepts a jQuery ajax
		// settings object (with keys like url, type, data, etc).
		//
		// Accepts these extra keys:
		//
		// container - Where to stick the response body. Must be a String.
		//             $(container).html(xhr.responseBody)
		//      push - Whether to pushState the URL. Defaults to true (of course).
		//   replace - Want to use replaceState instead? That's cool.
		//
		// Use it just like $.ajax:
		//
		//   var xhr = $.pjax({ url: this.href, container: '#main' })
		//   console.log( xhr.readyState )
		//
		// Returns whatever $.ajax returns.
		var pjax = $.pjax = function( options ) {
		  var $container = $(options.container),
			  success = options.success || $.noop
		
		  // We don't want to let anyone override our success handler.
		  delete options.success
		
		  // We can't persist $objects using the history API so we must use
		  // a String selector. Bail if we got anything else.
		  if ( typeof options.container !== 'string' )
			throw "pjax container must be a string selector!"
		
		  options = $.extend(true, {}, pjax.defaults, options)
		
		  if ( $.isFunction(options.url) ) {
			options.url = options.url()
		  }
		
		  options.context = $container
		
		  options.success = function(data){
			if ( options.fragment ) {
			  // If they specified a fragment, look for it in the response
			  // and pull it out.
			  var $fragment = $(data).find(options.fragment)
			  if ( $fragment.length )
				data = $fragment.children()
			  else
				return window.location = options.url
			} else {
				// If we got no data or an entire web page, go directly
				// to the page and let normal error handling happen.
				if ( !$.trim(data) || /<html/i.test(data) )
				  return window.location = options.url
			}
		
			// Make it happen.
			this.html(data)
		
			// If there's a <title> tag in the response, use it as
			// the page's title.
			var oldTitle = document.title,
				title = $.trim( this.find('title').remove().text() )
			if ( title ) document.title = title
		
			// No <title>? Fragment? Look for data-title and title attributes.
			if ( !title && options.fragment ) {
			  title = $fragment.attr('title') || $fragment.data('title')
			}
		
			var state = {
			  pjax: options.container,
			  fragment: options.fragment,
			  timeout: options.timeout
			}
		
			// If there are extra params, save the complete URL in the state object
			var query = $.param(options.data)
			if ( query != "_pjax=true" )
			  state.url = options.url + (/\?/.test(options.url) ? "&" : "?") + query
		
			if ( options.replace ) {
			  window.history.replaceState(state, document.title, options.url)
			} else if ( options.push ) {
			  // this extra replaceState before first push ensures good back
			  // button behavior
			  if ( !pjax.active ) {
				window.history.replaceState($.extend({}, state, {url:null}), oldTitle)
				pjax.active = true
			  }
		
			  window.history.pushState(state, document.title, options.url)
			}
		
			// Google Analytics support
			if ( (options.replace || options.push) && window._gaq )
			  _gaq.push(['_trackPageview'])
		
			// If the URL has a hash in it, make sure the browser
			// knows to navigate to the hash.
			var hash = window.location.hash.toString()
			if ( hash !== '' ) {
			  window.location.href = hash
			}
		
			// Invoke their success handler if they gave us one.
			success.apply(this, arguments)
		  }
		
		  // Cancel the current request if we're already pjaxing
		  var xhr = pjax.xhr
		  if ( xhr && xhr.readyState < 4) {
			xhr.onreadystatechange = $.noop
			xhr.abort()
		  }
		
		  pjax.options = options
		  pjax.xhr = $.ajax(options)
		  $(document).trigger('pjax', [pjax.xhr, options])
		
		  return pjax.xhr
		}
		
		
		pjax.defaults = {
		  timeout: 650,
		  push: true,
		  replace: false,
		  // We want the browser to maintain two separate internal caches: one for
		  // pjax'd partial page loads and one for normal page loads. Without
		  // adding this secret parameter, some browsers will often confuse the two.
		  data: { _pjax: true },
		  type: 'GET',
		  dataType: 'html',
		  beforeSend: function(xhr){
			this.trigger('pjax:start', [xhr, pjax.options])
			// start.pjax is deprecated
			this.trigger('start.pjax', [xhr, pjax.options])
			xhr.setRequestHeader('X-PJAX', 'true')
		  },
		  error: function(xhr, textStatus, errorThrown){
			if ( textStatus !== 'abort' )
			  window.location = pjax.options.url
		  },
		  complete: function(xhr){
			this.trigger('pjax:end', [xhr, pjax.options])
			// end.pjax is deprecated
			this.trigger('end.pjax', [xhr, pjax.options])
		  }
		}
		
		
		// Used to detect initial (useless) popstate.
		// If history.state exists, assume browser isn't going to fire initial popstate.
		var popped = ('state' in window.history), initialURL = location.href
		
		
		// popstate handler takes care of the back and forward buttons
		//
		// You probably shouldn't use pjax on pages with other pushState
		// stuff yet.
		$(window).bind('popstate', function(event){
		  // Ignore inital popstate that some browsers fire on page load
		  var initialPop = !popped && location.href == initialURL
		  popped = true
		  if ( initialPop ) return
		
		  var state = event.state
		
		  if ( state && state.pjax ) {
			var container = state.pjax
			if ( $(container+'').length )
			  $.pjax({
				url: state.url || location.href,
				fragment: state.fragment,
				container: container,
				push: false,
				timeout: state.timeout
			  })
			else
			  window.location = location.href
		  }
		})
		
		
		// Add the state property to jQuery's event object so we can use it in
		// $(window).bind('popstate')
		if ( $.inArray('state', $.event.props) < 0 )
		  $.event.props.push('state')
		
		
		// Is pjax supported by this browser?
		$.support.pjax =
		  window.history && window.history.pushState && window.history.replaceState
		  // pushState isn't reliable on iOS yet.
		  && !navigator.userAgent.match(/(iPod|iPhone|iPad|WebApps\/.+CFNetwork)/)
		
		
		// Fall back to normalcy for older browsers.
		if ( !$.support.pjax ) {
		  $.pjax = function( options ) {
			window.location = $.isFunction(options.url) ? options.url() : options.url
		  }
		  $.fn.pjax = function() { return this }
		}
		
		})(jQuery);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*
		 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
		 *
		 * Uses the built in easing capabilities added In jQuery 1.1
		 * to offer multiple easing options
		 *
		 * TERMS OF USE - jQuery Easing
		 * 
		 * Open source under the BSD License. 
		 * 
		 * Copyright © 2008 George McGinley Smith
		 * All rights reserved.
		 * 
		 * Redistribution and use in source and binary forms, with or without modification, 
		 * are permitted provided that the following conditions are met:
		 * 
		 * Redistributions of source code must retain the above copyright notice, this list of 
		 * conditions and the following disclaimer.
		 * Redistributions in binary form must reproduce the above copyright notice, this list 
		 * of conditions and the following disclaimer in the documentation and/or other materials 
		 * provided with the distribution.
		 * 
		 * Neither the name of the author nor the names of contributors may be used to endorse 
		 * or promote products derived from this software without specific prior written permission.
		 * 
		 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
		 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
		 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
		 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
		 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
		 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
		 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
		 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
		 * OF THE POSSIBILITY OF SUCH DAMAGE. 
		 *
		*/
		
		// t: current time, b: begInnIng value, c: change In value, d: duration
		jQuery.easing['jswing'] = jQuery.easing['swing'];
		
		jQuery.extend( jQuery.easing,
		{
			def: 'easeOutQuad',
			swing: function (x, t, b, c, d) {
				//alert(jQuery.easing.default);
				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;
			}
		});
		
		/*
		 *
		 * TERMS OF USE - EASING EQUATIONS
		 * 
		 * Open source under the BSD License. 
		 * 
		 * Copyright © 2001 Robert Penner
		 * All rights reserved.
		 * 
		 * Redistribution and use in source and binary forms, with or without modification, 
		 * are permitted provided that the following conditions are met:
		 * 
		 * Redistributions of source code must retain the above copyright notice, this list of 
		 * conditions and the following disclaimer.
		 * Redistributions in binary form must reproduce the above copyright notice, this list 
		 * of conditions and the following disclaimer in the documentation and/or other materials 
		 * provided with the distribution.
		 * 
		 * Neither the name of the author nor the names of contributors may be used to endorse 
		 * or promote products derived from this software without specific prior written permission.
		 * 
		 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
		 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
		 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
		 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
		 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
		 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
		 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
		 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
		 * OF THE POSSIBILITY OF SUCH DAMAGE. 
		 *
		 */
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*!
		 * jQuery Cycle Plugin (with Transition Definitions)
		 * Examples and documentation at: http://jquery.malsup.com/cycle/
		 * Copyright (c) 2007-2010 M. Alsup
		 * Version: 2.9999 (13-NOV-2011)
		 * Dual licensed under the MIT and GPL licenses.
		 * http://jquery.malsup.com/license.html
		 * Requires: jQuery v1.3.2 or later
		 */
		;(function($, undefined) {
		
		var ver = '2.9999';
		
		// if $.support is not defined (pre jQuery 1.3) add what I need
		if ($.support == undefined) {
			$.support = {
				opacity: !($.browser.msie)
			};
		}
		
		function debug(s) {
			$.fn.cycle.debug && log(s);
		}		
		function log() {
			window.console && console.log && console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
		}
		$.expr[':'].paused = function(el) {
			return el.cyclePause;
		}
		
		
		// the options arg can be...
		//   a number  - indicates an immediate transition should occur to the given slide index
		//   a string  - 'pause', 'resume', 'toggle', 'next', 'prev', 'stop', 'destroy' or the name of a transition effect (ie, 'fade', 'zoom', etc)
		//   an object - properties to control the slideshow
		//
		// the arg2 arg can be...
		//   the name of an fx (only used in conjunction with a numeric value for 'options')
		//   the value true (only used in first arg == 'resume') and indicates
		//	 that the resume should occur immediately (not wait for next timeout)
		
		$.fn.cycle = function(options, arg2) {
			var o = { s: this.selector, c: this.context };
		
			// in 1.3+ we can fix mistakes with the ready state
			if (this.length === 0 && options != 'stop') {
				if (!$.isReady && o.s) {
					log('DOM not ready, queuing slideshow');
					$(function() {
						$(o.s,o.c).cycle(options,arg2);
					});
					return this;
				}
				// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
				log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
				return this;
			}
		
			// iterate the matched nodeset
			return this.each(function() {
				var opts = handleArguments(this, options, arg2);
				if (opts === false)
					return;
		
				opts.updateActivePagerLink = opts.updateActivePagerLink || $.fn.cycle.updateActivePagerLink;
				
				// stop existing slideshow for this container (if there is one)
				if (this.cycleTimeout)
					clearTimeout(this.cycleTimeout);
				this.cycleTimeout = this.cyclePause = 0;
		
				var $cont = $(this);
				var $slides = opts.slideExpr ? $(opts.slideExpr, this) : $cont.children();
				var els = $slides.get();
		
				var opts2 = buildOptions($cont, $slides, els, opts, o);
				if (opts2 === false)
					return;
		
				if (els.length < 2) {
					log('terminating; too few slides: ' + els.length);
					return;
				}
		
				var startTime = opts2.continuous ? 10 : getTimeout(els[opts2.currSlide], els[opts2.nextSlide], opts2, !opts2.backwards);
		
				// if it's an auto slideshow, kick it off
				if (startTime) {
					startTime += (opts2.delay || 0);
					if (startTime < 10)
						startTime = 10;
					debug('first timeout: ' + startTime);
					this.cycleTimeout = setTimeout(function(){go(els,opts2,0,!opts.backwards)}, startTime);
				}
			});
		};
		
		function triggerPause(cont, byHover, onPager) {
			var opts = $(cont).data('cycle.opts');
			var paused = !!cont.cyclePause;
			if (paused && opts.paused)
				opts.paused(cont, opts, byHover, onPager);
			else if (!paused && opts.resumed)
				opts.resumed(cont, opts, byHover, onPager);
		}
		
		// process the args that were passed to the plugin fn
		function handleArguments(cont, options, arg2) {
			if (cont.cycleStop == undefined)
				cont.cycleStop = 0;
			if (options === undefined || options === null)
				options = {};
			if (options.constructor == String) {
				switch(options) {
				case 'destroy':
				case 'stop':
					var opts = $(cont).data('cycle.opts');
					if (!opts)
						return false;
					cont.cycleStop++; // callbacks look for change
					if (cont.cycleTimeout)
						clearTimeout(cont.cycleTimeout);
					cont.cycleTimeout = 0;
					opts.elements && $(opts.elements).stop();
					$(cont).removeData('cycle.opts');
					if (options == 'destroy')
						destroy(opts);
					return false;
				case 'toggle':
					cont.cyclePause = (cont.cyclePause === 1) ? 0 : 1;
					checkInstantResume(cont.cyclePause, arg2, cont);
					triggerPause(cont);
					return false;
				case 'pause':
					cont.cyclePause = 1;
					triggerPause(cont);
					return false;
				case 'resume':
					cont.cyclePause = 0;
					checkInstantResume(false, arg2, cont);
					triggerPause(cont);
					return false;
				case 'prev':
				case 'next':
					var opts = $(cont).data('cycle.opts');
					if (!opts) {
						log('options not found, "prev/next" ignored');
						return false;
					}
					$.fn.cycle[options](opts);
					return false;
				default:
					options = { fx: options };
				};
				return options;
			}
			else if (options.constructor == Number) {
				// go to the requested slide
				var num = options;
				options = $(cont).data('cycle.opts');
				if (!options) {
					log('options not found, can not advance slide');
					return false;
				}
				if (num < 0 || num >= options.elements.length) {
					log('invalid slide index: ' + num);
					return false;
				}
				options.nextSlide = num;
				if (cont.cycleTimeout) {
					clearTimeout(cont.cycleTimeout);
					cont.cycleTimeout = 0;
				}
				if (typeof arg2 == 'string')
					options.oneTimeFx = arg2;
				go(options.elements, options, 1, num >= options.currSlide);
				return false;
			}
			return options;
			
			function checkInstantResume(isPaused, arg2, cont) {
				if (!isPaused && arg2 === true) { // resume now!
					var options = $(cont).data('cycle.opts');
					if (!options) {
						log('options not found, can not resume');
						return false;
					}
					if (cont.cycleTimeout) {
						clearTimeout(cont.cycleTimeout);
						cont.cycleTimeout = 0;
					}
					go(options.elements, options, 1, !options.backwards);
				}
			}
		};
		
		function removeFilter(el, opts) {
			if (!$.support.opacity && opts.cleartype && el.style.filter) {
				try { el.style.removeAttribute('filter'); }
				catch(smother) {} // handle old opera versions
			}
		};
		
		// unbind event handlers
		function destroy(opts) {
			if (opts.next)
				$(opts.next).unbind(opts.prevNextEvent);
			if (opts.prev)
				$(opts.prev).unbind(opts.prevNextEvent);
			
			if (opts.pager || opts.pagerAnchorBuilder)
				$.each(opts.pagerAnchors || [], function() {
					this.unbind().remove();
				});
			opts.pagerAnchors = null;
			if (opts.destroy) // callback
				opts.destroy(opts);
		};
		
		// one-time initialization
		function buildOptions($cont, $slides, els, options, o) {
			var startingSlideSpecified;
			// support metadata plugin (v1.0 and v2.0)
			var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
			var meta = $.isFunction($cont.data) ? $cont.data(opts.metaAttr) : null;
			if (meta)
				opts = $.extend(opts, meta);
			if (opts.autostop)
				opts.countdown = opts.autostopCount || els.length;
		
			var cont = $cont[0];
			$cont.data('cycle.opts', opts);
			opts.$cont = $cont;
			opts.stopCount = cont.cycleStop;
			opts.elements = els;
			opts.before = opts.before ? [opts.before] : [];
			opts.after = opts.after ? [opts.after] : [];
		
			// push some after callbacks
			if (!$.support.opacity && opts.cleartype)
				opts.after.push(function() { removeFilter(this, opts); });
			if (opts.continuous)
				opts.after.push(function() { go(els,opts,0,!opts.backwards); });
		
			saveOriginalOpts(opts);
		
			// clearType corrections
			if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
				clearTypeFix($slides);
		
			// container requires non-static position so that slides can be position within
			if ($cont.css('position') == 'static')
				$cont.css('position', 'relative');
			if (opts.width)
				$cont.width(opts.width);
			if (opts.height && opts.height != 'auto')
				$cont.height(opts.height);
		
			if (opts.startingSlide != undefined) {
				opts.startingSlide = parseInt(opts.startingSlide,10);
				if (opts.startingSlide >= els.length || opts.startSlide < 0)
					opts.startingSlide = 0; // catch bogus input
				else 
					startingSlideSpecified = true;
			}
			else if (opts.backwards)
				opts.startingSlide = els.length - 1;
			else
				opts.startingSlide = 0;
		
			// if random, mix up the slide array
			if (opts.random) {
				opts.randomMap = [];
				for (var i = 0; i < els.length; i++)
					opts.randomMap.push(i);
				opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
				if (startingSlideSpecified) {
					// try to find the specified starting slide and if found set start slide index in the map accordingly
					for ( var cnt = 0; cnt < els.length; cnt++ ) {
						if ( opts.startingSlide == opts.randomMap[cnt] ) {
							opts.randomIndex = cnt;
						}
					}
				}
				else {
					opts.randomIndex = 1;
					opts.startingSlide = opts.randomMap[1];
				}
			}
			else if (opts.startingSlide >= els.length)
				opts.startingSlide = 0; // catch bogus input
			opts.currSlide = opts.startingSlide || 0;
			var first = opts.startingSlide;
		
			// set position and zIndex on all the slides
			$slides.css({position: 'absolute', top:0, left:0}).hide().each(function(i) {
				var z;
				if (opts.backwards)
					z = first ? i <= first ? els.length + (i-first) : first-i : els.length-i;
				else
					z = first ? i >= first ? els.length - (i-first) : first-i : els.length-i;
				$(this).css('z-index', z)
			});
		
			// make sure first slide is visible
			$(els[first]).css('opacity',1).show(); // opacity bit needed to handle restart use case
			removeFilter(els[first], opts);
		
			// stretch slides
			if (opts.fit) {
				if (!opts.aspect) {
					if (opts.width)
						$slides.width(opts.width);
					if (opts.height && opts.height != 'auto')
						$slides.height(opts.height);
				} else {
					$slides.each(function(){
						var $slide = $(this);
						var ratio = (opts.aspect === true) ? $slide.width()/$slide.height() : opts.aspect;
						if( opts.width && $slide.width() != opts.width ) {
							$slide.width( opts.width );
							$slide.height( opts.width / ratio );
						}
		
						if( opts.height && $slide.height() < opts.height ) {
							$slide.height( opts.height );
							$slide.width( opts.height * ratio );
						}
					});
				}
			}
		
			if (opts.center && ((!opts.fit) || opts.aspect)) {
				$slides.each(function(){
					var $slide = $(this);
					$slide.css({
						"margin-left": opts.width ?
							((opts.width - $slide.width()) / 2) + "px" :
							0,
						"margin-top": opts.height ?
							((opts.height - $slide.height()) / 2) + "px" :
							0
					});
				});
			}
		
			if (opts.center && !opts.fit && !opts.slideResize) {
				$slides.each(function(){
					var $slide = $(this);
					$slide.css({
						"margin-left": opts.width ? ((opts.width - $slide.width()) / 2) + "px" : 0,
						"margin-top": opts.height ? ((opts.height - $slide.height()) / 2) + "px" : 0
					});
				});
			}
				
			// stretch container
			var reshape = opts.containerResize && !$cont.innerHeight();
			if (reshape) { // do this only if container has no size http://tinyurl.com/da2oa9
				var maxw = 0, maxh = 0;
				for(var j=0; j < els.length; j++) {
					var $e = $(els[j]), e = $e[0], w = $e.outerWidth(), h = $e.outerHeight();
					if (!w) w = e.offsetWidth || e.width || $e.attr('width');
					if (!h) h = e.offsetHeight || e.height || $e.attr('height');
					maxw = w > maxw ? w : maxw;
					maxh = h > maxh ? h : maxh;
				}
				if (maxw > 0 && maxh > 0)
					$cont.css({width:maxw+'px',height:maxh+'px'});
			}
		
			var pauseFlag = false;  // https://github.com/malsup/cycle/issues/44
			if (opts.pause)
				$cont.hover(
					function(){
						pauseFlag = true;
						this.cyclePause++;
						triggerPause(cont, true);
					},
					function(){
						pauseFlag && this.cyclePause--;
						triggerPause(cont, true);
					}
				);
		
			if (supportMultiTransitions(opts) === false)
				return false;
		
			// apparently a lot of people use image slideshows without height/width attributes on the images.
			// Cycle 2.50+ requires the sizing info for every slide; this block tries to deal with that.
			var requeue = false;
			options.requeueAttempts = options.requeueAttempts || 0;
			$slides.each(function() {
				// try to get height/width of each slide
				var $el = $(this);
				this.cycleH = (opts.fit && opts.height) ? opts.height : ($el.height() || this.offsetHeight || this.height || $el.attr('height') || 0);
				this.cycleW = (opts.fit && opts.width) ? opts.width : ($el.width() || this.offsetWidth || this.width || $el.attr('width') || 0);
		
				if ( $el.is('img') ) {
					// sigh..  sniffing, hacking, shrugging...  this crappy hack tries to account for what browsers do when
					// an image is being downloaded and the markup did not include sizing info (height/width attributes);
					// there seems to be some "default" sizes used in this situation
					var loadingIE	= ($.browser.msie  && this.cycleW == 28 && this.cycleH == 30 && !this.complete);
					var loadingFF	= ($.browser.mozilla && this.cycleW == 34 && this.cycleH == 19 && !this.complete);
					var loadingOp	= ($.browser.opera && ((this.cycleW == 42 && this.cycleH == 19) || (this.cycleW == 37 && this.cycleH == 17)) && !this.complete);
					var loadingOther = (this.cycleH == 0 && this.cycleW == 0 && !this.complete);
					// don't requeue for images that are still loading but have a valid size
					if (loadingIE || loadingFF || loadingOp || loadingOther) {
						if (o.s && opts.requeueOnImageNotLoaded && ++options.requeueAttempts < 100) { // track retry count so we don't loop forever
							log(options.requeueAttempts,' - img slide not loaded, requeuing slideshow: ', this.src, this.cycleW, this.cycleH);
							setTimeout(function() {$(o.s,o.c).cycle(options)}, opts.requeueTimeout);
							requeue = true;
							return false; // break each loop
						}
						else {
							log('could not determine size of image: '+this.src, this.cycleW, this.cycleH);
						}
					}
				}
				return true;
			});
		
			if (requeue)
				return false;
		
			opts.cssBefore = opts.cssBefore || {};
			opts.cssAfter = opts.cssAfter || {};
			opts.cssFirst = opts.cssFirst || {};
			opts.animIn = opts.animIn || {};
			opts.animOut = opts.animOut || {};
		
			$slides.not(':eq('+first+')').css(opts.cssBefore);
			$($slides[first]).css(opts.cssFirst);
		
			if (opts.timeout) {
				opts.timeout = parseInt(opts.timeout,10);
				// ensure that timeout and speed settings are sane
				if (opts.speed.constructor == String)
					opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed,10);
				if (!opts.sync)
					opts.speed = opts.speed / 2;
				
				var buffer = opts.fx == 'none' ? 0 : opts.fx == 'shuffle' ? 500 : 250;
				while((opts.timeout - opts.speed) < buffer) // sanitize timeout
					opts.timeout += opts.speed;
			}
			if (opts.easing)
				opts.easeIn = opts.easeOut = opts.easing;
			if (!opts.speedIn)
				opts.speedIn = opts.speed;
			if (!opts.speedOut)
				opts.speedOut = opts.speed;
		
			opts.slideCount = els.length;
			opts.currSlide = opts.lastSlide = first;
			if (opts.random) {
				if (++opts.randomIndex == els.length)
					opts.randomIndex = 0;
				opts.nextSlide = opts.randomMap[opts.randomIndex];
			}
			else if (opts.backwards)
				opts.nextSlide = opts.startingSlide == 0 ? (els.length-1) : opts.startingSlide-1;
			else
				opts.nextSlide = opts.startingSlide >= (els.length-1) ? 0 : opts.startingSlide+1;
		
			// run transition init fn
			if (!opts.multiFx) {
				var init = $.fn.cycle.transitions[opts.fx];
				if ($.isFunction(init))
					init($cont, $slides, opts);
				else if (opts.fx != 'custom' && !opts.multiFx) {
					log('unknown transition: ' + opts.fx,'; slideshow terminating');
					return false;
				}
			}
		
			// fire artificial events
			var e0 = $slides[first];
			if (!opts.skipInitializationCallbacks) {
				if (opts.before.length)
					opts.before[0].apply(e0, [e0, e0, opts, true]);
				if (opts.after.length)
					opts.after[0].apply(e0, [e0, e0, opts, true]);
			}
			if (opts.next)
				$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,1)});
			if (opts.prev)
				$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,0)});
			if (opts.pager || opts.pagerAnchorBuilder)
				buildPager(els,opts);
		
			exposeAddSlide(opts, els);
		
			return opts;
		};
		
		// save off original opts so we can restore after clearing state
		function saveOriginalOpts(opts) {
			opts.original = { before: [], after: [] };
			opts.original.cssBefore = $.extend({}, opts.cssBefore);
			opts.original.cssAfter  = $.extend({}, opts.cssAfter);
			opts.original.animIn	= $.extend({}, opts.animIn);
			opts.original.animOut   = $.extend({}, opts.animOut);
			$.each(opts.before, function() { opts.original.before.push(this); });
			$.each(opts.after,  function() { opts.original.after.push(this); });
		};
		
		function supportMultiTransitions(opts) {
			var i, tx, txs = $.fn.cycle.transitions;
			// look for multiple effects
			if (opts.fx.indexOf(',') > 0) {
				opts.multiFx = true;
				opts.fxs = opts.fx.replace(/\s*/g,'').split(',');
				// discard any bogus effect names
				for (i=0; i < opts.fxs.length; i++) {
					var fx = opts.fxs[i];
					tx = txs[fx];
					if (!tx || !txs.hasOwnProperty(fx) || !$.isFunction(tx)) {
						log('discarding unknown transition: ',fx);
						opts.fxs.splice(i,1);
						i--;
					}
				}
				// if we have an empty list then we threw everything away!
				if (!opts.fxs.length) {
					log('No valid transitions named; slideshow terminating.');
					return false;
				}
			}
			else if (opts.fx == 'all') {  // auto-gen the list of transitions
				opts.multiFx = true;
				opts.fxs = [];
				for (p in txs) {
					tx = txs[p];
					if (txs.hasOwnProperty(p) && $.isFunction(tx))
						opts.fxs.push(p);
				}
			}
			if (opts.multiFx && opts.randomizeEffects) {
				// munge the fxs array to make effect selection random
				var r1 = Math.floor(Math.random() * 20) + 30;
				for (i = 0; i < r1; i++) {
					var r2 = Math.floor(Math.random() * opts.fxs.length);
					opts.fxs.push(opts.fxs.splice(r2,1)[0]);
				}
				debug('randomized fx sequence: ',opts.fxs);
			}
			return true;
		};
		
		// provide a mechanism for adding slides after the slideshow has started
		function exposeAddSlide(opts, els) {
			opts.addSlide = function(newSlide, prepend) {
				var $s = $(newSlide), s = $s[0];
				if (!opts.autostopCount)
					opts.countdown++;
				els[prepend?'unshift':'push'](s);
				if (opts.els)
					opts.els[prepend?'unshift':'push'](s); // shuffle needs this
				opts.slideCount = els.length;
		
				// add the slide to the random map and resort
				if (opts.random) {
					opts.randomMap.push(opts.slideCount-1);
					opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
				}
		
				$s.css('position','absolute');
				$s[prepend?'prependTo':'appendTo'](opts.$cont);
		
				if (prepend) {
					opts.currSlide++;
					opts.nextSlide++;
				}
		
				if (!$.support.opacity && opts.cleartype && !opts.cleartypeNoBg)
					clearTypeFix($s);
		
				if (opts.fit && opts.width)
					$s.width(opts.width);
				if (opts.fit && opts.height && opts.height != 'auto')
					$s.height(opts.height);
				s.cycleH = (opts.fit && opts.height) ? opts.height : $s.height();
				s.cycleW = (opts.fit && opts.width) ? opts.width : $s.width();
		
				$s.css(opts.cssBefore);
		
				if (opts.pager || opts.pagerAnchorBuilder)
					$.fn.cycle.createPagerAnchor(els.length-1, s, $(opts.pager), els, opts);
		
				if ($.isFunction(opts.onAddSlide))
					opts.onAddSlide($s);
				else
					$s.hide(); // default behavior
			};
		}
		
		// reset internal state; we do this on every pass in order to support multiple effects
		$.fn.cycle.resetState = function(opts, fx) {
			fx = fx || opts.fx;
			opts.before = []; opts.after = [];
			opts.cssBefore = $.extend({}, opts.original.cssBefore);
			opts.cssAfter  = $.extend({}, opts.original.cssAfter);
			opts.animIn	= $.extend({}, opts.original.animIn);
			opts.animOut   = $.extend({}, opts.original.animOut);
			opts.fxFn = null;
			$.each(opts.original.before, function() { opts.before.push(this); });
			$.each(opts.original.after,  function() { opts.after.push(this); });
		
			// re-init
			var init = $.fn.cycle.transitions[fx];
			if ($.isFunction(init))
				init(opts.$cont, $(opts.elements), opts);
		};
		
		// this is the main engine fn, it handles the timeouts, callbacks and slide index mgmt
		function go(els, opts, manual, fwd) {
			// opts.busy is true if we're in the middle of an animation
			if (manual && opts.busy && opts.manualTrump) {
				// let manual transitions requests trump active ones
				debug('manualTrump in go(), stopping active transition');
				$(els).stop(true,true);
				opts.busy = 0;
			}
			// don't begin another timeout-based transition if there is one active
			if (opts.busy) {
				debug('transition active, ignoring new tx request');
				return;
			}
		
			var p = opts.$cont[0], curr = els[opts.currSlide], next = els[opts.nextSlide];
		
			// stop cycling if we have an outstanding stop request
			if (p.cycleStop != opts.stopCount || p.cycleTimeout === 0 && !manual)
				return;
		
			// check to see if we should stop cycling based on autostop options
			if (!manual && !p.cyclePause && !opts.bounce &&
				((opts.autostop && (--opts.countdown <= 0)) ||
				(opts.nowrap && !opts.random && opts.nextSlide < opts.currSlide))) {
				if (opts.end)
					opts.end(opts);
				return;
			}
		
			// if slideshow is paused, only transition on a manual trigger
			var changed = false;
			if ((manual || !p.cyclePause) && (opts.nextSlide != opts.currSlide)) {
				changed = true;
				var fx = opts.fx;
				// keep trying to get the slide size if we don't have it yet
				curr.cycleH = curr.cycleH || $(curr).height();
				curr.cycleW = curr.cycleW || $(curr).width();
				next.cycleH = next.cycleH || $(next).height();
				next.cycleW = next.cycleW || $(next).width();
		
				// support multiple transition types
				if (opts.multiFx) {
					if (fwd && (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length))
						opts.lastFx = 0;
					else if (!fwd && (opts.lastFx == undefined || --opts.lastFx < 0))
						opts.lastFx = opts.fxs.length - 1;
					fx = opts.fxs[opts.lastFx];
				}
		
				// one-time fx overrides apply to:  $('div').cycle(3,'zoom');
				if (opts.oneTimeFx) {
					fx = opts.oneTimeFx;
					opts.oneTimeFx = null;
				}
		
				$.fn.cycle.resetState(opts, fx);
		
				// run the before callbacks
				if (opts.before.length)
					$.each(opts.before, function(i,o) {
						if (p.cycleStop != opts.stopCount) return;
						o.apply(next, [curr, next, opts, fwd]);
					});
		
				// stage the after callacks
				var after = function() {
					opts.busy = 0;
					$.each(opts.after, function(i,o) {
						if (p.cycleStop != opts.stopCount) return;
						o.apply(next, [curr, next, opts, fwd]);
					});
					if (!p.cycleStop) {
						// queue next transition
						queueNext();
					}
				};
		
				debug('tx firing('+fx+'); currSlide: ' + opts.currSlide + '; nextSlide: ' + opts.nextSlide);
				
				// get ready to perform the transition
				opts.busy = 1;
				if (opts.fxFn) // fx function provided?
					opts.fxFn(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
				else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
					$.fn.cycle[opts.fx](curr, next, opts, after, fwd, manual && opts.fastOnEvent);
				else
					$.fn.cycle.custom(curr, next, opts, after, fwd, manual && opts.fastOnEvent);
			}
			else {
				queueNext();
			}
		
			if (changed || opts.nextSlide == opts.currSlide) {
				// calculate the next slide
				opts.lastSlide = opts.currSlide;
				if (opts.random) {
					opts.currSlide = opts.nextSlide;
					if (++opts.randomIndex == els.length) {
						opts.randomIndex = 0;
						opts.randomMap.sort(function(a,b) {return Math.random() - 0.5;});
					}
					opts.nextSlide = opts.randomMap[opts.randomIndex];
					if (opts.nextSlide == opts.currSlide)
						opts.nextSlide = (opts.currSlide == opts.slideCount - 1) ? 0 : opts.currSlide + 1;
				}
				else if (opts.backwards) {
					var roll = (opts.nextSlide - 1) < 0;
					if (roll && opts.bounce) {
						opts.backwards = !opts.backwards;
						opts.nextSlide = 1;
						opts.currSlide = 0;
					}
					else {
						opts.nextSlide = roll ? (els.length-1) : opts.nextSlide-1;
						opts.currSlide = roll ? 0 : opts.nextSlide+1;
					}
				}
				else { // sequence
					var roll = (opts.nextSlide + 1) == els.length;
					if (roll && opts.bounce) {
						opts.backwards = !opts.backwards;
						opts.nextSlide = els.length-2;
						opts.currSlide = els.length-1;
					}
					else {
						opts.nextSlide = roll ? 0 : opts.nextSlide+1;
						opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
					}
				}
			}
			if (changed && opts.pager)
				opts.updateActivePagerLink(opts.pager, opts.currSlide, opts.activePagerClass);
			
			function queueNext() {
				// stage the next transition
				var ms = 0, timeout = opts.timeout;
				if (opts.timeout && !opts.continuous) {
					ms = getTimeout(els[opts.currSlide], els[opts.nextSlide], opts, fwd);
				 if (opts.fx == 'shuffle')
					ms -= opts.speedOut;
			  }
				else if (opts.continuous && p.cyclePause) // continuous shows work off an after callback, not this timer logic
					ms = 10;
				if (ms > 0)
					p.cycleTimeout = setTimeout(function(){ go(els, opts, 0, !opts.backwards) }, ms);
			}
		};
		
		// invoked after transition
		$.fn.cycle.updateActivePagerLink = function(pager, currSlide, clsName) {
		   $(pager).each(function() {
			   $(this).children().removeClass(clsName).eq(currSlide).addClass(clsName);
		   });
		};
		
		// calculate timeout value for current transition
		function getTimeout(curr, next, opts, fwd) {
			if (opts.timeoutFn) {
				// call user provided calc fn
				var t = opts.timeoutFn.call(curr,curr,next,opts,fwd);
				while (opts.fx != 'none' && (t - opts.speed) < 250) // sanitize timeout
					t += opts.speed;
				debug('calculated timeout: ' + t + '; speed: ' + opts.speed);
				if (t !== false)
					return t;
			}
			return opts.timeout;
		};
		
		// expose next/prev function, caller must pass in state
		$.fn.cycle.next = function(opts) { advance(opts,1); };
		$.fn.cycle.prev = function(opts) { advance(opts,0);};
		
		// advance slide forward or back
		function advance(opts, moveForward) {
			var val = moveForward ? 1 : -1;
			var els = opts.elements;
			var p = opts.$cont[0], timeout = p.cycleTimeout;
			if (timeout) {
				clearTimeout(timeout);
				p.cycleTimeout = 0;
			}
			if (opts.random && val < 0) {
				// move back to the previously display slide
				opts.randomIndex--;
				if (--opts.randomIndex == -2)
					opts.randomIndex = els.length-2;
				else if (opts.randomIndex == -1)
					opts.randomIndex = els.length-1;
				opts.nextSlide = opts.randomMap[opts.randomIndex];
			}
			else if (opts.random) {
				opts.nextSlide = opts.randomMap[opts.randomIndex];
			}
			else {
				opts.nextSlide = opts.currSlide + val;
				if (opts.nextSlide < 0) {
					if (opts.nowrap) return false;
					opts.nextSlide = els.length - 1;
				}
				else if (opts.nextSlide >= els.length) {
					if (opts.nowrap) return false;
					opts.nextSlide = 0;
				}
			}
		
			var cb = opts.onPrevNextEvent || opts.prevNextClick; // prevNextClick is deprecated
			if ($.isFunction(cb))
				cb(val > 0, opts.nextSlide, els[opts.nextSlide]);
			go(els, opts, 1, moveForward);
			return false;
		};
		
		function buildPager(els, opts) {
			var $p = $(opts.pager);
			$.each(els, function(i,o) {
				$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
			});
			opts.updateActivePagerLink(opts.pager, opts.startingSlide, opts.activePagerClass);
		};
		
		$.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
			var a;
			if ($.isFunction(opts.pagerAnchorBuilder)) {
				a = opts.pagerAnchorBuilder(i,el);
				debug('pagerAnchorBuilder('+i+', el) returned: ' + a);
			}
			else
				a = '<a href="#">'+(i+1)+'</a>';
				
			if (!a)
				return;
			var $a = $(a);
			// don't reparent if anchor is in the dom
			if ($a.parents('body').length === 0) {
				var arr = [];
				if ($p.length > 1) {
					$p.each(function() {
						var $clone = $a.clone(true);
						$(this).append($clone);
						arr.push($clone[0]);
					});
					$a = $(arr);
				}
				else {
					$a.appendTo($p);
				}
			}
		
			opts.pagerAnchors =  opts.pagerAnchors || [];
			opts.pagerAnchors.push($a);
			
			var pagerFn = function(e) {
				e.preventDefault();
				opts.nextSlide = i;
				var p = opts.$cont[0], timeout = p.cycleTimeout;
				if (timeout) {
					clearTimeout(timeout);
					p.cycleTimeout = 0;
				}
				var cb = opts.onPagerEvent || opts.pagerClick; // pagerClick is deprecated
				if ($.isFunction(cb))
					cb(opts.nextSlide, els[opts.nextSlide]);
				go(els,opts,1,opts.currSlide < i); // trigger the trans
		//		return false; // <== allow bubble
			}
			
			if ( /mouseenter|mouseover/i.test(opts.pagerEvent) ) {
				$a.hover(pagerFn, function(){/* no-op */} );
			}
			else {
				$a.bind(opts.pagerEvent, pagerFn);
			}
			
			if ( ! /^click/.test(opts.pagerEvent) && !opts.allowPagerClickBubble)
				$a.bind('click.cycle', function(){return false;}); // suppress click
			
			var cont = opts.$cont[0];
			var pauseFlag = false; // https://github.com/malsup/cycle/issues/44
			if (opts.pauseOnPagerHover) {
				$a.hover(
					function() { 
						pauseFlag = true;
						cont.cyclePause++; 
						triggerPause(cont,true,true);
					}, function() { 
						pauseFlag && cont.cyclePause--; 
						triggerPause(cont,true,true);
					} 
				);
			}
		};
		
		// helper fn to calculate the number of slides between the current and the next
		$.fn.cycle.hopsFromLast = function(opts, fwd) {
			var hops, l = opts.lastSlide, c = opts.currSlide;
			if (fwd)
				hops = c > l ? c - l : opts.slideCount - l;
			else
				hops = c < l ? l - c : l + opts.slideCount - c;
			return hops;
		};
		
		// fix clearType problems in ie6 by setting an explicit bg color
		// (otherwise text slides look horrible during a fade transition)
		function clearTypeFix($slides) {
			debug('applying clearType background-color hack');
			function hex(s) {
				s = parseInt(s,10).toString(16);
				return s.length < 2 ? '0'+s : s;
			};
			function getBg(e) {
				for ( ; e && e.nodeName.toLowerCase() != 'html'; e = e.parentNode) {
					var v = $.css(e,'background-color');
					if (v && v.indexOf('rgb') >= 0 ) {
						var rgb = v.match(/\d+/g);
						return '#'+ hex(rgb[0]) + hex(rgb[1]) + hex(rgb[2]);
					}
					if (v && v != 'transparent')
						return v;
				}
				return '#ffffff';
			};
			$slides.each(function() { $(this).css('background-color', getBg(this)); });
		};
		
		// reset common props before the next transition
		$.fn.cycle.commonReset = function(curr,next,opts,w,h,rev) {
			$(opts.elements).not(curr).hide();
			if (typeof opts.cssBefore.opacity == 'undefined')
				opts.cssBefore.opacity = 1;
			opts.cssBefore.display = 'block';
			if (opts.slideResize && w !== false && next.cycleW > 0)
				opts.cssBefore.width = next.cycleW;
			if (opts.slideResize && h !== false && next.cycleH > 0)
				opts.cssBefore.height = next.cycleH;
			opts.cssAfter = opts.cssAfter || {};
			opts.cssAfter.display = 'none';
			$(curr).css('zIndex',opts.slideCount + (rev === true ? 1 : 0));
			$(next).css('zIndex',opts.slideCount + (rev === true ? 0 : 1));
		};
		
		// the actual fn for effecting a transition
		$.fn.cycle.custom = function(curr, next, opts, cb, fwd, speedOverride) {
			var $l = $(curr), $n = $(next);
			var speedIn = opts.speedIn, speedOut = opts.speedOut, easeIn = opts.easeIn, easeOut = opts.easeOut;
			$n.css(opts.cssBefore);
			if (speedOverride) {
				if (typeof speedOverride == 'number')
					speedIn = speedOut = speedOverride;
				else
					speedIn = speedOut = 1;
				easeIn = easeOut = null;
			}
			var fn = function() {
				$n.animate(opts.animIn, speedIn, easeIn, function() {
					cb();
				});
			};
			$l.animate(opts.animOut, speedOut, easeOut, function() {
				$l.css(opts.cssAfter);
				if (!opts.sync) 
					fn();
			});
			if (opts.sync) fn();
		};
		
		// transition definitions - only fade is defined here, transition pack defines the rest
		$.fn.cycle.transitions = {
			fade: function($cont, $slides, opts) {
				$slides.not(':eq('+opts.currSlide+')').css('opacity',0);
				opts.before.push(function(curr,next,opts) {
					$.fn.cycle.commonReset(curr,next,opts);
					opts.cssBefore.opacity = 0;
				});
				opts.animIn	   = { opacity: 1 };
				opts.animOut   = { opacity: 0 };
				opts.cssBefore = { top: 0, left: 0 };
			}
		};
		
		$.fn.cycle.ver = function() { return ver; };
		
		// override these globally if you like (they are all optional)
		$.fn.cycle.defaults = {
			activePagerClass: 'activeSlide', // class name used for the active pager link
			after:		   null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
			allowPagerClickBubble: false, // allows or prevents click event on pager anchors from bubbling
			animIn:		   null,  // properties that define how the slide animates in
			animOut:	   null,  // properties that define how the slide animates out
			aspect:		   false,  // preserve aspect ratio during fit resizing, cropping if necessary (must be used with fit option)
			autostop:	   0,	  // true to end slideshow after X transitions (where X == slide count)
			autostopCount: 0,	  // number of transitions (optionally used with autostop to define X)
			backwards:     false, // true to start slideshow at last slide and move backwards through the stack
			before:		   null,  // transition callback (scope set to element to be shown):	 function(currSlideElement, nextSlideElement, options, forwardFlag)
			center: 	   null,  // set to true to have cycle add top/left margin to each slide (use with width and height options)
			cleartype:	   !$.support.opacity,  // true if clearType corrections should be applied (for IE)
			cleartypeNoBg: false, // set to true to disable extra cleartype fixing (leave false to force background color setting on slides)
			containerResize: 1,	  // resize container to fit largest slide
			continuous:	   0,	  // true to start next transition immediately after current one completes
			cssAfter:	   null,  // properties that defined the state of the slide after transitioning out
			cssBefore:	   null,  // properties that define the initial state of the slide before transitioning in
			delay:		   0,	  // additional delay (in ms) for first transition (hint: can be negative)
			easeIn:		   null,  // easing for "in" transition
			easeOut:	   null,  // easing for "out" transition
			easing:		   null,  // easing method for both in and out transitions
			end:		   null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
			fastOnEvent:   0,	  // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
			fit:		   0,	  // force slides to fit container
			fx:			  'fade', // name of transition effect (or comma separated names, ex: 'fade,scrollUp,shuffle')
			fxFn:		   null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
			height:		  'auto', // container height (if the 'fit' option is true, the slides will be set to this height as well)
			manualTrump:   true,  // causes manual transition to stop an active transition instead of being ignored
			metaAttr:     'cycle',// data- attribute that holds the option data for the slideshow
			next:		   null,  // element, jQuery object, or jQuery selector string for the element to use as event trigger for next slide
			nowrap:		   0,	  // true to prevent slideshow from wrapping
			onPagerEvent:  null,  // callback fn for pager events: function(zeroBasedSlideIndex, slideElement)
			onPrevNextEvent: null,// callback fn for prev/next events: function(isNext, zeroBasedSlideIndex, slideElement)
			pager:		   null,  // element, jQuery object, or jQuery selector string for the element to use as pager container
			pagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)
			pagerEvent:	  'click.cycle', // name of event which drives the pager navigation
			pause:		   0,	  // true to enable "pause on hover"
			pauseOnPagerHover: 0, // true to pause when hovering over pager link
			prev:		   null,  // element, jQuery object, or jQuery selector string for the element to use as event trigger for previous slide
			prevNextEvent:'click.cycle',// event which drives the manual transition to the previous or next slide
			random:		   0,	  // true for random, false for sequence (not applicable to shuffle fx)
			randomizeEffects: 1,  // valid when multiple effects are used; true to make the effect sequence random
			requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
			requeueTimeout: 250,  // ms delay for requeue
			rev:		   0,	  // causes animations to transition in reverse (for effects that support it such as scrollHorz/scrollVert/shuffle)
			shuffle:	   null,  // coords for shuffle animation, ex: { top:15, left: 200 }
			skipInitializationCallbacks: false, // set to true to disable the first before/after callback that occurs prior to any transition
			slideExpr:	   null,  // expression for selecting slides (if something other than all children is required)
			slideResize:   1,     // force slide width/height to fixed size before every transition
			speed:		   1000,  // speed of the transition (any valid fx speed value)
			speedIn:	   null,  // speed of the 'in' transition
			speedOut:	   null,  // speed of the 'out' transition
			startingSlide: undefined,	  // zero-based index of the first slide to be displayed
			sync:		   1,	  // true if in/out transitions should occur simultaneously
			timeout:	   4000,  // milliseconds between slide transitions (0 to disable auto advance)
			timeoutFn:     null,  // callback for determining per-slide timeout value:  function(currSlideElement, nextSlideElement, options, forwardFlag)
			updateActivePagerLink: null, // callback fn invoked to update the active pager link (adds/removes activePagerClass style)
			width:         null   // container width (if the 'fit' option is true, the slides will be set to this width as well)
		};
		
		})(jQuery);
		
		
		/*!
		 * jQuery Cycle Plugin Transition Definitions
		 * This script is a plugin for the jQuery Cycle Plugin
		 * Examples and documentation at: http://malsup.com/jquery/cycle/
		 * Copyright (c) 2007-2010 M. Alsup
		 * Version:	 2.73
		 * Dual licensed under the MIT and GPL licenses:
		 * http://www.opensource.org/licenses/mit-license.php
		 * http://www.gnu.org/licenses/gpl.html
		 */
		(function($) {
		
		//
		// These functions define slide initialization and properties for the named
		// transitions. To save file size feel free to remove any of these that you
		// don't need.
		//
		$.fn.cycle.transitions.none = function($cont, $slides, opts) {
			opts.fxFn = function(curr,next,opts,after){
				$(next).show();
				$(curr).hide();
				after();
			};
		};
		
		// not a cross-fade, fadeout only fades out the top slide
		$.fn.cycle.transitions.fadeout = function($cont, $slides, opts) {
			$slides.not(':eq('+opts.currSlide+')').css({ display: 'block', 'opacity': 1 });
			opts.before.push(function(curr,next,opts,w,h,rev) {
				$(curr).css('zIndex',opts.slideCount + (!rev === true ? 1 : 0));
				$(next).css('zIndex',opts.slideCount + (!rev === true ? 0 : 1));
			});
			opts.animIn.opacity = 1;
			opts.animOut.opacity = 0;
			opts.cssBefore.opacity = 1;
			opts.cssBefore.display = 'block';
			opts.cssAfter.zIndex = 0;
		};
		
		// scrollUp/Down/Left/Right
		$.fn.cycle.transitions.scrollUp = function($cont, $slides, opts) {
			$cont.css('overflow','hidden');
			opts.before.push($.fn.cycle.commonReset);
			var h = $cont.height();
			opts.cssBefore.top = h;
			opts.cssBefore.left = 0;
			opts.cssFirst.top = 0;
			opts.animIn.top = 0;
			opts.animOut.top = -h;
		};
		$.fn.cycle.transitions.scrollDown = function($cont, $slides, opts) {
			$cont.css('overflow','hidden');
			opts.before.push($.fn.cycle.commonReset);
			var h = $cont.height();
			opts.cssFirst.top = 0;
			opts.cssBefore.top = -h;
			opts.cssBefore.left = 0;
			opts.animIn.top = 0;
			opts.animOut.top = h;
		};
		$.fn.cycle.transitions.scrollLeft = function($cont, $slides, opts) {
			$cont.css('overflow','hidden');
			opts.before.push($.fn.cycle.commonReset);
			var w = $cont.width();
			opts.cssFirst.left = 0;
			opts.cssBefore.left = w;
			opts.cssBefore.top = 0;
			opts.animIn.left = 0;
			opts.animOut.left = 0-w;
		};
		$.fn.cycle.transitions.scrollRight = function($cont, $slides, opts) {
			$cont.css('overflow','hidden');
			opts.before.push($.fn.cycle.commonReset);
			var w = $cont.width();
			opts.cssFirst.left = 0;
			opts.cssBefore.left = -w;
			opts.cssBefore.top = 0;
			opts.animIn.left = 0;
			opts.animOut.left = w;
		};
		$.fn.cycle.transitions.scrollHorz = function($cont, $slides, opts) {
			$cont.css('overflow','hidden').width();
			opts.before.push(function(curr, next, opts, fwd) {
				if (opts.rev)
					fwd = !fwd;
				$.fn.cycle.commonReset(curr,next,opts);
				opts.cssBefore.left = fwd ? (next.cycleW-1) : (1-next.cycleW);
				opts.animOut.left = fwd ? -curr.cycleW : curr.cycleW;
			});
			opts.cssFirst.left = 0;
			opts.cssBefore.top = 0;
			opts.animIn.left = 0;
			opts.animOut.top = 0;
		};
		$.fn.cycle.transitions.scrollVert = function($cont, $slides, opts) {
			$cont.css('overflow','hidden');
			opts.before.push(function(curr, next, opts, fwd) {
				if (opts.rev)
					fwd = !fwd;
				$.fn.cycle.commonReset(curr,next,opts);
				opts.cssBefore.top = fwd ? (1-next.cycleH) : (next.cycleH-1);
				opts.animOut.top = fwd ? curr.cycleH : -curr.cycleH;
			});
			opts.cssFirst.top = 0;
			opts.cssBefore.left = 0;
			opts.animIn.top = 0;
			opts.animOut.left = 0;
		};
		
		// slideX/slideY
		$.fn.cycle.transitions.slideX = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$(opts.elements).not(curr).hide();
				$.fn.cycle.commonReset(curr,next,opts,false,true);
				opts.animIn.width = next.cycleW;
			});
			opts.cssBefore.left = 0;
			opts.cssBefore.top = 0;
			opts.cssBefore.width = 0;
			opts.animIn.width = 'show';
			opts.animOut.width = 0;
		};
		$.fn.cycle.transitions.slideY = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$(opts.elements).not(curr).hide();
				$.fn.cycle.commonReset(curr,next,opts,true,false);
				opts.animIn.height = next.cycleH;
			});
			opts.cssBefore.left = 0;
			opts.cssBefore.top = 0;
			opts.cssBefore.height = 0;
			opts.animIn.height = 'show';
			opts.animOut.height = 0;
		};
		
		// shuffle
		$.fn.cycle.transitions.shuffle = function($cont, $slides, opts) {
			var i, w = $cont.css('overflow', 'visible').width();
			$slides.css({left: 0, top: 0});
			opts.before.push(function(curr,next,opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,true,true);
			});
			// only adjust speed once!
			if (!opts.speedAdjusted) {
				opts.speed = opts.speed / 2; // shuffle has 2 transitions
				opts.speedAdjusted = true;
			}
			opts.random = 0;
			opts.shuffle = opts.shuffle || {left:-w, top:15};
			opts.els = [];
			for (i=0; i < $slides.length; i++)
				opts.els.push($slides[i]);
		
			for (i=0; i < opts.currSlide; i++)
				opts.els.push(opts.els.shift());
		
			// custom transition fn (hat tip to Benjamin Sterling for this bit of sweetness!)
			opts.fxFn = function(curr, next, opts, cb, fwd) {
				if (opts.rev)
					fwd = !fwd;
				var $el = fwd ? $(curr) : $(next);
				$(next).css(opts.cssBefore);
				var count = opts.slideCount;
				$el.animate(opts.shuffle, opts.speedIn, opts.easeIn, function() {
					var hops = $.fn.cycle.hopsFromLast(opts, fwd);
					for (var k=0; k < hops; k++)
						fwd ? opts.els.push(opts.els.shift()) : opts.els.unshift(opts.els.pop());
					if (fwd) {
						for (var i=0, len=opts.els.length; i < len; i++)
							$(opts.els[i]).css('z-index', len-i+count);
					}
					else {
						var z = $(curr).css('z-index');
						$el.css('z-index', parseInt(z,10)+1+count);
					}
					$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
						$(fwd ? this : curr).hide();
						if (cb) cb();
					});
				});
			};
			$.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
		};
		
		// turnUp/Down/Left/Right
		$.fn.cycle.transitions.turnUp = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,false);
				opts.cssBefore.top = next.cycleH;
				opts.animIn.height = next.cycleH;
				opts.animOut.width = next.cycleW;
			});
			opts.cssFirst.top = 0;
			opts.cssBefore.left = 0;
			opts.cssBefore.height = 0;
			opts.animIn.top = 0;
			opts.animOut.height = 0;
		};
		$.fn.cycle.transitions.turnDown = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,false);
				opts.animIn.height = next.cycleH;
				opts.animOut.top   = curr.cycleH;
			});
			opts.cssFirst.top = 0;
			opts.cssBefore.left = 0;
			opts.cssBefore.top = 0;
			opts.cssBefore.height = 0;
			opts.animOut.height = 0;
		};
		$.fn.cycle.transitions.turnLeft = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,false,true);
				opts.cssBefore.left = next.cycleW;
				opts.animIn.width = next.cycleW;
			});
			opts.cssBefore.top = 0;
			opts.cssBefore.width = 0;
			opts.animIn.left = 0;
			opts.animOut.width = 0;
		};
		$.fn.cycle.transitions.turnRight = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,false,true);
				opts.animIn.width = next.cycleW;
				opts.animOut.left = curr.cycleW;
			});
			$.extend(opts.cssBefore, { top: 0, left: 0, width: 0 });
			opts.animIn.left = 0;
			opts.animOut.width = 0;
		};
		
		// zoom
		$.fn.cycle.transitions.zoom = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,false,false,true);
				opts.cssBefore.top = next.cycleH/2;
				opts.cssBefore.left = next.cycleW/2;
				$.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
				$.extend(opts.animOut, { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 });
			});
			opts.cssFirst.top = 0;
			opts.cssFirst.left = 0;
			opts.cssBefore.width = 0;
			opts.cssBefore.height = 0;
		};
		
		// fadeZoom
		$.fn.cycle.transitions.fadeZoom = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,false,false);
				opts.cssBefore.left = next.cycleW/2;
				opts.cssBefore.top = next.cycleH/2;
				$.extend(opts.animIn, { top: 0, left: 0, width: next.cycleW, height: next.cycleH });
			});
			opts.cssBefore.width = 0;
			opts.cssBefore.height = 0;
			opts.animOut.opacity = 0;
		};
		
		// blindX
		$.fn.cycle.transitions.blindX = function($cont, $slides, opts) {
			var w = $cont.css('overflow','hidden').width();
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts);
				opts.animIn.width = next.cycleW;
				opts.animOut.left   = curr.cycleW;
			});
			opts.cssBefore.left = w;
			opts.cssBefore.top = 0;
			opts.animIn.left = 0;
			opts.animOut.left = w;
		};
		// blindY
		$.fn.cycle.transitions.blindY = function($cont, $slides, opts) {
			var h = $cont.css('overflow','hidden').height();
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts);
				opts.animIn.height = next.cycleH;
				opts.animOut.top   = curr.cycleH;
			});
			opts.cssBefore.top = h;
			opts.cssBefore.left = 0;
			opts.animIn.top = 0;
			opts.animOut.top = h;
		};
		// blindZ
		$.fn.cycle.transitions.blindZ = function($cont, $slides, opts) {
			var h = $cont.css('overflow','hidden').height();
			var w = $cont.width();
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts);
				opts.animIn.height = next.cycleH;
				opts.animOut.top   = curr.cycleH;
			});
			opts.cssBefore.top = h;
			opts.cssBefore.left = w;
			opts.animIn.top = 0;
			opts.animIn.left = 0;
			opts.animOut.top = h;
			opts.animOut.left = w;
		};
		
		// growX - grow horizontally from centered 0 width
		$.fn.cycle.transitions.growX = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,false,true);
				opts.cssBefore.left = this.cycleW/2;
				opts.animIn.left = 0;
				opts.animIn.width = this.cycleW;
				opts.animOut.left = 0;
			});
			opts.cssBefore.top = 0;
			opts.cssBefore.width = 0;
		};
		// growY - grow vertically from centered 0 height
		$.fn.cycle.transitions.growY = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,false);
				opts.cssBefore.top = this.cycleH/2;
				opts.animIn.top = 0;
				opts.animIn.height = this.cycleH;
				opts.animOut.top = 0;
			});
			opts.cssBefore.height = 0;
			opts.cssBefore.left = 0;
		};
		
		// curtainX - squeeze in both edges horizontally
		$.fn.cycle.transitions.curtainX = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,false,true,true);
				opts.cssBefore.left = next.cycleW/2;
				opts.animIn.left = 0;
				opts.animIn.width = this.cycleW;
				opts.animOut.left = curr.cycleW/2;
				opts.animOut.width = 0;
			});
			opts.cssBefore.top = 0;
			opts.cssBefore.width = 0;
		};
		// curtainY - squeeze in both edges vertically
		$.fn.cycle.transitions.curtainY = function($cont, $slides, opts) {
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,false,true);
				opts.cssBefore.top = next.cycleH/2;
				opts.animIn.top = 0;
				opts.animIn.height = next.cycleH;
				opts.animOut.top = curr.cycleH/2;
				opts.animOut.height = 0;
			});
			opts.cssBefore.height = 0;
			opts.cssBefore.left = 0;
		};
		
		// cover - curr slide covered by next slide
		$.fn.cycle.transitions.cover = function($cont, $slides, opts) {
			var d = opts.direction || 'left';
			var w = $cont.css('overflow','hidden').width();
			var h = $cont.height();
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts);
				if (d == 'right')
					opts.cssBefore.left = -w;
				else if (d == 'up')
					opts.cssBefore.top = h;
				else if (d == 'down')
					opts.cssBefore.top = -h;
				else
					opts.cssBefore.left = w;
			});
			opts.animIn.left = 0;
			opts.animIn.top = 0;
			opts.cssBefore.top = 0;
			opts.cssBefore.left = 0;
		};
		
		// uncover - curr slide moves off next slide
		$.fn.cycle.transitions.uncover = function($cont, $slides, opts) {
			var d = opts.direction || 'left';
			var w = $cont.css('overflow','hidden').width();
			var h = $cont.height();
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,true,true);
				if (d == 'right')
					opts.animOut.left = w;
				else if (d == 'up')
					opts.animOut.top = -h;
				else if (d == 'down')
					opts.animOut.top = h;
				else
					opts.animOut.left = -w;
			});
			opts.animIn.left = 0;
			opts.animIn.top = 0;
			opts.cssBefore.top = 0;
			opts.cssBefore.left = 0;
		};
		
		// toss - move top slide and fade away
		$.fn.cycle.transitions.toss = function($cont, $slides, opts) {
			var w = $cont.css('overflow','visible').width();
			var h = $cont.height();
			opts.before.push(function(curr, next, opts) {
				$.fn.cycle.commonReset(curr,next,opts,true,true,true);
				// provide default toss settings if animOut not provided
				if (!opts.animOut.left && !opts.animOut.top)
					$.extend(opts.animOut, { left: w*2, top: -h/2, opacity: 0 });
				else
					opts.animOut.opacity = 0;
			});
			opts.cssBefore.left = 0;
			opts.cssBefore.top = 0;
			opts.animIn.left = 0;
		};
		
		// wipe - clip animation
		$.fn.cycle.transitions.wipe = function($cont, $slides, opts) {
			var w = $cont.css('overflow','hidden').width();
			var h = $cont.height();
			opts.cssBefore = opts.cssBefore || {};
			var clip;
			if (opts.clip) {
				if (/l2r/.test(opts.clip))
					clip = 'rect(0px 0px '+h+'px 0px)';
				else if (/r2l/.test(opts.clip))
					clip = 'rect(0px '+w+'px '+h+'px '+w+'px)';
				else if (/t2b/.test(opts.clip))
					clip = 'rect(0px '+w+'px 0px 0px)';
				else if (/b2t/.test(opts.clip))
					clip = 'rect('+h+'px '+w+'px '+h+'px 0px)';
				else if (/zoom/.test(opts.clip)) {
					var top = parseInt(h/2,10);
					var left = parseInt(w/2,10);
					clip = 'rect('+top+'px '+left+'px '+top+'px '+left+'px)';
				}
			}
		
			opts.cssBefore.clip = opts.cssBefore.clip || clip || 'rect(0px 0px 0px 0px)';
		
			var d = opts.cssBefore.clip.match(/(\d+)/g);
			var t = parseInt(d[0],10), r = parseInt(d[1],10), b = parseInt(d[2],10), l = parseInt(d[3],10);
		
			opts.before.push(function(curr, next, opts) {
				if (curr == next) return;
				var $curr = $(curr), $next = $(next);
				$.fn.cycle.commonReset(curr,next,opts,true,true,false);
				opts.cssAfter.display = 'block';
		
				var step = 1, count = parseInt((opts.speedIn / 13),10) - 1;
				(function f() {
					var tt = t ? t - parseInt(step * (t/count),10) : 0;
					var ll = l ? l - parseInt(step * (l/count),10) : 0;
					var bb = b < h ? b + parseInt(step * ((h-b)/count || 1),10) : h;
					var rr = r < w ? r + parseInt(step * ((w-r)/count || 1),10) : w;
					$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
					(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
				})();
			});
			$.extend(opts.cssBefore, { display: 'block', opacity: 1, top: 0, left: 0 });
			opts.animIn	   = { left: 0 };
			opts.animOut   = { left: 0 };
		};
		
		})(jQuery);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 * jQuery Cookie plugin
		 *
		 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
		 * Dual licensed under the MIT and GPL licenses:
		 * http://www.opensource.org/licenses/mit-license.php
		 * http://www.gnu.org/licenses/gpl.html
		 *
		 */
		jQuery.cookie = function (key, value, options) {
		
			// key and at least value given, set cookie...
			if (arguments.length > 1 && String(value) !== "[object Object]") {
				options = jQuery.extend({}, options);
		
				if (value === null || value === undefined) {
					options.expires = -1;
				}
		
				if (typeof options.expires === 'number') {
					var days = options.expires, t = options.expires = new Date();
					t.setDate(t.getDate() + days);
				}
		
				value = String(value);
		
				return (document.cookie = [
					encodeURIComponent(key), '=',
					options.raw ? value : encodeURIComponent(value),
					options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
					options.path ? '; path=' + options.path : '',
					options.domain ? '; domain=' + options.domain : '',
					options.secure ? '; secure' : ''
				].join(''));
			}
		
			// key and possibly options given, get cookie...
			options = value || {};
			var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
			return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
		};
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*
		* Title                   : Image Loader
		* Version                 : 1.1
		* File                    : jquery.dop.ImageLoader.js
		* File Version            : 1.1
		* Created / Last Modified : 05 May 2011
		* Author                  : Marius-Cristian Donea
		* Copyright               : © 2011 Marius-Cristian Donea
		* Website                 : http://www.mariuscristiandonea.com
		* Description             : Image Loader jQuery plugin.
		*/
		
		(function($)
		{
			$.fn.DOPImageLoader = function(options)
			{
				var Settings = {'Container': '',
								'LoaderURL': templateDir + 'js/mylibs/imageLoader/images/ajax-loader.gif',
								'NoImageURL': templateDir + 'js/mylibs/imageLoader/images/no-image.png',
								'LoadPreloaderFirst': true,
								'LoadingInOrder': true,
								'ImageSize': 'fill', // none, container, fill, proportionally
								'ImageDelay': 600,
								'CacheBuster': false,
								'SuccessCallback': '',
								'ErrorCallback': ''},
				UniqueID = 0,
				Container = this,
				Images = new Array(),
				Titles = new Array(),
				Parents = new Array(),
				ParentsWidth = new Array(),
				ParentsHeight = new Array(),
				NoImages = 0,
		
				methods = {
							init:function(){// Init Plugin.
								UniqueID = prototypes.randomString(32);
								return this.each(function(){
									if (options){
										$.extend(Settings, options);
									}
									if (Settings['Container'] != ''){
										Container = $(Settings['Container']);
									}
									methods.getImages();
								});
							},
							getImages:function(){// Get all images data from the container and remove them.
								$('img', Container).each(function(){
									var t = $(this);
									NoImages++;
									Images[NoImages] = t.attr('src');
									Titles[NoImages] = t.attr('title');
									Parents[NoImages] = t.parent();
									ParentsWidth[NoImages] = t.parent().width();
									ParentsHeight[NoImages] = t.parent().height();
								});
								methods.initImages();
							},
							initImages:function(){// Init Images.
								var i;
								
								for (i=1; i<=NoImages; i++){
									Parents[i].html('');
								}
		
								for (i=1; i<=NoImages; i++){
									Parents[i].html(Parents[i].html()+'<span class="'+UniqueID+'-'+i+'">');
									$('.'+UniqueID+'-'+i).css({'background':'url('+Settings['LoaderURL']+') no-repeat center center',
															   'display':'block',
															   'width':ParentsWidth[i],
															   'height':ParentsHeight[i]});
								}
		
								if (Settings['LoadPreloaderFirst']){
									methods.loadPreloader();
								}
								else{
									methods.initImagePreload();
								}
							},
							loadPreloader:function(){// Load Preloader
								var img = new Image(), i;
								$(img).load(function(){
									methods.initImagePreload();
								}).error(function(){
									methods.initImagePreload();
								}).attr('src', Settings['LoaderURL']);
							},
							initImagePreload:function(){
								if (Settings['LoadingInOrder']){
									methods.loadImage(1);
								}
								else{
									for (i=1; i<=NoImages; i++){
										methods.loadImage(i);
									}
								}
							},
							loadImage:function(no){// Load Image
								var img = new Image(),
								imgSrc = Images[no];
		
								if (Settings['CacheBuster']){
									imgSrc += '?CacheBuster='+prototypes.randomString(32);
								}
		
								$(img).load(function(){
									var t = $(this);
									$('.'+UniqueID+'-'+no).append(this);
									$('.'+UniqueID+'-'+no).css('background', 'none');
									t.attr('title', Titles[no]);
									if (Settings['ImageSize'] == 'container'){
										t.width($('.'+UniqueID+'-'+no).width());
										t.height($('.'+UniqueID+'-'+no).height());
									}
									else if (Settings['ImageSize'] == 'fill'){
										$('.'+UniqueID+'-'+no).css('overflow', 'hidden');
										prototypes.resizeItem2($('.'+UniqueID+'-'+no), t, $('.'+UniqueID+'-'+no).width(), $('.'+UniqueID+'-'+no).height(), t.width(), t.height(), 'center')
									}
									else if (Settings['ImageSize'] == 'proportionally'){
										prototypes.resizeItem($('.'+UniqueID+'-'+no), t, $('.'+UniqueID+'-'+no).width(), $('.'+UniqueID+'-'+no).height(), t.width(), t.height(), 'center')
									}
									$('.'+UniqueID+'-'+no).css('opacity', 0);
									$('.'+UniqueID+'-'+no).stop(true, true).animate({'opacity': 1}, Settings['ImageDelay']);
									if (Settings['LoadingInOrder'] && no < NoImages){
										methods.loadImage(no+1);
									}
									eval(Settings['SuccessCallback']);
								}).error(function(){
									$('.'+UniqueID+'-'+no).css({'background':'url('+Settings['NoImageURL']+') no-repeat center center',
																'opacity': 0});
									$('.'+UniqueID+'-'+no).stop(true, true).animate({'opacity': 1}, Settings['ImageDelay']);
									if (Settings['LoadingInOrder'] && no < NoImages){
										methods.loadImage(no+1);
									}
									eval(Settings['ErrorCallback']);
								}).attr('src', imgSrc);
							}                    
						  },
		
				prototypes = {
								resizeItem:function(parent, child, cw, ch, dw, dh, pos){// Resize & Position an Item (the item is 100% visible)
									var currW = 0, currH = 0;
		
									if (dw <= cw && dh <= ch){
										currW = dw;
										currH = dh;
									}
									else{
										currH = ch;
										currW = (dw*ch)/dh;
		
										if (currW > cw){
											currW = cw;
											currH = (dh*cw)/dw;
										}
									}
		
									child.width(currW);
									child.height(currH);
									switch(pos.toLowerCase()){
										case 'top':
											prototypes.topItem(parent, child, ch);
											break;
										case 'bottom':
											prototypes.bottomItem(parent, child, ch);
											break;                            
										case 'left':
											prototypes.leftItem(parent, child, cw);
											break;
										case 'right':
											prototypes.rightItem(parent, child, cw);
											break;
										case 'horizontal-center':
											prototypes.hCenterItem(parent, child, cw);
											break;
										case 'vertical-center':
											prototypes.vCenterItem(parent, child, ch);
											break;
										case 'center':
											prototypes.centerItem(parent, child, cw, ch);
											break;
										case 'top-left':
											prototypes.tlItem(parent, child, cw, ch);
											break;
										case 'top-center':
											prototypes.tcItem(parent, child, cw, ch);
											break;
										case 'top-right':
											prototypes.trItem(parent, child, cw, ch);
											break;
										case 'middle-left':
											prototypes.mlItem(parent, child, cw, ch);
											break;
										case 'middle-right':
											prototypes.mrItem(parent, child, cw, ch);
											break;
										case 'bottom-left':
											prototypes.blItem(parent, child, cw, ch);
											break;
										case 'bottom-center':
											prototypes.bcItem(parent, child, cw, ch);
											break;
										case 'bottom-right':
											prototypes.brItem(parent, child, cw, ch);
											break;
									}
								},
								resizeItem2:function(parent, child, cw, ch, dw, dh, pos){// Resize & Position an Item (the item covers all the container)
									var currW = 0, currH = 0;
		
									currH = ch;
									currW = (dw*ch)/dh;
		
									if (currW < cw){
										currW = cw;
										currH = (dh*cw)/dw;
									}
		
									child.width(currW);
									child.height(currH);
		
									switch(pos.toLowerCase()){
										case 'top':
											prototypes.topItem(parent, child, ch);
											break;
										case 'bottom':
											prototypes.bottomItem(parent, child, ch);
											break;
										case 'left':
											prototypes.leftItem(parent, child, cw);
											break;
										case 'right':
											prototypes.rightItem(parent, child, cw);
											break;
										case 'horizontal-center':
											prototypes.hCenterItem(parent, child, cw);
											break;
										case 'vertical-center':
											prototypes.vCenterItem(parent, child, ch);
											break;
										case 'center':
											prototypes.centerItem(parent, child, cw, ch);
											break;
										case 'top-left':
											prototypes.tlItem(parent, child, cw, ch);
											break;
										case 'top-center':
											prototypes.tcItem(parent, child, cw, ch);
											break;
										case 'top-right':
											prototypes.trItem(parent, child, cw, ch);
											break;
										case 'middle-left':
											prototypes.mlItem(parent, child, cw, ch);
											break;
										case 'middle-right':
											prototypes.mrItem(parent, child, cw, ch);
											break;
										case 'bottom-left':
											prototypes.blItem(parent, child, cw, ch);
											break;
										case 'bottom-center':
											prototypes.bcItem(parent, child, cw, ch);
											break;
										case 'bottom-right':
											prototypes.brItem(parent, child, cw, ch);
											break;
									}
								},
		
								topItem:function(parent, child, ch){// Position Item on Top
									parent.height(ch);
									child.css('margin-top', 0);
								},
								bottomItem:function(parent, child, ch){// Position Item on Bottom
									parent.height(ch);
									child.css('margin-top', ch-child.height());
								},
								leftItem:function(parent, child, cw){// Position Item on Left
									parent.width(cw);
									child.css('margin-left', 0);
								},
								rightItem:function(parent, child, cw){// Position Item on Right
									parent.width(cw);
									child.css('margin-left', parent.width()-child.width());
								},
								hCenterItem:function(parent, child, cw){// Position Item on Horizontal Center
									parent.width(cw);
									child.css('margin-left', (cw-child.width())/2);
								},
								vCenterItem:function(parent, child, ch){// Position Item on Vertical Center
									parent.height(ch);
									child.css('margin-top', (ch-child.height())/2);
								},
								centerItem:function(parent, child, cw, ch){// Position Item on Center
									prototypes.hCenterItem(parent, child, cw);
									prototypes.vCenterItem(parent, child, ch);
								},
								tlItem:function(parent, child, cw, ch){// Position Item on Top-Left
									prototypes.topItem(parent, child, ch);
									prototypes.leftItem(parent, child, cw);
								},
								tcItem:function(parent, child, cw, ch){// Position Item on Top-Center
									prototypes.topItem(parent, child, ch);
									prototypes.hCenterItem(parent, child, cw);
								},
								trItem:function(parent, child, cw, ch){// Position Item on Top-Right
									prototypes.topItem(parent, child, ch);
									prototypes.rightItem(parent, child, cw);
								},
								mlItem:function(parent, child, cw, ch){// Position Item on Middle-Left
									prototypes.vCenterItem(parent, child, ch);
									prototypes.leftItem(parent, child, cw);
								},
								mrItem:function(parent, child, cw, ch){// Position Item on Middle-Right
									prototypes.vCenterItem(parent, child, ch);
									prototypes.rightItem(parent, child, cw);
								},
								blItem:function(parent, child, cw, ch){// Position Item on Bottom-Left
									prototypes.bottomItem(parent, child, ch);
									prototypes.leftItem(parent, child, cw);
								},
								bcItem:function(parent, child, cw, ch){// Position Item on Bottom-Center
									prototypes.bottomItem(parent, child, ch);
									prototypes.hCenterItem(parent, child, cw);
								},
								brItem:function(parent, child, cw, ch){// Position Item on Bottom-Right
									prototypes.bottomItem(parent, child, ch);
									prototypes.rightItem(parent, child, cw);
								},
		
								randomize:function(theArray){// Randomize the items of an array
									theArray.sort(function(){
										return 0.5-Math.random();
									});
									return theArray;
								},
								randomString:function(string_length){// Create a string with random elements
									var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz",
									random_string = '';
		
									for (var i=0; i<string_length; i++){
										var rnum = Math.floor(Math.random()*chars.length);
										random_string += chars.substring(rnum,rnum+1);
									}
									return random_string;
								},
		
								isIE8Browser:function(){// Detect the browser IE8
									var isIE8 = false,
									agent = navigator.userAgent.toLowerCase();
		
									if (agent.indexOf('msie 8') != -1){
										isIE8 = true;
									}
									return isIE8;
								},
								isTouchDevice:function(){// Detect Touchscreen devices
									var isTouch = false,
									agent = navigator.userAgent.toLowerCase();
		
									if (agent.indexOf('android') != -1){
										isTouch = true;
									}
									if (agent.indexOf('blackberry') != -1){
										isTouch = true;
									}
									if (agent.indexOf('ipad') != -1){
										isTouch = true;
									}
									if (agent.indexOf('iphone') != -1){
										isTouch = true;
									}
									if (agent.indexOf('ipod') != -1){
										isTouch = true;
									}
									if (agent.indexOf('palm') != -1){
										isTouch = true;
									}
									if (agent.indexOf('series60') != -1){
										isTouch = true;
									}
									if (agent.indexOf('symbian') != -1){
										isTouch = true;
									}
									if (agent.indexOf('windows ce') != -1){
										isTouch = true;
									}
		
									return isTouch;
								},
		
								openLink:function(url, target){// Open a link.
									if (target.toLowerCase() == '_blank'){
										window.open(url);
									}
									else{
										window.location = url;
									}
								}
							 };
		
				return methods.init.apply(this);
			}
		})(jQuery);
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*
		  Formalize - version 1.1
		
		  Note: This file depends on the jQuery library.
		*/
		
		// Module pattern:
		// http://yuiblog.com/blog/2007/06/12/module-pattern
		var FORMALIZE = (function($, window, document, undefined) {
		  // Private constants.
		  var PLACEHOLDER_SUPPORTED = 'placeholder' in document.createElement('input');
		  var AUTOFOCUS_SUPPORTED = 'autofocus' in document.createElement('input');
		  var IE6 = !!($.browser.msie && parseInt($.browser.version, 10) === 6);
		  var IE7 = !!($.browser.msie && parseInt($.browser.version, 10) === 7);
		
		  // Expose innards of FORMALIZE.
		  return {
			// FORMALIZE.go
			go: function() {
			  for (var i in FORMALIZE.init) {
				FORMALIZE.init[i]();
			  }
			},
			// FORMALIZE.init
			init: {
			  // FORMALIZE.init.full_input_size
			  full_input_size: function() {
				if (!IE7 || !$('textarea, input.input_full').length) {
				  return;
				}
		
				// This fixes width: 100% on <textarea> and class="input_full".
				// It ensures that form elements don't go wider than container.
				$('textarea, input.input_full').wrap('<span class="input_full_wrap"></span>');
			  },
			  // FORMALIZE.init.ie6_skin_inputs
			  ie6_skin_inputs: function() {
				// Test for Internet Explorer 6.
				if (!IE6 || !$('input, select, textarea').length) {
				  // Exit if the browser is not IE6,
				  // or if no form elements exist.
				  return;
				}
		
				// For <input type="submit" />, etc.
				var button_regex = /button|submit|reset/;
		
				// For <input type="text" />, etc.
				var type_regex = /date|datetime|datetime-local|email|month|number|password|range|search|tel|text|time|url|week/;
		
				$('input').each(function() {
				  var el = $(this);
		
				  // Is it a button?
				  if (this.getAttribute('type').match(button_regex)) {
					el.addClass('ie6_button');
		
					/* Is it disabled? */
					if (this.disabled) {
					  el.addClass('ie6_button_disabled');
					}
				  }
				  // Or is it a textual input?
				  else if (this.getAttribute('type').match(type_regex)) {
					el.addClass('ie6_input');
		
					/* Is it disabled? */
					if (this.disabled) {
					  el.addClass('ie6_input_disabled');
					}
				  }
				});
		
				$('textarea, select').each(function() {
				  /* Is it disabled? */
				  if (this.disabled) {
					$(this).addClass('ie6_input_disabled');
				  }
				});
			  },
			  // FORMALIZE.init.autofocus
			  autofocus: function() {
				if (AUTOFOCUS_SUPPORTED || !$(':input[autofocus]').length) {
				  return;
				}
		
				$(':input[autofocus]:visible:first').focus();
			  },
			  // FORMALIZE.init.placeholder
			  placeholder: function() {
				if (PLACEHOLDER_SUPPORTED || !$(':input[placeholder]').length) {
				  // Exit if placeholder is supported natively,
				  // or if page does not have any placeholder.
				  return;
				}
		
				FORMALIZE.misc.add_placeholder();
		
				$(':input[placeholder]').each(function() {
				  // Placeholder obscured in older browsers,
				  // so there's no point adding to password.
				  if (this.type === 'password') {
					return;
				  }
		
				  var el = $(this);
				  var text = el.attr('placeholder');
		
				  el.focus(function() {
					if (el.val() === text) {
					  el.val('').removeClass('placeholder_text');
					}
				  }).blur(function() {
					FORMALIZE.misc.add_placeholder();
				  });
		
				  // Prevent <form> from accidentally
				  // submitting the placeholder text.
				  el.closest('form').submit(function() {
					if (el.val() === text) {
					  el.val('').removeClass('placeholder_text');
					}
				  }).bind('reset', function() {
					setTimeout(FORMALIZE.misc.add_placeholder, 50);
				  });
				});
			  }
			},
			// FORMALIZE.misc
			misc: {
			  // FORMALIZE.misc.add_placeholder
			  add_placeholder: function() {
				if (PLACEHOLDER_SUPPORTED || !$(':input[placeholder]').length) {
				  // Exit if placeholder is supported natively,
				  // or if page does not have any placeholder.
				  return;
				}
		
				$(':input[placeholder]').each(function() {
				  // Placeholder obscured in older browsers,
				  // so there's no point adding to password.
				  if (this.type === 'password') {
					return;
				  }
		
				  var el = $(this);
				  var text = el.attr('placeholder');
		
				  if (!el.val() || el.val() === text) {
					el.val(text).addClass('placeholder_text');
				  }
				});
			  }
			}
		  };
		// Alias jQuery, window, document.
		})(jQuery, this, this.document);
		
		// Automatically calls all functions in FORMALIZE.init
		jQuery(document).ready(function() {
		  FORMALIZE.go();
		});
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/*!
		 * jQuery clueTip plugin v1.2.4
		 *
		 * Date: Fri Nov 25 23:45:10 2011 EST
		 * Requires: jQuery v1.3+
		 *
		 * Copyright 2011, Karl Swedberg
		 * Dual licensed under the MIT and GPL licenses:
		 * http://www.opensource.org/licenses/mit-license.php
		 * http://www.gnu.org/licenses/gpl.html
		 *
		 *
		 * Examples can be found at http://plugins.learningjquery.com/cluetip/demo/
		 *
		*/
		
		(function($) {
		
		
		  $.cluetip = {
			version: '1.2.4',
		
			// the HTML that will be used for the tooltip
			template: ['<div>',
			  '<div class="cluetip-outer">',
				'<h3 class="cluetip-title ui-widget-header ui-cluetip-header"></h3>',
				'<div class="cluetip-inner ui-widget-content ui-cluetip-content"></div>',
			  '</div>',
			  '<div class="cluetip-extra"></div>',
			  '<div class="cluetip-arrows ui-state-default"></div>',
			'</div>'].join(''),
		
			/* clueTip setup
			 *  the setup options are applied each time .cluetip() is called,
			 *  BUT only if <div id="cluetip"> is not already in the document
			*/
			setup: {
			  // method to be used for inserting the clueTip into the DOM.
			  // Permitted values are 'appendTo', 'prependTo', 'insertBefore', and 'insertAfter'
			  insertionType: 'appendTo',
			  // element in the DOM the plugin will reference when inserting the clueTip.
			  insertionElement: 'body'
			},
		
			/*
			 * clueTip options
			 *
			 * each one can be explicitly overridden by changing its value.
			 * for example: $.cluetip.defaults.width = 200;
			 *         or: $.fn.cluetip.defaults.width = 200; // for compatibility with previous clueTip versions
			 * would change the default width for all clueTips to 200.
			 *
			 * each one can also be overridden by passing an options map to the cluetip method.
			 * for example: $('a.example').cluetip({width: 200});
			 * would change the default width to 200 for clueTips invoked by a link with class of "example"
			 *
			*/
			defaults: {
			  multiple:         false,    // Allow a new tooltip to be created for each .cluetip() call
			  width:            275,      // The width of the clueTip
			  height:           'auto',   // The height of the clueTip
			  cluezIndex:       97,       // Sets the z-index style property of the clueTip
			  positionBy:       'auto',   // Sets the type of positioning: 'auto', 'mouse','bottomTop', 'fixed'
			  topOffset:        15,       // Number of px to offset clueTip from top of invoking element
			  leftOffset:       15,       // Number of px to offset clueTip from left of invoking element
			  local:            false,    // Whether to use content from the same page for the clueTip's body
			  localPrefix:      null,     // string to be prepended to the tip attribute if local is true
			  localIdSuffix:    null,     // string to be appended to the cluetip content element's id if local is true
			  hideLocal:        true,     // If local option is set to true, this determines whether local content
										  // to be shown in clueTip should be hidden at its original location
			  attribute:        'rel',    // the attribute to be used for fetching the clueTip's body content
			  titleAttribute:   'title',  // the attribute to be used for fetching the clueTip's title
			  splitTitle:       '',       // A character used to split the title attribute into the clueTip title and divs
										  // within the clueTip body. more info below [6]
			  escapeTitle:      false,    // whether to html escape the title attribute
			  showTitle:        true,     // show title bar of the clueTip, even if title attribute not set
			  cluetipClass:     'default',// class added to outermost clueTip div in the form of 'cluetip-' + clueTipClass.
			  hoverClass:       '',       // class applied to the invoking element onmouseover and removed onmouseout
			  waitImage:        true,     // whether to show a "loading" img, which is set in jquery.cluetip.css
			  cursor:           'help',
			  arrows:           false,    // if true, displays arrow on appropriate side of clueTip
			  dropShadow:       true,     // set to false if you don't want the drop-shadow effect on the clueTip
			  dropShadowSteps:  6,        // adjusts the size of the drop shadow
			  sticky:           false,    // keep visible until manually closed
			  mouseOutClose:    false,    // close when clueTip is moused out
			  activation:       'hover',  // set to 'click' to force user to click to show clueTip
										  // set to 'focus' to show on focus of a form element and hide on blur
			  clickThrough:     true,    // if true, and activation is not 'click', then clicking on link will take user to the link's href,
										  // even if href and tipAttribute are equal
			  tracking:         false,    // if true, clueTip will track mouse movement (experimental)
			  delayedClose:     0,        // close clueTip on a timed delay (experimental)
			  closePosition:    'top',    // location of close text for sticky cluetips; can be 'top' or 'bottom' or 'title'
			  closeText:        'Close',  // text (or HTML) to to be clicked to close sticky clueTips
			  truncate:         0,        // number of characters to truncate clueTip's contents. if 0, no truncation occurs
		
			  // effect and speed for opening clueTips
			  fx: {
								open:       'show', // can be 'show' or 'slideDown' or 'fadeIn'
								openSpeed:  ''
			  },
		
			  // settings for when hoverIntent plugin is used
			  hoverIntent: {
								sensitivity:  3,
								interval:     50,
								timeout:      0
			  },
		
			  // short-circuit function to run just before clueTip is shown.
			  onActivate:       function(e) {return true;},
			  // function to run just after clueTip is shown.
			  onShow:           function(ct, ci){},
			  // function to run just after clueTip is hidden.
			  onHide:           function(ct, ci){},
			  // whether to cache results of ajax request to avoid unnecessary hits to server
			  ajaxCache:        true,
		
			  // process data retrieved via xhr before it's displayed
			  ajaxProcess:      function(data) {
								  data = data.replace(/<(script|style|title)[^<]+<\/(script|style|title)>/gm, '').replace(/<(link|meta)[^>]+>/g,'');
								  return data;
			  },
		
			  // can pass in standard $.ajax() parameters. Callback functions, such as beforeSend,
			  // will be queued first within the default callbacks.
			  // The only exception is error, which overrides the default
			  ajaxSettings: {
								// error: function(ct, ci) { /* override default error callback */ },
								// beforeSend: function(ct, ci) { /* called first within default beforeSend callback */ },
								dataType: 'html'
			  },
			  debug: false
		
			}
		  };
		  var $cluetipWait,
			  standardClasses = 'cluetip ui-widget ui-widget-content ui-cluetip',
			  counter = 0,
			  imgCount = 0;
		
		  // use $.fn.prop() if available (jQuery 1.6+); otherwise, $.fn.attr()
		  $.fn.attrProp = $.fn.prop || $.fn.attr;
		
		  // .cluetip() method
		  $.fn.cluetip = function(js, options) {
			var $cluetip, $cluetipInner, $cluetipOuter, $cluetipTitle, $cluetipArrows, $dropShadow;
			if (typeof js == 'object') {
			  options = js;
			  js = null;
			}
			if (js == 'destroy') {
			  var data = this.data('cluetip');
			  if ( data ) {
				$(data.selector).remove();
				$.removeData(this, 'title');
				$.removeData(this, 'cluetip');
				$(document).unbind('.cluetip');
				return this.unbind('.cluetip');
			  }
			}
		
			// merge per-call options with defaults
			options = $.extend(true, {}, $.cluetip.defaults, options || {});
		
			/** =create cluetip divs **/
			counter++;
			var cluetipId = $.cluetip.backCompat || !options.multiple ? 'cluetip' : 'cluetip-' + counter,
				cluetipSelector = '#' + cluetipId,
				prefix = $.cluetip.backCompat ? '#' : '.',
				insertionType = $.cluetip.setup.insertionType,
				insertionElement = $.cluetip.setup.insertionElement || 'body';
		
			insertionType = (/appendTo|prependTo|insertBefore|insertAfter/).test(insertionType) ? insertionType : 'appendTo';
			$cluetip = $(cluetipSelector);
			if (!$cluetip.length) {
		
			  $cluetip = $($.cluetip.template)
			  [insertionType](insertionElement)
			  .attr('id', cluetipId)
			  .css({position: 'absolute', display: 'none'});
		
			  var cluezIndex = +options.cluezIndex;
			  $cluetipOuter = $cluetip.find(prefix + 'cluetip-outer').css({position: 'relative', zIndex: cluezIndex});
			  $cluetipInner = $cluetip.find(prefix + 'cluetip-inner');
			  $cluetipTitle = $cluetip.find(prefix + 'cluetip-title');
			}
			$cluetipWait = $('#cluetip-waitimage');
			if (!$cluetipWait.length) {
			  $cluetipWait = $('<div></div>').attr('id', 'cluetip-waitimage').css({position: 'absolute'});
			}
			$cluetipWait.insertBefore($cluetip).hide();
		
			var cluetipPadding = (parseInt($cluetip.css('paddingLeft'), 10) || 0) + (parseInt($cluetip.css('paddingRight'), 10) || 0);
		
		
			this.each(function(index) {
			  var link = this,
				  $link = $(this),
				  // support metadata plugin (v1.0 and 2.0)
				  opts = $.extend(true, {}, options, $.metadata ? $link.metadata() : $.meta ? $link.data() : $link.data('cluetip') || {}),
				  // start out with no contents (for ajax activation)
				  cluetipContents = false,
				  isActive = false,
				  closeOnDelay = 0,
				  tipAttribute = opts[opts.attribute] || $link.attrProp(opts.attribute) || $link.attr(opts.attribute),
				  ctClass = opts.cluetipClass;
		
			  cluezIndex = +opts.cluezIndex;
			  $link.data('cluetip', {title: link.title, zIndex: cluezIndex, selector: cluetipSelector});
		
			  if (!tipAttribute && !opts.splitTitle && !js) {
				return true;
			  }
			  // if hideLocal is set to true, on DOM ready hide the local content that will be displayed in the clueTip
			  if (opts.local && opts.localPrefix) {tipAttribute = opts.localPrefix + tipAttribute;}
			  if (opts.local && opts.hideLocal && tipAttribute) { $(tipAttribute + ':first').hide(); }
			  var tOffset = parseInt(opts.topOffset, 10), lOffset = parseInt(opts.leftOffset, 10);
			  // vertical measurement variables
			  var tipHeight, wHeight,
				  defHeight = isNaN(parseInt(opts.height, 10)) ? 'auto' : (/\D/g).test(opts.height) ? opts.height : opts.height + 'px';
			  var sTop, linkTop, posY, tipY, mouseY, baseline;
			  // horizontal measurement variables
			  var tipInnerWidth = parseInt(opts.width, 10) || 275,
				  tipWidth = tipInnerWidth + cluetipPadding + opts.dropShadowSteps,
				  linkWidth = this.offsetWidth,
				  linkLeft, posX, tipX, mouseX, winWidth;
		
			  // parse the title
			  var tipParts;
			  var tipTitle = (opts.attribute != 'title') ? $link.attrProp(opts.titleAttribute) || '' : '';
			  if (opts.splitTitle) {
				tipParts = tipTitle.split(opts.splitTitle);
				tipTitle = opts.showTitle || tipParts[0] === '' ? tipParts.shift() : '';
			  }
			  if (opts.escapeTitle) {
				tipTitle = tipTitle.replace(/&/g,'&amp;').replace(/>/g,'&gt;').replace(/</g,'&lt;');
			  }
		
			  var localContent;
			  function returnFalse() { return false; }
		
		/***************************************
		* ACTIVATION
		****************************************/
		
		//activate clueTip
			var activate = function(event) {
			  var pY, continueOn = opts.onActivate($link);
			  if (continueOn === false) {
				return false;
			  }
			  isActive = true;
		
			  // activate function may get called after an initialization of a different target so need to re-get the Correct Cluetip object here
			  $cluetip = $(cluetipSelector).css({position: 'absolute'});
			  $cluetipOuter = $cluetip.find(prefix + 'cluetip-outer');
			  $cluetipInner = $cluetip.find(prefix + 'cluetip-inner');
			  $cluetipTitle = $cluetip.find(prefix + 'cluetip-title');
			  $cluetipArrows = $cluetip.find(prefix + 'cluetip-arrows');
			  $cluetip.removeClass().css({width: tipInnerWidth});
			  if (tipAttribute == $link.attr('href')) {
				$link.css('cursor', opts.cursor);
			  }
			  if (opts.hoverClass) {
				$link.addClass(opts.hoverClass);
			  }
			  linkTop = posY = $link.offset().top;
			  linkLeft = $link.offset().left;
		
			  // FIX: (bug 4412)
			  linkWidth = $link.innerWidth();
			  if ( event.type == focus ) {
				// in focus event, no mouse position is available; this is needed with bottomTop:
				mouseX = linkLeft +  ( linkWidth / 2 ) + lOffset;
				$cluetip.css({left: posX});
				mouseY = posY + tOffset;
			  } else {
				mouseX = event.pageX;
				mouseY = event.pageY;
			  }
			  //END OF FIX
		
			  if (link.tagName.toLowerCase() != 'area') {
				sTop = $(document).scrollTop();
				winWidth = $(window).width();
			  }
		// position clueTip horizontally
			  if (opts.positionBy == 'fixed') {
				posX = linkWidth + linkLeft + lOffset;
				$cluetip.css({left: posX});
			  } else {
				posX = (linkWidth > linkLeft && linkLeft > tipWidth) ||
				  linkLeft + linkWidth + tipWidth + lOffset > winWidth ?
				  linkLeft - tipWidth - lOffset :
				  linkWidth + linkLeft + lOffset;
				if (link.tagName.toLowerCase() == 'area' || opts.positionBy == 'mouse' || linkWidth + tipWidth > winWidth) { // position by mouse
				  if (mouseX + 20 + tipWidth > winWidth) {
					$cluetip.addClass('cluetip-' + ctClass);
					posX = (mouseX - tipWidth - lOffset) >= 0 ? mouseX - tipWidth - lOffset - parseInt($cluetip.css('marginLeft'),10) + parseInt($cluetipInner.css('marginRight'),10) :  mouseX - (tipWidth/2);
				  } else {
					posX = mouseX + lOffset;
				  }
				}
				pY = posX < 0 ? event.pageY + tOffset : event.pageY;
				if (posX < 0 || opts.positionBy == 'bottomTop') {
				  posX = (mouseX + (tipWidth/2) > winWidth) ? winWidth/2 - tipWidth/2 : Math.max(mouseX - (tipWidth/2),0);
				}
			  }
		
			  $cluetipArrows.css({zIndex: $link.data('cluetip').zIndex+1});
			  $cluetip.css({
				left: posX,
				zIndex: $link.data('cluetip').zIndex
			  });
			  wHeight = $(window).height();
		
		/***************************************
		* load a string from cluetip method's first argument
		***************************************/
			  if (js) {
				if (typeof js == 'function') {
				  js = js.call(link);
				}
				$cluetipInner.html(js);
				cluetipShow(pY);
			  }
		/***************************************
		* load the title attribute only (or user-selected attribute).
		* clueTip title is the string before the first delimiter
		* subsequent delimiters place clueTip body text on separate lines
		***************************************/
		
			  else if (tipParts) {
				var tpl = tipParts.length;
				$cluetipInner.html(tpl ? tipParts[0] : '');
				if (tpl > 1) {
				  for (var i=1; i < tpl; i++){
					$cluetipInner.append('<div class="split-body">' + tipParts[i] + '</div>');
				  }
				}
				cluetipShow(pY);
			  }
		/***************************************
		* load external file via ajax
		***************************************/
		
			  else if ( !opts.local && tipAttribute.indexOf('#') !== 0 ) {
				if (/\.(jpe?g|tiff?|gif|png)(?:\?.*)?$/i.test(tipAttribute)) {
				  $cluetipInner.html('<img src="' + tipAttribute + '" alt="' + tipTitle + '" />');
				  cluetipShow(pY);
				} else {
				  var optionBeforeSend = opts.ajaxSettings.beforeSend,
					  optionError = opts.ajaxSettings.error,
					  optionSuccess = opts.ajaxSettings.success,
					  optionComplete = opts.ajaxSettings.complete;
		
				  var ajaxSettings = {
					cache: opts.ajaxCache, // force requested page not to be cached by browser
					url: tipAttribute,
					beforeSend: function(xhr, settings) {
					  if (optionBeforeSend) {optionBeforeSend.call(link, xhr, $cluetip, $cluetipInner, settings);}
					  $cluetipOuter.children().empty();
					  if (opts.waitImage) {
						$cluetipWait
						.css({top: mouseY+20, left: mouseX+20, zIndex: $link.data('cluetip').zIndex-1})
						.show();
					  }
					},
					error: function(xhr, textStatus) {
					  if (isActive) {
						if (optionError) {
						  optionError.call(link, xhr, textStatus, $cluetip, $cluetipInner);
						} else {
						  $cluetipInner.html('<i>sorry, the contents could not be loaded</i>');
						}
					  }
					},
					success: function(data, textStatus) {
					  cluetipContents = opts.ajaxProcess.call(link, data);
		
					  // allow for chaning the title based on data returned by xhr
					  if ( $.isPlainObject(cluetipContents) ) {
						tipTitle = cluetipContents.title;
						cluetipContents = cluetipContents.content;
					  }
					  if (isActive) {
						if (optionSuccess) {
						  optionSuccess.call(link, data, textStatus, $cluetip, $cluetipInner);
						}
						$cluetipInner.html(cluetipContents);
					  }
					},
					complete: function(xhr, textStatus) {
					  if (optionComplete) {
						optionComplete.call(link, xhr, textStatus, $cluetip, $cluetipInner);
					  }
					  var imgs = $cluetipInner[0].getElementsByTagName('img');
					  imgCount = imgs.length;
					  for (var i=0, l = imgs.length; i < l; i++) {
						if (imgs[i].complete) {
						  imgCount--;
						}
					  }
					  if (imgCount && !$.browser.opera) {
						$(imgs).bind('load error', function() {
						  imgCount--;
						  if (imgCount<1) {
							$cluetipWait.hide();
							if (isActive) { cluetipShow(pY); }
						  }
						});
					  } else {
						$cluetipWait.hide();
						if (isActive) { cluetipShow(pY); }
					  }
					}
				  };
				  var ajaxMergedSettings = $.extend(true, {}, opts.ajaxSettings, ajaxSettings);
				  $.ajax(ajaxMergedSettings);
				}
		
		/***************************************
		* load an element from the same page
		***************************************/
			  } else if (opts.local) {
				var $localContent = $(tipAttribute + (/^#\S+$/.test(tipAttribute) ? '' : ':eq(' + index + ')')).clone(true).show();
				if (opts.localIdSuffix) {
				  $localContent.attr('id', $localContent[0].id + opts.localIdSuffix);
				}
				$cluetipInner.html($localContent);
				cluetipShow(pY);
			  }
			};
		
		// get dimensions and options for cluetip and prepare it to be shown
			var cluetipShow = function(bpY) {
			  var $closeLink, dynamicClasses, heightDiff,
				  titleHTML = tipTitle || opts.showTitle && '&nbsp;',
				  bgY = '', direction = '';
			  $cluetip.addClass('cluetip-' + ctClass);
			  if (opts.truncate) {
				var $truncloaded = $cluetipInner.text().slice(0,opts.truncate) + '...';
				$cluetipInner.html($truncloaded);
			  }
		
			  if (titleHTML) {
				$cluetipTitle.show().html(titleHTML);
			  } else {
				$cluetipTitle.hide();
			  }
		
			  if (opts.sticky) {
				$closeLink = $('<div class="cluetip-close"><a href="#">' + opts.closeText + '</a></div>');
				(opts.closePosition == 'bottom') ? $closeLink.appendTo($cluetipInner) : (opts.closePosition == 'title') ? $closeLink.prependTo($cluetipTitle) : $closeLink.prependTo($cluetipInner);
				$closeLink.bind('click.cluetip', function() {
				  cluetipClose();
				  return false;
				});
				if (opts.mouseOutClose) {
				  $cluetip.bind('mouseleave.cluetip', function() {
					cluetipClose();
				  });
				} else {
				  $cluetip.unbind('mouseleave.cluetip');
				}
			  }
		
		// now that content is loaded, finish the positioning
			  $cluetipOuter.css({zIndex: $link.data('cluetip').zIndex, overflow: defHeight == 'auto' ? 'visible' : 'auto', height: defHeight});
			  tipHeight = defHeight == 'auto' ? Math.max($cluetip.outerHeight(),$cluetip.height()) : parseInt(defHeight,10);
			  tipY = posY;
			  baseline = sTop + wHeight;
			  if (opts.positionBy == 'fixed') {
				tipY = posY - opts.dropShadowSteps + tOffset;
			  } else if ( (posX < mouseX && Math.max(posX, 0) + tipWidth > mouseX) || opts.positionBy == 'bottomTop') {
				if (posY + tipHeight + tOffset > baseline && mouseY - sTop > tipHeight + tOffset) {
				  tipY = mouseY - tipHeight - tOffset;
				  direction = 'top';
				} else {
				  tipY = mouseY + tOffset;
				  direction = 'bottom';
				}
			  } else if ( posY + tipHeight + tOffset > baseline ) {
				tipY = (tipHeight >= wHeight) ? sTop : baseline - tipHeight - tOffset;
			  } else if ($link.css('display') == 'block' || link.tagName.toLowerCase() == 'area' || opts.positionBy == "mouse") {
				tipY = bpY - tOffset;
			  } else {
				tipY = posY - opts.dropShadowSteps;
			  }
			  if (direction === '') {
				direction = posX < linkLeft ? 'left' :  'right';
			  }
			  // add classes
			  dynamicClasses = ' clue-' + direction + '-' + ctClass + ' cluetip-' + ctClass;
			  if (ctClass == 'rounded') {
				dynamicClasses += ' ui-corner-all';
			  }
			  $cluetip.css({top: tipY + 'px'}).attrProp({'className': standardClasses + dynamicClasses});
			  // set up arrow positioning to align with element
			  if (opts.arrows) {
				if ( /(left|right)/.test(direction) ) {
				  heightDiff = $cluetip.height() - $cluetipArrows.height();
				  bgY = posX >= 0 && bpY > 0 ? (posY - tipY - opts.dropShadowSteps) : 0;
				  bgY = heightDiff > bgY ? bgY : heightDiff;
				  bgY += 'px';
				}
				$cluetipArrows.css({top: bgY}).show();
			  } else {
				$cluetipArrows.hide();
			  }
		
		// (first hide, then) ***SHOW THE CLUETIP***
			  // handle dropshadow divs first
			  $dropShadow = createDropShadows($cluetip, opts);
			  if ($dropShadow && $dropShadow.length) {
				$dropShadow.hide().css({height: tipHeight, width: tipInnerWidth, zIndex: $link.data('cluetip').zIndex-1}).show();
			  }
		
			  $cluetip.hide()[opts.fx.open](opts.fx.openSpeed || 0);
			  if ($.fn.bgiframe) { $cluetip.bgiframe(); }
			  // delayed close (not fully tested)
			  if (opts.delayedClose > 0) {
				closeOnDelay = setTimeout(cluetipClose, opts.delayedClose);
			  }
			  // trigger the optional onShow function
		
			  opts.onShow.call(link, $cluetip, $cluetipInner);
			};
		
		/***************************************
		   =INACTIVATION
		-------------------------------------- */
			var inactivate = function(event) {
			  isActive = false;
			  $cluetipWait.hide();
			  if (!opts.sticky || (/click|toggle/).test(opts.activation) ) {
				cluetipClose();
				clearTimeout(closeOnDelay);
			  }
			  if (opts.hoverClass) {
				$link.removeClass(opts.hoverClass);
			  }
			};
		// close cluetip and reset some things
			var cluetipClose = function(el) {
			  var $closer = el && el.data('cluetip') ? el : $link,
				  ct = $closer.data('cluetip') && $closer.data('cluetip').selector,
				  ctSelector = ct || 'div.cluetip',
				  $cluetip = $(ctSelector),
				  $cluetipInner = $cluetip.find(prefix + 'cluetip-inner'),
				  $cluetipArrows = $cluetip.find(prefix + 'cluetip-arrows');
		
			  $cluetip.hide().removeClass();
			  opts.onHide.call($closer[0], $cluetip, $cluetipInner);
			  if (ct) {
				$closer.removeClass('cluetip-clicked');
				$closer.css('cursor','');
			  }
			  if (ct && tipTitle) {
				$closer.attrProp(opts.titleAttribute, tipTitle);
			  }
		
			  if (opts.arrows) {
				$cluetipArrows.css({top: ''});
			  }
			};
		
			$(document).unbind('hideCluetip.cluetip').bind('hideCluetip.cluetip', function(e) {
		
			  cluetipClose( $(e.target) );
			});
		/***************************************
		   =BIND EVENTS
		-------------------------------------- */
		  // activate by click
			  if ( (/click|toggle/).test(opts.activation) ) {
				$link.bind('click.cluetip', function(event) {
				  if ($cluetip.is(':hidden') || !$link.is('.cluetip-clicked')) {
					activate(event);
					$('.cluetip-clicked').removeClass('cluetip-clicked');
					$link.addClass('cluetip-clicked');
				  } else {
					inactivate(event);
				  }
				  return false;
				});
		  // activate by focus; inactivate by blur
			  } else if (opts.activation == 'focus') {
				$link.bind('focus.cluetip', function(event) {
				  $link.attrProp('title','');
				  activate(event);
				});
				$link.bind('blur.cluetip', function(event) {
				  $link.attrProp('title', $link.data('cluetip').title);
				  inactivate(event);
				});
		  // activate by hover
			  } else {
				// clicking is returned false if clickThrough option is set to false
				$link[opts.clickThrough ? 'unbind' : 'bind']('click.cluetip', returnFalse);
				//set up mouse tracking
				var mouseTracks = function(evt) {
				  if (opts.tracking) {
					var trackX = posX - evt.pageX;
					var trackY = tipY ? tipY - evt.pageY : posY - evt.pageY;
					$link.bind('mousemove.cluetip', function(evt) {
					  $cluetip.css({left: evt.pageX + trackX, top: evt.pageY + trackY });
					});
				  }
				};
				if ($.fn.hoverIntent && opts.hoverIntent) {
				  $link.hoverIntent({
					sensitivity: opts.hoverIntent.sensitivity,
					interval: opts.hoverIntent.interval,
					over: function(event) {
					  activate(event);
					  mouseTracks(event);
					},
					timeout: opts.hoverIntent.timeout,
					out: function(event) {inactivate(event); $link.unbind('mousemove.cluetip');}
				  });
				} else {
				  $link.bind('mouseenter.cluetip', function(event) {
					activate(event);
					mouseTracks(event);
				  })
				  .bind('mouseleave.cluetip', function(event) {
					inactivate(event);
					$link.unbind('mousemove.cluetip');
				  });
				}
		
				$link.bind('mouseover.cluetip', function(event) {
				  $link.attrProp('title','');
				}).bind('mouseleave.cluetip', function(event) {
				  $link.attrProp('title', $link.data('cluetip').title);
				});
			  }
			});
		
			/** =private functions
			************************************************************/
			//empty function
			function doNothing() {}
		
			/** =create dropshadow divs **/
		
			function createDropShadows($cluetip, options, newDropShadow) {
			  var dsStyle = '',
				  dropShadowSteps = (options.dropShadow && options.dropShadowSteps) ? +options.dropShadowSteps : 0;
		
			  if ($.support.boxShadow) {
				if ( dropShadowSteps ) {
				  dsStyle = '1px 1px ' + dropShadowSteps + 'px rgba(0,0,0,0.5)';
				}
				var dsOffsets = dropShadowSteps === 0 ? '0 0 ' : '1px 1px ';
				$cluetip.css($.support.boxShadow, dsStyle);
				return false;
			  }
			  var oldDropShadow = $cluetip.find('.cluetip-drop-shadow');
			  if (dropShadowSteps == oldDropShadow.length) {
				return oldDropShadow;
			  }
			  oldDropShadow.remove();
			  var dropShadows = [];
			  for (var i=0; i < dropShadowSteps;) {
				dropShadows[i++] = '<div style="top:' + i + 'px;left:' + i + 'px;"></div>';
			  }
		
			  newDropShadow = $(dropShadows.join(''))
			  .css({
				position: 'absolute',
				backgroundColor: '#000',
				zIndex: cluezIndex -1,
				opacity: 0.1
			  })
			  .addClass('cluetip-drop-shadow')
			  .prependTo($cluetip);
			  return newDropShadow;
		
			}
		
			return this;
		  };
		
		  (function() {
			$.support = $.support || {};
			// check support for CSS3 properties (currently only boxShadow)
			var div = document.createElement('div'),
				divStyle = div.style,
				styleProps = ['boxShadow'],
				prefixes = ['moz', 'Moz', 'webkit', 'o'];
		
			for (var i=0, sl = styleProps.length; i < sl; i++) {
			  var prop = styleProps[i],
				  uProp = prop.charAt(0).toUpperCase() + prop.slice(1);
		
			  if ( typeof divStyle[ prop ] !== 'undefined' ) {
				$.support[ prop ] = prop;
			  } else {
				for (var j=0, pl = prefixes.length; j < pl; j++) {
		
				  if (typeof divStyle[ prefixes[j] + uProp ] !== 'undefined') {
					$.support[ prop ] = prefixes[j] + uProp;
					break;
				  }
				}
			  }
			}
			div = null;
		  })();
		
		  $.fn.cluetip.defaults = $.cluetip.defaults;
		
		})(jQuery);
		(function($) {
		  // Back-compat file for clueTip 1.2
		  // This modifies the the $.fn.cluetip object to make the plugin work the way it did before clueTip version 1.2
		  $.extend(true, $.fn.cluetip, {
			backCompat: true,
			template: ['<div id="cluetip">',
			  '<div id="cluetip-outer" class="cluetip-outer">',
				'<h3 id="cluetip-title" class="cluetip-title ui-widget-header ui-cluetip-header"></h3>',
				'<div id="cluetip-inner" class="cluetip-inner ui-widget-content ui-cluetip-content"></div>',
			  '</div>',
			  '<div id="cluetip-extra"></div>',
			  '<div id="cluetip-arrows" class="cluetip-arrows"></div>',
			'</div>'].join('')
		  });
		})(jQuery);
		
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	/*!
	 * jQuery corner plugin: simple corner rounding
	 * Examples and documentation at: http://jquery.malsup.com/corner/
	 * version 2.12 (23-MAY-2011)
	 * Requires jQuery v1.3.2 or later
	 * Dual licensed under the MIT and GPL licenses:
	 * http://www.opensource.org/licenses/mit-license.php
	 * http://www.gnu.org/licenses/gpl.html
	 * Authors: Dave Methvin and Mike Alsup
	 */
	
	/**
	 *  corner() takes a single string argument:  $('#myDiv').corner("effect corners width")
	 *
	 *  effect:  name of the effect to apply, such as round, bevel, notch, bite, etc (default is round). 
	 *  corners: one or more of: top, bottom, tr, tl, br, or bl.  (default is all corners)
	 *  width:   width of the effect; in the case of rounded corners this is the radius. 
	 *           specify this value using the px suffix such as 10px (yes, it must be pixels).
	 */
		;(function($) { 
		
		var style = document.createElement('div').style,
			moz = style['MozBorderRadius'] !== undefined,
			webkit = style['WebkitBorderRadius'] !== undefined,
			radius = style['borderRadius'] !== undefined || style['BorderRadius'] !== undefined,
			mode = document.documentMode || 0,
			noBottomFold = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8),
		
			expr = $.browser.msie && (function() {
				var div = document.createElement('div');
				try { div.style.setExpression('width','0+0'); div.style.removeExpression('width'); }
				catch(e) { return false; }
				return true;
			})();
		
		$.support = $.support || {};
		$.support.borderRadius = moz || webkit || radius; // so you can do:  if (!$.support.borderRadius) $('#myDiv').corner();
		
		function sz(el, p) { 
			return parseInt($.css(el,p))||0; 
		};
		function hex2(s) {
			s = parseInt(s).toString(16);
			return ( s.length < 2 ) ? '0'+s : s;
		};
		function gpc(node) {
			while(node) {
				var v = $.css(node,'backgroundColor'), rgb;
				if (v && v != 'transparent' && v != 'rgba(0, 0, 0, 0)') {
					if (v.indexOf('rgb') >= 0) { 
						rgb = v.match(/\d+/g); 
						return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
					}
					return v;
				}
				if (node.nodeName.toLowerCase() == 'html')
					break;
				node = node.parentNode; // keep walking if transparent
			}
			return '#ffffff';
		};
		
		function getWidth(fx, i, width) {
			switch(fx) {
			case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
			case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
			case 'sharp':  return width-i;
			case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
			case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
			case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
			case 'curl':   return Math.round(width*(Math.atan(i)));
			case 'tear':   return Math.round(width*(Math.cos(i)));
			case 'wicked': return Math.round(width*(Math.tan(i)));
			case 'long':   return Math.round(width*(Math.sqrt(i)));
			case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
			case 'dogfold':
			case 'dog':    return (i&1) ? (i+1) : width;
			case 'dog2':   return (i&2) ? (i+1) : width;
			case 'dog3':   return (i&3) ? (i+1) : width;
			case 'fray':   return (i%2)*width;
			case 'notch':  return width; 
			case 'bevelfold':
			case 'bevel':  return i+1;
			case 'steep':  return i/2 + 1;
			case 'invsteep':return (width-i)/2+1;
			}
		};
		
		$.fn.corner = function(options) {
			// in 1.3+ we can fix mistakes with the ready state
			if (this.length == 0) {
				if (!$.isReady && this.selector) {
					var s = this.selector, c = this.context;
					$(function() {
						$(s,c).corner(options);
					});
				}
				return this;
			}
		
			return this.each(function(index){
				var $this = $(this),
					// meta values override options
					o = [$this.attr($.fn.corner.defaults.metaAttr) || '', options || ''].join(' ').toLowerCase(),
					keep = /keep/.test(o),                       // keep borders?
					cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]),  // corner color
					sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]),  // strip color
					width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10, // corner width
					re = /round|bevelfold|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dogfold|dog|invsteep|steep/,
					fx = ((o.match(re)||['round'])[0]),
					fold = /dogfold|bevelfold/.test(o),
					edges = { T:0, B:1 },
					opts = {
						TL:  /top|tl|left/.test(o),       TR:  /top|tr|right/.test(o),
						BL:  /bottom|bl|left/.test(o),    BR:  /bottom|br|right/.test(o)
					},
					// vars used in func later
					strip, pad, cssHeight, j, bot, d, ds, bw, i, w, e, c, common, $horz;
				
				if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
					opts = { TL:1, TR:1, BL:1, BR:1 };
					
				// support native rounding
				if ($.fn.corner.defaults.useNative && fx == 'round' && (radius || moz || webkit) && !cc && !sc) {
					if (opts.TL)
						$this.css(radius ? 'border-top-left-radius' : moz ? '-moz-border-radius-topleft' : '-webkit-border-top-left-radius', width + 'px');
					if (opts.TR)
						$this.css(radius ? 'border-top-right-radius' : moz ? '-moz-border-radius-topright' : '-webkit-border-top-right-radius', width + 'px');
					if (opts.BL)
						$this.css(radius ? 'border-bottom-left-radius' : moz ? '-moz-border-radius-bottomleft' : '-webkit-border-bottom-left-radius', width + 'px');
					if (opts.BR)
						$this.css(radius ? 'border-bottom-right-radius' : moz ? '-moz-border-radius-bottomright' : '-webkit-border-bottom-right-radius', width + 'px');
					return;
				}
					
				strip = document.createElement('div');
				$(strip).css({
					overflow: 'hidden',
					height: '1px',
					minHeight: '1px',
					fontSize: '1px',
					backgroundColor: sc || 'transparent',
					borderStyle: 'solid'
				});
			
				pad = {
					T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
					B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
				};
		
				if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE
				if (!keep) this.style.border = 'none';
				strip.style.borderColor = cc || gpc(this.parentNode);
				cssHeight = $(this).outerHeight();
		
				for (j in edges) {
					bot = edges[j];
					// only add stips if needed
					if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
						strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
						d = document.createElement('div');
						$(d).addClass('jquery-corner');
						ds = d.style;
		
						bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);
		
						if (bot && cssHeight != 'auto') {
							if ($.css(this,'position') == 'static')
								this.style.position = 'relative';
							ds.position = 'absolute';
							ds.bottom = ds.left = ds.padding = ds.margin = '0';
							if (expr)
								ds.setExpression('width', 'this.parentNode.offsetWidth');
							else
								ds.width = '100%';
						}
						else if (!bot && $.browser.msie) {
							if ($.css(this,'position') == 'static')
								this.style.position = 'relative';
							ds.position = 'absolute';
							ds.top = ds.left = ds.right = ds.padding = ds.margin = '0';
							
							// fix ie6 problem when blocked element has a border width
							if (expr) {
								bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth');
								ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"');
							}
							else
								ds.width = '100%';
						}
						else {
							ds.position = 'relative';
							ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : 
												(pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';                
						}
		
						for (i=0; i < width; i++) {
							w = Math.max(0,getWidth(fx,i, width));
							e = strip.cloneNode(false);
							e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
							bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
						}
						
						if (fold && $.support.boxModel) {
							if (bot && noBottomFold) continue;
							for (c in opts) {
								if (!opts[c]) continue;
								if (bot && (c == 'TL' || c == 'TR')) continue;
								if (!bot && (c == 'BL' || c == 'BR')) continue;
								
								common = { position: 'absolute', border: 'none', margin: 0, padding: 0, overflow: 'hidden', backgroundColor: strip.style.borderColor };
								$horz = $('<div/>').css(common).css({ width: width + 'px', height: '1px' });
								switch(c) {
								case 'TL': $horz.css({ bottom: 0, left: 0 }); break;
								case 'TR': $horz.css({ bottom: 0, right: 0 }); break;
								case 'BL': $horz.css({ top: 0, left: 0 }); break;
								case 'BR': $horz.css({ top: 0, right: 0 }); break;
								}
								d.appendChild($horz[0]);
								
								var $vert = $('<div/>').css(common).css({ top: 0, bottom: 0, width: '1px', height: width + 'px' });
								switch(c) {
								case 'TL': $vert.css({ left: width }); break;
								case 'TR': $vert.css({ right: width }); break;
								case 'BL': $vert.css({ left: width }); break;
								case 'BR': $vert.css({ right: width }); break;
								}
								d.appendChild($vert[0]);
							}
						}
					}
				}
			});
		};
		
		$.fn.uncorner = function() { 
			if (radius || moz || webkit)
				this.css(radius ? 'border-radius' : moz ? '-moz-border-radius' : '-webkit-border-radius', 0);
			$('div.jquery-corner', this).remove();
			return this;
		};
		
		// expose options
		$.fn.corner.defaults = {
			useNative: true, // true if plugin should attempt to use native browser support for border radius rounding
			metaAttr:  'data-corner' // name of meta attribute to use for options
		};
			
		})(jQuery);
	
	/// end adding jquery classes !!
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	