/*
 * jQuery Highlight plugin
 *
 * Based on highlight v3 by Johann Burkard
 * http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
 *
 * Code a little bit refactored and cleaned (in my humble opinion).
 * Most important changes:
 *  - has an option to highlight only entire words (wordsOnly - false by default),
 *  - has an option to be case sensitive (caseSensitive - false by default)
 *  - highlight element tag and class names can be specified in options
 *
 * Usage:
 *   // wrap every occurrance of text 'lorem' in content
 *   // with <span class='highlight'> (default options)
 *   $('#content').highlight('lorem');
 *
 *   // search for and highlight more terms at once
 *   // so you can save some time on traversing DOM
 *   $('#content').highlight(['lorem', 'ipsum']);
 *   $('#content').highlight('lorem ipsum');
 *
 *   // search only for entire word 'lorem'
 *   $('#content').highlight('lorem', { wordsOnly: true });
 *
 *   // don't ignore case during search of term 'lorem'
 *   $('#content').highlight('lorem', { caseSensitive: true });
 *
 *   // wrap every occurrance of term 'ipsum' in content
 *   // with <em class='important'>
 *   $('#content').highlight('ipsum', { element: 'em', className: 'important' });
 *
 *   // remove default highlight
 *   $('#content').unhighlight();
 *
 *   // remove custom highlight
 *   $('#content').unhighlight({ element: 'em', className: 'important' });
 *
 *
 * Copyright (c) 2009 Bartek Szopka
 *
 * Licensed under MIT license.
 *
 */

jQuery.extend({
    highlight: function (node, re, nodeName, className) {
        if (node.nodeType === 3) {
            var match = node.data.match(re);
            if (match) {
                var highlight = document.createElement(nodeName || 'span');
                highlight.className = className || 'highlight';
                var wordNode = node.splitText(match.index);
                wordNode.splitText(match[0].length);
                var wordClone = wordNode.cloneNode(true);
                highlight.appendChild(wordClone);
                wordNode.parentNode.replaceChild(highlight, wordNode);
                return 1; //skip added node in parent
            }
        } else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
                !/(script|style)/i.test(node.tagName) && // ignore script and style nodes
                !(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
            for (var i = 0; i < node.childNodes.length; i++) {
                i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
            }
        }
        return 0;
    }
});

jQuery.fn.unhighlight = function (options) {
    var settings = { className: 'highlight', element: 'span' };
    jQuery.extend(settings, options);

    return this.find(settings.element + "." + settings.className).each(function () {
        var parent = this.parentNode;
        parent.replaceChild(this.firstChild, this);
        parent.normalize();
    }).end();
};

jQuery.fn.highlight = function (words, options) {
    var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: true };
    jQuery.extend(settings, options);
    
    if (words.constructor === String) {
        words = [words];
    }
    words = jQuery.grep(words, function(word, i){
      return word != '';
    });
    if (words.length == 0) { return this; };

    var flag = settings.caseSensitive ? "" : "i";
    var pattern = "(" + words.join("|") + ")";
    if (settings.wordsOnly) {
        pattern = "\\b" + pattern + "\\b";
    }
    var re = new RegExp(pattern, flag);
    
    return this.each(function () {
        jQuery.highlight(this, re, settings.element, settings.className);
    });
};
/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
 * $Rev: 2447 $
 *
 * Version 2.1.1
 */
(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);
/*
 * Superfish v1.4.8 - jQuery menu widget
 * Copyright (c) 2008 Joel Birch
 *
 * Dual licensed under the MIT and GPL licenses:
 * 	http://www.opensource.org/licenses/mit-license.php
 * 	http://www.gnu.org/licenses/gpl.html
 *
 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
 */

