/**
 * 
 * http://littlequiz.com/scripts/littlequiz.js
 * 
 * @copyright Ambient Age, 2009 (http://www.ambientage.com)
 * @author  @davkell (http://www.davidkelly.ie)
 * 
 * @version 1.2
 */


$(document).ready(function(){


	/** Scrollable homepage visual effects
	 * For graceful degradation of slider
	 */
	$('div#quiz-content').css({position: 'relative', overflow: 'hidden', width: '900px', minHeight: '320px', clear: 'both'});
	$('div#quiz-content form#quiz-answers').css({width: '20000em', position: 'absolute'});
	$('div#quiz-content form#quiz-answers div.quiz-content-panel').css({'float': 'left', width: '900px'});
	
 	/** -- Visual Behaviours -- */
	
	// top of sidebar link (make click area bigger)
	$('#blog-logo').mouseover(function(){
		$(this).css({cursor: 'pointer'}).attr('title', 'Go to the LittleQuiz Blog');
	});
	$('#blog-logo').click(function(){
		window.location = $(this).find('a').attr('href');
	});
		
	/** -- Pretty up a table  -- */
	$(".stripeMe tr").mouseover(function(){
		if (!$(this).hasClass('no-hover')) {
			$(this).addClass("over");
		}
		$(this).css({cursor: 'pointer'})
		})
			.mouseout(function(){$(this).removeClass("over");
	});
    $(".stripeMe tr:even").addClass("alt");
	$('.stripeMe tr').each(function(){
		if($(this).hasClass('no-hover')){
			$(this).removeClass('alt');
		}
	});
	$('.stripeMe tr').click(function(){
		$(this).find('td input[type="radio"]').attr('checked', 'checked');
	});
 
/**  
 * 	Have external links open in new window  
 *	(JS to keep some standards compliance...)
 */
	$('a[rel="external"]').click(function(){
		$(this).attr('target', '_blank');
	});
 
 
 
/* Forms, forms forms. */

// Homepage Quiz
	$('#quiz-answers').submit(function(){
		var err = false;
		if (!$('#quiz-answers input:radio[name=q-0]').is(':checked')) {
			err = true;
		}
		if (!$('#quiz-answers input:radio[name=q-1]').is(':checked')) {
			err = true;
		}
		if (!$('#quiz-answers input:radio[name=q-2]').is(':checked')) {
			err = true;
		}
		
		if(err == true){
			$('#quiz-submit').before('<p class="form-error">Please answer all questions first</p>');
			return false;
		}
		else{
			return true;
		}
		
	});

// Make email subscription forms even better
	$('form#sub #email').val('Email Address...').focus(function(){$(this).val('')});
	
// Login Form
	$('form#login-form').submit(function(){
		var em = $('#login-form #em_login').val();
		var pw = $('#login-form #pw_login').val();
		
		if (!validEmail(em)) {
			formErrorFeedback('Oops, that email looks incorrect', '#login-form #em_login');
			return false;
		}
		else if (pw == '') {
			formErrorFeedback('Please fill in your password!', '#login-form #pw_login');
			return false;
		} 
		return true;	
	});

// Registration Form
	$('form#registration-form').submit(function(){
		var pw = $('#registration-form #pw').val();
		var confPw = $('#registration-form #confpw').val()
		var validateEmail = $('#em').val();
		
		if($('#registration-form #fn').val() == ''){
			formErrorFeedback('Please fill in your first name', '#registration-form #fn');
			return false;
		}
		else if($('#registration-form #ln').val() == ''){
			formErrorFeedback('Please fill in your last name', '#registration-form #ln');
			return false;
		}	
		else if(!validEmail(validateEmail)){
			formErrorFeedback('Oops, that email looks incorrect', '#registration-form #em');
			return false;
		}
		else if(pw == ''){
			formErrorFeedback('Please enter a password', '#registration-form #pw');
			return false;
		}
		else if(pw.length < 6){
			formErrorFeedback('Your password should be at least 6 characters long', '#registration-form #pw');
			return false;			
		}
		else if(pw != confPw){
			$('#registration-form #pw').val('').focus();
			$('#registration-form #confpw').val('');
			formErrorFeedback('The two passwords you entered are not the same', '#registration-form #pw');
			return false;
		}			
		else if($('#registration-form #terms').is(':checked') == false){
			formErrorFeedback('We\'re sorry, you must be 18 years or older and accept the terms &amp; conditions to use this site', '#registration-form #terms');
			return false;
		}			
		return true;
	});	
	
// CM Email Submission form
	$('#sub').submit(function(){
		$('.form-error').remove();
		if(!validEmail($('#sub #email').val())){
			formErrorFeedback('Oops, that email looks incorrect', '#sub input[type="submit"]');
			return false;
		}
		else{
			var url = $(this).attr('action');
			var sub = {};
			sub.email = $(this).find('#email').val();
			
			$.post(
				url,
				sub,
				function(data){
					data = json_parse(data);
					if(data.status == 'ok'){
						$('#sub').append('<div class="form-success">Thanks for subscribing!</div>');
						$('div.form-success').fadeOut(6000);
					}
					else{
						$('#sub').append('<div class="form-error">' + data.msg + '</div>');
					}
				},
				"json"
			);
		}
//		return true;
		$('#sub #email').val('');
		return false;
		
	});
	
}); // document.ready


	function formErrorFeedback(msg, location){
		$('.form-error').remove();
		$(location).after('<div class="form-error">' + msg + '</div>');
		return;
	}
	
