/*****************************************************************************
 * $.plugin - jQuery Plugin for on-demand loading of scripts and styles
 *
 * Documentation : http://nicolas.rudas.info/jQuery/getPlugin/
 * Issues		 : http://plugins.jquery.com/project/getPlugin/
 *
 * Version: 081002 - 02 Oct 2008
 *
 *****************************************************************************/
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';$(3(){$.8=$.8||{};$.8.7=1k.1l||{};$.8.x={7:f,y:{7:f},p:$(1m),k:$(\'1n\',2.p),18:3(){},19:3(){},T:3(){}};5 e=$.8.x,7=$.8.7;l=3(a,b){5 c=2;2.U=a;z(5 i V b){c[i]=b[i]};2.p=2.p||b.p;2.k=2.k||b.k;2.L={};2.q=[];2.18.A(2);6 2};l.B.M=3(c){4(!c||g c!=\'C\'){D r E(\'$.h.M(s) - s {1a} 1o 1b 1c\');}5 d=2,9=c.1d(\'.\')[c.1d(\'.\').u-1],F=c.1p(/\\W/1q,\'\'),G=7[c],X=(e.7===f||e.7==\'f\');4(9!=\'H\'&&9!=\'Y\'){D r E(\'$.h.M(s) - 1r 9:\'+9+\'\\n\\t\'+c);6 2;}4(X&&2.L[c]){6 2;}2.1e(c);$(\'[N-I-O="\'+F+\'"]\').1s();4(X&&G&&G!=\'1t\'){4(9==\'H\'){2.k.Z(\'<P 10="11\\/H" 1f="1g" N-I-O="\'+F+\'">\'+G+\'<\\/P>\');}m 4(9==\'Y\'){2.k.Z(\'<12 10="11\\/1u" N-I-O="\'+F+\'">\'+G+\'<\\/12>\');}13(3(){d.J(c);},0);}m{4(9==\'H\'){(3(){5 b=$.Q({s:c},e.y),R=b.S||3(){};b.S=3(a){R.A(2,o);d.L[c]=f;7[c]=a;d.k.Z(\'<P 10="11\\/H" 1f="1g" N-I-O="\'+F+\'">\'+a+\'<\\/P>\');d.J(c);};$.y(b);})();}m 4(9==\'Y\'){(3(){5 b=$.Q({1v:"12",s:c},e.y),R=b.S||3(){};b.S=3(){R.A(2,o);5 a=(g o[0]==\'C\')?o[0]:1w;7[c]=a;d.L[c]=f;d.J(c);};$.y(b);})();}}6 2;};l.B.1e=3(a){2.q.1x(a);e.19.1h(2,a);6 2;};l.B.J=3(a){5 b=2,j=2.14,15=$.1y(a,2.q);4(15==-1){D r E(\'$.h.J(s) - 1z T z I 1A 1B 1i 1b V q:\\n \'+a);6 2;}2.q.1C(15,1);4(2.q.u==0&&j){13(3(){j.A(b);1D b.14;},0);}e.T.1h(2,a);6 2;};l.B.16=3(){5 b=2,v=(g 2.v==\'C\')?[2.v]:2.v,j=o[0]||2.j;2.14=j;4(2.K()!==f){6 2;}5 c=3(a){b.M(a);};z(5 i=0;i<v.u;i++){(3(){5 a=v[i];4($.1E.1F){13(3(){c(a);},1G);}m{c(a);}})();}6 2;};l.B.K=3(){5 a=2,w=(g 2.w==\'C\')?[2.w]:2.w,K;z(5 i=0;i<w.u;i++){5 b=w[i];4($(b,a.p).u>0){K=f;1H;}};6 K||2;};$.Q($,{h:3(a,b){5 c=$.h;4(o.u==0){z(5 i V $.8){4(i==\'x\'||i==\'7\'){1I;}$.8[i].16();};6 c;}m 4(g a!=\'C\'){D r E(\'$.h(U,[x||j])\\n\\t\\t@17 U\\t\\t{1a}\\n\\t\\t@17 x\\t{1J}\\n\\t\\t@17 j\\t{1K}\');6 c;}4(g b==\'1j\'){$.8[a]=r l(a,$.Q(e,b));}m{5 d=$.8[a];4(g d!=\'1j\'){D r E(\'$.h: \'+a+\' 1L 1i 1c\');6 c;}4(g b==\'3\'){d.16(b)}m 4(!b){6 d}}6 c},1M:3(){6 $.h.A(2,o)}})});',62,111,'||this|function|if|var|return|cache|plugins|extension||||||true|typeof|plugin||callback|target|Plugin|else||arguments|context|queue|new|url||length|files|selectors|settings|ajax|for|apply|prototype|string|throw|Error|fileId|cached|css|file|afterGet|isNeeded|loaded|getFile|data|id|style|extend|onSuccess|success|postLoad|name|in||caching|js|append|type|text|script|setTimeout|tmp_callback|index|get|param|init|preLoad|String|be|specified|split|beforeGet|rel|stylesheet|call|not|object|window|sessionStorage|document|head|must|replace|gi|Invalid|remove|undefined|javascript|dataType|null|push|inArray|Ignoring|that|should|splice|delete|browser|opera|500|break|continue|Object|Function|is|getPlugin'.split('|'),0,{}));;
/*
 * jQuery history plugin
 * 
 * The MIT License
 * 
 * Copyright (c) 2006-2009 Taku Sano (Mikage Sawatari)
 * Copyright (c) 2010 Takayuki Miwa
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

(function($) {
    var locationWrapper = {
        put: function(hash, win) {
            (win || window).location.hash = this.encoder(hash);
        },
        get: function(win) {
            var hash = ((win || window).location.hash).replace(/^#/, '');
            try {
                return $.browser.mozilla ? hash : decodeURIComponent(hash);
            }
            catch (error) {
                return hash;
            }
        },
        encoder: encodeURIComponent
    };

    var iframeWrapper = {
        id: "__jQuery_history",
        init: function() {
            var html = '<iframe id="'+ this.id +'" style="display:none" src="javascript:false;" />';
            $("body").prepend(html);
            return this;
        },
        _document: function() {
            return $("#"+ this.id)[0].contentWindow.document;
        },
        put: function(hash) {
            var doc = this._document();
            doc.open();
            doc.close();
            locationWrapper.put(hash, doc);
        },
        get: function() {
            return locationWrapper.get(this._document());
        }
    };

    function initObjects(options) {
        options = $.extend({
                unescape: false
            }, options || {});

        locationWrapper.encoder = encoder(options.unescape);

        function encoder(unescape_) {
            if(unescape_ === true) {
                return function(hash){ return hash; };
            }
            if(typeof unescape_ == "string" &&
               (unescape_ = partialDecoder(unescape_.split("")))
               || typeof unescape_ == "function") {
                return function(hash) { return unescape_(encodeURIComponent(hash)); };
            }
            return encodeURIComponent;
        }

        function partialDecoder(chars) {
            var re = new RegExp($.map(chars, encodeURIComponent).join("|"), "ig");
            return function(enc) { return enc.replace(re, decodeURIComponent); };
        }
    }

    var implementations = {};

    implementations.base = {
        callback: undefined,
        type: undefined,

        check: function() {},
        load:  function(hash) {},
        init:  function(callback, options) {
            initObjects(options);
            self.callback = callback;
            self._options = options;
            self._init();
        },

        _init: function() {},
        _options: {}
    };

    implementations.timer = {
        _appState: undefined,
        _init: function() {
            var current_hash = locationWrapper.get();
            self._appState = current_hash;
            self.callback(current_hash);
            setInterval(self.check, 100);
        },
        check: function() {
            var current_hash = locationWrapper.get();
            if(current_hash != self._appState) {
                self._appState = current_hash;
                self.callback(current_hash);
            }
        },
        load: function(hash) {
            if(hash != self._appState) {
                locationWrapper.put(hash);
                self._appState = hash;
                self.callback(hash);
            }
        }
    };

    implementations.iframeTimer = {
        _appState: undefined,
        _init: function() {
            var current_hash = locationWrapper.get();
            self._appState = current_hash;
            iframeWrapper.init().put(current_hash);
            self.callback(current_hash);
            setInterval(self.check, 100);
        },
        check: function() {
            var iframe_hash = iframeWrapper.get(),
                location_hash = locationWrapper.get();

            if (location_hash != iframe_hash) {
                if (location_hash == self._appState) {    // user used Back or Forward button
                    self._appState = iframe_hash;
                    locationWrapper.put(iframe_hash);
                    self.callback(iframe_hash); 
                } else {                              // user loaded new bookmark
                    self._appState = location_hash;  
                    iframeWrapper.put(location_hash);
                    self.callback(location_hash);
                }
            }
        },
        load: function(hash) {
            if(hash != self._appState) {
                locationWrapper.put(hash);
                iframeWrapper.put(hash);
                self._appState = hash;
                self.callback(hash);
            }
        }
    };

    implementations.hashchangeEvent = {
        _init: function() {
            self.callback(locationWrapper.get());
            $(window).bind('hashchange', self.check);
        },
        check: function() {
            self.callback(locationWrapper.get());
        },
        load: function(hash) {
            locationWrapper.put(hash);
        }
    };

    var self = $.extend({}, implementations.base);

    if($.browser.msie && ($.browser.version < 8 || document.documentMode < 8)) {
        self.type = 'iframeTimer';
    } else if("onhashchange" in window) {
        self.type = 'hashchangeEvent';
    } else {
        self.type = 'timer';
    }

    $.extend(self, implementations[self.type]);
    $.history = self;
})(jQuery);;
(function($){$.extend($,{clearwatermarks:function(){$("[wmwrap='true']").find("input,textarea").watermark({remove:true})},addwatermarks:function(){$("[watermark]").each(function(num,el){$(el).watermark($(el).attr("watermark"))})},watermark:function(o){o.el=$(o.el);if(o.remove){if(o.el.parent().attr("wmwrap")=="true"){o.el.parent().replaceWith(o.el)}}else{if(o.el.parent().attr("wmwrap")!="true"){o.el=o.el.wrap("<span wmwrap='true' style='position:relative;'/>");var l=$("<label/>");if(o.html){l.html(o.html)}if(o.cls){l.addClass(o.cls)}if(o.css){l.css(o.css)}l.css({position:"absolute",left:"3px",top:parseInt(o.el.css("paddingTop")),display:"inline",cursor:"text"});if(o.el.is("TEXTAREA")){if($.browser.msie){l.css("width",o.el.width())}if($.browser.mozilla||$.browser.safari){l.css("top","")}}if(!o.cls&&!o.css){l.css("color","#ccc")}var focus=function(){l.hide()};var blur=function(){if(!o.el.val()){l.show()}else{l.hide()}};var click=function(){o.el.focus()};if(o.inherit){if(typeof o.inherit=="string"){l.css(o.inherit,o.el.css(o.inherit))}else{for(var x=0;x<o.inherit.length;x++){l.css(o.inherit[x],o.el.css(o.inherit[x]))}}}o.el.focus(focus).blur(blur);l.click(click);o.el.before(l);if(o.el.val()){l.hide()}}}return o.el}});$.fn.watermark=function(o){return this.each(function(){if(typeof (o)=="string"){try{o=eval("("+o+")")}catch(ex){o={html:o}}}o.el=this;return $.watermark(o)})}})(jQuery);$().ready(function(){$.addwatermarks()});
;
/*
 * jQuery validation plug-in 1.7
 *
 * 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( true, {}, $.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: "label",
		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) {
			// click on selects, radiobuttons and checkboxes
			if ( element.name in this.submitted )
				this.element(element);
			// or option elements, check parent select in that case
			else if (element.parentNode.name in this.submitted)
				this.element(element.parentNode);
		},
		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"),
					eventType = "on" + event.type.replace(/^validate/, "");
				validator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );
			}
			$(this.currentForm)
				.validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate)
				.validateDelegate(":radio, :checkbox, select, option", "click", 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()
					// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
					.trigger("focusin");
				} 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.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", e);
					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 ),
				theregex = /\$?\{(\d+)\}/g;
			if ( typeof message == "function" ) {
				message = message.call(this, rule.parameters, element);
			} else if (theregex.test(message)) {
				message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);
			}			
			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) {
			var name = this.idOrName(element);
    		return this.errors().filter(function() {
				return $(this).attr('for') == name;
			});
		},
		
		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();
				this.formSubmitted = false;
			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
				$(this.currentForm).triggerHandler("invalid-form", [this]);
				this.formSubmitted = false;
			}
		},
		
		previousValue: function(element) {
			return $.data(element, "previousValue") || $.data(element, "previousValue", {
				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 != undefined ? 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':
				// could be an array for select-multiple or a string, both are fine this way
				var val = $(element).val();
				return val && val.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] = {};
			previous.originalMessage = this.settings.messages[element.name].remote;
			this.settings.messages[element.name].remote = 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) {
						validator.settings.messages[element.name].remote = previous.originalMessage;
						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 = {};
							var message = (previous.message = response || validator.defaultMessage( element, "remote" ));
							errors[element.name] = $.isFunction(message) ? message(value) : message;
							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/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/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 (var 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) {
			// bind to the blur event of the target in order to revalidate whenever the target field is updated
			// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
			var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
				$(element).valid();
			});
			return value == target.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 
;(function($) {
	// only implement if not provided by jQuery core (since 1.4)
	// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
	if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
		$.each({
			focus: 'focusin',
			blur: 'focusout'	
		}, function( original, fix ){
			$.event.special[fix] = {
				setup:function() {
					this.addEventListener( original, handler, true );
				},
				teardown:function() {
					this.removeEventListener( original, handler, true );
				},
				handler: function(e) {
					arguments[0] = $.event.fix(e);
					arguments[0].type = fix;
					return $.event.handle.apply(this, arguments);
				}
			};
			function handler(e) {
				e = $.event.fix(e);
				e.type = fix;
				return $.event.handle.call(this, e);
			}
		});
	};
	$.extend($.fn, {
		validateDelegate: function(delegate, type, handler) {
			return this.bind(type, function(event) {
				var target = $(event.target);
				if (target.is(delegate)) {
					return handler.apply(target, arguments);
				}
			});
		}
	});
})(jQuery);
;
/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: CS
 */