;(function($){
	$.fn.superfish = function(op){

		var sf = $.fn.superfish,
			c = sf.c,
			$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
			over = function(){
				var $$ = $(this), menu = getMenu($$);
				clearTimeout(menu.sfTimer);
				$$.showSuperfishUl().siblings().hideSuperfishUl();
			},
			out = function(){
				var $$ = $(this), menu = getMenu($$), o = sf.op;
				clearTimeout(menu.sfTimer);
				menu.sfTimer=setTimeout(function(){
					o.retainPath=($.inArray($$[0],o.$path)>-1);
					$$.hideSuperfishUl();
					if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
				},o.delay);	
			},
			getMenu = function($menu){
				var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
				sf.op = sf.o[menu.serial];
				return menu;
			},
			addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
			
		return this.each(function() {
			var s = this.serial = sf.o.length;
			var o = $.extend({},sf.defaults,op);
			o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
				$(this).addClass([o.hoverClass,c.bcClass].join(' '))
					.filter('li:has(ul)').removeClass(o.pathClass);
			});
			sf.o[s] = sf.op = o;
			
			$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
				if (o.autoArrows) addArrow( $('>a:first-child',this) );
			})
			.not('.'+c.bcClass)
				.hideSuperfishUl();
			
			var $a = $('a',this);
			$a.each(function(i){
				var $li = $a.eq(i).parents('li');
				$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
			});
			o.onInit.call(this);
			
		}).each(function() {
			var menuClasses = [c.menuClass];
			if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
			$(this).addClass(menuClasses.join(' '));
		});
	};

	var sf = $.fn.superfish;
	sf.o = [];
	sf.op = {};
	sf.IE7fix = function(){
		var o = sf.op;
		if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
			this.toggleClass(sf.c.shadowClass+'-off');
		};
	sf.c = {
		bcClass     : 'sf-breadcrumb',
		menuClass   : 'sf-js-enabled',
		anchorClass : 'sf-with-ul',
		arrowClass  : 'sf-sub-indicator',
		shadowClass : 'sf-shadow'
	};
	sf.defaults = {
		hoverClass	: 'sfHover',
		pathClass	: 'overideThisToUse',
		pathLevels	: 1,
		delay		: 500,
		animation	: {height:'show'},
		speed		: 'fast',
		autoArrows	: false,
		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
*/
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 } ('(7($){$.H($.2M,{1F:7(d){l(!6.F){d&&d.2p&&30.1z&&1z.57("3B 2B, 4L\'t 1F, 6e 3B");8}q c=$.17(6[0],\'u\');l(c){8 c}c=2c $.u(d,6[0]);$.17(6[0],\'u\',c);l(c.p.3C){6.3w("1x, 3n").1m(".4H").3e(7(){c.3b=w});l(c.p.2I){6.3w("1x, 3n").1m(":20").3e(7(){c.1U=6})}6.20(7(b){l(c.p.2p)b.5Y();7 2l(){l(c.p.2I){l(c.1U){q a=$("<1x 1k=\'5x\'/>").1t("v",c.1U.v).3L(c.1U.R).56(c.V)}c.p.2I.Z(c,c.V);l(c.1U){a.3F()}8 L}8 w}l(c.3b){c.3b=L;8 2l()}l(c.N()){l(c.1g){c.1v=w;8 L}8 2l()}1b{c.2w();8 L}})}8 c},M:7(){l($(6[0]).31(\'N\')){8 6.1F().N()}1b{q b=w;q a=$(6[0].N).1F();6.P(7(){b&=a.J(6)});8 b}},4G:7(c){q d={},$J=6;$.P(c.1T(/\\s/),7(a,b){d[b]=$J.1t(b);$J.6o(b)});8 d},1h:7(h,k){q f=6[0];l(h){q i=$.17(f.N,\'u\').p;q d=i.1h;q c=$.u.36(f);2q(h){1e"1f":$.H(c,$.u.1J(k));d[f.v]=c;l(k.I)i.I[f.v]=$.H(i.I[f.v],k.I);2L;1e"3F":l(!k){Q d[f.v];8 c}q e={};$.P(k.1T(/\\s/),7(a,b){e[b]=c[b];Q c[b]});8 e}}q g=$.u.41($.H({},$.u.3Y(f),$.u.3X(f),$.u.3S(f),$.u.36(f)),f);l(g.13){q j=g.13;Q g.13;g=$.H({13:j},g)}8 g}});$.H($.5u[":"],{5t:7(a){8!$.1j(a.R)},5o:7(a){8!!$.1j(a.R)},5k:7(a){8!a.3J}});$.u=7(b,a){6.p=$.H({},$.u.2N,b);6.V=a;6.4l()};$.u.15=7(c,b){l(U.F==1)8 7(){q a=$.3I(U);a.4V(c);8 $.u.15.1M(6,a)};l(U.F>2&&b.29!=3D){b=$.3I(U).4R(1)}l(b.29!=3D){b=[b]}$.P(b,7(i,n){c=c.27(2c 3z("\\\\{"+i+"\\\\}","g"),n)});8 c};$.H($.u,{2N:{I:{},26:{},1h:{},1c:"3t",24:"M",2E:"4N",2w:w,3s:$([]),2A:$([]),3C:w,3q:[],3p:L,4M:7(a){6.3l=a;l(6.p.4K&&!6.4J){6.p.1S&&6.p.1S.Z(6,a,6.p.1c,6.p.24);6.1P(a).2y()}},4E:7(a){l(!6.1u(a)&&(a.v 14 6.1o||!6.G(a))){6.J(a)}},6n:7(a){l(a.v 14 6.1o||a==6.4z){6.J(a)}},6l:7(a){l(a.v 14 6.1o)6.J(a)},34:7(a,c,b){$(a).1V(c).2t(b)},1S:7(a,c,b){$(a).2t(c).1V(b)}},6d:7(a){$.H($.u.2N,a)},I:{13:"6c 4p 31 13.",1Z:"K 37 6 4p.",1K:"K O a M 1K 67.",1p:"K O a M 66.",1r:"K O a M 1r.",22:"K O a M 1r (64).",2n:"4c 4b 49 2J 5Z¼5X 5U 2J.",1C:"K O a M 1C.",2f:"4c 4b 49 5P 5M 2J.",1O:"K O 5J 1O",2i:"K O a M 5G 5F 1C.",3W:"K O 3V 5B R 5z.",3R:"K O a R 5w a M 5v.",18:$.u.15("K O 3P 5s 2W {0} 2P."),1y:$.u.15("K O 5n 5l {0} 2P."),2k:$.u.15("K O a R 4A {0} 3K {1} 2P 5h."),2m:$.u.15("K O a R 4A {0} 3K {1}."),1A:$.u.15("K O a R 5d 2W 4d 4f 4s {0}."),1B:$.u.15("K O a R 53 2W 4d 4f 4s {0}.")},4r:L,4Z:{4l:7(){6.2u=$(6.p.2A);6.4v=6.2u.F&&6.2u||$(6.V);6.2o=$(6.p.3s).1f(6.p.2A);6.1o={};6.4T={};6.1g=0;6.1d={};6.1a={};6.1L();q f=(6.26={});$.P(6.p.26,7(d,c){$.P(c.1T(/\\s/),7(a,b){f[b]=d})});q e=6.p.1h;$.P(e,7(b,a){e[b]=$.u.1J(a)});7 1q(a){q b=$.17(6[0].N,"u");b.p["3H"+a.1k]&&b.p["3H"+a.1k].Z(b,6[0])}$(6.V).1q("3G 3E 4S",":2H, :4Q, :4P, 28, 4O",1q).1q("3e",":3A, :3y",1q);l(6.p.3x)$(6.V).3v("1a-N.1F",6.p.3x)},N:7(){6.3u();$.H(6.1o,6.1s);6.1a=$.H({},6.1s);l(!6.M())$(6.V).2G("1a-N",[6]);6.1i();8 6.M()},3u:7(){6.2F();S(q i=0,11=(6.23=6.11());11[i];i++){6.2a(11[i])}8 6.M()},J:7(a){a=6.2D(a);6.4z=a;6.2C(a);6.23=$(a);q b=6.2a(a);l(b){Q 6.1a[a.v]}1b{6.1a[a.v]=w}l(!6.3r()){6.12=6.12.1f(6.2o)}6.1i();8 b},1i:7(b){l(b){$.H(6.1s,b);6.T=[];S(q c 14 b){6.T.2e({19:b[c],J:6.21(c)[0]})}6.1l=$.3o(6.1l,7(a){8!(a.v 14 b)})}6.p.1i?6.p.1i.Z(6,6.1s,6.T):6.3m()},2U:7(){l($.2M.2U)$(6.V).2U();6.1o={};6.2F();6.2S();6.11().2t(6.p.1c)},3r:7(){8 6.2g(6.1a)},2g:7(a){q b=0;S(q i 14 a)b++;8 b},2S:7(){6.2z(6.12).2y()},M:7(){8 6.3k()==0},3k:7(){8 6.T.F},2w:7(){l(6.p.2w){3j{$(6.3i()||6.T.F&&6.T[0].J||[]).1m(":4I").3g()}3f(e){}}},3i:7(){q a=6.3l;8 a&&$.3o(6.T,7(n){8 n.J.v==a.v}).F==1&&a},11:7(){q a=6,2V={};8 $([]).1f(6.V.11).1m(":1x").1I(":20, :1L, :4F, [4D]").1I(6.p.3q).1m(7(){!6.v&&a.p.2p&&30.1z&&1z.3t("%o 4C 3P v 4B",6);l(6.v 14 2V||!a.2g($(6).1h()))8 L;2V[6.v]=w;8 w})},2D:7(a){8 $(a)[0]},2x:7(){8 $(6.p.2E+"."+6.p.1c,6.4v)},1L:7(){6.1l=[];6.T=[];6.1s={};6.1n=$([]);6.12=$([]);6.1v=L;6.23=$([])},2F:7(){6.1L();6.12=6.2x().1f(6.2o)},2C:7(a){6.1L();6.12=6.1P(a)},2a:7(d){d=6.2D(d);l(6.1u(d)){d=6.21(d.v)[0]}q a=$(d).1h();q c=L;S(X 14 a){q b={X:X,3d:a[X]};3j{q f=$.u.1Y[X].Z(6,d.R.27(/\\r/g,""),d,b.3d);l(f=="1X-1W"){c=w;6m}c=L;l(f=="1d"){6.12=6.12.1I(6.1P(d));8}l(!f){6.4y(d,b);8 L}}3f(e){6.p.2p&&30.1z&&1z.6k("6j 6i 6h 6g J "+d.4u+", 2a 3V \'"+b.X+"\' X");6f e;}}l(c)8;l(6.2g(a))6.1l.2e(d);8 w},4t:7(a,b){l(!$.1D)8;q c=6.p.39?$(a).1D()[6.p.39]:$(a).1D();8 c&&c.I&&c.I[b]},4q:7(a,b){q m=6.p.I[a];8 m&&(m.29==4o?m:m[b])},4w:7(){S(q i=0;i<U.F;i++){l(U[i]!==2s)8 U[i]}8 2s},2v:7(a,b){8 6.4w(6.4q(a.v,b),6.4t(a,b),!6.p.3p&&a.6b||2s,$.u.I[b],"<4n>6a: 69 19 68 S "+a.v+"</4n>")},4y:7(b,a){q c=6.2v(b,a.X);l(16 c=="7")c=c.Z(6,a.3d,b);6.T.2e({19:c,J:b});6.1s[b.v]=c;6.1o[b.v]=c},2z:7(a){l(6.p.2r)a=a.1f(a.4m(6.p.2r));8 a},3m:7(){S(q i=0;6.T[i];i++){q a=6.T[i];6.p.34&&6.p.34.Z(6,a.J,6.p.1c,6.p.24);6.35(a.J,a.19)}l(6.T.F){6.1n=6.1n.1f(6.2o)}l(6.p.1E){S(q i=0;6.1l[i];i++){6.35(6.1l[i])}}l(6.p.1S){S(q i=0,11=6.4k();11[i];i++){6.p.1S.Z(6,11[i],6.p.1c,6.p.24)}}6.12=6.12.1I(6.1n);6.2S();6.2z(6.1n).4j()},4k:7(){8 6.23.1I(6.4i())},4i:7(){8 $(6.T).4h(7(){8 6.J})},35:7(a,c){q b=6.1P(a);l(b.F){b.2t().1V(6.p.1c);b.1t("4g")&&b.3h(c)}1b{b=$("<"+6.p.2E+"/>").1t({"S":6.33(a),4g:w}).1V(6.p.1c).3h(c||"");l(6.p.2r){b=b.2y().4j().65("<"+6.p.2r+"/>").4m()}l(!6.2u.63(b).F)6.p.4e?6.p.4e(b,$(a)):b.62(a)}l(!c&&6.p.1E){b.2H("");16 6.p.1E=="1w"?b.1V(6.p.1E):6.p.1E(b)}6.1n=6.1n.1f(b)},1P:7(a){8 6.2x().1m("[S=\'"+6.33(a)+"\']")},33:7(a){8 6.26[a.v]||(6.1u(a)?a.v:a.4u||a.v)},1u:7(a){8/3A|3y/i.Y(a.1k)},21:7(d){q c=6.V;8 $(61.60(d)).4h(7(a,b){8 b.N==c&&b.v==d&&b||4a})},1N:7(a,b){2q(b.48.47()){1e\'28\':8 $("46:2B",b).F;1e\'1x\':l(6.1u(b))8 6.21(b.v).1m(\':3J\').F}8 a.F},45:7(b,a){8 6.2K[16 b]?6.2K[16 b](b,a):w},2K:{"5W":7(b,a){8 b},"1w":7(b,a){8!!$(b,a.N).F},"7":7(b,a){8 b(a)}},G:7(a){8!$.u.1Y.13.Z(6,$.1j(a.R),a)&&"1X-1W"},44:7(a){l(!6.1d[a.v]){6.1g++;6.1d[a.v]=w}},43:7(a,b){6.1g--;l(6.1g<0)6.1g=0;Q 6.1d[a.v];l(b&&6.1g==0&&6.1v&&6.N()){$(6.V).20()}1b l(!b&&6.1g==0&&6.1v){$(6.V).2G("1a-N",[6])}},2b:7(a){8 $.17(a,"2b")||$.17(a,"2b",5S={32:4a,M:w,19:6.2v(a,"1Z")})}},1Q:{13:{13:w},1K:{1K:w},1p:{1p:w},1r:{1r:w},22:{22:w},2n:{2n:w},1C:{1C:w},2f:{2f:w},1O:{1O:w},2i:{2i:w}},42:7(a,b){a.29==4o?6.1Q[a]=b:$.H(6.1Q,a)},3X:7(b){q a={};q c=$(b).1t(\'5O\');c&&$.P(c.1T(\' \'),7(){l(6 14 $.u.1Q){$.H(a,$.u.1Q[6])}});8 a},3S:7(c){q a={};q d=$(c);S(X 14 $.u.1Y){q b=d.1t(X);l(b){a[X]=b}}l(a.18&&/-1|5N|5L/.Y(a.18)){Q a.18}8 a},3Y:7(a){l(!$.1D)8{};q b=$.17(a.N,\'u\').p.39;8 b?$(a).1D()[b]:$(a).1D()},36:7(b){q a={};q c=$.17(b.N,\'u\');l(c.p.1h){a=$.u.1J(c.p.1h[b.v])||{}}8 a},41:7(d,e){$.P(d,7(c,b){l(b===L){Q d[c];8}l(b.2Z||b.2j){q a=w;2q(16 b.2j){1e"1w":a=!!$(b.2j,e.N).F;2L;1e"7":a=b.2j.Z(e,e);2L}l(a){d[c]=b.2Z!==2s?b.2Z:w}1b{Q d[c]}}});$.P(d,7(a,b){d[a]=$.5K(b)?b(e):b});$.P([\'1y\',\'18\',\'1B\',\'1A\'],7(){l(d[6]){d[6]=2Y(d[6])}});$.P([\'2k\',\'2m\'],7(){l(d[6]){d[6]=[2Y(d[6][0]),2Y(d[6][1])]}});l($.u.4r){l(d.1B&&d.1A){d.2m=[d.1B,d.1A];Q d.1B;Q d.1A}l(d.1y&&d.18){d.2k=[d.1y,d.18];Q d.1y;Q d.18}}l(d.I){Q d.I}8 d},1J:7(a){l(16 a=="1w"){q b={};$.P(a.1T(/\\s/),7(){b[6]=w});a=b}8 a},5I:7(c,a,b){$.u.1Y[c]=a;$.u.I[c]=b||$.u.I[c];l(a.F<3){$.u.42(c,$.u.1J(c))}},1Y:{13:7(b,c,a){l(!6.45(a,c))8"1X-1W";2q(c.48.47()){1e\'28\':q d=$("46:2B",c);8 d.F>0&&(c.1k=="28-5H"||($.2X.2R&&!(d[0].5E[\'R\'].5D)?d[0].2H:d[0].R).F>0);1e\'1x\':l(6.1u(c))8 6.1N(b,c)>0;5C:8 $.1j(b).F>0}},1Z:7(e,g,i){l(6.G(g))8"1X-1W";q f=6.2b(g);l(!6.p.I[g.v])6.p.I[g.v]={};6.p.I[g.v].1Z=16 f.19=="7"?f.19(e):f.19;i=16 i=="1w"&&{1p:i}||i;l(f.32!==e){f.32=e;q j=6;6.44(g);q h={};h[g.v]=e;$.2O($.H(w,{1p:i,3U:"2T",3T:"1F"+g.v,5A:"5y",17:h,1E:7(c){q b=c===w;l(b){q d=j.1v;j.2C(g);j.1v=d;j.1l.2e(g);j.1i()}1b{q a={};a[g.v]=f.19=c||j.2v(g,"1Z");j.1i(a)}f.M=b;j.43(g,b)}},i));8"1d"}1b l(6.1d[g.v]){8"1d"}8 f.M},1y:7(b,c,a){8 6.G(c)||6.1N($.1j(b),c)>=a},18:7(b,c,a){8 6.G(c)||6.1N($.1j(b),c)<=a},2k:7(b,d,a){q c=6.1N($.1j(b),d);8 6.G(d)||(c>=a[0]&&c<=a[1])},1B:7(b,c,a){8 6.G(c)||b>=a},1A:7(b,c,a){8 6.G(c)||b<=a},2m:7(b,c,a){8 6.G(c)||(b>=a[0]&&b<=a[1])},1K:7(a,b){8 6.G(b)||/^((([a-z]|\\d|[!#\\$%&\'\\*\\+\\-\\/=\\?\\^W`{\\|}~]|[\\A-\\y\\E-\\C\\x-\\B])+(\\.([a-z]|\\d|[!#\\$%&\'\\*\\+\\-\\/=\\?\\^W`{\\|}~]|[\\A-\\y\\E-\\C\\x-\\B])+)*)|((\\3Q)((((\\2h|\\1R)*(\\2Q\\3O))?(\\2h|\\1R)+)?(([\\3N-\\5r\\3M\\3Z\\5q-\\5p\\40]|\\5m|[\\5Q-\\5R]|[\\5j-\\5T]|[\\A-\\y\\E-\\C\\x-\\B])|(\\\\([\\3N-\\1R\\3M\\3Z\\2Q-\\40]|[\\A-\\y\\E-\\C\\x-\\B]))))*(((\\2h|\\1R)*(\\2Q\\3O))?(\\2h|\\1R)+)?(\\3Q)))@((([a-z]|\\d|[\\A-\\y\\E-\\C\\x-\\B])|(([a-z]|\\d|[\\A-\\y\\E-\\C\\x-\\B])([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])*([a-z]|\\d|[\\A-\\y\\E-\\C\\x-\\B])))\\.)+(([a-z]|[\\A-\\y\\E-\\C\\x-\\B])|(([a-z]|[\\A-\\y\\E-\\C\\x-\\B])([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])*([a-z]|[\\A-\\y\\E-\\C\\x-\\B])))\\.?$/i.Y(a)},1p:7(a,b){8 6.G(b)||/^(5i?|5V):\\/\\/(((([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])|(%[\\1H-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|[\\A-\\y\\E-\\C\\x-\\B])|(([a-z]|\\d|[\\A-\\y\\E-\\C\\x-\\B])([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])*([a-z]|\\d|[\\A-\\y\\E-\\C\\x-\\B])))\\.)+(([a-z]|[\\A-\\y\\E-\\C\\x-\\B])|(([a-z]|[\\A-\\y\\E-\\C\\x-\\B])([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])*([a-z]|[\\A-\\y\\E-\\C\\x-\\B])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])|(%[\\1H-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])|(%[\\1H-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])|(%[\\1H-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)|[\\5g-\\5f]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|W|~|[\\A-\\y\\E-\\C\\x-\\B])|(%[\\1H-f]{2})|[!\\$&\'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.Y(a)},1r:7(a,b){8 6.G(b)||!/5e|5c/.Y(2c 5b(a))},22:7(a,b){8 6.G(b)||/^\\d{4}[\\/-]\\d{1,2}[\\/-]\\d{1,2}$/.Y(a)},2n:7(a,b){8 6.G(b)||/^\\d\\d?\\.\\d\\d?\\.\\d\\d\\d?\\d?$/.Y(a)},1C:7(a,b){8 6.G(b)||/^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)(?:\\.\\d+)?$/.Y(a)},2f:7(a,b){8 6.G(b)||/^-?(?:\\d+|\\d{1,3}(?:\\.\\d{3})+)(?:,\\d+)?$/.Y(a)},1O:7(a,b){8 6.G(b)||/^\\d+$/.Y(a)},2i:7(b,e){l(6.G(e))8"1X-1W";l(/[^0-9-]+/.Y(b))8 L;q a=0,d=0,2d=L;b=b.27(/\\D/g,"");S(n=b.F-1;n>=0;n--){q c=b.5a(n);q d=59(c,10);l(2d){l((d*=2)>9)d-=9}a+=d;2d=!2d}8(a%10)==0},3R:7(b,c,a){a=16 a=="1w"?a.27(/,/g,\'|\'):"58|55?g|54";8 6.G(c)||b.52(2c 3z(".("+a+")$","i"))},3W:7(b,c,a){8 b==$(a).3L()}}});$.15=$.u.15})(38);(7($){q c=$.2O;q d={};$.2O=7(a){a=$.H(a,$.H({},$.51,a));q b=a.3T;l(a.3U=="2T"){l(d[b]){d[b].2T()}8(d[b]=c.1M(6,U))}8 c.1M(6,U)}})(38);(7($){$.P({3g:\'3G\',50:\'3E\'},7(b,a){$.1G.3a[a]={4Y:7(){l($.2X.2R)8 L;6.4X(b,$.1G.3a[a].3c,w)},4W:7(){l($.2X.2R)8 L;6.4U(b,$.1G.3a[a].3c,w)},3c:7(e){U[0]=$.1G.37(e);U[0].1k=a;8 $.1G.2l.1M(6,U)}}});$.H($.2M,{1q:7(d,e,c){8 6.3v(d,7(a){q b=$(a.4x);l(b.31(e)){8 c.1M(b,U)}})},6p:7(a,b){8 6.2G(a,[$.1G.37({1k:a,4x:b})])}})})(38);', 62, 398, '||||||this|function|return|||||||||||||if||||settings|var||||validator|name|true|uFDF0|uD7FF||u00A0|uFFEF|uFDCF||uF900|length|optional|extend|messages|element|Please|false|valid|form|enter|each|delete|value|for|errorList|arguments|currentForm|_|method|test|call||elements|toHide|required|in|format|typeof|data|maxlength|message|invalid|else|errorClass|pending|case|add|pendingRequest|rules|showErrors|trim|type|successList|filter|toShow|submitted|url|delegate|date|errorMap|attr|checkable|formSubmitted|string|input|minlength|console|max|min|number|metadata|success|validate|event|da|not|normalizeRule|email|reset|apply|getLength|digits|errorsFor|classRuleSettings|x09|unhighlight|split|submitButton|addClass|mismatch|dependency|methods|remote|submit|findByName|dateISO|currentElements|validClass||groups|replace|select|constructor|check|previousValue|new|bEven|push|numberDE|objectLength|x20|creditcard|depends|rangelength|handle|range|dateDE|containers|debug|switch|wrapper|undefined|removeClass|labelContainer|defaultMessage|focusInvalid|errors|hide|addWrapper|errorLabelContainer|selected|prepareElement|clean|errorElement|prepareForm|triggerHandler|text|submitHandler|ein|dependTypes|break|fn|defaults|ajax|characters|x0d|msie|hideErrors|abort|resetForm|rulesCache|than|browser|Number|param|window|is|old|idOrName|highlight|showLabel|staticRules|fix|jQuery|meta|special|cancelSubmit|handler|parameters|click|catch|focus|html|findLastActive|try|size|lastActive|defaultShowErrors|button|grep|ignoreTitle|ignore|numberOfInvalids|errorContainer|error|checkForm|bind|find|invalidHandler|checkbox|RegExp|radio|nothing|onsubmit|Array|focusout|remove|focusin|on|makeArray|checked|and|val|x0b|x01|x0a|no|x22|accept|attributeRules|port|mode|the|equalTo|classRules|metadataRules|x0c|x7f|normalizeRules|addClassRules|stopRequest|startRequest|depend|option|toLowerCase|nodeName|Sie|null|geben|Bitte|or|errorPlacement|equal|generated|map|invalidElements|show|validElements|init|parent|strong|String|field|customMessage|autoCreateRanges|to|customMetaMessage|id|errorContext|findDefined|target|formatAndAdd|lastElement|between|assigned|has|disabled|onfocusout|image|removeAttrs|cancel|visible|blockFocusCleanup|focusCleanup|can|onfocusin|label|textarea|file|password|slice|keyup|valueCache|removeEventListener|unshift|teardown|addEventListener|setup|prototype|blur|ajaxSettings|match|greater|gif|jpe|appendTo|warn|png|parseInt|charAt|Date|NaN|less|Invalid|uF8FF|uE000|long|https|x5d|unchecked|least|x21|at|filled|x1f|x0e|x08|more|blank|expr|extension|with|hidden|json|again|dataType|same|default|specified|attributes|card|credit|multiple|addMethod|only|isFunction|524288|Nummer|2147483647|class|eine|x23|x5b|previous|x7e|Datum|ftp|boolean|ltiges|preventDefault|gÃ|getElementsByName|document|insertAfter|append|ISO|wrap|URL|address|defined|No|Warning|title|This|setDefaults|returning|throw|checking|when|occured|exception|log|onclick|continue|onkeyup|removeAttr|triggerEvent'.split('|'), 0, {}))
/*!
 * jQuery blockUI plugin
 * Version 2.26 (09-SEP-2009)
 * @requires jQuery v1.2.3 or later
 *
 * Examples at: http://malsup.com/jquery/block/
 * Copyright (c) 2007-2008 M. Alsup
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Thanks to Amir-Hossein Sobhi for some excellent contributions!
 */