/** check if email looks ok before sending it off */	
	function validEmail( em ){
		
		if(em == '' || em.indexOf('@') == -1 || em.indexOf('.') == -1 || em.indexOf('@') != em.lastIndexOf('@')){
			return false;
		}
		else{
			return true;
		}
	}
	
/**
 *	TABS
 *	---------------------------------------------------------------------------
 *	Copyright (c) 2008 Dan Peverill
 *	http://www.danpeverill.com
 *
 *	LICENSE
 *	---------------------------------------------------------------------------
 *	The MIT License
 *	http://www.opensource.org/licenses/mit-license.php
 *
 *  Blog sidebar tab section (based on Compisito Theme (http://designdisease.com)
 */

var Tabs = {
	className: "tabs",
	activeClass: "active",
	
	addLoadEvent: function(event) {
		var oldLoad = window.onload;
		
		window.onload = function() {
			event();
			if (oldLoad) oldLoad();
		}
	},
	
	create: function(tabs, callbacks) {
		if (!tabs.length)
			this.createSingle(tabs, callbacks);
		else
			this.createGroup(tabs, callbacks);
	},
	
	createSingle: function(tab, callbacks) {
		if (this.Element.hasClass(tab, this.activeClass))
			this.Element.show(this.getTarget(tab));
	
		this.Element.addClickEvent(tab, function(e) {
			if (!Tabs._callback(this, callbacks, "click", e))
				return false;	// Cancel event.
			
			Tabs.Element.toggleClass(this, Tabs.activeClass);
			
			if (!Tabs._callback(this, callbacks, "show", e))
				return false;	// Callback handled visibility change.
			
			Tabs.Element.toggleVisibility(Tabs.getTarget(this));
		});
	},
	
	createGroup: function(tabs, callbacks) {
		var active;
		
		for (var i = 0; i < tabs.length; i++) {
			var tab = tabs[i];
			if (this.Element.hasClass(tab, this.activeClass)) {
				active = tab;
				this.Element.addClass(tab);
				this.Element.show(this.getTarget(tab));
			}
			else {
				this.Element.hide(this.getTarget(tab));
			}

			Tabs.Element.addClickEvent(tab, function(e) {
				if (!Tabs._callback(this, callbacks, "click", e, active))
					return false;	// Cancel event.
					
				Tabs.Element.removeClass(active, Tabs.activeClass);
				Tabs.Element.addClass(this, Tabs.activeClass);
				
				var from = active;
				active = this;
				
				if (!Tabs._callback(this, callbacks, "show", e, from))
					return false;	// Callback handled visibility change.
				
				Tabs.Element.hide(Tabs.getTarget(from));
				Tabs.Element.show(Tabs.getTarget(this));
			});
		}
		
		if (!active) {
			var tab = tabs[0];
			active = tab;
			
			this.Element.addClass(tab, this.activeClass);
			this.Element.show(this.getTarget(tab));
		}
	},
	
	_callback: function(element, callbacks, type, e, active) {
		if (callbacks && callbacks[type] && callbacks[type].call(element, e, active) === false)
			return false;
		
		return true;
	},
	
	getTarget: function(tab) {
		var match = /#(.*)$/.exec(tab.href);
		var target;
		
		if (match && (target = document.getElementById(match[1])))
			return target;
	},
	
	getElementsByClassName: function(className, tag) {
		var elements = document.getElementsByTagName(tag || "*");
		var list = new Array();
		
		for (var i = 0; i < elements.length; i++) {
			if (this.Element.hasClass(elements[i], this.className))
				list.push(elements[i]);
		}
		
		return list;
	}
};

