/*
	Prikazuje obavjstenja korisnicima
	
	Da bi radili unutar html-a mora da postoji element sa ".sde_container" class-om
	Svaki box ima class "sde_box". U zavisnosti od toga da li je showDone ili errors ima i class "done" ili "error".
	
	Struktura jednog alerts boxa:
	
	<div class="sde_box">
		<span class="text"></span>
		<a href="#" class="link"></a>
		<a href="#" onclick="return alerts.closeBox(this);" class="close"></a>
	</div>
*/

alerts = 
{
	/* 
		Postavke za prikaz
	*/
	options: 
	{
		prependTo:'.sde_container',	// jQuery selektor za element u kojem ce biti prikazana obavjestenja
		onSuccRedirect:false,	// Ako je true i showDone obavjestenje postoji uradit ce redirect na list iz json objekta
		
		dontClearAll:false,
		
		box_html: '<a name="sde_top"></a><div class="sde_box"><span class="text"></span><a href="#" class="link"></a><a href="#" onclick="return alerts.closeBox(this);" class="close"></a></div>'
	},
	
	/*
		Prikazuje obavjestenja korisniku
	*/
	display:function(data, newOptions)
	{
		// Overvrite
		for (i in newOptions)
		{
			this.options[i] = newOptions[i];
		}
		
		// Brise sve postojece boxove po potrebi
		if (!this.options.dontClearAll)
		{
			this.clearAll();
		}
		
		// Prikazuje showDone box
		if (data.showDone && data.showDone.text)
		{			
			// Vrsi redirect
			if (this.options.onSuccRedirect)
			{
				window.location = this.options.onSuccRedirect+"#"+encodeURIComponent(serialize(data));
			}
			else // prikazuje box na trenutnoj stranici
			{
				this.addBox(data.showDone, 'done', 'Dalje');
			}
		}
		
		// Prikazuje errors box
		if (data.errors && data.errors.text)
		{
			this.addBox(data.errors, 'error', 'Nazad');
		}
	},
	
	/*
		Brise sve alert boxove sa ekrena
		
		!Public
	*/
	clearAll: function()
	{
		$(this.options.prependTo+' .sde_box').remove();
	},
	
	/*
		Dodaje box u DOM
		
		!Private
	*/
	addBox: function(vo, boxClass, linkText)
	{
		var box = $(this.options.box_html)
					.addClass(boxClass)
					.find('.text:first')
						.html(vo.text)
					.end();
						
		// Ubacuje link po potrebi
		if (vo.link)
		{
			$(box)
			.find('link')	
				.attr('href', vo.link)
				.html(linkText)
				.show()
			.end();
		}
		else
		{
			// Skriva link
			$(box)
			.find('link')	
				.hide()
			.end();
		}
		
		// Dodaje box na stranicu
		$(box).prependTo(this.options.prependTo);
	}
};


$(document).ready(function() {
	if (location.hash)
	{
		var hash = location.hash.substr(1, location.hash.length-1);
		var sde = unserialize(decodeURIComponent(hash));
		alerts.display(sde);
		location.hash = '';
	}
});