;(function($) {

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
	alert('blockUI requires jQuery v1.2.3 or later!  You are using v' + $.fn.jquery);
	return;
}

$.fn._fadeIn = $.fn.fadeIn;

// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
// retarded userAgent strings on Vista)
var mode = document.documentMode || 0;
var setExpr = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8);
var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent) && !mode;

// global $ methods for blocking/unblocking the entire page
$.blockUI   = function(opts) { install(window, opts); };
$.unblockUI = function(opts) { remove(window, opts); };

// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)
$.growlUI = function(title, message, timeout, onClose) {
	var $m = $('<div class="growlUI"></div>');
	if (title) $m.append('<h1>'+title+'</h1>');
	if (message) $m.append('<h2>'+message+'</h2>');
	if (timeout == undefined) timeout = 3000;
	$.blockUI({
		message: $m, fadeIn: 700, fadeOut: 1000, centerY: false,
		timeout: timeout, showOverlay: false,
		onUnblock: onClose, 
		css: $.blockUI.defaults.growlCSS
	});
};

// plugin method for blocking element content
$.fn.block = function(opts) {
	return this.unblock({ fadeOut: 0 }).each(function() {
		if ($.css(this,'position') == 'static')
			this.style.position = 'relative';
		if ($.browser.msie)
			this.style.zoom = 1; // force 'hasLayout'
		install(this, opts);
	});
};

