﻿/* preload */
(function($) {

	var $preload = $.preload = function(original, settings) {
		if (original.split)//selector
			original = $(original);

		settings = $.extend({}, $preload.defaults, settings);
		var sources = $.map(original, function(source) {
			if (!source)
				return; //skip
			if (source.split)//URL Mode
				return settings.base + source + settings.ext;
			var url = source.src || source.href; //save the original source
			if (typeof settings.placeholder == 'string' && source.src)//Placeholder Mode, if it's an image, set it.
				source.src = settings.placeholder;
			if (url && settings.find)//Rollover mode
				url = url.replace(settings.find, settings.replace);
			return url || null; //skip if empty string
		});

		var data = {
			loaded: 0, //how many were loaded successfully
			failed: 0, //how many urls failed
			next: 0, //which one's the next image to load (index)
			done: 0, //how many urls were tried
			//found:false,//whether the last one was successful
			total: sources.length//how many images are being preloaded overall
		};

		if (!data.total)//nothing to preload
			return finish();

		var imgs = '<img/>', //ensure one
			thres = settings.threshold; //save a copy

		while (--thres > 0)//it could be oddly negative
			imgs += '<img/>';
		imgs = $(imgs).load(handler).error(handler).bind('abort', handler).each(fetch);

		function handler(e) {
			data.found = e.type == 'load';
			data.image = this.src;
			var orig = data.original = original[this.index];
			data[data.found ? 'loaded' : 'failed']++;
			data.done++;
			if (settings.placeholder && orig.src)//special case when on placeholder mode
				orig.src = data.found ? data.image : settings.notFound || orig.src;
			if (settings.onComplete)
				settings.onComplete(data);
			if (data.done < data.total)//let's continue
				fetch(0, this);
			else {//we are finished
				if (imgs.unbind)//sometimes IE gets here before finishing line 84
					imgs.unbind('load').unbind('error').unbind('abort'); //cleanup
				imgs = null;
				finish();
			}
		};
		function fetch(i, img, retry) {
			if ($.browser.msie && data.next && data.next % $preload.gap == 0 && !retry) {//IE problem, can't preload more than 15
				setTimeout(function() { fetch(i, img, true); }, 0);
				return false;
			}
			if (data.next == data.total) return false; //no more to fetch
			img.index = data.next; //save it, we'll need it.
			img.src = sources[data.next++];
			if (settings.onRequest) {
				data.image = img.src;
				data.original = original[data.next - 1];
				settings.onRequest(data);
			}
		};
		function finish() {
			if (settings.onFinish)
				settings.onFinish(data);
		};
	};

	// each time we load this amount and it's IE, we must rest for a while, make it lower if you get stack overflow.
	$preload.gap = 14;

	$preload.defaults = {
		threshold: 2, //how many images to load simultaneously
		base: '', //URL mode: a base url can be specified, it is prepended to all string urls
		ext: '', //URL mode:same as base, but it's appended after the original url.
		replace: ''//Rollover mode: replacement (can be left empty)
		/*
		find:null,//Rollover mode: a string or regex for the replacement
		notFound:''//Placeholder Mode: Optional url of an image to use when the original wasn't found
		placeholder:'',//Placeholder Mode: url of an image to set while loading
		onRequest:function( data ){ ... },//callback called every time a new url is requested
		onComplete:function( data ){ ... },//callback called every time a response is received(successful or not)
		onFinish:function( data ){ ... }//callback called after all the images were loaded(or failed)
		*/
	};

	$.fn.preload = function(settings) {
		$preload(this, settings);
		return this;
	};

})(jQuery);

(function($) {

	$.fn.defaultButton = function() {
		$("form input").keypress(function(e) {
			if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {
				$('.defaultButton').click();
				return false;
			} else {
				return true;
			}
		})
	};

})(jQuery);

/* genfunctions */
function getScrollX() {
	var scrOfX = 0;
	if (typeof (window.pageYOffset) == 'number') {
		//Netscape compliant
		scrOfX = window.pageXOffset;
	}
	else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
		//DOM compliant
		scrOfX = document.body.scrollLeft;
	}
	else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
		//IE6 standards compliant mode
		scrOfX = document.documentElement.scrollLeft;
	}
	return scrOfX;
}