jQuery.extend(jQuery.validator.messages, {
	required: "Tento údaj je povinný.",
	remote: "Prosím, opravte tento údaj.",
	email: "Prosím, zadejte platný e-mail.",
	url: "Prosím, zadejte platné URL.",
	date: "Prosím, zadejte platné datum.",
	dateISO: "Prosím, zadejte platné datum (ISO).",
	number: "Prosím, zadejte číslo.",
	digits: "Prosím, zadávejte pouze číslice.",
	creditcard: "Prosím, zadejte číslo kreditní karty.",
	equalTo: "Prosím, zadejte znovu stejnou hodnotu.",
	accept: "Prosím, zadejte soubor se správnou příponou.",
	maxlength: jQuery.validator.format("Prosím, zadejte nejvíce {0} znaků."),
	minlength: jQuery.validator.format("Prosím, zadejte nejméně {0} znaků."),
	rangelength: jQuery.validator.format("Prosím, zadejte od {0} do {1} znaků."),
	range: jQuery.validator.format("Prosím, zadejte hodnotu od {0} do {1}."),
	max: jQuery.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."),
	min: jQuery.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}.")
});
;
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('g(1C C=="2t"){k C={}}g(1C C.2A=="2t"){C.2A={}}g(1C C.1x=="2t"){C.1x={}}C.2F=j(3v,F,w,h,3C,c,3O,3J,3M,3y){g(!A.3g){l}f.53=3y?3y:"8Z";f.4W=C.2A.4d(f.53);f.3T={};f.2V={};f.3U=[];g(3v){f.15("2i",3v)}g(F){f.15("F",F)}g(w){f.15("11",w)}g(h){f.15("T",h)}g(3C){f.15("2w",L C.1p(3C.9j().2c(".")))}f.2y=C.1x.4U();g(!V.9k&&A.4h&&f.2y.1M>7){g(!C.4Z){C.1x.51=j(){9a=j(){};9c=j(){};V.52("9e",C.1x.5r)};V.52("8q",C.1x.51);C.4Z=1v}}g(c){f.3V("a0",c)}k q=3O?3O:"9V";f.3V("9t",q);f.15("2Y",U);f.15("2G",U);k 54=(3J)?3J:V.3o;f.15("4S",54);f.15("2M","");g(3M){f.15("2M",3M)}};C.2F.5b={2Y:j(3N){f.3x=!3N?"9G.2i":3N;f.15("2Y",1v)},15:j(55,59){f.3U[55]=59},J:j(58){l f.3U[58]||""},3V:j(57,56){f.3T[57]=56},4q:j(){l f.3T},2B:j(4Y,4X){f.2V[4Y]=4X},7Z:j(4Q){l f.2V[4Q]||""},4P:j(){l f.2V},4o:j(){k 3a=[];k 16;k 3W=f.4P();1D(16 3r 3W){3a[3a.R]=16+"="+3W[16]}l 3a},4V:j(){k 19="";g(1o.44&&1o.4i&&1o.4i.R){g(f.J("2G")){f.2B("4O","7s");f.15("2i",f.3x)}19="<3F 7i=\\"7m/x-9F-7C\\" 1j=\\""+f.J("2i")+"\\" 11=\\""+f.J("11")+"\\" T=\\""+f.J("T")+"\\" 1H=\\""+(f.J("1H")||"")+"\\"";19+=" F=\\""+f.J("F")+"\\" G=\\""+f.J("F")+"\\" ";k 3D=f.4q();1D(k 16 3r 3D){19+=[16]+"=\\""+3D[16]+"\\" "}k 3B=f.4o().3z("&");g(3B.R>0){19+="4N=\\""+3B+"\\""}19+="/>"}I{g(f.J("2G")){f.2B("4O","7A");f.15("2i",f.3x)}19="<36 F=\\""+f.J("F")+"\\" 7y=\\"7z:7E-7F-7K-7L-7J\\" 11=\\""+f.J("11")+"\\" T=\\""+f.J("T")+"\\" 1H=\\""+(f.J("1H")||"")+"\\">";19+="<4k G=\\"7I\\" 1w=\\""+f.J("2i")+"\\" />";k 4r=f.4q();1D(k 16 3r 4r){19+="<4k G=\\""+16+"\\" 1w=\\""+4r[16]+"\\" />"}k 4l=f.4o().3z("&");g(4l.R>0){19+="<4k G=\\"4N\\" 1w=\\""+4l+"\\" />"}19+="</36>"}l 19},7l:j(2W){g(f.J("2Y")){k 4R=L C.1p([6,0,65]);g(f.2y.2U(4R)&&!f.2y.2U(f.J("2w"))){f.15("2G",1v);f.2B("7p",7u(f.J("4S")));A.2q=A.2q.7t(0,47)+" - 4T 7q 7r";f.2B("7N",A.2q)}}g(f.4W||f.J("2G")||f.2y.2U(f.J("2w"))){k n=(1C 2W=="87")?A.3g(2W):2W;n.86=f.4V();l 1v}I{g(f.J("2M")!=""){A.3o.46(f.J("2M"))}}l U}};C.1x.4U=j(){k 1A=L C.1p([0,0,0]);g(1o.44&&1o.4i.R){k x=1o.44["8h 4T"];g(x&&x.5a){1A=L C.1p(x.5a.46(/([a-8c-Z]|\\s)+/,"").46(/(\\s+r|\\s+b[0-9]+)/,".").2c("."))}}I{g(1o.48&&1o.48.4f("7S 7T")>=0){k 1h=1;k 2I=3;2L(1h){2N{2I++;1h=L 2O("1t.1t."+2I);1A=L C.1p([2I,0,0])}2T(e){1h=1i}}}I{2N{k 1h=L 2O("1t.1t.7")}2T(e){2N{k 1h=L 2O("1t.1t.6");1A=L C.1p([6,0,21]);1h.7O="7P"}2T(e){g(1A.1M==6){l 1A}}2N{1h=L 2O("1t.1t")}2T(e){}}g(1h!=1i){1A=L C.1p(1h.7W("$2w").2c(" ")[1].2c(","))}}}l 1A};C.1p=j(1T){f.1M=1T[0]!=1i?2e(1T[0]):0;f.2z=1T[1]!=1i?2e(1T[1]):0;f.3Y=1T[2]!=1i?2e(1T[2]):0};C.1p.5b.2U=j(26){g(f.1M<26.1M){l U}g(f.1M>26.1M){l 1v}g(f.2z<26.2z){l U}g(f.2z>26.2z){l 1v}g(f.3Y<26.3Y){l U}l 1v};C.2A={4d:j(41){k q=A.3o.6y||A.3o.6G;g(41==1i){l q}g(q){k 2h=q.2l(1).2c("&");1D(k i=0;i<2h.R;i++){g(2h[i].2l(0,2h[i].4f("="))==41){l 2h[i].2l((2h[i].4f("=")+1))}}}l""}};C.1x.5r=j(){k 2g=A.6r("6u");1D(k i=2g.R-1;i>=0;i--){2g[i].1H.5u="6z";1D(k x 3r 2g[i]){g(1C 2g[i][x]=="j"){2g[i][x]=j(){}}}}};g(!A.3g&&A.4h){A.3g=j(F){l A.4h[F]}}k 6E=C.2A.4d;k 6j=C.2F;k 2F=C.2F;1b.2m(1b.3h,{6p:j(x,t,b,c,d){l c*(t/=d)*t+b},6H:j(x,t,b,c,d){g(t<d/2)l 2*c*t*t/(d*d)+b;k 3m=t-d/2;l-2*c*3m*3m/(d*d)+2*c*3m/d+c/2+b},76:j(x,t,b,c,d){l-c*t*t/(d*d)+2*c*t/d+b},77:j(x,t,b,c,d){k 1k=1;g(c<0){1k*=-1;c*=-1}l 1k*(E.3p(E.3n(c)/d*t))+b},74:j(x,t,b,c,d){k 1k=1;g(c<0){1k*=-1;c*=-1}l 1k*(-E.3p(-E.3n(c)/d*(t-d))+c+1)+b},73:j(x,t,b,c,d){k 1k=1;g(c<0){1k*=-1;c*=-1}g(t<d/2)l 1k*(E.3p(E.3n(c/2)/(d/2)*t))+b;l 1k*(-E.3p(-2*E.3n(c/2)/d*(t-d))+c+1)+b},5q:j(x,t,b,c,d){l c-1b.3h[\'4c\'](x,d-t,0,c,d)+b},4c:j(x,t,b,c,d){g((t/=d)<(1/2.75)){l c*(7.3f*t*t)+b}I g(t<(2/2.75)){l c*(7.3f*(t-=(1.5/2.75))*t+.75)+b}I g(t<(2.5/2.75)){l c*(7.3f*(t-=(2.25/2.75))*t+.78)+b}I{l c*(7.3f*(t-=(2.7f/2.75))*t+.7c)+b}},7a:j(x,t,b,c,d){g(t<d/2)l 1b.3h[\'5q\'](x,t*2,0,c,d)*.5+b;l 1b.3h[\'4c\'](x,t*2-d,0,c,d)*.5+c*.5+b},6O:j(x,t,b,c,d){k s=1.22;k p=0;k a=c;g(t==0)l b;g((t/=d)==1)l b+c;g(!p)p=d*.3;g(a<E.4m(c)){a=c;k s=p/4}I k s=p/(2*E.1K)*E.4a(c/a);l-(a*E.2P(2,10*(t-=1))*E.35((t*d-s)*(2*E.1K)/p))+b},6P:j(x,t,b,c,d){k s=1.22;k p=0;k a=c;g(t==0)l b;g((t/=d)==1)l b+c;g(!p)p=d*.3;g(a<E.4m(c)){a=c;k s=p/4}I k s=p/(2*E.1K)*E.4a(c/a);l a*E.2P(2,-10*t)*E.35((t*d-s)*(2*E.1K)/p)+c+b},6N:j(x,t,b,c,d){k s=1.22;k p=0;k a=c;g(t==0)l b;g((t/=d/2)==2)l b+c;g(!p)p=d*(.3*1.5);g(a<E.4m(c)){a=c;k s=p/4}I k s=p/(2*E.1K)*E.4a(c/a);g(t<1)l-.5*(a*E.2P(2,10*(t-=1))*E.35((t*d-s)*(2*E.1K)/p))+b;l a*E.2P(2,-10*(t-=1))*E.35((t*d-s)*(2*E.1K)/p)*.5+c+b},6V:j(x,t,b,c,d){k s=1.22;l c*(t/=d)*t*((s+1)*t-s)+b},6U:j(x,t,b,c,d){k s=1.22;l c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},6S:j(x,t,b,c,d){k s=1.22;g((t/=d/2)<1)l c/2*(t*t*(((s*=(1.5p))+1)*t-s))+b;l c/2*((t-=2)*t*(((s*=(1.5p))+1)*t+s)+2)+b}});1b.1E=j(G,1w,Q){g(1C 1w!=\'2t\'){Q=Q||{};g(1w===1i){1w=\'\';Q.1f=-1}k 1f=\'\';g(Q.1f&&(1C Q.1f==\'5o\'||Q.1f.5s)){k 1B;g(1C Q.1f==\'5o\'){1B=L 4x();1B.9J(1B.9I()+(Q.1f*24*60*60*9M))}I{1B=Q.1f}1f=\'; 1f=\'+1B.5s()}k 2r=Q.2r?\'; 2r=\'+(Q.2r):\'\';k 2k=Q.2k?\'; 2k=\'+(Q.2k):\'\';k 2H=Q.2H?\'; 2H\':\'\';A.1E=[G,\'=\',9S(1w),1f,2r,2k,2H].3z(\'\')}I{k 4e=1i;g(A.1E&&A.1E!=\'\'){k 4t=A.1E.2c(\';\');1D(k i=0;i<4t.R;i++){k 1E=1b.9E(4t[i]);g(1E.2l(0,G.R+1)==(G+\'=\')){4e=9v(1E.2l(G.R+1));9p}}}l 4e}};(j($){$.9r={2w:\'@9x\'};$.3d([\'2x\',\'4b\'],j(i,G){$.1S[\'9C\'+G]=j(){g(!f[0])l;k 23=G==\'2x\'?\'3l\':\'2v\',1Z=G==\'2x\'?\'5t\':\'5w\';l 13(f,G.3A())+13(f,\'3q\'+23)+13(f,\'3q\'+1Z)};$.1S[\'9D\'+G]=j(Q){g(!f[0])l;k 23=G==\'2x\'?\'3l\':\'2v\',1Z=G==\'2x\'?\'5t\':\'5w\';Q=$.2m({3k:U},Q||{});l 13(f,G.3A())+13(f,\'5v\'+23+\'4b\')+13(f,\'5v\'+1Z+\'4b\')+13(f,\'3q\'+23)+13(f,\'3q\'+1Z)+(Q.3k?(13(f,\'3k\'+23)+13(f,\'3k\'+1Z)):0)}});$.3d([\'2v\',\'3l\'],j(i,G){$.1S[\'2s\'+G]=j(2u){g(!f[0])l;l 2u!=2t?f.3d(j(){f==V||f==A?V.ae(G==\'2v\'?2u:$(V)[\'4n\'](),G==\'3l\'?2u:$(V)[\'33\']()):f[\'2s\'+G]=2u}):f[0]==V||f[0]==A?1O[(G==\'2v\'?\'5O\':\'4p\')]||$.ap&&A.1c[\'2s\'+G]||A.12[\'2s\'+G]:f[0][\'2s\'+G]}});$.1S.2m({3Z:j(){k 17=0,18=0,3j=f[0],1s,2j,W,4g;g(3j){W=f.W();1s=f.1s();2j=W.1s();1s.18-=13(3j,\'am\');1s.17-=13(3j,\'ac\');2j.18+=13(W,\'5n\');2j.17+=13(W,\'5f\');4g={18:1s.18-2j.18,17:1s.17-2j.17}}l 4g},W:j(){k W=f[0].W;2L(W&&(!/^12|2D$/i.4M(W.9Z)&&$.S(W,\'3Z\')==\'9W\'))W=W.W;l $(W)}});j 13(3s,1L){l 2e($.S(3s.1a?3s[0]:3s,1L))||0}})(1b);(j($){$.1S.a4=$.1S.43=j(s){g($.4G.4L&&/6.0/.4M(1o.48)){s=$.2m({18:\'1q\',17:\'1q\',11:\'1q\',T:\'1q\',3S:1v,1j:\'a6:U;\'},s||{});k 1L=j(n){l n&&n.9U==9n?n+\'2d\':n},2D=\'<5e 9o="43"8H="0"8F="-1"1j="\'+s.1j+\'"\'+\'1H="5u:8B;3Z:8D;z-8I:-1;\'+(s.3S!==U?\'8J:8O(8P=\\\'0\\\');\':\'\')+\'18:\'+(s.18==\'1q\'?\'2R(((2e(f.2S.5m.5n)||0)*-1)+\\\'2d\\\')\':1L(s.18))+\';\'+\'17:\'+(s.17==\'1q\'?\'2R(((2e(f.2S.5m.5f)||0)*-1)+\\\'2d\\\')\':1L(s.17))+\';\'+\'11:\'+(s.11==\'1q\'?\'2R(f.2S.5V+\\\'2d\\\')\':1L(s.11))+\';\'+\'T:\'+(s.T==\'1q\'?\'2R(f.2S.3E+\\\'2d\\\')\':1L(s.T))+\';\'+\'"/>\';l f.3d(j(){g($(\'> 5e.43\',f).R==0)f.8l(A.8m(2D),f.8r)})}l f}})(1b);(j($){$.1S.8s=j(o){o=1b.2m({5k:\'#8x\',5j:0.8,3t:U,5l:\'/2n/2o/y/y-8y-2a.2p\',4j:\'/2n/2o/y/y-4v-8w.2p\',4w:\'/2n/2o/y/y-4v-8v.2p\',5h:\'/2n/2o/y/y-4v-8u.2p\',2Q:\'/2n/2o/y/y-8Q.2p\',2Z:10,4C:8R,69:\'9d\',6a:\'/\',5G:\'c\',5Z:\'p\',5K:\'n\',X:[],D:0},o);k 1J=f;j 5T(){5d(f,1J);l U}j 5d(34,1J){$(\'3F, 36, 5C\').S({\'5D\':\'9b\'});5g();o.X.R=0;o.D=0;g(1J.R==1){o.X.5c(L 3b(34.J(\'1P\'),34.J(\'2q\')))}I{1D(k i=0;i<1J.R;i++){o.X.5c(L 3b(1J[i].J(\'1P\'),1J[i].J(\'2q\')))}}2L(o.X[o.D][0]!=34.J(\'1P\')){o.D++}1r()}j 5g(){$(\'12\').9l(\'<O F="1a-2b"></O><O F="1a-y"><O F="y-1g-K-1Y-1m"><O F="y-1g-K-1Y"><O F="y-K-1l"><38 F="y-K-1l-2K"></38><38 F="y-K-1l-3c"></38></O><O F="y-3R"><a 1P="#" F="y-3R-5x"><3K 1j="\'+o.5h+\'"></a></O></O></O><O F="y-1g-K-1m"><O F="y-1g-K"><3K F="y-K"><O 1H="" F="y-14"><a 1P="#" F="y-14-28"></a><a 1P="#" F="y-14-1U"></a></O><O F="y-2a"><a 1P="#" F="y-2a-5i"><3K 1j="\'+o.5l+\'"></a></O></O></O></O>\');k 1u=3u();$(\'#1a-2b\').S({9h:o.5k,3S:o.5j,11:1u[0],T:1u[1]}).4F();k 1X=4s();$(\'#1a-y\').S({18:1X[1]+(1u[3]/10),17:1X[0]}).1Q();$(\'#1a-2b,#1a-y\').1z(j(){2J()});$(\'#y-2a-5i,#y-3R-5x\').1z(j(){2J();l U});$(V).98(j(){k 1u=3u();$(\'#1a-2b\').S({11:1u[0],T:1u[1]});k 1X=4s();$(\'#1a-y\').S({18:1X[1]+(1u[3]/10),17:1X[0]})})}j 1r(){$(\'#y-2a\').1Q();g(o.3t){$(\'#y-K,#y-1g-K-1Y-1m,#y-K-1l-3c\').3e()}I{$(\'#y-K,#y-14,#y-14-28,#y-14-1U,#y-1g-K-1Y-1m,#y-K-1l-3c\').3e()}k 1V=L 3L();1V.5y=j(){$(\'#y-K\').8Y(\'1j\',o.X[o.D][0]);4E(1V.11,1V.T);1V.5y=j(){}};1V.1j=o.X[o.D][0]};j 4E(3X,4u){k 4K=$(\'#y-1g-K-1m\').11();k 4J=$(\'#y-1g-K-1m\').T();k 3G=(3X+(o.2Z*2));k 3P=(4u+(o.2Z*2));k 4B=4K-3G;k 4D=4J-3P;$(\'#y-1g-K-1m\').8T({11:3G,T:3P},o.4C,j(){4H()});g((4B==0)&&(4D==0)){g($.4G.4L){4z(90)}I{4z(95)}}$(\'#y-1g-K-1Y-1m\').S({11:3X});$(\'#y-14-28,#y-14-1U\').S({T:4u+(o.2Z*2)})};j 4H(){$(\'#y-2a\').3e();$(\'#y-K\').4F(j(){4I();63()});5E()};j 4I(){$(\'#y-1g-K-1Y-1m\').6X(\'92\');$(\'#y-K-1l-2K\').3e();g(o.X[o.D][1]){$(\'#y-K-1l-2K\').2D(\'<68>\'+o.X[o.D][1]+\'</68>\').1Q()}g(o.X.R>1){$(\'#y-K-1l-3c\').2D(\'<p>(\'+o.69+\' \'+(o.D+1)+\'\'+o.6a+\'\'+o.X.R+\')</p>\').1Q()}$(\'#y-K-1l-2K\').S({18:($(\'#y-K\').T()-20)+\'2d\'});$.91(93+\'62/94-96.62\')}j 63(){$(\'#y-14\').1Q();$(\'#y-14-28,#y-14-1U\').S({\'1R\':\'40 1G(\'+o.2Q+\') 1F-1N\'});g(o.D!=0){g(o.3t){$(\'#y-14-28\').S({\'1R\':\'1G(\'+o.4j+\') 17 50% 1F-1N\'}).29().30(\'1z\',j(){o.D=o.D-1;1r();l U})}I{$(\'#y-14-28\').29().6d(j(){$(f).S({\'1R\':\'1G(\'+o.4j+\') 17 50% 1F-1N\'})},j(){$(f).S({\'1R\':\'40 1G(\'+o.2Q+\') 1F-1N\'})}).1Q().30(\'1z\',j(){o.D=o.D-1;1r();l U})}}g(o.D!=(o.X.R-1)){g(o.3t){$(\'#y-14-1U\').S({\'1R\':\'1G(\'+o.4w+\') 64 50% 1F-1N\'}).29().30(\'1z\',j(){o.D=o.D+1;1r();l U})}I{$(\'#y-14-1U\').29().6d(j(){$(f).S({\'1R\':\'1G(\'+o.4w+\') 64 50% 1F-1N\'})},j(){$(f).S({\'1R\':\'40 1G(\'+o.2Q+\') 1F-1N\'})}).1Q().30(\'1z\',j(){o.D=o.D+1;1r();l U})}}6c()}j 6c(){$(A).8U(j(1W){6f(1W)})}j 3I(){$(A).29()}j 6f(1W){g(1W==1i){2f=8S.6e;3Q=27}I{2f=1W.6e;3Q=1W.8X}16=97.9i(2f).3A();g((16==o.5G)||(16==\'x\')||(2f==3Q)){2J()}g((16==o.5Z)||(2f==37)){g(o.D!=0){o.D=o.D-1;1r();3I()}}g((16==o.5K)||(2f==39)){g(o.D!=(o.X.R-1)){o.D=o.D+1;1r();3I()}}}j 5E(){g((o.X.R-1)>o.D){5A=L 3L();5A.1j=o.X[o.D+1][0]}g(o.D>0){5z=L 3L();5z.1j=o.X[o.D-1][0]}}j 2J(){$(\'#1a-y\').5B();$(\'#1a-2b\').9m(j(){$(\'#1a-2b\').5B()});$(\'3F, 36, 5C\').S({\'5D\':\'9g\'})}j 3u(){k 1d,1e;g(V.32&&V.5M){1d=V.5W+V.9f;1e=V.32+V.5M}I g(A.12.5U>A.12.3E){1d=A.12.99;1e=A.12.5U}I{1d=A.12.5V;1e=A.12.3E}k 1y,1I;g(1O.32){g(A.1c.31){1y=A.1c.31}I{1y=1O.5W}1I=1O.32}I g(A.1c&&A.1c.3w){1y=A.1c.31;1I=A.1c.3w}I g(A.12){1y=A.12.31;1I=A.12.3w}g(1e<1I){45=1I}I{45=1e}g(1d<1y){3H=1d}I{3H=1y}5S=L 3b(3H,45,1y,1I);l 5S};j 4s(){k 1d,1e;g(1O.4p){1e=1O.4p;1d=1O.5O}I g(A.1c&&A.1c.33){1e=A.1c.33;1d=A.1c.4n}I g(A.12){1e=A.12.33;1d=A.12.4n}5N=L 3b(1d,1e);l 5N};j 4z(5P){k 1B=L 4x();4y=1i;8t{k 4y=L 4x()}2L(4y-1B<5P)};l f.29(\'1z\').1z(5T)}})(1b);k 8k={\'8n\':\'8o\',\'8p\':\'Ú8z\',\'8A\':\'Bř8L\',\'8K\':\'8M\',\'8N\':\'8Cě8E\',\'a5\':\'Ča7\',\'a8\':\'Čaa\',\'a3\':\'9Y\',\'9X\':\'Září\',\'a2\':\'Řía1\',\'an\':\'ao\',\'aq\':\'al\',\'ak\':\'af\',\'ad\':\'Út\',\'ag\':\'ah\',\'aj\':\'Čt\',\'ab\':\'Pá\',\'9z\':\'9y\',\'9A\':\'9B\',\'9w\':\'9q 9sČÍN - 9u mó8j a zá9O\',\'9Q\':\'\',\'9R\':\'\',\'9T\':\'9N\',\'9L\':\'9K\',\'8d\':\'6T\',\'6W\':\'6R\',\'6Q\':\'6L\',\'6K\':\'6M...\',\'6Y\':\'%d.%m.%Y %H:%M\',\'7e\':\'%d.%m.%Y\',\'70\':\'5Fž5Q\',\'7g\':\'př5L 2X\',\'6l\':\'6i 2X\',\'6s\':\'2E 2X\',\'6C\':\'př5L 49\',\'6B\':\'2E 49\',\'6v\':\'6xí 42\',\'6q\':\'6ní 42:\',\'6A\':\'6m 49 6h 6Dž6bí\',\'6w\':\'6t 6ká5Y vš6g 67 42, 6oím 8i 7Xé 67 v 5X.\',\'7Y\':\'81\',\'80\':\'př7V 1ná2C\',\'7U\':\'7R 1ná2C\',\'7h\':\'8e 1ná2C\',\'8f\':\'2E 1ná2C\',\'8g\':\'5Jě8b 4A 1ná3i\',\'8a\':\'vý5Ií (2-5Rý) 4A\',\'84\':\'1-5Rý 4A\',\'89\':\'88\',\'7M\':\'7v 7o 5Hč7j\',\'7k\':\'7n vý5Ií 5Hč7w\',\'7x\':\'61 66 2E 7H 1ná2C ?\',\'7G\':\'61 66 2E 7B 2X ?\',\'7D\':\'už85:\',\'83\':\'82á7Q\',\'79\':\'6F 5X\',\'71\':\'72 1ná3i\',\'6I\':\'7díč7bé 6Z\',\'6J\':\'8G 1ná3i\',\'9H\':\'př9P ai 1ná3i\',\'a9\':\'5Fž5Q 5Jě5Y 8Vž6bí 8Wů\'};',62,647,'|||||||||||||||this|if|||function|var|return|||settings||||||||||lightbox||document||deconcept|activeImage|Math|id|name||else|getAttribute|image|new|||div||options|length|css|height|false|window|offsetParent|imageArray||||width|body|num|nav|setAttribute|key|left|top|_19|jquery|jQuery|documentElement|xScroll|yScroll|expires|container|axo|null|src|flip|details|box|str|navigator|PlayerVersion|auto|_set_image_to_view|offset|ShockwaveFlash|arrPageSizes|true|value|SWFObjectUtil|windowWidth|click|_23|date|typeof|for|cookie|no|url|style|windowHeight|jQueryMatchedObj|PI|prop|major|repeat|self|href|show|background|fn|_29|btnNext|objImagePreloader|objEvent|arrPageScroll|data|borr|||70158|torl|||fv||btnPrev|unbind|loading|overlay|split|px|parseInt|keycode|_2f|_2d|swf|parentOffset|domain|substring|extend|themes|images|gif|title|path|scroll|undefined|val|Left|version|Height|installedVer|minor|util|addVariable|nku|html|vymazat|SWFObject|doExpressInstall|secure|_26|_finish|caption|while|redirectUrl|try|ActiveXObject|pow|imageBlank|expression|parentNode|catch|versionIsValid|variables|_20|prvek|useExpressInstall|containerBorderSize|bind|clientWidth|innerHeight|scrollTop|objClicked|sin|object||span||_16|Array|currentNumber|each|hide|5625|getElementById|easing|nky|elem|margin|Top|ts|log|location|exp|padding|in|el|fixedNavigation|___getPageSize|_1|clientHeight|xiSWFPath|_a|join|toLowerCase|_1c|_5|_1a|offsetHeight|embed|intWidth|pageWidth|_disable_keyboard_navigation|_8|img|Image|_9|_d|_7|intHeight|escapeKey|secNav|opacity|params|attributes|addParam|_18|intImageWidth|rev|position|transparent|_2b|modulu|bgiframe|plugins|pageHeight|replace||userAgent|modul|asin|Width|bounceout|getRequestParameter|cookieValue|indexOf|results|all|mimeTypes|imageBtnPrev|param|_1f|abs|scrollLeft|getVariablePairs|pageYOffset|getParams|_1d|___getPageScroll|cookies|intImageHeight|btn|imageBtnNext|Date|curDate|___pause|layout|intDiffW|containerResizeSpeed|intDiffH|_resize_container_image_box|fadeIn|browser|_show_image|_show_image_data|intCurrentHeight|intCurrentWidth|msie|test|flashvars|MMplayerType|getVariables|_15|_21|xiRedirectUrl|Flash|getPlayerVersion|getSWFHTML|skipDetect|_14|_13|unloadSet||prepUnload|attachEvent|DETECT_KEY|_c|_e|_12|_11|_10|_f|description|prototype|push|_start|iframe|borderLeftWidth|_set_interface|imageBtnClose|link|overlayOpacity|overlayBgColor|imageLoading|currentStyle|borderTopWidth|number|525|bouncein|cleanupSWFs|toUTCString|Bottom|display|border|Right|btnClose|onload|objPrev|objNext|remove|select|visibility|_preload_neighbor_images|ulo|keyToClose|hlavi|choz|zm|keyToNext|idat|scrollMaxY|arrayPageScroll|pageXOffset|ms|it|sloupcov|arrayPageSize|_initialize|scrollHeight|offsetWidth|innerWidth|CMS|ny|keyToPrev||Opravdu|js|_set_navigation|right||chcete|parametry|h2|txtImage|txtOf|en|_enable_keyboard_navigation|hover|keyCode|_keyboard_action|echny|pro|editovat|FlashObject|zad|cms_content_edit|Vyberte|Nastaven|pros|easein|cms_modules_settings_title|getElementsByTagName|cms_content_delete|Nejsou|OBJECT|cms_content_module_settings|settings_error|nastaven|search|none|cms_modules_add_title|cms_content_module_delete|cms_content_module_add|vlo|getQueryParamValue|backend|hash|easeinout|CP_SEO_page_keywords|CP_SEO_page_description|search_default|vyhledat|Hledat|elasinout|elasin|elasout|search_page|sestupne|backinout|vzestupne|backout|backin|order_url_desc|slideDown|date_format_full|slova|cms_button_submit|CP_SEO_page_title|Titulek|expoinout|expoout||easeout|expoin|9375|CP_userInfo_backend|bounceinout|ov|984375|Kl|date_format_short|625|cms_content_add|CP_page_name_reload|type|ky|CP_page_name_classname_default|write|application|nastavit|styl|MMredirectURL|Player|Installation|PlugIn|slice|escape|vybrat|ku|CP_page_delete|classid|clsid|ActiveX|tento|flash|CP_userInfo_username|D27CDB6E|AE6D|CP_element_delete|tuto|movie|444553540000|11cf|96B8|CP_page_name_classname|MMdoctitle|AllowScriptAccess|always|sit|duplikovat|Windows|CE|CP_page_name_copy|ejmenovat|GetVariable|zadan|CP_title|getVariable|CP_page_name_rename|ADMINISTRACE|odhl|CP_userInfo_logout|CP_page_name_template_t1|ivatel|innerHTML|string|Homepage|CP_page_name_template_home|CP_page_name_template_default|nit|zA|order_url_asc|obnovit|CP_page_name_delete|CP_page_name_template|Shockwave|zkontrolujte|dy|LANG|insertBefore|createElement|_month_1|Leden|_month_2|onbeforeunload|firstChild|lightBox|do|close|next|prev|000|ico|nor|_month_3|block|Kv|absolute|ten|tabindex|Popis|frameborder|index|filter|_month_4|ezen|Duben|_month_5|Alpha|Opacity|blank|400|event|animate|keydown|rozlo|prvk|DOM_VK_ESCAPE|attr|detectflash|250|getScript|fast|ROOT|cufon|100|config|String|resize|scrollWidth|__flash_unloadHandler|hidden|__flash_savedUnloadHandler|PHOTO|onunload|scrollMaxX|visible|backgroundColor|fromCharCode|toString|opera|append|fadeOut|Number|class|break|METROPOLE|dimensions|ZLI|quality|Centrum|decodeURIComponent|default_title|VERSION|So|_day_6|_day_7|Ne|inner|outer|trim|shockwave|expressinstall|CP_elements_sort|getTime|setTime|tridit|order_url_add|1000|stranka|bavy|esunout|default_description|keywords|encodeURIComponent|paging_url_add|constructor|high|static|_month_9|Srpen|tagName|bgcolor|jen|_month_10|_month_8|bgIframe|_month_6|javascript|erven|_month_7|CP_elements_sort_save|ervenec|_day_5|marginLeft|_day_2|scrollTo|Po|_day_3|St|prvky|_day_4|_day_1|Prosinec|marginTop|_month_11|Listopad|boxModel|_month_12'.split('|'),0,{}))
;