// plugin method for unblocking element content
$.fn.unblock = function(opts) {
	return this.each(function() {
		remove(this, opts);
	});
};

$.blockUI.version = 2.26; // 2nd generation blocking at no extra cost!

// override these in your code to change the default behavior and style
$.blockUI.defaults = {
	// message displayed when blocking (use null for no message)
	message:  '<h1>Please wait...</h1>',

	title: null,	  // title string; only used when theme == true
	draggable: true,  // only used when theme == true (requires jquery-ui.js to be loaded)
	
	theme: false, // set to true to use with jQuery UI themes
	
	// styles for the message when blocking; if you wish to disable
	// these and use an external stylesheet then do this in your code:
	// $.blockUI.defaults.css = {};
	css: {
		padding:	0,
		margin:		0,
		width:		'30%',
		top:		'40%',
		left:		'35%',
		textAlign:	'center',
		color:		'#000',
		border:		'3px solid #aaa',
		backgroundColor:'#fff',
		cursor:		'wait'
	},
	
	// minimal style set used when themes are used
	themedCSS: {
		width:	'30%',
		top:	'40%',
		left:	'35%'
	},

	// styles for the overlay
	overlayCSS:  {
		backgroundColor: '#000',
		opacity:	  	 0.6,
		cursor:		  	 'wait'
	},

	// styles applied when using $.growlUI
	growlCSS: {
		width:  	'350px',
		top:		'10px',
		left:   	'',
		right:  	'10px',
		border: 	'none',
		padding:	'5px',
		opacity:	0.6,
		cursor: 	'default',
		color:		'#fff',
		backgroundColor: '#000',
		'-webkit-border-radius': '10px',
		'-moz-border-radius':	 '10px'
	},
	
	// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
	// (hat tip to Jorge H. N. de Vasconcelos)
	iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',

	// force usage of iframe in non-IE browsers (handy for blocking applets)
	forceIframe: false,

	// z-index for the blocking overlay
	baseZ: 1000,

	// set these to true to have the message automatically centered
	centerX: true, // <-- only effects element blocking (page block controlled via css above)
	centerY: true,

	// allow body element to be stetched in ie6; this makes blocking look better
	// on "short" pages.  disable if you wish to prevent changes to the body height
	allowBodyStretch: true,

	// enable if you want key and mouse events to be disabled for content that is blocked
	bindEvents: true,

	// be default blockUI will supress tab navigation from leaving blocking content
	// (if bindEvents is true)
	constrainTabKey: true,

	// fadeIn time in millis; set to 0 to disable fadeIn on block
	fadeIn:  0,

	// fadeOut time in millis; set to 0 to disable fadeOut on unblock
	fadeOut:  0,

	// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
	timeout: 0,

	// disable if you don't want to show the overlay
	showOverlay: true,

	// if true, focus will be placed in the first available input field when
	// page blocking
	focusInput: true,

	// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
	applyPlatformOpacityRules: true,

	// callback method invoked when unblocking has completed; the callback is
	// passed the element that has been unblocked (which is the window object for page
	// blocks) and the options that were passed to the unblock call:
	//	 onUnblock(element, options)
	onUnblock: null,

	// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
	quirksmodeOffsetHack: 4
};

