/**
 * Stizzer
 * @copyright Omines
 */
var Site = {
	start: function()
	{
		this.setupBrowser();
		this.externalLinks();
		this.setupFormHints();
		this.enhancements();
		
		if ($('#review-add'))
			ReviewForm.initialize();
		if ($('#comments'))
			CommentEdit.initialize();
		if ($('#searchform'))
			SearchForm.initialize();
		if ($('#startform') && $('#targettype-product'))
		{
			$('#startform .methodselect').hide().next('dd').hide();
			$('#targettype-provider').change(function(e){ if (e.target.checked == true) $('#startform .methodselect').show().next('dd').show(); });
			$('#targettype-product').change(function(e) { if (e.target.checked == true) $('#startform .methodselect').hide().next('dd').hide(); });
		}
	},
	setupBrowser: function()
	{
		switch ($.layout.name)
		{
			case 'gecko':
				$.include(staticDomain+'styles/additional-gecko.css');
				break;
			case 'webkit':
				$.include(staticDomain+'styles/additional-webkit.css');
				break;
		}
	},
	externalLinks: function()
	{
		$("a[rel*='external']").each(function(){ $(this).target = '_blank'; });
	},
	enhancements: function()
	{
		$('dl.datalist').after('<img src="'+staticDomain+'images/blank.gif" alt="" class="clear" />');
	},
	ieCompat: function()
	{
		$('#topmenu').wrap('<div class="iecompat-nav" />');
	},
	setupFormHints: function()
	{
		$('.defaultText').focus(function(srcc){el=$(srcc.currentTarget);if($(el).val()==$(el)[0].title){$(el).removeClass('defaultTextActive');$(el).val('');}});
		$('.defaultText').blur(function(srcc){el=$(srcc.currentTarget);if($(el).val()==''){$(el).addClass('defaultTextActive');$(el).val($(el)[0].title);}});
		$('.defaultText').each(function(index,el){if($(el).val()==$(el)[0].title)$(el).val('');});
		$('.defaultText').blur();
	}
};

var ReviewForm = {
	initialize: function()
	{
		$('#review-text-enlarge').click(function(){	$('#review-text').animate({height:'+=100'}, {duration:250});return false; });
		$('#review-text-shrink').click(function(){ if ($('#review-text').height() > 300) $('#review-text').animate({height:'-=100'}, 250); return false; });
		
		$('#review-add dl > .child').each(function(i,el){
			$(el).hide();
			$(el).prev('dd').find('.qanswer').each(function(x,qae){
				$(qae).change(function() { ReviewForm.toggleAnswer($(qae)); });
			});
		});
	},
	toggleAnswer: function(inputElement)
	{
		switch (inputElement.attr('type'))
		{
			case 'text':
				if (jQuery.trim(inputElement.val()) != '')
					ReviewForm.showChildQuestion(inputElement);
				else
					ReviewForm.hideChildQuestion(inputElement);
				break;
			case 'radio':
				if (inputElement.val() != '-1')
					ReviewForm.showChildQuestion(inputElement);
				else
					ReviewForm.hideChildQuestion(inputElement);
				break;
			default:
				console.log('No condition matched?');
				break;
		}
	},
	showChildQuestion: function(inputElement)
	{
		$(inputElement).parents('dd').next('dt.child').slideDown();
		$(inputElement).parents('dd').next('dt.child').next('dd').slideDown();
	},
	hideChildQuestion: function(inputElement)
	{
		$(inputElement).parents('dd').next('dt.child').next('dd').slideUp();
		$(inputElement).parents('dd').next('dt.child').slideUp();
		$(inputElement).parents('dd').next('dt.child').next('dd').find('input').each(function(i,e){
			if ($(e).attr('type') == 'text')
				$(e).value = '';
			else
				$(e).checked = false;
		});
	}
};

var CommentEdit = {
	initialize: function()
	{
		$('#comments div.comment').each(function(){
			$(this).find('div.commentheader div.commentoptions a').each(function(){
				if ($(this).hasClass('editcomment')) { $(this).click(function(){ CommentEdit.showEditForm($(this)); return false; }); }
				if ($(this).hasClass('trashcomment')) { $(this).click(function(){ CommentEdit.showTrashForm($(this)); return false; }); }
			});
		});
	},
	showEditForm: function(link)
	{
		comment		= $(link).parents('.comment');
		content		= $(comment).children('.commentcontent');
		form		= $('<form class="editcomment" method="post" action="/json'+$(link).attr('href')+'">');
		textarea	= $('<textarea name="comment-text" class="edit">').html($(content).text().trim());
		submitbtn	= $('<input type="submit" name="post" value="'+$('#comment-post').attr('value')+'" />');
		formmode	= $('<input type="hidden" name="mode" value="edit" /><input type="hidden" name="cid" value="'+$(comment).attr('id')+'" /><div class="hr"><hr></div>');
		$(comment).append($(form));
		$(form).append($(textarea)).append($(submitbtn)).append($(formmode)).show();
		$(form).submit(function(){ CommentEdit.handleEditSubmit($(form)); return false; });
		$(content).hide();
	},
	showTrashForm: function(link)
	{
		comment		= $(link).parents('.comment');
		content		= $(comment).children('.commentcontent');
		form		= $('<form class="editcomment" method="post" action="/json'+$(link).attr('href')+'">');
		textarea	= $('<textarea disabled="disabled" name="comment-text" class="edit">').html($(content).text().trim());
		submitbtn	= $('<input type="submit" name="post" value="'+$('#comment-post').attr('value')+'" />');
		formmode	= $('<input type="hidden" name="mode" value="delete" /><input type="hidden" name="cid" value="'+$(comment).attr('id')+'" /><div class="hr"><hr></div>');
		$(comment).append($(form));
		$(form).append($(textarea)).append($(submitbtn)).append($(formmode)).show();
		$(form).submit(function(){ CommentEdit.handleTrashSubmit($(form)); return false; });
		$(content).hide();
	},
	handleEditSubmit: function(form)
	{
		$.ajax({
			type: 'POST',
			url: $(form).attr('action'),
			data: $(form).serialize(),
			dataType: 'json',
			success: function(msg){
				$(form).parents('.comment').children('.commentcontent').html(msg.data).show();
				$(form).detach();
			},
			error: function(obj,msg,code){
				alert('Error:\n'+msg.error.message);
			}
		});
	},
	handleTrashSubmit: function(form)
	{
		$.ajax({
			type: 'POST',
			url: $(form).attr('action'),
			data: $(form).serialize(),
			dataType: 'json',
			success: function(msg){
				$(form).parents('.comment').detach();
			},
			error: function(obj,msg,code){
				alert('Error:\n'+msg.error.message);
			}
		});
	}
};