function getScrollY() {
	var scrOfY = 0;
	if (typeof (window.pageYOffset) == 'number') {
		//Netscape compliant
		scrOfY = window.pageYOffset;
	}
	else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
	}
	else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
	}
	return scrOfY;
}

$(document).ready(function() {
	$("input[id$=usernameTxt]").keypress(function(e) {
		if (e.which == 13) {
			var btn = $("a[id$='logonBtn']");
			eval($(btn).attr('href'));
			return false;
		}
	});

	$("input[id$=passwdTxt]").keypress(function(e) {
		if (e.which == 13) {
			var btn = $("a[id$='logonBtn']");
			eval($(btn).attr('href'));
			return false;
		}
	});

	$("a > img[src^='_img/nav']").mouseover(function() {
		var srcImg = $(this).attr('src');
		var offIndex = srcImg.lastIndexOf('_off.gif');
		if (offIndex > -1) {
			srcImg = srcImg.substring(0, offIndex) + '_on.gif';
			$(this).attr('src', srcImg);
			$(this).mouseout(function() {

				var srcImg = $(this).attr('src');
				var onIndex = srcImg.lastIndexOf('_on.gif');
				if (onIndex > -1) {
					srcImg = srcImg.substring(0, onIndex) + '_off.gif';
					$(this).attr('src', srcImg);
				}
			});
		}
	});
});

function mOver(obj) { obj.className = "ThumbBorderHighlight"; }
function mOut(obj) { obj.className = "ThumbBorder"; }

function ShowTradeDiv() {
	var ww = $(window).width();
	$("#qDivBG").height($(window).height());
	$("#qDivBG").width(ww);
	$("#qDivBG").css('visibility', 'visible');
	//$("#qDivBG").fadeTo("slow", 0.4 );

	ww = (ww / 2);
	if (ww > 265) ww -= 265;
	else ww = 0;
	$("#tradeDivForm").css('top', getScrollY() + 100 + 'px');
	$("#tradeDivForm").css('left', ww + 'px');
	$("#tradeDivForm").css('visibility', 'visible');
}

function ShowQThanksDiv() {
	var ww = $(window).width();
	$("#qDivBG").height($(window).height());
	$("#qDivBG").width(ww);
	$("#qDivBG").css('visibility', 'visible');

	$("#qDivForm").css('visibility', 'hidden');
	$("#tradeDivForm").css('visibility', 'hidden');

	ww = (ww / 2);
	if (ww > 225) ww -= 225;
	else ww = 0;
	$("#qDivThanks").css('top', getScrollY() + 100 + 'px');
	$("#qDivThanks").css('left', ww + 'px');
	$("#qDivThanks").css('visibility', 'visible');

	setTimeout(function() {
		$("#qDivThanks").css('visibility', 'hidden');
		$("#qDivBG").css('visibility', 'hidden');
	}, 5000);
}

function RegisterDivBtn() {
	// Document is ready
	// $("#qLink").click(function() { ShowOverlay(); });

	return;

	$("#divCloseBtn").click(function() {
		$("#qDivBG").css('visibility', 'hidden');
		$("#qDivForm").css('visibility', 'hidden');
	});

	$("#tradeLink").click(function() { ShowTradeDiv(); });

	$("#tradeCloseBtn").click(function() {
		$("#qDivBG").css('visibility', 'hidden');
		$("#tradeDivForm").css('visibility', 'hidden');
	});
}

function ImgSwap(num) {
	if (mainPic)
		mainPic.src = picArr[num];
}

/* jModal */

