// Gallery Code

$(function(){

var animSpeed = 200;

var gFormHeight = null;
function formHeight() {
	if(gFormHeight == null)
	{
		var $mini = $('#minisubmit');
		if($mini.length == 0)
		{
			$mini = addMiniSubmit();
		}
		var $fo = $('#fancy_outer');
		var fo_old = $fo.css('display');
		var ms_old = $mini.css('display');

		// Ensure we can get a height
		$fo.css({visibility:'hidden',display:'block'});
		$mini.css({visibility:'hidden',display:'block'});

		// Get it
		gFormHeight = $mini.height();

		// Reset it
		$fo.css({visibility:'',display:fo_old});
		$mini.css({visibility:'',display:ms_old});
	}
	return gFormHeight;
}

function makeField(id,name,label) {
	return '<div class="field">'
		+		'<label for="' + id + '">' + label + '</label>'
		+		'<input type="text" id="' + id + '" name="' + name + '" />'
		+	'</div>'
		;
}

function addMiniSubmit() {
	var form = $('<div id="minisubmit">'
	+ '<form action="/gallery-submit.html" method="post" id="minisubmitform">'
	+ '<div class="hidden">'
	+ '<input type="hidden" name="response_form" value="GALLERY FORM" />'
	+ '</div>'
	+ '<fieldset><legend>Request a Free Estimate!</legend>'
	+ makeField('gal_name','name','Name:')
	+ makeField('gal_phone','phone','Phone:')
	+ makeField('gal_email','email','Email:')
	+ makeField('gal_zip','zip','Zip:')
	+ '<div class="field submit"><input type="submit" value="Request Estimate" /></div>'
	+ '</fieldset>'
	+ '</form>'
	+ '</div>'
	);	
	var zind = $("#fancy_img").css("z-index");
	if(typeof zind == 'undefined')
		zind = '0';
	form.css("zIndex",parseInt(zind)+100);
	form.hide();
	form.find(":submit").bind("click",submitMiniForm);
	
	return form.insertAfter("#fancy_content");
}

function require(expr,valid) {
	var obj = $(expr,$("#minisubmit"));
	var v = $.trim(obj.val());
	if(v != "" && (!valid || valid(v))) {
		return v;
	} else {
		$(expr).css({backgroundColor:"#ffa8a8"}).bind("focus",function(){
			$(expr).css({backgroundColor:null});
		});
		return false;
	}
}

// Basic
function validEmail(v){
	return v.match(/\./) && v.match(/@/);
}

function submitMiniForm(e) {
	e.preventDefault();
	e.stopPropagation();
	var name = require("#gal_name");
	var phone = require("#gal_phone");
	var email = require("#gal_email",validEmail);
	var zip = require('#gal_zip');
	
	if(name && (phone || email)) {
		$(this).attr("disabled",true).val("Please wait...");
		var data = {};
		$('#minisubmitform input').each(function(){
			data[$(this).attr('name')] = $(this).val();
		});
		if(typeof gaID != 'undefined') {
			try {
				var pageTracker = _gat._getTracker(gaID);
				pageTracker._trackPageview(gaPath);
			}catch(err){}
		}
		$.post(
			$("#minisubmitform")[0].action,
			data,
			showThanks,
			"html"
		);
	}
}

function showThanks(data,textStatus) {
	if(textStatus == "success") {
		miniFormSubmitted = true;
		var h = $("#minisubmit").height();
		$("#minisubmit").fadeOut(animSpeed,function(){
			var response = $('<div id="mini_response">' + data + '</div>');
			var fHeight = $("#minisubmit").empty().css({visibility:'hidden'}).show().append(response).height();
			$("#fancy_outer").animate({height:"-="+(h-fHeight)+"px",top:"+="+((h-fHeight)/2)+"px"},animSpeed,function(){
				$("#minisubmit").hide().css("visibility","visible").fadeIn(animSpeed);
			});
		});
	} else {
		$(":submit",$("#minisubmit")).removeAttr("disabled").val("Submit");		
	}
}

function fadeOutMini() {
	$("#minisubmit").fadeOut(animSpeed,function(){
		if(miniFormSubmitted)
			$("#minisubmit").remove();
			$("#fancy_left, #fancy_right").css({height:"100%",top:null,bottom:"0"});
	});
}

function showMini() {
	if(miniFormSubmitted) return;
	var ms = $("#minisubmit");
	if(ms.length == 0){
		ms = addMiniSubmit();
	}
	ms.hide();
	var fHeight = formHeight();
	var animOpts = {top:"-="+(fHeight/2),height:"+="+fHeight};
	$("#fancy_img").css("height","auto");
	$("#fancy_left, #fancy_right").css({height:$("#fancy_outer").height()+"px",top:"0",bottom:"auto"});
	$("#fancy_outer").animate(animOpts,animSpeed,'easeInOutQuint',function(){ms.fadeIn(animSpeed)});
}

function removeFilter()
{
	$("*[style]").each(function(i){
		$(this).attr("style",$(this).attr("style").replace(/\bfilter\s*\:\s*;\s*/i,""));
	});
}

function getSize(w,h,pad) {
	if(miniFormSubmitted) return [w-pad,h-pad,pad];
	var vp = $.fn.fancybox.getViewport();
	var newh = Math.min(h,(vp[1]-72-pad*4)-(formHeight()));	
	var r = newh/h;	
	return [Math.round(r*w),newh,pad];
}

function wrap(fn){return function(){fn();}}
var original_close = wrap($.fn.fancybox.close);
$.fn.fancybox.close = function(){
	$("#minisubmit").hide();
	setTimeout(original_close,0);
}

$("div.img a[rel=gallery]").fancybox({
	zoomSpeedIn: animSpeed, 
	zoomSpeedOut: animSpeed, 
	zoomChangeSpeed:animSpeed,
	overlayShow: true,
	overlayOpacity: 0.65,
	zoomOpacity:true,
	easingIn:'easeOutQuint',
	easingOut:'easeInQuint',
	easingChange:'easeInOutQuint',
	callbackOnShow:showMini,
	callbackGetSize:getSize,
	callbackOnChange:fadeOutMini,
	hideOnContentClick:false
});

});