var SearchForm = {
	initialize: function()
	{
		$('#searchform a.toggle').each(function() {
			if ($(this).hasClass('collapsed'))
				$(this).siblings('dl').hide();
			$(this).click(function() {
				if ($(this).hasClass('display'))
					$(this).addClass('collapsed').removeClass('display').siblings('dl').slideUp();
				else
					$(this).addClass('display').removeClass('collapsed').siblings('dl').slideDown();
				return false;
			});
		});
	}
}

/**
 * Don't pay too much attention to the pseudo defines,
 * JS doesn't have better alternatives..
 */
var STR_PAD_LEFT	= 1;
var STR_PAD_RIGHT	= 2;
var STR_PAD_BOTH	= 3;
function str_pad(str, len, pad, dir)	{ Utils.pad(str, len, pad, dir); }
/**
 * Various logging aliasses
 */
function log(message)	{ Utils.log(0, message); }
function info(message)	{ Utils.log(1, message); }
function warn(message)	{ Utils.log(2, message); }
function error(message)	{ Utils.log(3, message); }

var Utils	= {
	pad: function(str, len, pad, dir)
	{
		if (typeof(str) != "string")	str	= str.toString();
		if (typeof(len) == "undefined")	var len	= 0;
		if (typeof(pad) == "undefined")	var pad	= ' ';
		if (typeof(dir) == "undefined")	var dir	= STR_PAD_RIGHT;
		if (len + 1 < str.length)		return str;
		switch (dir)
		{
			case STR_PAD_LEFT:
				str	= Array(len + 1 - str.length).join(pad) + str;
				break;
			case STR_PAD_BOTH:
				var right	= Math.ceil((padlen = len - str.length) / 2);
				str			= Array((padlen - right)+1).join(pad) + str + Array(right+1).join(pad);
				break;
			default:	// padding right
				str	= str + Array(len + 1 - str.length).join(pad);
				break;
		}
		return str;
	},
	timeconv: function(stamp)
	{
		// Convert to milliseconds, unless you want to end up in januari 1970
		stamp		= stamp.toInt() * 1000;
		var dateObj	= new Date(stamp);
		return dateObj.getHours()+':'+this.pad(dateObj.getMinutes(), 2, '0', STR_PAD_LEFT);
	},
	log: function(severity, message)
	{
		if (!window.console)
			return;
		switch (severity)
		{
			case 3:	console.error(message);	break;
			case 2:	console.warn(message);	break;
			case 1:	console.info(message);	break;
			case 0:	console.log(message);	break;
		}
	},
	passwordStrength: function(pwd, display)
	{
		var points=0;
		if((points=pwd.length)>1){
			var mix=0;
			if(/[a-z]/.test(pwd))mix++;
			if(/[A-Z]/.test(pwd))mix++;
			if(/\d/.test(pwd))mix++;
			if(/[^a-zA-Z0-9]/.test(pwd))mix++;
			points+=(mix-1)*3;
			var a={},i=pwd.length;
			while(i--) if(!a[pwd.charAt(i)]){points++;a[pwd.charAt(i)]=1;};points--;};
			
		var strength='zeer zwak', color='Gray';
		if(points>0) {strength='zeer zwak';color='Red';}
		if(points>5){strength='zwak';color='Red';}
		if(points>10){strength='redelijk';color='Yellow';}
		if(points>15){strength='vrij sterk';color='Lime';}
		if(points>20){strength='sterk';color='Green';}
		if(points>25){strength='supersterk';color='Green';}
		if(points>30){points=30;}
		
		var width = 300, widthRuler = Math.round((width/30)*points);
		width = width - widthRuler;
		$('#pwdstr-quality').text(strength);
		$('#pwdstr-ruler').removeClass('scoreGray scoreRed scoreYellow scoreLime scoreGreen').addClass('score'+color).css('width', widthRuler+'px');
		$('#pwdstr-rulerempty').css('width', width+'px');
	}
};

$(document).ready(function(){
	Site.start();
});

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-15797895-1']);
_gaq.push(['_trackPageview']);
(function() {
	var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
	ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