(function($) {
	$.fn.jqm = function(o) {
		var p = {
			overlay: 50,
			overlayClass: 'jqmOverlay',
			closeClass: 'jqmClose',
			trigger: '.jqModal',
			ajax: F,
			ajaxText: '',
			target: F,
			modal: F,
			toTop: F,
			onShow: F,
			onHide: F,
			onLoad: F
		};
		return this.each(function() {
			if (this._jqm) return H[this._jqm].c = $.extend({}, H[this._jqm].c, o); s++; this._jqm = s;
			H[s] = { c: $.extend(p, $.jqm.params, o), a: F, w: $(this).addClass('jqmID' + s), s: s };
			if (p.trigger) $(this).jqmAddTrigger(p.trigger);
		});
	};

	$.fn.jqmAddClose = function(e) { return hs(this, e, 'jqmHide'); };
	$.fn.jqmAddTrigger = function(e) { return hs(this, e, 'jqmShow'); };
	$.fn.jqmShow = function(t) { return this.each(function() { t = t || window.event; $.jqm.open(this._jqm, t); }); };
	$.fn.jqmHide = function(t) { return this.each(function() { t = t || window.event; $.jqm.close(this._jqm, t) }); };

	$.jqm = {
		hash: {},
		open: function(s, t) {
			try {
				var h = H[s], c = h.c, cc = '.' + c.closeClass, z = (parseInt(h.w.css('z-index'))), z = (z > 0) ? z : 3000, o = $('<div></div>').css({ height: '100%', width: '100%', position: 'fixed', left: 0, top: 0, 'z-index': z - 1, opacity: c.overlay / 100 }); if (h.a) return F; h.t = t; h.a = true; h.w.css('z-index', z);
				if (c.modal) { if (!A[0]) L('bind'); A.push(s); }
				else if (c.overlay > 0) h.w.jqmAddClose(o);
				else o = F;

				h.o = (o) ? o.addClass(c.overlayClass).prependTo('body') : F;
				if (ie6) { $('html,body').css({ height: '100%', width: '100%' }); if (o) { o = o.css({ position: 'absolute' })[0]; for (var y in { Top: 1, Left: 1 }) o.style.setExpression(y.toLowerCase(), "(_=(document.documentElement.scroll" + y + " || document.body.scroll" + y + "))+'px'"); } }

				if (c.ajax) {
					var r = c.target || h.w, u = c.ajax, r = (typeof r == 'string') ? $(r, h.w) : $(r), u = (u.substr(0, 1) == '@') ? $(t).attr(u.substring(1)) : u;
					r.html(c.ajaxText).load(u, function() { if (c.onLoad) c.onLoad.call(this, h); if (cc) h.w.jqmAddClose($(cc, h.w)); e(h); });
				}
				else if (cc) h.w.jqmAddClose($(cc, h.w));

				if (c.toTop && h.o) h.w.before('<span id="jqmP' + h.w[0]._jqm + '"></span>').insertAfter(h.o);
				(c.onShow) ? c.onShow(h) : h.w.show(); e(h); return F;
			}
			catch (err) { }
		},
		close: function(s) {
			var h = H[s]; if (!h.a) return F; h.a = F;
			if (A[0]) { A.pop(); if (!A[0]) L('unbind'); }
			if (h.c.toTop && h.o) $('#jqmP' + h.w[0]._jqm).after(h.w).remove();
			if (h.c.onHide) h.c.onHide(h); else { h.w.hide(); if (h.o) h.o.remove(); } return F;
		},
		params: {}
	};
	var s = 0, H = $.jqm.hash, A = [], ie6 = $.browser.msie && ($.browser.version == "6.0"), F = false,
i = $('<iframe src="javascript:false;document.write(\'\');" class="jqm"></iframe>').css({ opacity: 0 }),
e = function(h) { if (ie6) if (h.o) h.o.html('<p style="width:100%;height:100%"/>').prepend(i); else if (!$('iframe.jqm', h.w)[0]) h.w.prepend(i); f(h); },
f = function(h) { try { $(':input:visible', h.w)[0].focus(); } catch (_) { } },
L = function(t) { $()[t]("keypress", m)[t]("keydown", m)[t]("mousedown", m); },
m = function(e) { var h = H[A[A.length - 1]], r = (!$(e.target).parents('.jqmID' + h.s)[0]); if (r) f(h); return !r; },
hs = function(w, t, c) {
	return w.each(function() {
		var s = this._jqm; $(t).each(function() {
			if (!this[c]) { this[c] = []; $(this).click(function() { for (var i in { jqmShow: 1, jqmHide: 1 }) for (var s in this[i]) if (H[this[i][s]]) H[this[i][s]].w[i](this); return F; }); } this[c].push(s);
		});
	});
};
})(jQuery);


