/*
 * jQuery Easing v1.1 - http://gsgd.co.uk/sandbox/jquery.easing.php
 *
 * Uses the built in easing capabilities added in jQuery 1.1
 * to offer multiple easing options
 *
 * Copyright (c) 2007 George Smith
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */
jQuery.easing={easein:function(x,t,b,c,d){return c*(t/=d)*t+b},easeinout:function(x,t,b,c,d){if(t<d/2)return 2*c*t*t/(d*d)+b;var a=t-d/2;return-2*c*a*a/(d*d)+2*c*a/d+c/2+b},easeout:function(x,t,b,c,d){return-c*t*t/(d*d)+2*c*t/d+b},expoin:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}return a*(Math.exp(Math.log(c)/d*t))+b},expoout:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}return a*(-Math.exp(-Math.log(c)/d*(t-d))+c+1)+b},expoinout:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}if(t<d/2)return a*(Math.exp(Math.log(c/2)/(d/2)*t))+b;return a*(-Math.exp(-2*Math.log(c/2)/d*(t-d))+c+1)+b},bouncein:function(x,t,b,c,d){return c-jQuery.easing['bounceout'](x,d-t,0,c,d)+b},bounceout: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}},bounceinout:function(x,t,b,c,d){if(t<d/2)return jQuery.easing['bouncein'](x,t*2,0,c,d)*.5+b;return jQuery.easing['bounceout'](x,t*2-d,0,c,d)*.5+c*.5+b},elasin: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},elasout: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},elasinout: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},backin:function(x,t,b,c,d){var s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b},backout:function(x,t,b,c,d){var s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},backinout:function(x,t,b,c,d){var 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},linear:function(x,t,b,c,d){return c*t/d+b}};
 

 
 
 
 /*
  * 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,'"></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		: 100,
 		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 validation plug-in 1.5.5
  *
  * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
  * http://docs.jquery.com/Plugins/Validation
  *
  * Copyright (c) 2006 - 2008 JÃƒÆ’Ã†â€™Ãƒâ€ Ã¢â‚¬â„¢ÃƒÆ’Ã¢â‚¬Å¡Ãƒâ€šÃ‚Â¶rn Zaefferer
  *
  * $Id: jquery.validate.js 6403 2009-06-17 14:27:16Z joern.zaefferer $
  *
  * Dual licensed under the MIT and GPL licenses:
  *   http://www.opensource.org/licenses/mit-license.php
  *   http://www.gnu.org/licenses/gpl.html
  */
 
 (function($) {
 
 $.extend($.fn, {
 	// http://docs.jquery.com/Plugins/Validation/validate
 	validate: function( options ) {
 
 		// if nothing is selected, return nothing; can't chain anyway
 		if (!this.length) {
 			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
 			return;
 		}
 
 		// check if a validator for this form was already created
 		var validator = $.data(this[0], 'validator');
 		if ( validator ) {
 			return validator;
 		}
 		
 		validator = new $.validator( options, this[0] );
 		$.data(this[0], 'validator', validator); 
 		
 		if ( validator.settings.onsubmit ) {
 		
 			// allow suppresing validation by adding a cancel class to the submit button
 			this.find("input, button").filter(".cancel").click(function() {
 				validator.cancelSubmit = true;
 			});
 			
 			// when a submitHandler is used, capture the submitting button
 			if (validator.settings.submitHandler) {
 				this.find("input, button").filter(":submit").click(function() {
 					validator.submitButton = this;
 				});
 			}
 		
 			// validate the form on submit
 			this.submit( function( event ) {
 				if ( validator.settings.debug )
 					// prevent form submit to be able to see console output
 					event.preventDefault();
 					
 				function handle() {
 					if ( validator.settings.submitHandler ) {
 						if (validator.submitButton) {
 							// insert a hidden input as a replacement for the missing submit button
 							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
 						}
 						validator.settings.submitHandler.call( validator, validator.currentForm );
 						if (validator.submitButton) {
 							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
 							hidden.remove();
 						}
 						return false;
 					}
 					return true;
 				}
 					
 				// prevent submit for invalid forms or custom submit handlers
 				if ( validator.cancelSubmit ) {
 					validator.cancelSubmit = false;
 					return handle();
 				}
 				if ( validator.form() ) {
 					if ( validator.pendingRequest ) {
 						validator.formSubmitted = true;
 						return false;
 					}
 					return handle();
 				} else {
 					validator.focusInvalid();
 					return false;
 				}
 			});
 		}
 		
 		return validator;
 	},
 	// http://docs.jquery.com/Plugins/Validation/valid
 	valid: function() {
         if ( $(this[0]).is('form')) {
             return this.validate().form();
         } else {
             var valid = true;
             var validator = $(this[0].form).validate();
             this.each(function() {
 				valid &= validator.element(this);
             });
             return valid;
         }
     },
 	// attributes: space seperated list of attributes to retrieve and remove
 	removeAttrs: function(attributes) {
 		var result = {},
 			$element = this;
 		$.each(attributes.split(/\s/), function(index, value) {
 			result[value] = $element.attr(value);
 			$element.removeAttr(value);
 		});
 		return result;
 	},
 	// http://docs.jquery.com/Plugins/Validation/rules
 	rules: function(command, argument) {
 		var element = this[0];
 		
 		if (command) {
 			var settings = $.data(element.form, 'validator').settings;
 			var staticRules = settings.rules;
 			var existingRules = $.validator.staticRules(element);
 			switch(command) {
 			case "add":
 				$.extend(existingRules, $.validator.normalizeRule(argument));
 				staticRules[element.name] = existingRules;
 				if (argument.messages)
 					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
 				break;
 			case "remove":
 				if (!argument) {
 					delete staticRules[element.name];
 					return existingRules;
 				}
 				var filtered = {};
 				$.each(argument.split(/\s/), function(index, method) {
 					filtered[method] = existingRules[method];
 					delete existingRules[method];
 				});
 				return filtered;
 			}
 		}
 		
 		var data = $.validator.normalizeRules(
 		$.extend(
 			{},
 			$.validator.metadataRules(element),
 			$.validator.classRules(element),
 			$.validator.attributeRules(element),
 			$.validator.staticRules(element)
 		), element);
 		
 		// make sure required is at front
 		if (data.required) {
 			var param = data.required;
 			delete data.required;
 			data = $.extend({required: param}, data);
 		}
 		
 		return data;
 	}
 });
 
 // Custom selectors
 $.extend($.expr[":"], {
 	// http://docs.jquery.com/Plugins/Validation/blank
 	blank: function(a) {return !$.trim(a.value);},
 	// http://docs.jquery.com/Plugins/Validation/filled
 	filled: function(a) {return !!$.trim(a.value);},
 	// http://docs.jquery.com/Plugins/Validation/unchecked
 	unchecked: function(a) {return !a.checked;}
 });
 
 // constructor for validator
 $.validator = function( options, form ) {
 	this.settings = $.extend( {}, $.validator.defaults, options );
 	this.currentForm = form;
 	this.init();
 };
 
 $.validator.format = function(source, params) {
 	if ( arguments.length == 1 ) 
 		return function() {
 			var args = $.makeArray(arguments);
 			args.unshift(source);
 			return $.validator.format.apply( this, args );
 		};
 	if ( arguments.length > 2 && params.constructor != Array  ) {
 		params = $.makeArray(arguments).slice(1);
 	}
 	if ( params.constructor != Array ) {
 		params = [ params ];
 	}
 	$.each(params, function(i, n) {
 		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
 	});
 	return source;
 };
 
 $.extend($.validator, {
 	
 	defaults: {
 		messages: {},
 		groups: {},
 		rules: {},
 		errorClass: "error",
 		validClass: "valid",
 		errorElement: "span",
 		focusInvalid: true,
 		errorContainer: $( [] ),
 		errorLabelContainer: $( [] ),
 		onsubmit: true,
 		ignore: [],
 		ignoreTitle: false,
 		onfocusin: function(element) {
 			this.lastActive = element;
 				
 			// hide error label and remove error class on focus if enabled
 			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
 				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
 				this.errorsFor(element).hide();
 			}
 		},
 		onfocusout: function(element) {
 			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
 				this.element(element);
 			}
 		},
 		onkeyup: function(element) {
 			if ( element.name in this.submitted || element == this.lastElement ) {
 				this.element(element);
 			}
 		},
 		onclick: function(element) {
 			if ( element.name in this.submitted )
 				this.element(element);
 		},
 		highlight: function( element, errorClass, validClass ) {
 			$(element).addClass(errorClass).removeClass(validClass);
 		},
 		unhighlight: function( element, errorClass, validClass ) {
 			$(element).removeClass(errorClass).addClass(validClass);
 		}
 	},
 
 	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
 	setDefaults: function(settings) {
 		$.extend( $.validator.defaults, settings );
 	},
 
 	messages: {
 		required: "This field is required.",
 		remote: "Please fix this field.",
 		email: "Please enter a valid email address.",
 		url: "Please enter a valid URL.",
 		date: "Please enter a valid date.",
 		dateISO: "Please enter a valid date (ISO).",
 		number: "Please enter a valid number.",
 		digits: "Please enter only digits.",
 		creditcard: "Please enter a valid credit card number.",
 		equalTo: "Please enter the same value again.",
 		accept: "Please enter a value with a valid extension.",
 		maxlength: $.validator.format("Please enter no more than {0} characters."),
 		minlength: $.validator.format("Please enter at least {0} characters."),
 		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
 		range: $.validator.format("Please enter a value between {0} and {1}."),
 		max: $.validator.format("Please enter a value less than or equal to {0}."),
 		min: $.validator.format("Please enter a value greater than or equal to {0}.")
 	},
 
 	
 	autoCreateRanges: false,
 	
 	prototype: {
 		
 		init: function() {
 			this.labelContainer = $(this.settings.errorLabelContainer);
 			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
 			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
 			this.submitted = {};
 			this.valueCache = {};
 			this.pendingRequest = 0;
 			this.pending = {};
 			this.invalid = {};
 			this.reset();
 			
 			var groups = (this.groups = {});
 			$.each(this.settings.groups, function(key, value) {
 				$.each(value.split(/\s/), function(index, name) {
 					groups[name] = key;
 				});
 			});
 			var rules = this.settings.rules;
 			$.each(rules, function(key, value) {
 				rules[key] = $.validator.normalizeRule(value);
 			});
 			
 			function delegate(event) {
 				var validator = $.data(this[0].form, "validator");
 				validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] );
 			}
 			$(this.currentForm)
 				.delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate)
 				.delegate("click", ":radio, :checkbox", delegate);
 
 			if (this.settings.invalidHandler)
 				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
 		},
 
 		// http://docs.jquery.com/Plugins/Validation/Validator/form
 		form: function() {
 			this.checkForm();
 			$.extend(this.submitted, this.errorMap);
 			this.invalid = $.extend({}, this.errorMap);
 			if (!this.valid())
 				$(this.currentForm).triggerHandler("invalid-form", [this]);
 			this.showErrors();
 			return this.valid();
 		},
 		
 		checkForm: function() {
 			this.prepareForm();
 			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
 				this.check( elements[i] );
 			}
 			return this.valid(); 
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Validator/element
 		element: function( element ) {
 			element = this.clean( element );
 			this.lastElement = element;
 			this.prepareElement( element );
 			this.currentElements = $(element);
 			var result = this.check( element );
 			if ( result ) {
 				delete this.invalid[element.name];
 			} else {
 				this.invalid[element.name] = true;
 			}
 			if ( !this.numberOfInvalids() ) {
 				// Hide error containers on last error
 				this.toHide = this.toHide.add( this.containers );
 			}
 			this.showErrors();
 			return result;
 		},
 
 		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
 		showErrors: function(errors) {
 			if(errors) {
 				// add items to error list and map
 				$.extend( this.errorMap, errors );
 				this.errorList = [];
 				for ( var name in errors ) {
 					this.errorList.push({
 						message: errors[name],
 						element: this.findByName(name)[0]
 					});
 				}
 				// remove items from success list
 				this.successList = $.grep( this.successList, function(element) {
 					return !(element.name in errors);
 				});
 			}
 			this.settings.showErrors
 				? this.settings.showErrors.call( this, this.errorMap, this.errorList )
 				: this.defaultShowErrors();
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
 		resetForm: function() {
 			if ( $.fn.resetForm )
 				$( this.currentForm ).resetForm();
 			this.submitted = {};
 			this.prepareForm();
 			this.hideErrors();
 			this.elements().removeClass( this.settings.errorClass );
 		},
 		
 		numberOfInvalids: function() {
 			return this.objectLength(this.invalid);
 		},
 		
 		objectLength: function( obj ) {
 			var count = 0;
 			for ( var i in obj )
 				count++;
 			return count;
 		},
 		
 		hideErrors: function() {
 			this.addWrapper( this.toHide ).hide();
 		},
 		
 		valid: function() {
 			return this.size() == 0;
 		},
 		
 		size: function() {
 			return this.errorList.length;
 		},
 		
 		focusInvalid: function() {
 			if( this.settings.focusInvalid ) {
 				try {
 					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus();
 				} catch(e) {
 					// ignore IE throwing errors when focusing hidden elements
 				}
 			}
 		},
 		
 		findLastActive: function() {
 			var lastActive = this.lastActive;
 			return lastActive && $.grep(this.errorList, function(n) {
 				return n.element.name == lastActive.name;
 			}).length == 1 && lastActive;
 		},
 		
 		elements: function() {
 			var validator = this,
 				rulesCache = {};
 			
 			// select all valid inputs inside the form (no submit or reset buttons)
 			// workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved
 			return $([]).add(this.currentForm.elements)
 			.filter(":input")
 			.not(":submit, :reset, :image, [disabled]")
 			.not( this.settings.ignore )
 			.filter(function() {
 				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);
 			
 				// select only the first element for each name, and only those with rules specified
 				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
 					return false;
 				
 				rulesCache[this.name] = true;
 				return true;
 			});
 		},
 		
 		clean: function( selector ) {
 			return $( selector )[0];
 		},
 		
 		errors: function() {
 			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
 		},
 		
 		reset: function() {
 			this.successList = [];
 			this.errorList = [];
 			this.errorMap = {};
 			this.toShow = $([]);
 			this.toHide = $([]);
 			this.formSubmitted = false;
 			this.currentElements = $([]);
 		},
 		
 		prepareForm: function() {
 			this.reset();
 			this.toHide = this.errors().add( this.containers );
 		},
 		
 		prepareElement: function( element ) {
 			this.reset();
 			this.toHide = this.errorsFor(element);
 		},
 	
 		check: function( element ) {
 			element = this.clean( element );
 			
 			// if radio/checkbox, validate first element in group instead
 			if (this.checkable(element)) {
 				element = this.findByName( element.name )[0];
 			}
 			
 			var rules = $(element).rules();
 			var dependencyMismatch = false;
 			for( method in rules ) {
 				var rule = { method: method, parameters: rules[method] };
 				try {
 					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
 					
 					// if a method indicates that the field is optional and therefore valid,
 					// don't mark it as valid when there are no other rules
 					if ( result == "dependency-mismatch" ) {
 						dependencyMismatch = true;
 						continue;
 					}
 					dependencyMismatch = false;
 					
 					if ( result == "pending" ) {
 						this.toHide = this.toHide.not( this.errorsFor(element) );
 						return;
 					}
 					
 					if( !result ) {
 						this.formatAndAdd( element, rule );
 						return false;
 					}
 				} catch(e) {
 					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
 						 + ", check the '" + rule.method + "' method");
 					throw e;
 				}
 			}
 			if (dependencyMismatch)
 				return;
 			if ( this.objectLength(rules) )
 				this.successList.push(element);
 			return true;
 		},
 		
 		// return the custom message for the given element and validation method
 		// specified in the element's "messages" metadata
 		customMetaMessage: function(element, method) {
 			if (!$.metadata)
 				return;
 			
 			var meta = this.settings.meta
 				? $(element).metadata()[this.settings.meta]
 				: $(element).metadata();
 			
 			return meta && meta.messages && meta.messages[method];
 		},
 		
 		// return the custom message for the given element name and validation method
 		customMessage: function( name, method ) {
 			var m = this.settings.messages[name];
 			return m && (m.constructor == String
 				? m
 				: m[method]);
 		},
 		
 		// return the first defined argument, allowing empty strings
 		findDefined: function() {
 			for(var i = 0; i < arguments.length; i++) {
 				if (arguments[i] !== undefined)
 					return arguments[i];
 			}
 			return undefined;
 		},
 		
 		defaultMessage: function( element, method) {
 			return this.findDefined(
 				this.customMessage( element.name, method ),
 				this.customMetaMessage( element, method ),
 				// title is never undefined, so handle empty string as undefined
 				!this.settings.ignoreTitle && element.title || undefined,
 				$.validator.messages[method],
 				"<strong>Warning: No message defined for " + element.name + "</strong>"
 			);
 		},
 		
 		formatAndAdd: function( element, rule ) {
 			var message = this.defaultMessage( element, rule.method );
 			if ( typeof message == "function" ) 
 				message = message.call(this, rule.parameters, element);
 			this.errorList.push({
 				message: message,
 				element: element
 			});
 			this.errorMap[element.name] = message;
 			this.submitted[element.name] = message;
 		},
 		
 		addWrapper: function(toToggle) {
 			if ( this.settings.wrapper )
 				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
 			return toToggle;
 		},
 		
 		defaultShowErrors: function() {
 			for ( var i = 0; this.errorList[i]; i++ ) {
 				var error = this.errorList[i];
 				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
 				this.showLabel( error.element, error.message );
 			}
 			if( this.errorList.length ) {
 				this.toShow = this.toShow.add( this.containers );
 			}
 			if (this.settings.success) {
 				for ( var i = 0; this.successList[i]; i++ ) {
 					this.showLabel( this.successList[i] );
 				}
 			}
 			if (this.settings.unhighlight) {
 				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
 					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
 				}
 			}
 			this.toHide = this.toHide.not( this.toShow );
 			this.hideErrors();
 			this.addWrapper( this.toShow ).show();
 		},
 		
 		validElements: function() {
 			return this.currentElements.not(this.invalidElements());
 		},
 		
 		invalidElements: function() {
 			return $(this.errorList).map(function() {
 				return this.element;
 			});
 		},
 		
 		showLabel: function(element, message) {
 			var label = this.errorsFor( element );
 			if ( label.length ) {
 				// refresh error/success class
 				label.removeClass().addClass( this.settings.errorClass );
 			
 				// check if we have a generated label, replace the message then
 				label.attr("generated") && label.html(message);
 			} else {
 				// create label
 				label = $("<" + this.settings.errorElement + "/>")
 					.attr({"for":  this.idOrName(element), generated: true})
 					.addClass(this.settings.errorClass)
 					.html(message || "");
 				if ( this.settings.wrapper ) {
 					// make sure the element is visible, even in IE
 					// actually showing the wrapped element is handled elsewhere
 					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
 				}
 				if ( !this.labelContainer.append(label).length )
 					this.settings.errorPlacement
 						? this.settings.errorPlacement(label, $(element) )
 						: label.insertAfter(element);
 			}
 			if ( !message && this.settings.success ) {
 				label.text("");
 				typeof this.settings.success == "string"
 					? label.addClass( this.settings.success )
 					: this.settings.success( label );
 			}
 			this.toShow = this.toShow.add(label);
 		},
 		
 		errorsFor: function(element) {
 			return this.errors().filter("[for='" + this.idOrName(element) + "']");
 		},
 		
 		idOrName: function(element) {
 			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
 		},
 
 		checkable: function( element ) {
 			return /radio|checkbox/i.test(element.type);
 		},
 		
 		findByName: function( name ) {
 			// select by name and filter by form for performance over form.find("[name=...]")
 			var form = this.currentForm;
 			return $(document.getElementsByName(name)).map(function(index, element) {
 				return element.form == form && element.name == name && element  || null;
 			});
 		},
 		
 		getLength: function(value, element) {
 			switch( element.nodeName.toLowerCase() ) {
 			case 'select':
 				return $("option:selected", element).length;
 			case 'input':
 				if( this.checkable( element) )
 					return this.findByName(element.name).filter(':checked').length;
 			}
 			return value.length;
 		},
 	
 		depend: function(param, element) {
 			return this.dependTypes[typeof param]
 				? this.dependTypes[typeof param](param, element)
 				: true;
 		},
 	
 		dependTypes: {
 			"boolean": function(param, element) {
 				return param;
 			},
 			"string": function(param, element) {
 				return !!$(param, element.form).length;
 			},
 			"function": function(param, element) {
 				return param(element);
 			}
 		},
 		
 		optional: function(element) {
 			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
 		},
 		
 		startRequest: function(element) {
 			if (!this.pending[element.name]) {
 				this.pendingRequest++;
 				this.pending[element.name] = true;
 			}
 		},
 		
 		stopRequest: function(element, valid) {
 			this.pendingRequest--;
 			// sometimes synchronization fails, make sure pendingRequest is never < 0
 			if (this.pendingRequest < 0)
 				this.pendingRequest = 0;
 			delete this.pending[element.name];
 			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
 				$(this.currentForm).submit();
 			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
 				$(this.currentForm).triggerHandler("invalid-form", [this]);
 			}
 		},
 		
 		previousValue: function(element) {
 			return $.data(element, "previousValue") || $.data(element, "previousValue", previous = {
 				old: null,
 				valid: true,
 				message: this.defaultMessage( element, "remote" )
 			});
 		}
 		
 	},
 	
 	classRuleSettings: {
 		required: {required: true},
 		email: {email: true},
 		url: {url: true},
 		date: {date: true},
 		dateISO: {dateISO: true},
 		dateDE: {dateDE: true},
 		number: {number: true},
 		numberDE: {numberDE: true},
 		digits: {digits: true},
 		creditcard: {creditcard: true}
 	},
 	
 	addClassRules: function(className, rules) {
 		className.constructor == String ?
 			this.classRuleSettings[className] = rules :
 			$.extend(this.classRuleSettings, className);
 	},
 	
 	classRules: function(element) {
 		var rules = {};
 		var classes = $(element).attr('class');
 		classes && $.each(classes.split(' '), function() {
 			if (this in $.validator.classRuleSettings) {
 				$.extend(rules, $.validator.classRuleSettings[this]);
 			}
 		});
 		return rules;
 	},
 	
 	attributeRules: function(element) {
 		var rules = {};
 		var $element = $(element);
 		
 		for (method in $.validator.methods) {
 			var value = $element.attr(method);
 			if (value) {
 				rules[method] = value;
 			}
 		}
 		
 		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
 		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
 			delete rules.maxlength;
 		}
 		
 		return rules;
 	},
 	
 	metadataRules: function(element) {
 		if (!$.metadata) return {};
 		
 		var meta = $.data(element.form, 'validator').settings.meta;
 		return meta ?
 			$(element).metadata()[meta] :
 			$(element).metadata();
 	},
 	
 	staticRules: function(element) {
 		var rules = {};
 		var validator = $.data(element.form, 'validator');
 		if (validator.settings.rules) {
 			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
 		}
 		return rules;
 	},
 	
 	normalizeRules: function(rules, element) {
 		// handle dependency check
 		$.each(rules, function(prop, val) {
 			// ignore rule when param is explicitly false, eg. required:false
 			if (val === false) {
 				delete rules[prop];
 				return;
 			}
 			if (val.param || val.depends) {
 				var keepRule = true;
 				switch (typeof val.depends) {
 					case "string":
 						keepRule = !!$(val.depends, element.form).length;
 						break;
 					case "function":
 						keepRule = val.depends.call(element, element);
 						break;
 				}
 				if (keepRule) {
 					rules[prop] = val.param !== undefined ? val.param : true;
 				} else {
 					delete rules[prop];
 				}
 			}
 		});
 		
 		// evaluate parameters
 		$.each(rules, function(rule, parameter) {
 			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
 		});
 		
 		// clean number parameters
 		$.each(['minlength', 'maxlength', 'min', 'max'], function() {
 			if (rules[this]) {
 				rules[this] = Number(rules[this]);
 			}
 		});
 		$.each(['rangelength', 'range'], function() {
 			if (rules[this]) {
 				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
 			}
 		});
 		
 		if ($.validator.autoCreateRanges) {
 			// auto-create ranges
 			if (rules.min && rules.max) {
 				rules.range = [rules.min, rules.max];
 				delete rules.min;
 				delete rules.max;
 			}
 			if (rules.minlength && rules.maxlength) {
 				rules.rangelength = [rules.minlength, rules.maxlength];
 				delete rules.minlength;
 				delete rules.maxlength;
 			}
 		}
 		
 		// To support custom messages in metadata ignore rule methods titled "messages"
 		if (rules.messages) {
 			delete rules.messages
 		}
 		
 		return rules;
 	},
 	
 	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
 	normalizeRule: function(data) {
 		if( typeof data == "string" ) {
 			var transformed = {};
 			$.each(data.split(/\s/), function() {
 				transformed[this] = true;
 			});
 			data = transformed;
 		}
 		return data;
 	},
 	
 	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
 	addMethod: function(name, method, message) {
 		$.validator.methods[name] = method;
 		$.validator.messages[name] = message || $.validator.messages[name];
 		if (method.length < 3) {
 			$.validator.addClassRules(name, $.validator.normalizeRule(name));
 		}
 	},
 
 	methods: {
 
 		// http://docs.jquery.com/Plugins/Validation/Methods/required
 		required: function(value, element, param) {
 			// check if dependency is met
 			if ( !this.depend(param, element) )
 				return "dependency-mismatch";
 			switch( element.nodeName.toLowerCase() ) {
 			case 'select':
 				var options = $("option:selected", element);
 				return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0);
 			case 'input':
 				if ( this.checkable(element) )
 					return this.getLength(value, element) > 0;
 			default:
 				return $.trim(value).length > 0;
 			}
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/remote
 		remote: function(value, element, param) {
 			if ( this.optional(element) )
 				return "dependency-mismatch";
 			
 			var previous = this.previousValue(element);
 			
 			if (!this.settings.messages[element.name] )
 				this.settings.messages[element.name] = {};
 			this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message;
 			
 			param = typeof param == "string" && {url:param} || param; 
 			
 			if ( previous.old !== value ) {
 				previous.old = value;
 				var validator = this;
 				this.startRequest(element);
 				var data = {};
 				data[element.name] = value;
 				$.ajax($.extend(true, {
 					url: param,
 					mode: "abort",
 					port: "validate" + element.name,
 					dataType: "json",
 					data: data,
 					success: function(response) {
 						var valid = response === true;
 						if ( valid ) {
 							var submitted = validator.formSubmitted;
 							validator.prepareElement(element);
 							validator.formSubmitted = submitted;
 							validator.successList.push(element);
 							validator.showErrors();
 						} else {
 							var errors = {};
 							errors[element.name] = previous.message = response || validator.defaultMessage( element, "remote" );
 							validator.showErrors(errors);
 						}
 						previous.valid = valid;
 						validator.stopRequest(element, valid);
 					}
 				}, param));
 				return "pending";
 			} else if( this.pending[element.name] ) {
 				return "pending";
 			}
 			return previous.valid;
 		},
 
 		// http://docs.jquery.com/Plugins/Validation/Methods/minlength
 		minlength: function(value, element, param) {
 			return this.optional(element) || this.getLength($.trim(value), element) >= param;
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
 		maxlength: function(value, element, param) {
 			return this.optional(element) || this.getLength($.trim(value), element) <= param;
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
 		rangelength: function(value, element, param) {
 			var length = this.getLength($.trim(value), element);
 			return this.optional(element) || ( length >= param[0] && length <= param[1] );
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/min
 		min: function( value, element, param ) {
 			return this.optional(element) || value >= param;
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/max
 		max: function( value, element, param ) {
 			return this.optional(element) || value <= param;
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/range
 		range: function( value, element, param ) {
 			return this.optional(element) || ( value >= param[0] && value <= param[1] );
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/email
 		email: function(value, element) {
 			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
 			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
 		},
 	
 		// http://docs.jquery.com/Plugins/Validation/Methods/url
 		url: function(value, element) {
 			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
 			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
 		},
         
 		// http://docs.jquery.com/Plugins/Validation/Methods/date
 		date: function(value, element) {
 			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
 		},
 	
 		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
 		dateISO: function(value, element) {
 			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
 		},
 	
 		// http://docs.jquery.com/Plugins/Validation/Methods/dateDE
 		dateDE: function(value, element) {
 			return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
 		},
 	
 		// http://docs.jquery.com/Plugins/Validation/Methods/number
 		number: function(value, element) {
 			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
 		},
 	
 		// http://docs.jquery.com/Plugins/Validation/Methods/numberDE
 		numberDE: function(value, element) {
 			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/digits
 		digits: function(value, element) {
 			return this.optional(element) || /^\d+$/.test(value);
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
 		// based on http://en.wikipedia.org/wiki/Luhn
 		creditcard: function(value, element) {
 			if ( this.optional(element) )
 				return "dependency-mismatch";
 			// accept only digits and dashes
 			if (/[^0-9-]+/.test(value))
 				return false;
 			var nCheck = 0,
 				nDigit = 0,
 				bEven = false;
 
 			value = value.replace(/\D/g, "");
 
 			for (n = value.length - 1; n >= 0; n--) {
 				var cDigit = value.charAt(n);
 				var nDigit = parseInt(cDigit, 10);
 				if (bEven) {
 					if ((nDigit *= 2) > 9)
 						nDigit -= 9;
 				}
 				nCheck += nDigit;
 				bEven = !bEven;
 			}
 
 			return (nCheck % 10) == 0;
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/accept
 		accept: function(value, element, param) {
 			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
 			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); 
 		},
 		
 		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
 		equalTo: function(value, element, param) {
 			return value == $(param).val();
 		}
 		
 	}
 	
 });
 
 // deprecated, use $.validator.format instead
 $.format = $.validator.format;
 
 })(jQuery);
 
 // ajax mode: abort
 // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
 // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 
 ;(function($) {
 	var ajax = $.ajax;
 	var pendingRequests = {};
 	$.ajax = function(settings) {
 		// create settings for compatibility with ajaxSetup
 		settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
 		var port = settings.port;
 		if (settings.mode == "abort") {
 			if ( pendingRequests[port] ) {
 				pendingRequests[port].abort();
 			}
 			return (pendingRequests[port] = ajax.apply(this, arguments));
 		}
 		return ajax.apply(this, arguments);
 	};
 })(jQuery);
 
 // provides cross-browser focusin and focusout events
 // IE has native support, in other browsers, use event caputuring (neither bubbles)
 
 // provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
 // handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target 
 
 // provides triggerEvent(type: String, target: Element) to trigger delegated events
 ;(function($) {
 	$.each({
 		focus: 'focusin',
 		blur: 'focusout'	
 	}, function( original, fix ){
 		$.event.special[fix] = {
 			setup:function() {
 				if ( $.browser.msie ) return false;
 				this.addEventListener( original, $.event.special[fix].handler, true );
 			},
 			teardown:function() {
 				if ( $.browser.msie ) return false;
 				this.removeEventListener( original,
 				$.event.special[fix].handler, true );
 			},
 			handler: function(e) {
 				arguments[0] = $.event.fix(e);
 				arguments[0].type = fix;
 				return $.event.handle.apply(this, arguments);
 			}
 		};
 	});
 	$.extend($.fn, {
 		delegate: function(type, delegate, handler) {
 			return this.bind(type, function(event) {
 				var target = $(event.target);
 				if (target.is(delegate)) {
 					return handler.apply(target, arguments);
 				}
 			});
 		},
 		triggerEvent: function(type, target) {
 			return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
 		}
 	})
 })(jQuery);
 
 /*
  * Translated default messages for the jQuery validation plugin.
  * Language: NL
  */
 jQuery.extend(jQuery.validator.messages, {
         required: "Dit is een verplicht veld.",
         remote: "Controleer dit veld.",
         email: "Vul hier een geldig email adres in.",
         url: "Vul hier een geldige URL in.",
         date: "Vul hier een geldige datum in.",
         dateISO: "Vul hier een geldige datum in (ISO).",
         number: "Vul hier een geldig nummer in.",
         digits: "Vul hier alleen cijfers in.",
         creditcard: "Vul hier een geldig credit card nummer in.",
         equalTo: "Vul hier dezelfde waarde in.",
         accept: "Vul hier een waarde in met een geldige extensie.",
         maxlength: jQuery.format("Vul hier maximaal {0} tekens in."),
         minlength: jQuery.format("Vul hier minimaal {0} tekens in."),
         rangelength: jQuery.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."),
         range: jQuery.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."),
         max: jQuery.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),
         min: jQuery.format("Vul hier een waarde in groter dan of gelijk aan {0}.")
 });
 
 
 
 
 
 /*!
  * jQuery Cycle Plugin (with Transition Definitions)
  * Examples and documentation at: http://jquery.malsup.com/cycle/
  * Copyright (c) 2007-2009 M. Alsup
  * Version: 2.72 (09-SEP-2009)
  * Dual licensed under the MIT and GPL licenses:
  * http://www.opensource.org/licenses/mit-license.php
  * http://www.gnu.org/licenses/gpl.html
  * Requires: jQuery v1.2.6 or later
  *
  * Originally based on the work of:
  *	1) Matt Oakes
  *	2) Torsten Baldes (http://medienfreunde.com/lab/innerfade/)
  *	3) Benjamin Sterling (http://www.benjaminsterling.com/experiments/jqShuffle/)
  */
 ;(function($) {
 
 var ver = '2.72';
 
 // if $.support is not defined (pre jQuery 1.3) add what I need
 if ($.support == undefined) {
 	$.support = {
 		opacity: !($.browser.msie)
 	};
 }
 
 function debug(s) {
 	if ($.fn.cycle.debug)
 		log(s);
 }		
 function log() {
 	if (window.console && window.console.log)
 		window.console.log('[cycle] ' + Array.prototype.join.call(arguments,' '));
 	//$('body').append('<div>'+Array.prototype.join.call(arguments,' ')+'</div>');
 };
 
 // the options arg can be...
 //   a number  - indicates an immediate transition should occur to the given slide index
 //   a string  - 'stop', 'pause', 'resume', 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 conjunction with a options == '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;
 
 		// 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();
 		if (els.length < 2) {
 			log('terminating; too few slides: ' + els.length);
 			return;
 		}
 
 		var opts2 = buildOptions($cont, $slides, els, opts, o);
 		if (opts2 === false)
 			return;
 
 		var startTime = opts2.continuous ? 10 : getTimeout(opts2.currSlide, opts2.nextSlide, opts2, !opts2.rev);
 
 		// 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,!opts2.rev)}, startTime);
 		}
 	});
 };
 
 // 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 'stop':
 			cont.cycleStop++; // callbacks look for change
 			if (cont.cycleTimeout)
 				clearTimeout(cont.cycleTimeout);
 			cont.cycleTimeout = 0;
 			$(cont).removeData('cycle.opts');
 			return false;
 		case 'pause':
 			cont.cyclePause = 1;
 			return false;
 		case 'resume':
 			cont.cyclePause = 0;
 			if (arg2 === true) { // resume now!
 				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, 1);
 			}
 			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 removeFilter(el, opts) {
 	if (!$.support.opacity && opts.cleartype && el.style.filter) {
 		try { el.style.removeAttribute('filter'); }
 		catch(smother) {} // handle old opera versions
 	}
 };
 
 // one-time initialization
 function buildOptions($cont, $slides, els, options, o) {
 	// support metadata plugin (v1.0 and v2.0)
 	var opts = $.extend({}, $.fn.cycle.defaults, options || {}, $.metadata ? $cont.metadata() : $.meta ? $cont.data() : {});
 	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] : [];
 	opts.after.unshift(function(){ opts.busy=0; });
 
 	// 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.rev); });
 
 	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)
 		opts.startingSlide = parseInt(opts.startingSlide);
 
 	// 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;});
 		opts.randomIndex = 0;
 		opts.startingSlide = opts.randomMap[0];
 	}
 	else if (opts.startingSlide >= els.length)
 		opts.startingSlide = 0; // catch bogus input
 	opts.currSlide = opts.startingSlide = 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 = 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 && opts.width)
 		$slides.width(opts.width);
 	if (opts.fit && opts.height && opts.height != 'auto')
 		$slides.height(opts.height);
 
 	// 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;
 			if (!h) h = e.offsetHeight;
 			maxw = w > maxw ? w : maxw;
 			maxh = h > maxh ? h : maxh;
 		}
 		if (maxw > 0 && maxh > 0)
 			$cont.css({width:maxw+'px',height:maxh+'px'});
 	}
 
 	if (opts.pause)
 		$cont.hover(function(){this.cyclePause++;},function(){this.cyclePause--;});
 
 	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.cycleW = (opts.fit && opts.width) ? opts.width : $el.width();
 
 		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.animIn = opts.animIn || {};
 	opts.animOut = opts.animOut || {};
 
 	$slides.not(':eq('+first+')').css(opts.cssBefore);
 	if (opts.cssFirst)
 		$($slides[first]).css(opts.cssFirst);
 
 	if (opts.timeout) {
 		opts.timeout = parseInt(opts.timeout);
 		// ensure that timeout and speed settings are sane
 		if (opts.speed.constructor == String)
 			opts.speed = $.fx.speeds[opts.speed] || parseInt(opts.speed);
 		if (!opts.sync)
 			opts.speed = opts.speed / 2;
 		while((opts.timeout - opts.speed) < 250) // 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) {
 		opts.nextSlide = opts.currSlide;
 		if (++opts.randomIndex == els.length)
 			opts.randomIndex = 0;
 		opts.nextSlide = opts.randomMap[opts.randomIndex];
 	}
 	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.before.length)
 		opts.before[0].apply(e0, [e0, e0, opts, true]);
 	if (opts.after.length > 1)
 		opts.after[1].apply(e0, [e0, e0, opts, true]);
 
 	if (opts.next)
 		$(opts.next).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?-1:1)});
 	if (opts.prev)
 		$(opts.prev).bind(opts.prevNextEvent,function(){return advance(opts,opts.rev?1:-1)});
 	if (opts.pager)
 		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;
 
 		$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')
 			$slides.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)
 			$.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
 		$(els).stop(true,true);
 		opts.busy = false;
 	}
 	// don't begin another timeout-based transition if there is one active
 	if (opts.busy)
 		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.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
 	if (manual || !p.cyclePause) {
 		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 (opts.lastFx == undefined || ++opts.lastFx >= opts.fxs.length)
 				opts.lastFx = 0;
 			fx = opts.fxs[opts.lastFx];
 			opts.currFx = fx;
 		}
 
 		// 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() {
 			$.each(opts.after, function(i,o) {
 				if (p.cycleStop != opts.stopCount) return;
 				o.apply(next, [curr, next, opts, fwd]);
 			});
 		};
 
 		if (opts.nextSlide != opts.currSlide) {
 			// get ready to perform the transition
 			opts.busy = 1;
 			if (opts.fxFn) // fx function provided?
 				opts.fxFn(curr, next, opts, after, fwd);
 			else if ($.isFunction($.fn.cycle[opts.fx])) // fx plugin ?
 				$.fn.cycle[opts.fx](curr, next, opts, after);
 			else
 				$.fn.cycle.custom(curr, next, opts, after, manual && opts.fastOnEvent);
 		}
 
 		// calculate the next slide
 		opts.lastSlide = opts.currSlide;
 		if (opts.random) {
 			opts.currSlide = opts.nextSlide;
 			if (++opts.randomIndex == els.length)
 				opts.randomIndex = 0;
 			opts.nextSlide = opts.randomMap[opts.randomIndex];
 		}
 		else { // sequence
 			var roll = (opts.nextSlide + 1) == els.length;
 			opts.nextSlide = roll ? 0 : opts.nextSlide+1;
 			opts.currSlide = roll ? els.length-1 : opts.nextSlide-1;
 		}
 
 		if (opts.pager)
 			$.fn.cycle.updateActivePagerLink(opts.pager, opts.currSlide);
 	}
 
 	// stage the next transtion
 	var ms = 0;
 	if (opts.timeout && !opts.continuous)
 		ms = getTimeout(curr, next, opts, fwd);
 	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.rev) }, ms);
 };
 
 // invoked after transition
 $.fn.cycle.updateActivePagerLink = function(pager, currSlide) {
 	$(pager).find('a').removeClass('activeSlide').filter('a:eq('+currSlide+')').addClass('activeSlide');
 };
 
 // calculate timeout value for current transition
 function getTimeout(curr, next, opts, fwd) {
 	if (opts.timeoutFn) {
 		// call user provided calc fn
 		var t = opts.timeoutFn(curr,next,opts,fwd);
 		while ((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, opts.rev?-1:1); };
 $.fn.cycle.prev = function(opts) { advance(opts, opts.rev?1:-1);};
 
 // advance slide forward or back
 function advance(opts, val) {
 	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) {
 		if (++opts.randomIndex == els.length)
 			opts.randomIndex = 0;
 		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;
 		}
 	}
 
 	if ($.isFunction(opts.prevNextClick))
 		opts.prevNextClick(val > 0, opts.nextSlide, els[opts.nextSlide]);
 	go(els, opts, 1, val>=0);
 	return false;
 };
 
 function buildPager(els, opts) {
 	var $p = $(opts.pager);
 	$.each(els, function(i,o) {
 		$.fn.cycle.createPagerAnchor(i,o,$p,els,opts);
 	});
    $.fn.cycle.updateActivePagerLink(opts.pager, opts.startingSlide);
 };
 
 $.fn.cycle.createPagerAnchor = function(i, el, $p, els, opts) {
 	var a;
 	if ($.isFunction(opts.pagerAnchorBuilder))
 		a = opts.pagerAnchorBuilder(i,el);
 	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);
 			});
 			$a = $(arr);
 		}
 		else {
 			$a.appendTo($p);
 		}
 	}
 
 	$a.bind(opts.pagerEvent, function(e) {
 		e.preventDefault();
 		opts.nextSlide = i;
 		var p = opts.$cont[0], timeout = p.cycleTimeout;
 		if (timeout) {
 			clearTimeout(timeout);
 			p.cycleTimeout = 0;
 		}
 		if ($.isFunction(opts.pagerClick))
 			opts.pagerClick(opts.nextSlide, els[opts.nextSlide]);
 		go(els,opts,1,opts.currSlide < i); // trigger the trans
 		return false;
 	});
 	
 	if (opts.pagerEvent != 'click')
 		$a.click(function(){return false;}); // supress click
 	
 	if (opts.pauseOnPagerHover)
 		$a.hover(function() { opts.$cont[0].cyclePause++; }, function() { opts.$cont[0].cyclePause--; } );
 };
 
 // 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) {
 	function hex(s) {
 		s = parseInt(s).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.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();
 	opts.cssBefore.opacity = 1;
 	opts.cssBefore.display = 'block';
 	if (w !== false && next.cycleW > 0)
 		opts.cssBefore.width = next.cycleW;
 	if (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, 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, cb)};
 	$l.animate(opts.animOut, speedOut, easeOut, function() {
 		if (opts.cssAfter) $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 = {
 	fx:			  'fade', // name of transition effect (or comma separated names, ex: fade,scrollUp,shuffle)
 	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)
 	continuous:	   0,	  // true to start next transition immediately after current one completes
 	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
 	next:		   'next',  // selector for element to use as click trigger for next slide
 	prev:		   null,  // selector for element to use as click trigger for previous slide
 	prevNextClick: null,  // callback fn for prev/next clicks:	function(isNext, zeroBasedSlideIndex, slideElement)
 	prevNextEvent:'click',// event which drives the manual transition to the previous or next slide
 	pager:		   null,  // selector for element to use as pager container
 	pagerClick:	   null,  // callback fn for pager clicks:	function(zeroBasedSlideIndex, slideElement)
 	pagerEvent:	  'click', // name of event which drives the pager navigation
 	pagerAnchorBuilder: null, // callback fn for building anchor links:  function(index, DOMelement)
 	before:		   null,  // transition callback (scope set to element to be shown):	 function(currSlideElement, nextSlideElement, options, forwardFlag)
 	after:		   null,  // transition callback (scope set to element that was shown):  function(currSlideElement, nextSlideElement, options, forwardFlag)
 	end:		   null,  // callback invoked when the slideshow terminates (use with autostop or nowrap options): function(options)
 	easing:		   null,  // easing method for both in and out transitions
 	easeIn:		   null,  // easing for "in" transition
 	easeOut:	   null,  // easing for "out" transition
 	shuffle:	   null,  // coords for shuffle animation, ex: { top:15, left: 200 }
 	animIn:		   null,  // properties that define how the slide animates in
 	animOut:	   null,  // properties that define how the slide animates out
 	cssBefore:	   null,  // properties that define the initial state of the slide before transitioning in
 	cssAfter:	   null,  // properties that defined the state of the slide after transitioning out
 	fxFn:		   null,  // function used to control the transition: function(currSlideElement, nextSlideElement, options, afterCalback, forwardFlag)
 	height:		  'auto', // container height
 	startingSlide: 0,	  // zero-based index of the first slide to be displayed
 	sync:		   1,	  // true if in/out transitions should occur simultaneously
 	random:		   0,	  // true for random, false for sequence (not applicable to shuffle fx)
 	fit:		   0,	  // force slides to fit container
 	containerResize: 1,	  // resize container to fit largest slide
 	pause:		   0,	  // true to enable "pause on hover"
 	pauseOnPagerHover: 0, // true to pause when hovering over pager link
 	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)
 	delay:		   0,	  // additional delay (in ms) for first transition (hint: can be negative)
 	slideExpr:	   null,  // expression for selecting slides (if something other than all children is required)
 	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)
 	nowrap:		   0,	  // true to prevent slideshow from wrapping
 	fastOnEvent:   0,	  // force fast transitions when triggered manually (via pager or prev/next); value == time in ms
 	randomizeEffects: 1,  // valid when multiple effects are used; true to make the effect sequence random
 	rev:		   0,	 // causes animations to transition in reverse
 	manualTrump:   true,  // causes manual transition to stop an active transition instead of being ignored
 	requeueOnImageNotLoaded: true, // requeue the slideshow if any image slides are not yet loaded
 	requeueTimeout: 250   // ms delay for requeue
 };
 
 })(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-2008 M. Alsup
  * Version:	 2.72
  * 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 one-time slide initialization 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();
 	};
 }
 
 // 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, 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, 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, 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, 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) {
 		$.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) {
 		$.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, top: 0, 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, top: 0, 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) {
 		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)+1+count);
 			}
 			$el.animate({left:0, top:0}, opts.speedOut, opts.easeOut, function() {
 				$(fwd ? this : curr).hide();
 				if (cb) cb();
 			});
 		});
 	};
 	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.cssFirst  = { top: 0 };
 	opts.cssBefore = { left: 0, 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, top: 0, 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, 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;
 	});
 	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;
 		opts.animIn	   = { top: 0, left: 0, width: next.cycleW, height: next.cycleH };
 		opts.animOut   = { width: 0, height: 0, top: curr.cycleH/2, left: curr.cycleW/2 };
 	});
 	opts.cssFirst = { top:0, left: 0 };
 	opts.cssBefore = { width: 0, 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;
 		opts.animIn	= { top: 0, left: 0, width: next.cycleW, height: next.cycleH };
 	});
 	opts.cssBefore = { width: 0, 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, 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, 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, left: w };
 	opts.animIn = { top: 0, left: 0 };
 	opts.animOut  = { top: h, 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, width: this.cycleW };
 		opts.animOut = { left: 0 };
 	});
 	opts.cssBefore = { width: 0, top: 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, height: this.cycleH };
 		opts.animOut = { top: 0 };
 	});
 	opts.cssBefore = { height: 0, 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, width: this.cycleW };
 		opts.animOut = { left: curr.cycleW/2, width: 0 };
 	});
 	opts.cssBefore = { top: 0, 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, height: next.cycleH };
 		opts.animOut = { top: curr.cycleH/2, height: 0 };
 	});
 	opts.cssBefore = { left: 0, height: 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, top: 0};
 	opts.animOut = { opacity: 1 };
 	opts.cssBefore = { top: 0, 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, top: 0 };
 	opts.animOut = { opacity: 1 };
 	opts.cssBefore = { top: 0, 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)
 			opts.animOut = { left: w*2, top: -h/2, opacity: 0 };
 		else
 			opts.animOut.opacity = 0;
 	});
 	opts.cssBefore = { left: 0, 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);
 			var left = parseInt(w/2);
 			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]), r = parseInt(d[1]), b = parseInt(d[2]), l = parseInt(d[3]);
 
 	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)) - 1;
 		(function f() {
 			var tt = t ? t - parseInt(step * (t/count)) : 0;
 			var ll = l ? l - parseInt(step * (l/count)) : 0;
 			var bb = b < h ? b + parseInt(step * ((h-b)/count || 1)) : h;
 			var rr = r < w ? r + parseInt(step * ((w-r)/count || 1)) : w;
 			$next.css({ clip: 'rect('+tt+'px '+rr+'px '+bb+'px '+ll+'px)' });
 			(step++ <= count) ? setTimeout(f, 13) : $curr.css('display', 'none');
 		})();
 	});
 	opts.cssBefore = { display: 'block', opacity: 1, top: 0, left: 0 };
 	opts.animIn	   = { left: 0 };
 	opts.animOut   = { left: 0 };
 };
 
 })(jQuery);
 
 
 
 
 /*
  * FancyBox - jQuery Plugin
  * Simple and fancy lightbox alternative
  *
  * Copyright (c) 20010 Janis Skarnelis
  * Examples and documentation at: http://fancybox.net
  *
  * Version: 1.3.0 (02/02/2010)
  * Requires: jQuery v1.3+
  *
  * Dual licensed under the MIT and GPL licenses:
  *   http://www.opensource.org/licenses/mit-license.php
  *   http://www.gnu.org/licenses/gpl.html
  */
 
 ;(function($) {
 
 	var tmp, loading, overlay, wrap, outer, inner, content, close, nav_left, nav_right;
 
 	var selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [];
 
 	var ajaxLoader = null, imgPreloader = new Image, imageRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i;
 
 	var loadingTimer, loadingFrame = 1;
 
 	var start_pos, final_pos, busy = false, shadow = 20, fx = $.extend($('<div/>')[0], { prop: 0 }), titleh = 0, isIE6 = !$.support.opacity && !window.XMLHttpRequest;
 
 	$.fn.fixPNG = function() {
 		return this.each(function () {
 			var image = $(this).css('backgroundImage');
 
 			if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
 				image = RegExp.$1;
 				$(this).css({
 					'backgroundImage': 'none',
 					'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=" + ($(this).css('backgroundRepeat') == 'no-repeat' ? 'crop' : 'scale') + ", src='" + image + "')"
 				}).each(function () {
 					var position = $(this).css('position');
 					if (position != 'absolute' && position != 'relative')
 						$(this).css('position', 'relative');
 				}).css('zoom', 1);
 			}
 		});
 	};
 
 	$.fn.fancybox = function(options) {
 		$(this).data('fancybox', $.extend({}, options));
 
 		$(this).unbind('click.fb').bind('click.fb', function(e) {
 			e.preventDefault();
 
 			if (busy) return;
 
 			busy = true;
 
 			$(this).blur();
 
 			selectedArray	= [];
 			selectedIndex	= 0;
 
 			var rel = $(this).attr('rel') || '';
 
 			if (!rel || rel == '' || rel === 'nofollow') {
 				selectedArray.push(this);
 
 			} else {
 				selectedArray	= $("a[rel=" + rel + "], area[rel=" + rel + "]");
 				selectedIndex	= selectedArray.index( this );
 			}
 
 			fancybox_start();
 
 			return false;
 		});
 
 		return this;
 	};
 
 	/*
 
 	Public Methods
 
 	*/
 
 	$.fancybox = function(obj, opts) {
 		if (busy) return;
 
 		busy = true;
 
 		selectedArray	= [];
 		selectedIndex	= 0;
 
 		if ($.isArray(obj)) {
 			for (var i = 0, j = obj.length; i < j; i++) {
 				if (typeof obj[i] == 'object') {
 					$(obj[i]).data('fancybox', $.extend({}, opts, obj[i]));
 				} else {
 					obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts));
 				}
 			}
 
 			selectedArray = jQuery.merge(selectedArray, obj);
 
 		} else {
 			if (typeof obj == 'object') {
 				$(obj).data('fancybox', $.extend({}, opts, obj));
 			} else {
 				obj = $({}).data('fancybox', $.extend({content : obj}, opts));
 			}
 
 			selectedArray.push(obj);
 		}
 
 		fancybox_start();
 	};
 
 	$.fancybox.showActivity = function() {
 		clearInterval(loadingTimer);
 
 		loading.show();
 		loadingTimer = setInterval(fancybox_animate_loading, 66);
 	};
 	
 	$.fancybox.hideActivity = function() {
 		loading.hide();
 	};
 
 	$.fancybox.next = function() {
 		return $.fancybox.pos( currentIndex + 1);
 	};
 	
 	$.fancybox.prev = function() {
 		return $.fancybox.pos( currentIndex - 1);
 	};
 
 	$.fancybox.pos = function(pos) {
 		if (busy) return;
 
 		pos = parseInt(pos);
 
 		if (pos > -1 && currentArray.length > pos) {
 			selectedIndex = pos;
 			fancybox_start();
 		}
 
 		if (currentOpts.cyclic && currentArray.length > 1 && pos < 0) {
 			selectedIndex = currentArray.length - 1;
 			fancybox_start();
 		}
 
 		if (currentOpts.cyclic && currentArray.length > 1 && pos >= currentArray.length) {
 			selectedIndex = 0;
 			fancybox_start();
 		}
 
 		return;
 	};
 
 	$.fancybox.cancel = function() {
 		if (busy) return;
 
 		busy = true;
 
 		$.event.trigger('fancybox-cancel');
 
 		fancybox_abort();
 
 		if (selectedOpts && $.isFunction(selectedOpts.onCancel)) {
 			selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts);
 		};
 
 		busy = false;
 	};
 
 	// Note: within an iframe use - parent.$.fancybox.close();
 	$.fancybox.close = function() {
 		if (busy || wrap.is(':hidden')) return;
 
 		busy = true;
 
 		if (currentOpts && $.isFunction(currentOpts.onCleanup)) {
 			if (currentOpts.onCleanup(currentArray, currentIndex, currentOpts) === false) {
 				busy = false;
 				return;
 			}
 		};
 
 		fancybox_abort();
 
 		$(close.add( nav_left ).add( nav_right )).hide();
 
 		$('#fancybox-title').remove();
 
 		wrap.add(inner).add(overlay).unbind();
 
 		$(window).unbind("resize.fb scroll.fb");
 		$(document).unbind('keydown.fb');
 
 		function _cleanup() {
 			overlay.fadeOut('fast');
 
 			wrap.hide();
 
 			$.event.trigger('fancybox-cleanup');
 
 			inner.empty();
 
 			if ($.isFunction(currentOpts.onClosed)) {
 				currentOpts.onClosed(currentArray, currentIndex, currentOpts);
 			}
 
 			currentArray	= selectedOpts	= [];
 			currentIndex	= selectedIndex	= 0;
 			currentOpts		= selectedOpts	= {};
 
 			busy = false;
 		}
 
 		inner.css('overflow', 'hidden');
 
 		if (currentOpts.transitionOut == 'elastic') {
 			start_pos = fancybox_get_zoom_from();
 
 			var pos = wrap.position();
 
 			final_pos = {
 				top		:	pos.top ,
 				left	:	pos.left,
 				width	:	wrap.width(),
 				height	:	wrap.height()
 			};
 
 			if (currentOpts.opacity) {
 				final_pos.opacity = 1;
 			}
 
 			fx.prop = 1;
 
 			$(fx).animate({ prop: 0 }, {
 				 duration	: currentOpts.speedOut,
 				 easing		: currentOpts.easingOut,
 				 step		: fancybox_draw,
 				 complete	: _cleanup
 			});
 
 		} else {
 			wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup);
 		}
 	};
 
 	$.fancybox.resize = function() {
 		if (busy || wrap.is(':hidden')) return;
 
 		busy = true;
 
 		var c = inner.wrapInner("<div style='overflow:auto'></div>").children();
 		var h = c.height();
 
 		wrap.css({height:	h + (currentOpts.padding * 2) + titleh});
 		inner.css({height:	h});
 
 		c.replaceWith(c.children());
 
 		$.fancybox.center();
 	};
 
 	$.fancybox.center = function() {
 		busy = true;
 
 		var view	= fancybox_get_viewport();
 		var margin	= currentOpts.margin;
 		var to		= {};
 
 		to.top	= view[3] + ((view[1] - ((wrap.height() - titleh) + (shadow * 2 ))) * 0.5);
 		to.left	= view[2] + ((view[0] - (wrap.width() + (shadow * 2 ))) * 0.5);
 
 		to.top	= Math.max(view[3] + margin, to.top);
 		to.left	= Math.max(view[2] + margin, to.left);
 
 		wrap.css(to);
 
 		busy = false;
 	};
 
 	/*
 	
 	Inner Methods
 
 	*/
 
 	function fancybox_abort() {
 		loading.hide();
 
 		imgPreloader.onerror = imgPreloader.onload = null;
 		
 		if (ajaxLoader) ajaxLoader.abort();
 
 		tmp.empty();
 	};
 
 	function fancybox_error() {
 		$.fancybox('<p id="fancybox_error">The requested content cannot be loaded.<br />Please try again later.</p>', {
 			'scrolling'		: 'no',
 			'padding'		: 20,
 			'transitionIn'	: 'none',
 			'transitionOut'	: 'none'
 		});
 	};
 	
 	function fancybox_start() {
 		fancybox_abort();
 
 		var obj	= selectedArray[ selectedIndex ];
 
 		selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
 
 		var href, type, title = obj.title || $(obj).title || selectedOpts.title || '';
 
 		if (obj.nodeName && !selectedOpts.orig) {
 			selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
 		}
 
 		if (title == '' && selectedOpts.orig) title = selectedOpts.orig.attr('alt');
 
 		if (obj.nodeName && (/^(?:javascript|#)/i).test(obj.href)) {
 			href = selectedOpts.href || null;
 		} else {
 			href = selectedOpts.href || obj.href || null;
 		}
 
 		if (selectedOpts.type) {
 			type = selectedOpts.type;
 
 			if (!href) href = selectedOpts.content;
 			
 		} else if (selectedOpts.content) {
 			type	= 'html';
 
 		} else if (href) {
 			if (href.match(imageRegExp)) {
 				type = 'image';
 
 			} else if (href.match(swfRegExp)) {
 				type = 'swf';
 
 			} else if ($(obj).hasClass("iframe")) {
 				type = 'iframe';
 
 			} else if (href.match(/#/)) {
 				obj = href.substr(href.indexOf("#"));
 
 				type = $(obj).length > 0 ? 'inline' : 'ajax';
 			} else {
 				type = 'ajax';
 			}
 		} else {
 			type = 'inline';
 		}
 
 		selectedOpts.type	= type;
 		selectedOpts.href	= href;
 		selectedOpts.title	= title;
 
 		if (selectedOpts.autoDimensions && selectedOpts.type !== 'iframe' && selectedOpts.type !== 'swf') {
 			selectedOpts.width		= 'auto';
 			selectedOpts.height		= 'auto';
 		}
 
 		if (selectedOpts.modal) {
 			selectedOpts.overlayShow		= true;
 			selectedOpts.hideOnOverlayClick	= false;
 			selectedOpts.hideOnContentClick	= false;
 			selectedOpts.enableEscapeButton	= false;
 			selectedOpts.showCloseButton	= false;
 		}
 
 		if ($.isFunction(selectedOpts.onStart)) {
 			if (selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts) === false) {
 				busy = false;
 				return;
 			}
 		};
 
 		tmp.css('padding', (shadow + selectedOpts.padding + selectedOpts.margin));
 
 		$('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
 			$(this).replaceWith(inner.children());
 		});
 
 		switch (type) {
 			case 'html' :
 				tmp.html( selectedOpts.content );
 
 				fancybox_process_inline();
 			break;
 
 			case 'inline' :
 				$('<div class="fancybox-inline-tmp" />').hide().insertBefore( $(obj) ).bind('fancybox-cleanup', function() {
 					$(this).replaceWith(inner.children());
 				}).bind('fancybox-cancel', function() {
 					$(this).replaceWith(tmp.children());
 				});
 
 				$(obj).appendTo(tmp);
 
 				fancybox_process_inline();
 			break;
 
 			case 'image':
 				busy = false;
 
 				$.fancybox.showActivity();
 
 				imgPreloader = new Image;
 
 				imgPreloader.onerror = function() {
 					fancybox_error();
 				}
 
 				imgPreloader.onload = function() {
 					imgPreloader.onerror = null;
 					imgPreloader.onload = null;
 					fancybox_process_image();
 				}
 
 				imgPreloader.src = href;
 	
 			break;
 
 			case 'swf':
 				var str = '';
 				var emb = '';
 
 				str += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
 
 				$.each(selectedOpts.swf, function(name, val) {
 					str += '<param name="' + name + '" value="' + val + '"></param>';
 					emb += ' ' + name + '="' + val + '"';
 				});
 
 				str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
 
 				tmp.html(str);
 
 				fancybox_process_inline();
 			break;
 
 			case 'ajax':
 				var selector	= href.split('#', 2);
 				var data		= selectedOpts.ajax.data || {};
 
 				if (selector.length > 1) {
 					href = selector[0];
 
 					typeof data == "string" ? data += '&selector=' + selector[1] : data['selector'] = selector[1];
 				}
 
 				busy = false;
 				$.fancybox.showActivity();
 
 				ajaxLoader = $.ajax($.extend(selectedOpts.ajax, {
 					url		: href,
 					data	: data,
 					error	: fancybox_error,
 					success : function(data, textStatus, XMLHttpRequest) {
 						if (ajaxLoader.status == 200) {
 							tmp.html( data );
 							fancybox_process_inline();
 						}
 					}
 				}));
 
 			break;
 
 			case 'iframe' :
 				$('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" scrolling="' + selectedOpts.scrolling + '" src="' + selectedOpts.href + '"></iframe>').appendTo(tmp);
 
 				fancybox_show();
 			break;
 		}
 	};
 
 	function fancybox_process_image() {
 		busy = true;
 
 		selectedOpts.width	= imgPreloader.width;
 		selectedOpts.height	= imgPreloader.height;
 
 		$("<img />").attr({
 			'id'	: 'fancybox-img',
 			'src'	: imgPreloader.src,
 			'alt'	: selectedOpts.title
 		}).appendTo( tmp );
 
 		fancybox_show();
 	};
 
 	function fancybox_process_inline() {
 		tmp.width(	selectedOpts.width );
 		tmp.height(	selectedOpts.height );
 
 		if (selectedOpts.width	== 'auto') selectedOpts.width	= tmp.width();
 		if (selectedOpts.height	== 'auto') selectedOpts.height	= tmp.height();
 
 		fancybox_show();
 	};
 
 	function fancybox_show() {
 		loading.hide();
 
 		if (wrap.is(":visible") && $.isFunction(currentOpts.onCleanup)) {
 			if (currentOpts.onCleanup(currentArray, currentIndex, currentOpts) === false) {
 				$.event.trigger('fancybox-cancel');
 
 				busy = false;
 				return;
 			}
 		};
 
 		currentArray	= selectedArray;
 		currentIndex	= selectedIndex;
 		currentOpts		= selectedOpts;
 
 		inner.get(0).scrollTop	= 0;
 		inner.get(0).scrollLeft	= 0;
 
 		if (currentOpts.overlayShow) {
 			if (isIE6) {
 				$('select:not(#fancybox-tmp select)').filter(function() {
 					return this.style.visibility !== 'hidden';
 				}).css({'visibility':'hidden'}).one('fancybox-cleanup', function() {
 					this.style.visibility = 'inherit';
 				});
 			}
 
 			overlay.css({
 				'background-color'	: currentOpts.overlayColor,
 				'opacity'			: currentOpts.overlayOpacity
 			}).unbind().show();
 		}
 
 		final_pos = fancybox_get_zoom_to();
 
 		fancybox_process_title();
 
 		if (wrap.is(":visible")) {
 			$( close.add( nav_left ).add( nav_right ) ).hide();
 
 			var pos = wrap.position();
 
 			start_pos = {
 				top		:	pos.top ,
 				left	:	pos.left,
 				width	:	wrap.width(),
 				height	:	wrap.height()
 			};
 
 			var equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
 
 			inner.fadeOut(currentOpts.changeFade, function() {
 				$.event.trigger('fancybox-change');
 
 				inner.css({
 						top			: currentOpts.padding,
 						left		: currentOpts.padding,
 						width		: Math.max(start_pos.width	- (currentOpts.padding * 2), 1),
 						height		: Math.max(start_pos.height	- (currentOpts.padding * 2), 1)
 					})
 					.empty()
 					.css('overflow', 'hidden');
 
 				function finish_resizing() {
 					inner.html( tmp.contents() ).fadeIn(currentOpts.changeFade, _finish);
 				}
 
 				fx.prop = 0;
 
 				$(fx).animate({ prop: 1 }, {
 					 duration	: equal ? 0 : currentOpts.changeSpeed,
 					 easing		: currentOpts.easingChange,
 					 step		: fancybox_draw,
 					 complete	: finish_resizing
 				});
 			});
 
 			return;
 		}
 
 		wrap.css('opacity', 1);
 
 		if (currentOpts.transitionIn == 'elastic') {
 			start_pos = fancybox_get_zoom_from();
 
 			inner.css({
 					top			: currentOpts.padding,
 					left		: currentOpts.padding,
 					width		: Math.max(start_pos.width	- (currentOpts.padding * 2), 1),
 					height		: Math.max(start_pos.height	- (currentOpts.padding * 2), 1)
 				})
 				.html( tmp.contents() );
 
 			wrap.css(start_pos).show();
 
 			if (currentOpts.opacity) final_pos.opacity = 0;
 
 			fx.prop = 0;
 
 			$(fx).animate({ prop: 1 }, {
 				 duration	: currentOpts.speedIn,
 				 easing		: currentOpts.easingIn,
 				 step		: fancybox_draw,
 				 complete	: _finish
 			});
 
 		} else {
 			inner.css({
 					top			: currentOpts.padding,
 					left		: currentOpts.padding,
 					width		: Math.max(final_pos.width	- (currentOpts.padding * 2), 1),
 					height		: Math.max(final_pos.height	- (currentOpts.padding * 2) - titleh, 1)
 				})
 				.html( tmp.contents() );
 
 			wrap.css( final_pos ).fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
 		}
 	};
 
 	function fancybox_draw(pos) {
 		var width	= Math.round(start_pos.width	+ (final_pos.width	- start_pos.width)	* pos);
 		var height	= Math.round(start_pos.height	+ (final_pos.height	- start_pos.height)	* pos);
 
 		var top		= Math.round(start_pos.top	+ (final_pos.top	- start_pos.top)	* pos);
 		var left	= Math.round(start_pos.left	+ (final_pos.left	- start_pos.left)	* pos);
 
 		wrap.css({
 			'width'		: width		+ 'px',
 			'height'	: height	+ 'px',
 			'top'		: top		+ 'px',
 			'left'		: left		+ 'px'
 		});
 
 		width	= Math.max(width - currentOpts.padding * 2, 0);
 		height	= Math.max(height - (currentOpts.padding * 2 + (titleh * pos)), 0);
 
 		inner.css({
 			'width'		: width		+ 'px',
 			'height'	: height	+ 'px'
 		});
 
 		if (typeof final_pos.opacity !== 'undefined') wrap.css('opacity', (pos < 0.5 ? 0.5 : pos));
 	};
 
 	function _finish() {
 		inner.css('overflow', overflow = (currentOpts.scrolling == 'auto' ? (currentOpts.type == 'image' || currentOpts.type == 'iframe' || currentOpts.type == 'swf' ? 'hidden' : 'auto') : (currentOpts.scrolling == 'yes' ? 'auto' : 'visible')));
 
 		if (!$.support.opacity) {
 			inner.get(0).style.removeAttribute('filter');
 			wrap.get(0).style.removeAttribute('filter');
 		}
 
 		$('#fancybox-title').show();
 
 		if (currentOpts.hideOnContentClick)	inner.one('click',		$.fancybox.close);
 		if (currentOpts.hideOnOverlayClick)	overlay.one('click',	$.fancybox.close);
 
 		if (currentOpts.showCloseButton) close.show();
 
 		fancybox_set_navigation();
 
 		$(window).bind("resize.fb", $.fancybox.center);
 
 		currentOpts.centerOnScroll ? $(window).bind("scroll.fb", $.fancybox.center) : $(window).unbind("scroll.fb");
 
 		if ($.isFunction(currentOpts.onComplete)) currentOpts.onComplete(currentArray, currentIndex, currentOpts);
 
 		busy = false;
 
 		fancybox_preload_images();
 	};
 
 	function fancybox_get_zoom_to() {
 		var view	= fancybox_get_viewport();
 		var to		= {};
 
 		var margin = currentOpts.margin;
 		var resize = currentOpts.autoScale;
 
 		var horizontal_space	= (shadow + margin) * 2 ;
 		var vertical_space		= (shadow + margin) * 2 ;
 		var double_padding		= (currentOpts.padding * 2);
 
 		if (currentOpts.width.toString().indexOf('%') > -1) {
 			to.width = ((view[0] * parseFloat(currentOpts.width)) / 100) - (shadow * 2) ;
 			resize = false;
 
 		} else {
 			to.width = currentOpts.width + double_padding;
 		}
 
 		if (currentOpts.height.toString().indexOf('%') > -1) {
 			to.height = ((view[1] * parseFloat(currentOpts.height)) / 100) - (shadow * 2);
 			resize = false;
 
 		} else {
 			to.height = currentOpts.height + double_padding;
 		}
 
 		if (resize && (to.width > (view[0] - horizontal_space) || to.height > (view[1] - vertical_space))) {
 			if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
 				horizontal_space	+= double_padding;
 				vertical_space		+= double_padding;
 
 				var ratio = Math.min(Math.min( view[0] - horizontal_space, currentOpts.width) / currentOpts.width, Math.min( view[1] - vertical_space, currentOpts.height) / currentOpts.height);
 
 				to.width	= Math.round(ratio * (to.width	- double_padding)) + double_padding;
 				to.height	= Math.round(ratio * (to.height	- double_padding)) + double_padding;
 
 			} else {
 				to.width	= Math.min(to.width,	(view[0] - horizontal_space));
 				to.height	= Math.min(to.height,	(view[1] - vertical_space));
 			}
 		}
 
 		to.top	= view[3] + ((view[1] - (to.height	+ (shadow * 2 ))) * 0.5);
 		to.left	= view[2] + ((view[0] - (to.width	+ (shadow * 2 ))) * 0.5);
 
 		if (currentOpts.autoScale == false) {
 			to.top	= Math.max(view[3] + margin, to.top);
 			to.left	= Math.max(view[2] + margin, to.left);
 		}
 
 		return to;
 	};
 
 	function fancybox_get_zoom_from() {
 		var orig	= selectedOpts.orig ? $(selectedOpts.orig) : false;
 		var from 	= {};
 
 		if (orig && orig.length) {
 			var pos = fancybox_get_obj_pos(orig);
 
 			from = {
 				width	: (pos.width	+ (currentOpts.padding * 2)),
 				height	: (pos.height	+ (currentOpts.padding * 2)),
 				top		: (pos.top		- currentOpts.padding - shadow),
 				left	: (pos.left		- currentOpts.padding - shadow)
 			};
 			
 		} else {
 			var view = fancybox_get_viewport();
 
 			from = {
 				width	: 1,
 				height	: 1,
 				top		: view[3] + view[1] * 0.5,
 				left	: view[2] + view[0] * 0.5
 			};
 		}
 
 		return from;
 	};
 
 	function fancybox_set_navigation() {
 		$(document).unbind('keydown.fb').bind('keydown.fb', function(e) {
 			if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
 				e.preventDefault();
 				$.fancybox.close();
 
 			} else if (e.keyCode == 37) {
 				e.preventDefault();
 				$.fancybox.prev();
 
 			} else if (e.keyCode == 39) {
 				e.preventDefault();
 				$.fancybox.next();
 			}
 		});
 
 		if ($.fn.mousewheel) {
 			wrap.unbind('mousewheel.fb');
 
 			if (currentArray.length > 1) {
 				wrap.bind('mousewheel.fb', function(e, delta) {
 					e.preventDefault();
 
 					if (busy || delta == 0) return;
 
 					delta > 0 ? $.fancybox.prev() : $.fancybox.next();
 				});
 			}
 		}
 
 		if (!currentOpts.showNavArrows) return;
 
 		if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != 0) {
 			nav_left.show();
 		}
 
 		if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
 			nav_right.show();
 		}
 	};
 
 	function fancybox_preload_images() {
 		if ((currentArray.length -1) > currentIndex) {
 			var href = currentArray[ currentIndex + 1 ].href;
 
 			if (typeof href !== 'undefined' && href.match(imageRegExp)) {
 				var objNext = new Image();
 				objNext.src = href;
 			}
 		}
 
 		if (currentIndex > 0) {
 			var href = currentArray[ currentIndex - 1 ].href;
 
 			if (typeof href !== 'undefined' && href.match(imageRegExp)) {
 				var objNext = new Image();
 				objNext.src = href;
 			}
 		}
 	};
 
 	function fancybox_animate_loading() {
 		if (!loading.is(':visible')){
 			clearInterval(loadingTimer);
 			return;
 		}
 
 		$('div', loading).css('top', (loadingFrame * -40) + 'px');
 
 		loadingFrame = (loadingFrame + 1) % 12;
 	};
 
 	function fancybox_get_viewport() {
 		return [ $(window).width(), $(window).height(), $(document).scrollLeft(), $(document).scrollTop() ];
 	};
 
 	function fancybox_get_obj_pos(obj) {
 		var pos		= obj.offset();
 
 		pos.top		+= parseFloat( obj.css('paddingTop') )	|| 0;
 		pos.left	+= parseFloat( obj.css('paddingLeft') )	|| 0;
 
 		pos.top		+= parseFloat( obj.css('border-top-width') )	|| 0;
 		pos.left	+= parseFloat( obj.css('border-left-width') )	|| 0;
 
 		pos.width	= obj.width();
 		pos.height	= obj.height();
 
 		return pos;
 	};
 
 	function fancybox_process_title() {
 		$('#fancybox-title').remove();
 
 		titleh = 0;
 
 		if (currentOpts.titleShow == false) return;
 
 		var obj		= currentArray[ currentIndex ];
 		var title	= currentOpts.title;
 
 		title = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(title, currentArray, currentIndex, currentOpts) : fancybox_format_title(title);
 
 		if (!title || title == '') return;
 
 		var width	= final_pos.width - (currentOpts.padding * 2);
 		var titlec	= 'fancybox-title-' + currentOpts.titlePosition;
 
 		$('<div id="fancybox-title" class="' + titlec + '" />').css({
 			'width'			: width,
 			'paddingLeft'	: currentOpts.padding,
 			'paddingRight'	: currentOpts.padding
 		}).html(title).appendTo('body');
 
 		switch (currentOpts.titlePosition) {
 			case 'inside':
 				titleh = $("#fancybox-title").outerHeight(true) - currentOpts.padding;
 				final_pos.height += titleh;
 			break;
 
 			case 'over':
 				$('#fancybox-title').css('bottom', currentOpts.padding);
 			break;
 
 			default:
 				$('#fancybox-title').css('bottom', $("#fancybox-title").outerHeight(true) * -1);
 			break;
 		}
 
 		$('#fancybox-title').appendTo( outer ).hide();
 
 		if (isIE6) {
 			$('#fancybox-title span').fixPNG();
 		}
 	};
 
 	function fancybox_format_title(title) {
 		if (title && title.length) {
 			switch (currentOpts.titlePosition) {
 				case 'inside':
 					return title;
 				break;
 
 				case 'over':
 					return '<span id="fancybox-title-over">' + title + '</span>';
 				break;
 
 				default:
 					return '<span id="fancybox-title-wrap"><span id="fancybox-title-left"></span><span id="fancybox-title-main">' + title + '</span><span id="fancybox-title-right"></span></span>';
 				break;
 			}
 		}
 
 		return false;
 	};
 
 	function fancybox_init() {
 		if ($("#fancybox-wrap").length) return;
 
 		$('body').append(
 			tmp			= $('<div id="fancybox-tmp"></div>'),
 			loading		= $('<div id="fancybox-loading"><div></div></div>'),
 			overlay		= $('<div id="fancybox-overlay"></div>'),
 			wrap		= $('<div id="fancybox-wrap"></div>')
 		);
 
 		outer = $('<div id="fancybox-outer"></div>')
 			.append('<div class="fancy-bg" id="fancy-bg-n"></div><div class="fancy-bg" id="fancy-bg-ne"></div><div class="fancy-bg" id="fancy-bg-e"></div><div class="fancy-bg" id="fancy-bg-se"></div><div class="fancy-bg" id="fancy-bg-s"></div><div class="fancy-bg" id="fancy-bg-sw"></div><div class="fancy-bg" id="fancy-bg-w"></div><div class="fancy-bg" id="fancy-bg-nw"></div>')
 			.appendTo( wrap );
 
 		outer.append(
 			inner		= $('<div id="fancybox-inner"></div>'),
 			close		= $('<a id="fancybox-close"></a>'),
 
 			nav_left	= $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),
 			nav_right	= $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')
 		);
 		
 		close.click($.fancybox.close);
 		loading.click($.fancybox.cancel);
 
 		nav_left.click(function(e) {
 			e.preventDefault();
 			$.fancybox.prev();
 		});
 
 		nav_right.click(function(e) {
 			e.preventDefault();
 			$.fancybox.next();
 		});
 
 		if (!$.support.opacity) {
 			outer.find('.fancy-bg').fixPNG();
 		}
 
 		if (isIE6) {
 			$(close.add('.fancy-ico').add('div', loading)).fixPNG();
 
 			overlay.get(0).style.setExpression('height',	"document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'");
 			loading.get(0).style.setExpression('top',		"(-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'");
 
 			outer.prepend('<iframe id="fancybox-hide-sel-frame" src="javascript:\'\';" scrolling="no" frameborder="0" ></iframe>');
 		}
 	};
 
 	$.fn.fancybox.defaults = {
 		padding				:	10,
 		margin				:	20,
 		opacity				:	false,
 		modal				:	false,
 		cyclic				:	false,
 		scrolling			:	'auto',	// 'auto', 'yes' or 'no'
 
 		width				:	560,
 		height				:	340,
 
 		autoScale			:	true,
 		autoDimensions		:	true,
 		centerOnScroll		:	false,
 
 		ajax				:	{},
 		swf					:	{ wmode: 'transparent' },
 
 		hideOnOverlayClick	:	true,
 		hideOnContentClick	:	false,
 
 		overlayShow			:	true,
 		overlayOpacity		:	0.6,
 		overlayColor		:	'#000',
 
 		titleShow			:	true,
 		titlePosition		:	'outside',	// 'outside', 'inside' or 'over'
 		titleFormat			:	null,
 
 		transitionIn		:	'fade',	// 'elastic', 'fade' or 'none'
 		transitionOut		:	'fade',	// 'elastic', 'fade' or 'none'
 
 		speedIn				:	300,
 		speedOut			:	300,
 
 		changeSpeed			:	300,
 		changeFade			:	'fast',
 
 		easingIn			:	'swing',
 		easingOut			:	'swing',
 
 		showCloseButton		:	true,
 		showNavArrows		:	true,
 		enableEscapeButton	:	true,
 
 		onStart				:	null,
 		onCancel			:	null,
 		onComplete			:	null,
 		onCleanup			:	null,
 		onClosed			:	null
 	};
 
 	$(document).ready(function() {
 		fancybox_init();
 	});
 
 })(jQuery);
 
 
 
 
 /**
  * --------------------------------------------------------------------
  * jQuery-Plugin "pngFix"
  * Version: 1.2, 09.03.2009
  * by Andreas Eberhard, andreas.eberhard@gmail.com
  *                      http://jquery.andreaseberhard.de/
  *
  * Copyright (c) 2007 Andreas Eberhard
  * Licensed under GPL (http://www.opensource.org/licenses/gpl-license.php)
  *
  * Changelog:
  *    09.03.2009 Version 1.2
  *    - Update for jQuery 1.3.x, removed @ from selectors
  *    11.09.2007 Version 1.1
  *    - removed noConflict
  *    - added png-support for input type=image
  *    - 01.08.2007 CSS background-image support extension added by Scott Jehl, scott@filamentgroup.com, http://www.filamentgroup.com
  *    31.05.2007 initial Version 1.0
  * --------------------------------------------------------------------
  * @example $(function(){$(document).pngFix();});
  * @desc Fixes all PNG's in the document on document.ready
  *
  * jQuery(function(){jQuery(document).pngFix();});
  * @desc Fixes all PNG's in the document on document.ready when using noConflict
  *
  * @example $(function(){$('div.examples').pngFix();});
  * @desc Fixes all PNG's within div with class examples
  *
  * @example $(function(){$('div.examples').pngFix( { blankgif:'ext.gif' } );});
  * @desc Fixes all PNG's within div with class examples, provides blank gif for input with png
  * --------------------------------------------------------------------
  */
 
 (function($) {
 
 jQuery.fn.pngFix = function(settings) {
 
 	// Settings
 	settings = jQuery.extend({
 		blankgif: 'blank.gif'
 	}, settings);
 
 	var ie55 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 5.5") != -1);
 	var ie6 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);
 
 	if (jQuery.browser.msie && (ie55 || ie6)) {
 
 		//fix images with png-source
 		jQuery(this).find("img[src$=.png]").each(function() {
 
 			jQuery(this).attr('width',jQuery(this).width());
 			jQuery(this).attr('height',jQuery(this).height());
 
 			var prevStyle = '';
 			var strNewHTML = '';
 			var imgId = (jQuery(this).attr('id')) ? 'id="' + jQuery(this).attr('id') + '" ' : '';
 			var imgClass = (jQuery(this).attr('class')) ? 'class="' + jQuery(this).attr('class') + '" ' : '';
 			var imgTitle = (jQuery(this).attr('title')) ? 'title="' + jQuery(this).attr('title') + '" ' : '';
 			var imgAlt = (jQuery(this).attr('alt')) ? 'alt="' + jQuery(this).attr('alt') + '" ' : '';
 			var imgAlign = (jQuery(this).attr('align')) ? 'float:' + jQuery(this).attr('align') + ';' : '';
 			var imgHand = (jQuery(this).parent().attr('href')) ? 'cursor:hand;' : '';
 			if (this.style.border) {
 				prevStyle += 'border:'+this.style.border+';';
 				this.style.border = '';
 			}
 			if (this.style.padding) {
 				prevStyle += 'padding:'+this.style.padding+';';
 				this.style.padding = '';
 			}
 			if (this.style.margin) {
 				prevStyle += 'margin:'+this.style.margin+';';
 				this.style.margin = '';
 			}
 			var imgStyle = (this.style.cssText);
 
 			strNewHTML += '<span '+imgId+imgClass+imgTitle+imgAlt;
 			strNewHTML += 'style="position:relative;white-space:pre-line;display:inline-block;background:transparent;'+imgAlign+imgHand;
 			strNewHTML += 'width:' + jQuery(this).width() + 'px;' + 'height:' + jQuery(this).height() + 'px;';
 			strNewHTML += 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader' + '(src=\'' + jQuery(this).attr('src') + '\', sizingMethod=\'scale\');';
 			strNewHTML += imgStyle+'"></span>';
 			if (prevStyle != ''){
 				strNewHTML = '<span style="position:relative;display:inline-block;'+prevStyle+imgHand+'width:' + jQuery(this).width() + 'px;' + 'height:' + jQuery(this).height() + 'px;'+'">' + strNewHTML + '</span>';
 			}
 
 			jQuery(this).hide();
 			jQuery(this).after(strNewHTML);
 
 		});
 
 		// fix css background pngs
 		jQuery(this).find("*").each(function(){
 			var bgIMG = jQuery(this).css('background-image');
 			if(bgIMG.indexOf(".png")!=-1){
 				var iebg = bgIMG.split('url("')[1].split('")')[0];
 				jQuery(this).css('background-image', 'none');
 				jQuery(this).get(0).runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + iebg + "',sizingMethod='scale')";
 			}
 		});
 		
 		//fix input with png-source
 		jQuery(this).find("input[src$=.png]").each(function() {
 			var bgIMG = jQuery(this).attr('src');
 			jQuery(this).get(0).runtimeStyle.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader' + '(src=\'' + bgIMG + '\', sizingMethod=\'scale\');';
    		jQuery(this).attr('src', settings.blankgif)
 		});
 	
 	}
 	
 	return jQuery;
 
 };
 
 })(jQuery);
 
 function sortUnorderedList(ul, sortDescending) {
   if(typeof ul == "string")
     ul = document.getElementById(ul);
 
   // Idiot-proof, remove if you want
   if(!ul) {
     alert("The UL object is null!");
     return;
   }
 
   // Get the list items and setup an array for sorting
   var lis = ul.getElementsByTagName("LI");
   var vals = [];
 
   // Populate the array
   for(var i = 0, l = lis.length; i < l; i++)
     vals.push(lis[i].innerHTML);
 
   // Sort it
   vals.sort();
 
   // Sometimes you gotta DESC
   if(sortDescending)
     vals.reverse();
 
   // Change the list on the page
   for(var i = 0, l = lis.length; i < l; i++)
     lis[i].innerHTML = vals[i];
 }
  
 jQuery(document).ready(function() { 

 	 jQuery("#tabs").tabs();
 	 
 	 jQuery(".logo").click( function(){
 	 	if(pathname == "/de"){
 	 		window.location = "http://www.ahcbenelux.nl/de";
 	 	} else if(pathname == "/en"){
 	 		window.location = "http://www.ahcbenelux.nl/en";
 	 	} else {
 	 		window.location = "http://www.ahcbenelux.nl/";
 	 	}
 	 });

 	/* FANCYBOX */
 	if(jQuery(".fancybox").length > 0){
 		jQuery(".fancybox").fancybox();
 	}
 	jQuery('#pictures').cycle({
 		fx: 'fade',
 		speed: 'slow',
 		timeout: 4000,
 		random: true,
 		pager: '#slidenav_content',
 		pagerEvent: 'mouseover',
 		pagerAnchorBuilder: function(idx, slide) {
 			return '#slidenav_content li:eq(' + (idx) + ')';
 		},
 		pagerClick: function() {
 			jQuery('#slidenav_content a').click(function() {
 				window.location = jQuery(this).attr('href');
 			});
 		}
 	});
 
 	jQuery('#pictures_content').cycle({
 		fx: 'fade',
 		speed: 'slow',
 		timeout: 4000,
 		random: true,
 		pager: '#slidenav_content',
 		pagerEvent: 'mouseover',
 		pagerAnchorBuilder: function(idx, slide) {
 			return '#slidenav_content li:eq(' + (idx) + ')';
 		},
 		pagerClick: function() {
 			jQuery('#slidenav_content a').click(function() {
 				window.location = jQuery(this).attr('href');
 			});
 		}
 	});
 	
 	//Downloads if pagina is NL dan display none de andere
 	
 	
 	var pathname = window.location.pathname;
 	pathname = pathname.substring(0,3);
 	if(pathname == "/de"){
 		jQuery(".Engels").css("display","none");
 		jQuery(".Nederlands").css("display","none");
 		if ((jQuery("#fragment-1 .Duits").length) === 0){
 			jQuery("#fragment-1").append("<p>Leider haben wir keine deutschen Unterlagen</p>"); 			
 		}
 		if ((jQuery("#fragment-2 .Duits").length) === 0){
 			jQuery("#fragment-2").append("<p>Leider haben wir keine deutschen Broschüren</p>"); 			
 		}
 		if ((jQuery("#fragment-3 .Duits").length) === 0){
 			jQuery("#fragment-3").append("<p>Leider haben wir keine deutschen Anderen Downloads</p>"); 			
 		}
 	} else if (pathname == "/en"){
 		jQuery(".Duits").css("display","none");
 		jQuery(".Nederlands").css("display","none");
 		if ((jQuery("#fragment-1 .Duits").length) === 0){
 			jQuery("#fragment-1").append("<p>Unfortunately we have no English Certificates</p>"); 			
 		}
 		if ((jQuery("#fragment-2 .Duits").length) === 0){
 			jQuery("#fragment-2").append("<p>Unfortunately we have no English Brochures</p>"); 			
 		}
 		if ((jQuery("#fragment-3 .Duits").length) === 0){
 			jQuery("#fragment-3").append("<p>Unfortunately we have no English Other downloads</p>");
 		}
 	} else {
		jQuery(".Engels").css("display","none");
		jQuery(".Duits").css("display","none");
 	}
 	if(jQuery("#tabs").length > 0){
	 	jQuery(".brochures .Anodiseren").eq(0).css('background', '#e5edfa');
	 	jQuery(".brochures .Anodiseren").eq(1).css('background', '#e5edfa');
	 	jQuery(".brochures .Anodiseren").eq(2).css('background', '#e5edfa');
	 	jQuery(".brochures .Chemisch").eq(0).css('background', '#e5edfa');
	 	jQuery(".brochures .Chemisch").eq(1).css('background', '#e5edfa');
	 	jQuery(".brochures .Chemisch").eq(2).css('background', '#e5edfa');
	 	jQuery(".brochures .Chemische").eq(0).css('background', '#e5edfa');
	 	jQuery(".brochures .Chemische").eq(1).css('background', '#e5edfa');
	 	jQuery(".brochures .Chemische").eq(2).css('background', '#e5edfa');
	 	jQuery(".brochures .Hight").eq(0).css('background', '#e5edfa');
	 	jQuery(".brochures .Hight").eq(1).css('background', '#e5edfa');
	 	jQuery(".brochures .Hight").eq(2).css('background', '#e5edfa');
	 	jQuery(".brochures .Synergetische").eq(0).css('background', '#e5edfa');
	 	jQuery(".brochures .Synergetische").eq(1).css('background', '#e5edfa');
	 	jQuery(".brochures .Synergetische").eq(2).css('background', '#e5edfa');
	 }
 	
 	
 	
 	jQuery.each(jQuery.browser, function(i) {
 	   if($.browser.msie){
 	     if(jQuery("#slidenav").length > 0){
 	     	jQuery("#slidenav li a").css('height', (335 / 5) + 'px');
 	     	jQuery("#pictures img").css('height', (336) + 'px');
 	     };
 	     
 	     if(jQuery("#slider_content").length > 0){
 	     	
 	     	var aantalsubs = (jQuery('#slidenav_content li').length);
 	     	
 	     	jQuery("#slidenav_content li a").css('height', ( 165 / aantalsubs) + 'px');
 	     	
 	     };
 	     /*
 	     jQuery("#lang_sel").hover( function(){
 	     	if(jQuery(".langundercon").length <= 0){
 	     		jQuery("#lang_sel").append("<p class='langundercon' ><img src='http://ahcbenelux.pansign.nl/wp-content/plugins/sitepress-multilingual-cms/res/flags/de.png' /> Under constrution<img src='http://ahcbenelux.pansign.nl/wp-content/plugins/sitepress-multilingual-cms/res/flags/en.png' /> Under construction</p>");
 	     	} else {
 	     		jQuery(".langundercon").remove();
 	     	}
 	     }); */
 	   }else{
 	     if(jQuery("#slidenav_content").length > 0){
 	     	var aantalsubs = (jQuery('#slidenav_content li').length);
 	     	if (aantalsubs == 6){
 	     		jQuery("#slidenav_content li a").css('height', ( 165 / aantalsubs) + 'px');
 	     	}
 	     	if (aantalsubs == 5){
 	     		jQuery("#slidenav_content li a").css('height', ( 165 / aantalsubs) + 'px');
 	     	}
 	     	if (aantalsubs == 4){
 	     		jQuery("#slidenav_content li a").css('height', ( 166 / aantalsubs) + 'px');
 	     	}
 	     	if (aantalsubs == 3){
 	     		jQuery("#slidenav_content li a").css('height', ( 167 / aantalsubs) + 'px');
 	     	}
 	     	if (aantalsubs == 2){
 	     		jQuery("#slidenav_content li a").css('height', ( 168 / aantalsubs) + 'px');
 	     	}
 	     };
 	   }
 	 });
 	 
 	jQuery("#sreach_icon").click(function () {
 		jQuery("#searchfield").toggle("fast");
 	});  
	jQuery("#close_icon").click(function () {
		jQuery("#searchfield").toggle("fast");
	}); 
	jQuery("#registerform").show();
	jQuery("#registerform").css('display', 'inline !important');
	
	
	if(jQuery("#your-profile").length > 0){
		if (jQuery("#your-profile tr").length != 22){
	 		jQuery("#your-profile tr").eq(0).hide();
	 		jQuery("#your-profile tr").eq(1).hide();
	 		jQuery("#your-profile tr").eq(2).hide();
	 		jQuery("#your-profile tr").eq(3).hide();
	 		jQuery("#your-profile tr").eq(4).hide();
	 		jQuery("#your-profile tr").eq(5).hide();
	 		jQuery("#your-profile tr").eq(8).hide();
	 		jQuery("#your-profile tr").eq(9).hide();
	 		jQuery("#your-profile tr").eq(12).hide();
	 		jQuery("#your-profile tr").eq(13).hide();
	 		jQuery("#your-profile tr").eq(14).hide();
	 		jQuery("#your-profile tr").eq(15).hide();
	 		jQuery("#your-profile tr").eq(22).hide();
	 		jQuery("#your-profile tr").eq(23).hide();
	 		jQuery("#your-profile tr").eq(24).hide();
	 		jQuery("#your-profile h3").hide();
		} else {
			jQuery("#your-profile tr").eq(0).hide();
			jQuery("#your-profile tr").eq(6).hide();
			jQuery("#your-profile tr").eq(7).hide();
			jQuery("#your-profile tr").eq(10).hide();
			jQuery("#your-profile tr").eq(11).hide();
			jQuery("#your-profile tr").eq(12).hide();
			jQuery("#your-profile tr").eq(13).hide();
	 		jQuery("#your-profile tr").eq(20).hide();
	 		jQuery("#your-profile tr").eq(21).hide();
			jQuery("#your-profile h3").hide(); 
		}
 	}

	
	
 	/* VALIDATIE CONTACTFORMULIER */
	if(jQuery("#mailform").length > 0){
	 	jQuery("#mailform").validate({
	 		rules: {
	 			formcontrolecode: {
	 				required: true,
	 				remote: '/codeblue/verifycode.php'
	 			},
	 			Telefoon: {
	 				required: true,
	 				minlength: 10
	 			}
	 		}
	 	});
 	}
 });
 
 
 // Open External Links as Blank Targets via Unobtrusive JavaScript
 // http://perishablepress.com/press/2007/11/20/open-external-links-as-blank-targets-via-unobtrusive-javascript/
 
 function externalLinks() {
 	if (!document.getElementsByTagName) return;
 	var anchors = document.getElementsByTagName("a");
 	for (var i=0; i<anchors.length; i++) {
 		var anchor = anchors[i];
 		if (
 			anchor.getAttribute("href") && ( 
 			anchor.getAttribute("rel") == "external" || 
 			anchor.getAttribute("rel") == "external nofollow" || 
 			anchor.getAttribute("rel") == "nofollow external" )
 			)
 		anchor.target = "_blank";
 	}
 }
 window.onload = function() {
 	externalLinks();
 }
