$(document).ready(function()
{
	selects_init();
	stadgreidslukort_init();
	popup_init();
	login_init();
	help_init();

	// Staðgreiðslukort - umsóknir - Bensín Díesel
	$('#diesel_gasoline').click(function() {
		if (this.checked == true)
			$('#gasoline, #diesel').each(function() { this.checked = true }).parent().hide();
		else
			$('#gasoline, #diesel').each(function() { this.checked = false }).parent().show();
	});

	$.tablesorter.addParser({ 
		id: 'is-date',
		is: function(s)
		{
			/*
				var r = new RegExp(/[0-9]{2}\.[0-9]{2}\.[0-9]{2,4}/);
				var m = s.match(r);
	
				return m != null;
			*/
			return /^\d{2}\.\d{2}\.(\d{2}|\d{4})$/.test( s );
		},
		format: function(s)
		{
			var year = s.substring(s.lastIndexOf('.')+1, s.length+1);
			var month = s.substring(s.indexOf('.')+1, s.lastIndexOf('.'));
			var day = s.substring(0, s.indexOf('.'));

			return year + month + day;
		},
		type: 'text'
	});

	$("table.sortable").tablesorter({
		widgets: ['zebra'],
		textExtraction:'complex',
		decimal:','
       	});
	if($.datepicker)
	{
		/* Icelandic initialisation for the jQuery UI date picker plugin. */
		/* Written by Haukur H. Thorsson (haukur@eskill.is). */
		$.datepicker.regional['is'] = {clearText: 'Hreinsa', clearStatus: '',
			closeText: 'Loka', closeStatus: '',
			prevText: '< Fyrri', prevStatus: '',
			nextText: 'N&aelig;sti >', nextStatus: '',
			currentText: '&Iacute; dag', currentStatus: '',
			monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
			'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
			monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
			'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
			monthStatus: '', yearStatus: '',
			weekHeader: 'Vika', weekStatus: '',
			dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
			dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
			dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
			dayStatus: 'DD', dateStatus: 'D, M d',
			dateFormat: 'dd/mm/yy', firstDay: 0, 
			initStatus: '', isRTL: false, minDate : new Date(2008, 0, 1) };
		$.datepicker.setDefaults($.datepicker.regional['is']);

		$(".datepicker").datepicker($.extend({},
			$.datepicker.regional["is"],
			{ 
				showAnim: "slideDown",
				dateFormat: "d.m.yy"
			}
		));
	}		
});

function help_init()
{
	jQuery('span.help').hover(
		function(e)
		{
			this.temp = this.title;
			this.title = "";
		
			function r(str, replace)
			{
				for(var r in replace)
				{
					str = str.replace(new RegExp(r, "g"), replace[r]);
				}

				return str;
			}

			var replace =
			{
				"\r" : "\n",
				"\t" : "",
				"\n\n" : "\n",
				"\n" : "<br/>"
			}
			var text = r(this.temp, replace);

			jQuery('body').append('<span class="tooltip">' + text + '</span>');
			jQuery('span.tooltip').css('top', (e.pageY + 10) + "px").css('left', (e.pageX - 115) + "px");
		},
		function()
		{
			this.title = this.temp;
			jQuery('span.tooltip').remove();
		}
	);
}

function login_init()
{
	var login = document.getElementById('LoginEMail');

	if(login)
		login.focus();
}

function popup_init()
{	
	jQuery('a.slip-link').click(function()
	{
		window.open(this.href, "Strimill", "status=0,toolbar=0,menubar=1,location=1,scrollbars=1,height=400,width=450");
		return false;
	});

	jQuery('a.invoice-link').click(function()
	{
		window.open(this.href, "Reikningur", "status=0,toolbar=0,menubar=1,location=1,scrollbars=1,height=800,width=950");
		return false;
	});
}