/*
* jQuery validation plug-in 1.5.5
*/
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, {}))

/* Custom */
jQuery.validator.addMethod("modelyear", function(value, element) {
	return this.optional(element) || /^((19|20)\d\d)$/.test(value);
}, "Please enter a valid year"
);

jQuery.validator.addMethod("numericonly", function(value, element, params) {
	return this.optional(element) || /^[0-9]*$/.test(value);
}, jQuery.validator.format("Please enter numeric value."));

jQuery.validator.addMethod("amount", function(value, element, params) {
	return this.optional(element) || /(\s*[\d,])\b/.test(value);
}, jQuery.validator.format("Please enter a valid amount."));

jQuery.validator.addMethod("price", function(value, element, params) {
	return this.optional(element) || /(\$\s*[\d,]+\.\d{2})\b/.test(value);
}, jQuery.validator.format("Please enter valid price example $1.00."));

/* End Custom */

jQuery.validator.addMethod("maxWords", function(value, element, params) {
	return this.optional(element) || value.match(/\b\w+\b/g).length < params;
}, jQuery.validator.format("Please enter {0} words or less."));

jQuery.validator.addMethod("minWords", function(value, element, params) {
	return this.optional(element) || value.match(/\b\w+\b/g).length >= params;
}, jQuery.validator.format("Please enter at least {0} words."));

jQuery.validator.addMethod("rangeWords", function(value, element, params) {
	return this.optional(element) || value.match(/\b\w+\b/g).length >= params[0] && value.match(/bw+b/g).length < params[1];
}, jQuery.validator.format("Please enter between {0} and {1} words."));


jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) {
	return this.optional(element) || /^[a-z-.,()'\"\s]+$/i.test(value);
}, "Letters or punctuation only please");

jQuery.validator.addMethod("alphanumeric", function(value, element) {
	return this.optional(element) || /^(\w|\s)+$/i.test(value);
}, "Letters, numbers, spaces or underscores only please");

jQuery.validator.addMethod("lettersonly", function(value, element) {
	return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only please");

jQuery.validator.addMethod("nowhitespace", function(value, element) {
	return this.optional(element) || /^\S+$/i.test(value);
}, "No white space please");

jQuery.validator.addMethod("ziprange", function(value, element) {
	return this.optional(element) || /^0[2-5]\d{3}$/.test(value) || /^0[2-5]\d{3}-\d{4}$/.test(value);
}, "Your ZIP-code must be in the range 02xxx to 05xxx or  02xx-xxxx to 05xx-xxxx");

/**
* Return true, if the value is a valid vehicle identification number (VIN).
*
* Works with all kind of text inputs.
*
* @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
* @desc Declares a required input element whose value must be a valid vehicle identification number.
*
* @name jQuery.validator.methods.vinUS
* @type Boolean
* @cat Plugins/Validate/Methods
*/
jQuery.validator.addMethod(
	"vinUS",
	function(v) {
		if (v.length != 17)
			return false;
		var i, n, d, f, cd, cdv;
		var LL = ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
		var VL = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9];
		var FL = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];
		var rs = 0;
		for (i = 0; i < 17; i++) {
			f = FL[i];
			d = v.slice(i, i + 1);
			if (i == 8) {
				cdv = d;
			}
			if (!isNaN(d)) {
				d *= f;
			}
			else {
				for (n = 0; n < LL.length; n++) {
					if (d.toUpperCase() === LL[n]) {
						d = VL[n];
						d *= f;
						if (isNaN(cdv) && n == 8) {
							cdv = LL[n];
						}
						break;
					}
				}
			}
			rs += d;
		}
		cd = rs % 11;
		if (cd == 10) { cd = "X"; }
		if (cd == cdv) { return true; }
		return false;
	},
	"The specified vehicle identification number (VIN) is invalid."
);