Tabs.Element = {
	addClickEvent: function(element, callback) {
		var oldClick = element.onclick;
		
		element.onclick = function(e) {
			callback.call(this, e);
			if (oldClick) oldClick.call(this, e);	// Play nice with others.
			
			return false;
		}
	},
	
	addClass: function(element, className) {
		element.className += (element.className ? " " : "") + className;
	},
	
	removeClass: function(element, className) {
		element.className = element.className.replace(new RegExp("(^|\\s)" + className + "(\\s|$)"), "$1");
		if (element.className == " ")
			element.className = "";
	},

	hasClass: function(element, className) {
		return element.className && (new RegExp("(^|\\s)" + className + "(\\s|$)")).test(element.className);
	},
	
	toggleClass: function(element, className) {
		if (this.hasClass(element, className))
			this.removeClass(element, className);
		else
			this.addClass(element, className);
	},
	
	getStyle: function(element, property) {
		if (element.style[property]) return element.style[property];
		
		if (element.currentStyle)	// IE.
			return element.currentStyle[property];
			
		property = property.replace(/([A-Z])/g, "-$1").toLowerCase();	// Turns propertyName into property-name.
		var style = document.defaultView.getComputedStyle(element, "");
		if (style)
			return style.getPropertyValue(property);
	},
	
	show: function(element) {
		element.style.display = "";
		if (this.getStyle(element, "display") == "none")
			element.style.display = "block";
	},
	
	hide: function(element) {
		element.style.display = "none";
	},
	
	isVisible: function(element) {
		return this.getStyle(element, "display") != "none";
	},
	
	toggleVisibility: function(element) {
		if (this.isVisible(element))
			this.hide(element);
		else
			this.show(element);
	}
};

Tabs.addLoadEvent(function() {
	var elements = Tabs.getElementsByClassName(Tabs.className);
	for (var i = 0; i < elements.length; i++) {
		var element = elements[i];
			
		if (element.tagName == "A") {
			Tabs.create(element);
		}
		else {	// Group
			var tabs = element.getElementsByTagName("a");
			var group = new Array();
				
			for (var t = 0; t < tabs.length; t++) {
				if (Tabs.getTarget(tabs[t]))
					group.push(tabs[t]);	// Only group actual tab links.
			}

			if (group.length) Tabs.create(group);
		}
	}
});





/*
  http://www.JSON.org/json_parse.js
    2008-04-08    Public Domain.

    This code should be minified before deployment.
    See http://javascript.crockford.com/jsmin.html

*/
json_parse=function(){var at,ch,escapee={'"':'"','\\':'\\','/':'/',b:'\b',f:'\f',n:'\n',r:'\r',t:'\t'},text,error=function(m){throw{name:'SyntaxError',message:m,at:at,text:text};},next=function(c){if(c&&c!==ch){error("Expected '"+c+"' instead of '"+ch+"'");}
ch=text.charAt(at);at+=1;return ch;},number=function(){var number,string='';if(ch==='-'){string='-';next('-');}
while(ch>='0'&&ch<='9'){string+=ch;next();}
if(ch==='.'){string+='.';while(next()&&ch>='0'&&ch<='9'){string+=ch;}}
if(ch==='e'||ch==='E'){string+=ch;next();if(ch==='-'||ch==='+'){string+=ch;next();}
while(ch>='0'&&ch<='9'){string+=ch;next();}}
number=+string;if(isNaN(number)){error("Bad number");}else{return number;}},string=function(){var hex,i,string='',uffff;if(ch==='"'){while(next()){if(ch==='"'){next();return string;}else if(ch==='\\'){next();if(ch==='u'){uffff=0;for(i=0;i<4;i+=1){hex=parseInt(next(),16);if(!isFinite(hex)){break;}
uffff=uffff*16+hex;}
string+=String.fromCharCode(uffff);}else if(typeof escapee[ch]==='string'){string+=escapee[ch];}else{break;}}else{string+=ch;}}}
error("Bad string");},white=function(){while(ch&&ch<=' '){next();}},word=function(){switch(ch){case't':next('t');next('r');next('u');next('e');return true;case'f':next('f');next('a');next('l');next('s');next('e');return false;case'n':next('n');next('u');next('l');next('l');return null;}
error("Unexpected '"+ch+"'");},value,array=function(){var array=[];if(ch==='['){next('[');white();if(ch===']'){next(']');return array;}
while(ch){array.push(value());white();if(ch===']'){next(']');return array;}
next(',');white();}}
error("Bad array");},object=function(){var key,object={};if(ch==='{'){next('{');white();if(ch==='}'){next('}');return object;}
while(ch){key=string();white();next(':');object[key]=value();white();if(ch==='}'){next('}');return object;}
next(',');white();}}
error("Bad object");};value=function(){white();switch(ch){case'{':return object();case'[':return array();case'"':return string();case'-':return number();default:return ch>='0'&&ch<='9'?number():word();}};return function(source,reviver){var result;text=source;at=0;ch=' ';result=value();white();if(ch){error("Syntax error");}
return typeof reviver==='function'?function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}({'':result},''):result;};}();