/*
 *	Author:	  Petro Salema
 *	Contact:  petro@petrosalema.com
 *	Client:   Sarah Udoh-Grossfurthner
 *
 *	REQUIRED: http://www.petrosalmea.com/assets/petrofied.js  <--- !!!
 *		  http://www.petrosalmea.com/assets/ajax.js	  <--- !!!
 *
 ****************************************************************************/


var form_div = null;
var current_id = null;
var current_canvas = null;


function viewTab(tab)
{
	var tabs = Util.getElementsByClassName('bookinfo_tabs', document)[0];

	var old_link = Util.getElementsByClassName('current', tabs, 'a')[0];
	old_link.className = old_link.className.replace(' current', "");

	Util.getElementsByClassName(tab, tabs, 'a')[0].className += " current";

	var t = Util.getElementsByClassName('bookinfo_text', tabs);
	for(var i=0, j=t.length; i<j; i++)
	{
		var b = t[i];
		b.style.display = 'none';
		if(b.className == 'bookinfo_text ' + tab)
		{
			b.style.display = "block";
			current_canvas = b;
		}
	}

	current_id = document.getElementById('book_id').value;

	switch(tab)
	{
		case 'preview': loadPreview(current_id); break;
		case 'reviews': loadReviews(current_id); break;
	}
}


function loadPreview(id)
{
	Ajax.Request("scripts/fetch_preview.php?id=" + id, showPreview);
}


var preview_frame = null;
var preview_images = new Array();
var preview_length = 0;
var preview_current = 0;
var preview_image = new Image();
var preview_img_prev = new Image();
var preview_img_next = new Image();

function showPreview(payload)
{
	if(payload == "")
	{
		current_canvas.innerHTML = "No preview is available for this book.";
		return;
	}

	current_canvas.innerHTML = ""
		+ "<div class='preview_frame'>"
		+	"<a class='preview_arrow preview_arr_l' href='javascript:flipPage(-1)'>&laquo;</a>"
		+		"<div class='preview_pageframe'>"
		+		"</div>"
		+	"<a class='preview_arrow preview_arr_r' href='javascript:flipPage(1)'>&raquo;</a>"
		+ 	"<div class='clear'></div>"
		+ "</div>";

	preview_frame = Util.getElementsByClassName('preview_pageframe', current_canvas)[0];

	preview_images = payload.split(',');

	preview_length = preview_images.length - 1;

	preview_image.setAttribute('alt', 'Book preview page');

	preview_frame.appendChild(preview_image);

	flipPage(0);
}


function flipPage(direction)
{
	var c = preview_current;
	var l = preview_length;


	c = (c == 0 && direction < 0)
		? l
		: (c == l && direction > 0)
			? 0
			: c + direction;


	var p = (c == 0) ? l : c - 1;
	var n = (c == l) ? 0 : c + 1;

	var pi = preview_images;

	preview_img_prev.src = pi[p];
	preview_img_next.src = pi[n];

	preview_image.src = pi[c];

	preview_current = c;
}


function loadReviews(id)
{
	Ajax.Request('scripts/fetch_reviews.php?id=' + id, showReviews);
}


function showReviews(payload)
{
	if(payload == "")
	{
		current_canvas.innerHTML = "There are no reviews for this book.";
		return;
	}

	current_canvas.innerHTML = payload;
}


function showReviewForm()
{
	var form_div = document.getElementById('form_area');
	var f = form_div.getElementsByTagName('form')[0];

	form_div.className = 'visible';
	document.getElementById('error_msg').style.display = 'none';
	document.getElementById('feedback_msg').style.display = 'none';

	f.reset();
	Validator.reset([[f.name],[f.email],[f.message]]);

	window.scroll(0, Util.globalOffset(f).t - 8);
}


function submitForm(form_name, form_action)
{
	if(!form_name && !form_action) return;

	var form = document.getElementById(form_name);

	// Make input safe
	form.name.value = form.name.value.strip().stripTags();
	form.message.value = form.message.value.strip().stripTags();

	// Validate form
	var form_elements = new Array(
		[form.name, '', true, "Please include your name"],
		[form.email, /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i, false, "Please provide a valid email address"],
		[form.message,  '', true, "Please write something in the comment box"]
	);

	Validator.reset(form_elements);
	var noErrors = Validator.validate(form_elements);

	var error = "1px #f45 solid";

	if(!noErrors)
	{
		document.getElementById('feedback_msg').style.display = "none";
		document.getElementById('error_msg').style.display = "block";
		document.location = '#review_form';
	}
	else
	{
		Ajax.Request(
			"scripts/" + form_action + ".php?id=" + form.book.value
				+ "&name=" + form.name.value
				+ "&email=" + form.email.value
				+ "&message=" + form.message.value
				+ (form.book ? ("&book=" + form.book.value) : ""),
			printFeedbackMsg
		);

		printFeedbackMsg("Sending... Please wait.");

		form.reset();
	}

	return false;
}


function printFeedbackMsg(msg)
{
	var d = document.getElementById('feedback_msg');
	d.innerHTML = msg;
	d.style.display = 'block';
}


var Validator = {

	reset : function(elements)
	{
		var e = elements;

		for(var i=0; i<e.length; i++)
		{
			if(e[i][0].value.indexOf(' ') > -1) { e[i][0].value = e[i][0].value.replace(/^\s+|\s+$/g, ''); }
			e[i][0].style.border = '1px #695F4A solid';
		}

		var error_box = document.getElementById('error_msg');
		error_box.style.display = 'none';
		error_box.innerHTML = '';
	},

	validate : function(elements)
	{
		var noErrors = true;
		var e = elements;

		for(var i=0; i<e.length; i++)
		{
			if(!Validator.test(e[i][0], e[i][1], e[i][2], e[i][3]))
			{
				var noErrors = false;
			}
		}

		return noErrors;
	},

	test : function(element, test, flag, msg)
	{
		var error_box = document.getElementById('error_msg');

		var result = false;

		if(typeof(test) == 'string')
		{
			if(element.value == test) { result = true; }
		}
		else
		{
			result = test.test(element.value);
		}

		if(result == flag)
		{
			element.style.border = '1px #f45 solid';

			error_box.innerHTML += '&nbsp;&#8226;&nbsp;' + msg + '<br />';

			return false;
		}

		return true;
	}

}