/**
* Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
*
* @example jQuery.validator.methods.date("01/01/1900")
* @result true
*
* @example jQuery.validator.methods.date("01/13/1990")
* @result false
*
* @example jQuery.validator.methods.date("01.01.1900")
* @result false
*
* @example <input name="pippo" class="{dateITA:true}" />
* @desc Declares an optional input element whose value must be a valid date.
*
* @name jQuery.validator.methods.dateITA
* @type Boolean
* @cat Plugins/Validate/Methods
*/
jQuery.validator.addMethod(
	"dateITA",
	function(value, element) {
		var check = false;
		var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/
		if (re.test(value)) {
			var adata = value.split('/');
			var gg = parseInt(adata[0], 10);
			var mm = parseInt(adata[1], 10);
			var aaaa = parseInt(adata[2], 10);
			var xdata = new Date(aaaa, mm - 1, gg);
			if ((xdata.getFullYear() == aaaa) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == gg))
				check = true;
			else
				check = false;
		} else
			check = false;
		return this.optional(element) || check;
	},
	"Please enter a correct date"
);

jQuery.validator.addMethod("dateNL", function(value, element) {
	return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value);
}, "Vul hier een geldige datum in."
);

jQuery.validator.addMethod("time", function(value, element) {
	return this.optional(element) || /^([01][0-9])|(2[0123]):([0-5])([0-9])$/.test(value);
}, "Please enter a valid time, between 00:00 and 23:59"
);

/**
* matches US phone number format 
* 
* where the area code may not start with 1 and the prefix may not start with 1 
* allows '-' or ' ' as a separator and allows parens around area code 
* some people may want to put a '1' in front of their number 
* 
* 1(212)-999-2345
* or
* 212 999 2344
* or
* 212-999-0983
* 
* but not
* 111-123-5434
* and not
* 212 123 4567
*/
jQuery.validator.addMethod("phone", function(phone_number, element) {
	phone_number = phone_number.replace(/\s+/g, "");
	return this.optional(element) || phone_number.length > 9 &&
		phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

// TODO check if value starts with <, otherwise don't try stripping anything
jQuery.validator.addMethod("strippedminlength", function(value, element, param) {
	return jQuery(value).text().length >= param;
}, jQuery.validator.format("Please enter at least {0} characters"));

// same as email, but TLD is optional
jQuery.validator.addMethod("email2", function(value, element, param) {
	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);
}, jQuery.validator.messages.email);

// same as url, but TLD is optional
jQuery.validator.addMethod("url2", function(value, element, param) {
	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);
}, jQuery.validator.messages.url);

// NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
// Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
// Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
jQuery.validator.addMethod("creditcardtypes", function(value, element, param) {

	if (/[^0-9-]+/.test(value))
		return false;

	value = value.replace(/\D/g, "");

	var validTypes = 0x0000;

	if (param.mastercard)
		validTypes |= 0x0001;
	if (param.visa)
		validTypes |= 0x0002;
	if (param.amex)
		validTypes |= 0x0004;
	if (param.dinersclub)
		validTypes |= 0x0008;
	if (param.enroute)
		validTypes |= 0x0010;
	if (param.discover)
		validTypes |= 0x0020;
	if (param.jcb)
		validTypes |= 0x0040;
	if (param.unknown)
		validTypes |= 0x0080;
	if (param.all)
		validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;

	if (validTypes & 0x0001 && /^(51|52|53|54|55)/.test(value)) { //mastercard
		return value.length == 16;
	}
	if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
		return value.length == 16;
	}
	if (validTypes & 0x0004 && /^(34|37)/.test(value)) { //amex
		return value.length == 15;
	}
	if (validTypes & 0x0008 && /^(300|301|302|303|304|305|36|38)/.test(value)) { //dinersclub
		return value.length == 14;
	}
	if (validTypes & 0x0010 && /^(2014|2149)/.test(value)) { //enroute
		return value.length == 15;
	}
	if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
		return value.length == 16;
	}
	if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
		return value.length == 16;
	}
	if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
		return value.length == 15;
	}
	if (validTypes & 0x0080) { //unknown
		return true;
	}
	return false;
}, "Please enter a valid credit card number.");