function stadgreidslukort_init()
{
	var payment = jQuery("input[name = 'paymenttype']");

	if(payment.length == 0) return;

	var update_ui = function()
	{
		payment.each(function()
		{
			if(this.checked)
			{
				jQuery("div." + this.value).removeClass("hidden");
			}
			else
			{
				jQuery("div." + this.value).addClass("hidden");
			}
		});
	}

	payment.bind("click", function()
	{
		update_ui();
	});

	update_ui();
}

function selects_init()
{
	Selects.add(
	{
		"source" : document.getElementById("all_cards"),
		"target" : document.getElementById("selected_cards"),
		"add" : document.getElementById("add_card"),
		"remove" : document.getElementById("remove_card")
	});
	Selects.add(
	{
		"source" : document.getElementById("all_groups"),
		"target" : document.getElementById("selected_groups"),
		"add" : document.getElementById("add_group"),
		"remove" : document.getElementById("remove_group")
	});

	Selects.form(document.getElementById("user_edit"), document.getElementById("user_create"));
}

var Selects = (function()
{
	function selectAll(select)
	{
		if(!select) return;
	
		select.multiple = true;
	
		for(var i = 0, n = select.length; i<n; i++)
		{
			select.options[i].selected = true;
		}
	}

	function append(select, text, value)
	{
		var item = document.createElement("option");
		item.text = text;
		item.value = value;
		
		try
		{
			select.add(item, null);
		}
		catch(ex)
		{
			select.add(item);
		}
	}

	function update(source, target)
	{
		addDblClickHandler(target, source);
		addDblClickHandler(source, target);
	}

	function addDblClickHandler(source, target)
	{
		if(!source || !target) return;

		source.ondblclick = function()
		{
			var item = this.options[this.selectedIndex];
			source.remove(item.index);
			append(target, item.text, item.value);
			update(source, target);
		}

		/*for(var i = 0, n = source.length; i<n; i++)
		{
			source.options[i].ondblclick = function()
			{
				var item = this;

			}
		}*/
	}

	function removeAppend(removee, appendee)
	{
		for(var i = 0, n = removee.length; i<n; i++)
		{
			if(removee.options[i] && removee.options[i].selected)
			{
				var found = removee.options[i];
				removee.remove(i);
				append(appendee, found.text, found.value);
			}
		}
		update(removee, appendee);
	}

	function create(source, target, add, remove)
	{
		addDblClickHandler(target, source);
		addDblClickHandler(source, target);

		remove.onclick = function() { removeAppend(target, source) };
		add.onclick = function() { removeAppend(source, target) };
	}

	var selects = [];
	function add(obj)
	{
		selects.push(obj);
	}

	function setForm(form)
	{
		if(!form) return; 
		form.onsubmit = function()
		{
			for(var i = 0, n = selects.length; i<n; i++)
			{
				selectAll(selects[i]);
			}
		}
	}

	return {
		add: function(params)
		{
			if(!"source" in params || !params.source) return;
			if(!"target" in params || !params.target) return;
			if(!"add" in params || !params.add) return;
			if(!"remove" in params || !params.remove) return;
		
			create(params.source, params.target, params.add, params.remove);
			add(params.target);		
		},

		form: function(obj)
		{
			for(var i = 0, n = arguments.length; i<n; i++)
				setForm(arguments[i]);
		}
	}
})();

function ShowRows(count)
{
	for(var i = 1; i <= 20; i++)
	{
		document.getElementById('row_' + i).style.display = 'none';
	}        

	for(var i = 1; i <= count; i++)
	{
		document.getElementById('row_' + i).style.display = '';
	}    
}
    
function ToggleCCInfo(disabled)
{
	document.getElementById('creditnumber').disabled = (disabled);
	document.getElementById('creditexpirymonth').disabled = (disabled);
	document.getElementById('creditexpiryyear').disabled = (disabled);
	document.getElementById('credittype_visa').disabled = (disabled);
	document.getElementById('credittype_mc').disabled = (disabled);
}