// private data and functions follow...

var pageBlock = null;
var pageBlockEls = [];

function install(el, opts) {
	var full = (el == window);
	var msg = opts && opts.message !== undefined ? opts.message : undefined;
	opts = $.extend({}, $.blockUI.defaults, opts || {});
	opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
	var css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
	var themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
	msg = msg === undefined ? opts.message : msg;

	// remove the current block (if there is one)
	if (full && pageBlock)
		remove(window, {fadeOut:0});

	// if an existing element is being used as the blocking content then we capture
	// its current place in the DOM (and current display style) so we can restore
	// it when we unblock
	if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
		var node = msg.jquery ? msg[0] : msg;
		var data = {};
		$(el).data('blockUI.history', data);
		data.el = node;
		data.parent = node.parentNode;
		data.display = node.style.display;
		data.position = node.style.position;
		if (data.parent)
			data.parent.removeChild(node);
	}

	var z = opts.baseZ;

	// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
	// layer1 is the iframe layer which is used to supress bleed through of underlying content
	// layer2 is the overlay layer which has opacity and a wait cursor (by default)
	// layer3 is the message content that is displayed while blocking

	var lyr1 = ($.browser.msie || opts.forceIframe) 
		? $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>')
		: $('<div class="blockUI" style="display:none"></div>');
	var lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
	
	var lyr3;
	if (opts.theme && full) {
		var s = '<div class="blockUI blockMsg blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+z+';display:none;position:fixed">' +
					'<div class="ui-widget-header ui-dialog-titlebar blockTitle">'+(opts.title || '&nbsp;')+'</div>' +
					'<div class="ui-widget-content ui-dialog-content"></div>' +
				'</div>';
		lyr3 = $(s);
	}
	else {
		lyr3 = full ? $('<div class="blockUI blockMsg blockPage" style="z-index:'+z+';display:none;position:fixed"></div>')
					: $('<div class="blockUI blockMsg blockElement" style="z-index:'+z+';display:none;position:absolute"></div>');
	}						   

	// if we have a message, style it
	if (msg) {
		if (opts.theme) {
			lyr3.css(themedCSS);
			lyr3.addClass('ui-widget-content');
		}
		else 
			lyr3.css(css);
	}

	// style the overlay
	if (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform)))
		lyr2.css(opts.overlayCSS);
	lyr2.css('position', full ? 'fixed' : 'absolute');

	// make iframe layer transparent in IE
	if ($.browser.msie || opts.forceIframe)
		lyr1.css('opacity',0.0);

	$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
	
	if (opts.theme && opts.draggable && $.fn.draggable) {
		lyr3.draggable({
			handle: '.ui-dialog-titlebar',
			cancel: 'li'
		});
	}

	// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
	var expr = setExpr && (!$.boxModel || $('object,embed', full ? null : el).length > 0);
	if (ie6 || expr) {
		// give body 100% height
		if (full && opts.allowBodyStretch && $.boxModel)
			$('html,body').css('height','100%');

		// fix ie6 issue when blocked element has a border width
		if ((ie6 || !$.boxModel) && !full) {
			var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
			var fixT = t ? '(0 - '+t+')' : 0;
			var fixL = l ? '(0 - '+l+')' : 0;
		}

		// simulate fixed position
		$.each([lyr1,lyr2,lyr3], function(i,o) {
			var s = o[0].style;
			s.position = 'absolute';
			if (i < 2) {
				full ? s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"')
					 : s.setExpression('height','this.parentNode.offsetHeight + "px"');
				full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"')
					 : s.setExpression('width','this.parentNode.offsetWidth + "px"');
				if (fixL) s.setExpression('left', fixL);
				if (fixT) s.setExpression('top', fixT);
			}
			else if (opts.centerY) {
				if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
				s.marginTop = 0;
			}
			else if (!opts.centerY && full) {
				var top = (opts.css && opts.css.top) ? parseInt(opts.css.top) : 0;
				var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
				s.setExpression('top',expression);
			}
		});
	}

	// show the message
	if (msg) {
		if (opts.theme)
			lyr3.find('.ui-widget-content').append(msg);
		else
			lyr3.append(msg);
		if (msg.jquery || msg.nodeType)
			$(msg).show();
	}

	if (($.browser.msie || opts.forceIframe) && opts.showOverlay)
		lyr1.show(); // opacity is zero
	if (opts.fadeIn) {
		if (opts.showOverlay)
			lyr2._fadeIn(opts.fadeIn);
		if (msg)
			lyr3.fadeIn(opts.fadeIn);
	}
	else {
		if (opts.showOverlay)
			lyr2.show();
		if (msg)
			lyr3.show();
	}

	// bind key and mouse events
	bind(1, el, opts);

	if (full) {
		pageBlock = lyr3[0];
		pageBlockEls = $(':input:enabled:visible',pageBlock);
		if (opts.focusInput)
			setTimeout(focus, 20);
	}
	else
		center(lyr3[0], opts.centerX, opts.centerY);

	if (opts.timeout) {
		// auto-unblock
		var to = setTimeout(function() {
			full ? $.unblockUI(opts) : $(el).unblock(opts);
		}, opts.timeout);
		$(el).data('blockUI.timeout', to);
	}
};

