
$(function() {
	$("#flyersBox").photoScroll({nextBtn: "#next", prevBtn: "#prev", displayUp: 3});
	
	// AJAX forms.
	ajaxify();
	displayErrors();
});



/**
 * 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);


/*------ PHOTO SCROLL -----*/
var lastScroll = 0;
(function($) {  
	$.fn.photoScroll = function(options) {
		var defaults = {
			scrollRate: 138,
			displayUp: 5,
			offClass: "fade",
			nextBtn: "p.forward",
			prevBtn: "p.backward"
		}
		var options = $.extend(defaults, options);
		var obj;
		var scrollDiv;
		var index = 0;
		var total;
		return this.each(function() {
			obj = $(this);
			scrollDiv = obj.find(".photo-scroll div");
			total = obj.find(".photo-scroll td").size()-options.displayUp;
			scrollDiv.scrollLeft(0);
			scrollDiv.css("overflow","hidden");
			obj.find(options.prevBtn).addClass(options.offClass);
			obj.find(options.nextBtn).addClass(options.offClass);
			if(total > 0){
				obj.find(options.nextBtn).removeClass(options.offClass);
				obj.find(options.prevBtn).mousedown(
					function(){
						moveScroll("previous");
					}
				);
				obj.find(options.nextBtn).mousedown(
					function(){
						moveScroll("next");
					}
				)
			}
		});
		function moveScroll(direction){
			switch(direction){
				case "previous":
					obj.find(options.nextBtn).removeClass(options.offClass);
					(index > 0) ? (index--):(index = 0);
					if(index == 0){
						obj.find(options.prevBtn).addClass(options.offClass);	
					}
					break;
				case "next":
					obj.find(options.prevBtn).removeClass(options.offClass);
					(index < total) ?(index++):(index = total);
					if(index == total){
						obj.find(options.nextBtn).addClass(options.offClass);	
					}
					break;
			}
			scrollAmount = options.scrollRate*index;
			if (scrollAmount != lastScroll) scrollDiv.animate({scrollLeft: scrollAmount},"fast");
			lastScroll = scrollAmount;
		}
	}
})(jQuery);  
/*------ END PHOTO SCROLL -----*/



