// JavaScript Document


$(function(){
	$("#mainform").submit(function() {
		//$.scrollTo("#mainform", 300);
	});
	
	// AJAX forms.
	ajaxify();
	displayErrors();
	
	// Discount code.
	$("#discountcode").alphanumeric();
});



/**
 * Turns forms with special "ajax" class into AJAX forms.
 * Note: Requires compatible PHP code on server-side in order to
 * receive and properly display HTML based on passed "ajax" variable.
 * 
 * Requires "scrollTo" jQuery plug-in.
 */
var ajaxconfig = {};
function ajaxify() {
	$("form.ajax").submit(function(){
		// Get form properties.
		action = $(this).attr("action");
		if (action.indexOf("#") != -1) {
			// Parse out trailing hash.
			action = action.substring(0, action.indexOf("#"))
		}
		method = $(this).attr("method").toUpperCase();
		if (method != "GET" && method != "POST") method = "POST";
		formid = $(this).attr("id");
		if (formid == "") {
			// Dynamically assign ID.
			formid = "form" + parseInt(Math.random() * 9999);
			$(this).attr("id", formid);
		}
		
		// Add "ajax" field to form and serialize data.
		$(this).append("<input type=\"hidden\" name=\"ajax\" value=\"1\" />");
		data = $(this).serialize();
		
		// Disable form fields to show it is processing.
		$("#" + formid + " input").attr("disabled", "disabled");
		$("#" + formid + " textarea").attr("disabled", "disabled");
		
		// Configure AJAX call.
		ajaxconfig = {
			type: method,
			url: action,
			data: data,
			success: function(data, textStatus, XMLHttpRequest) {
				// Update form contents and animate error messages, if applicable.
				$("#" + this.formid).html(data);
				if ($("#" + this.formid).hasClass("scrollme")) $.scrollTo("#" + this.formid, 300);
				displayErrors();
			},
			formid: formid
		};
		
		// Give error message time to scroll up before submitting AJAX call.
		if ($(".errmsg").length > 0) {
			$(".errmsg").slideUp(200, function() {
				ajaxify_submit();
			});
		} else {
			ajaxify_submit();
		}
		
		// Prevent form from submitting.
		return false;
	});
}

// AJAX submit callback.
function ajaxify_submit() {
	$.ajax(ajaxconfig);
}


/**
 * Animates error messages.
 */
function displayErrors() {
	$(".errmsg").css({
		"display": "none"
	});
	$(".errmsg").slideDown(500);
}





/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);



/**
 * Alphanumeric plug-in.
 */
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}('(2($){$.c.f=2(p){p=$.d({g:"!@#$%^&*()+=[]\\\\\\\';,/{}|\\":<>?~`.- ",4:"",9:""},p);7 3.b(2(){5(p.G)p.4+="Q";5(p.w)p.4+="n";s=p.9.z(\'\');x(i=0;i<s.y;i++)5(p.g.h(s[i])!=-1)s[i]="\\\\"+s[i];p.9=s.O(\'|\');6 l=N M(p.9,\'E\');6 a=p.g+p.4;a=a.H(l,\'\');$(3).J(2(e){5(!e.r)k=o.q(e.K);L k=o.q(e.r);5(a.h(k)!=-1)e.j();5(e.u&&k==\'v\')e.j()});$(3).B(\'D\',2(){7 F})})};$.c.I=2(p){6 8="n";8+=8.P();p=$.d({4:8},p);7 3.b(2(){$(3).f(p)})};$.c.t=2(p){6 m="A";p=$.d({4:m},p);7 3.b(2(){$(3).f(p)})}})(C);',53,53,'||function|this|nchars|if|var|return|az|allow|ch|each|fn|extend||alphanumeric|ichars|indexOf||preventDefault||reg|nm|abcdefghijklmnopqrstuvwxyz|String||fromCharCode|charCode||alpha|ctrlKey||allcaps|for|length|split|1234567890|bind|jQuery|contextmenu|gi|false|nocaps|replace|numeric|keypress|which|else|RegExp|new|join|toUpperCase|ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('|'),0,{}));