// remove the block
function remove(el, opts) {
	var full = (el == window);
	var $el = $(el);
	var data = $el.data('blockUI.history');
	var to = $el.data('blockUI.timeout');
	if (to) {
		clearTimeout(to);
		$el.removeData('blockUI.timeout');
	}
	opts = $.extend({}, $.blockUI.defaults, opts || {});
	bind(0, el, opts); // unbind events
	
	var els;
	if (full) // crazy selector to handle odd field errors in ie6/7
		els = $('body').children().filter('.blockUI').add('body > .blockUI');
	else
		els = $('.blockUI', el);

	if (full)
		pageBlock = pageBlockEls = null;

	if (opts.fadeOut) {
		els.fadeOut(opts.fadeOut);
		setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
	}
	else
		reset(els, data, opts, el);
};

// move blocking element back into the DOM where it started
function reset(els,data,opts,el) {
	els.each(function(i,o) {
		// remove via DOM calls so we don't lose event handlers
		if (this.parentNode)
			this.parentNode.removeChild(this);
	});

	if (data && data.el) {
		data.el.style.display = data.display;
		data.el.style.position = data.position;
		if (data.parent)
			data.parent.appendChild(data.el);
		$(data.el).removeData('blockUI.history');
	}

	if (typeof opts.onUnblock == 'function')
		opts.onUnblock(el,opts);
};

// bind/unbind the handler
function bind(b, el, opts) {
	var full = el == window, $el = $(el);

	// don't bother unbinding if there is nothing to unbind
	if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
		return;
	if (!full)
		$el.data('blockUI.isBlocked', b);

	// don't bind events when overlay is not in use or if bindEvents is false
	if (!opts.bindEvents || (b && !opts.showOverlay)) 
		return;

	// bind anchors and inputs for mouse and key events
	var events = 'mousedown mouseup keydown keypress';
	b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler);

// former impl...
//	   var $e = $('a,:input');
//	   b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
};

// event handler to suppress keyboard/mouse events when blocking
function handler(e) {
	// allow tab navigation (conditionally)
	if (e.keyCode && e.keyCode == 9) {
		if (pageBlock && e.data.constrainTabKey) {
			var els = pageBlockEls;
			var fwd = !e.shiftKey && e.target == els[els.length-1];
			var back = e.shiftKey && e.target == els[0];
			if (fwd || back) {
				setTimeout(function(){focus(back)},10);
				return false;
			}
		}
	}
	// allow events within the message content
	if ($(e.target).parents('div.blockMsg').length > 0)
		return true;

	// allow events for content that is not being blocked
	return $(e.target).parents().children().filter('div.blockUI').length == 0;
};

function focus(back) {
	if (!pageBlockEls)
		return;
	var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
	if (e)
		e.focus();
};

function center(el, x, y) {
	var p = el.parentNode, s = el.style;
	var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
	var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
	if (x) s.left = l > 0 ? (l+'px') : '0';
	if (y) s.top  = t > 0 ? (t+'px') : '0';
};

function sz(el, p) {
	return parseInt($.css(el,p))||0;
};

})(jQuery);

