/*  default_layout.js - v0.6.1h */


var loverlay =
{
	browser_is_IE: false,
	IE_version: 0,
	top_scroll_offset: 0,
	left_scroll_offset: 0,
	use_titlebar: true,
	default_title: 'Message',
	on_success: null,
	overlay_select_ids: null,


	url: function(url, title, content_class, window_class, hide_titlebar_close)
	{
		if (! title)
		{
			title = loverlay.default_title;
		}

		if (! content_class)
		{
			content_class = 'loverlay_default_content';
		}

		if (! window_class)
		{
			window_class = 'loverlay_default_window';
		}

		var options =
		{
			method:'get',

			onSuccess: function(transport, json)
			{
				var content = transport.responseText ? transport.responseText : 'no response text';

				loverlay.display(content, title, content_class, window_class, hide_titlebar_close);
				loverlay.call_on_success(transport, json);
			},

			onFailure: function()
			{
				alert('Something went wrong...');
			}
		};

		new Ajax.Request(url, options);
	},


	display: function(content, title, content_class, window_class, hide_titlebar_close)
	{
		loverlay.initialize();

		if (! title)
		{
			title = loverlay.default_title;
		}

		if (! content_class)
		{
			content_class = 'loverlay_default_content';
		}

		if (! window_class)
		{
			window_class = 'loverlay_default_window';
		}

		$('loverlay_content').update(content);

		$('loverlay_window').className = '';
		$('loverlay_content').className = '';

		$('loverlay_window').addClassName(window_class);
		$('loverlay_content').addClassName(content_class);

		if (loverlay.use_titlebar)
		{
			loverlay.set_title(title);
		}

		loverlay.activate();
	},


	load: function(url, width, height)
	{
		loverlay.activate(width, height);

		new Ajax.Updater('loverlay_window', url);
	},


	detect_browser: function()
	{
		var user_agent = navigator.userAgent.toLowerCase();

		if (user_agent.indexOf('msie') == -1)
		{
			return;
		}

		loverlay.browser_is_IE = true;

		//test for MSIE x.x;
		if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
		{
			// capture x.x portion and store as a number
			loverlay.IE_version = new Number(RegExp.$1);
		}
	},


	initialize: function()
	{
		if (! $('loverlay_background'))
		{
			loverlay.create_elements();
		}

		if (loverlay.use_titlebar)
		{
			$('loverlay_titlebar').show();
		}
		else
		{
			$('loverlay_titlebar').hide();
		}
	},


	create_elements: function()
	{
		loverlay.detect_browser();

		var body = $$('body').first();

		var loverlay_background = new Element('div', { 'id': 'loverlay_background'});
		var loverlay_window = new Element('div', { 'id': 'loverlay_window' });
		var loverlay_content = new Element('div', { 'id': 'loverlay_content' });

		body.insert(loverlay_background);
		body.insert(loverlay_window);

		var loverlay_titlebar = loverlay.create_titlebar();
		loverlay_window.insert(loverlay_titlebar);

		loverlay_window.insert({ bottom: loverlay_content });
	},


	set_title: function(title)
	{
		$('loverlay_title').update(title);
	},


	create_titlebar: function()
	{
		var options = { 'id': 'loverlay_titlebar', 'class': 'clear_both_after' };
		var loverlay_titlebar = new Element('div', options);

		options = { 'id': 'loverlay_title' };
		var loverlay_title = new Element('div', options);

		options = { 'id': 'loverlay_titlebar_close', 'class': 'clear_both_after' };
		var loverlay_titlebar_close = new Element('div', options);

		loverlay_titlebar_close.observe('click', loverlay.deactivate);

		loverlay_titlebar.insert(loverlay_titlebar_close);
		loverlay_titlebar.insert(loverlay_title);

		return loverlay_titlebar;
	},


	activate: function(width, height)
	{
		if (loverlay.browser_is_IE && loverlay.IE_version < 8)
		{
			loverlay.hide_selects();
		}

		loverlay.save_scroll_offsets();

		$('loverlay_window').style.display = 'block';
		$('loverlay_background').style.display = 'block';

		loverlay.center();
	},


	deactivate: function()
	{
		$('loverlay_content').update();

		$('loverlay_window').style.display = 'none';
		$('loverlay_background').style.display = 'none';

		if (loverlay.browser_is_IE)
		{
			window.scrollTo(loverlay.left_scroll_offset, loverlay.top_scroll_offset);

			if ( loverlay.IE_version < 8)
			{
				loverlay.show_selects();
			}
		}
	},


	center: function()
	{
		var viewport_width;
		var viewport_height;

		// the more standards compliant browsers (mozilla/netscape/opera/IE7)
		// use window.innerWidth and window.innerHeight
		if (typeof window.innerWidth != 'undefined')
		{
			viewport_width = window.innerWidth;
			viewport_height = window.innerHeight;
		}
		// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
		else if (typeof document.documentElement != 'undefined'
				 && typeof document.documentElement.clientWidth != 'undefined'
				 && document.documentElement.clientWidth != 0)
		{
			viewport_width = document.documentElement.clientWidth;
			viewport_height = document.documentElement.clientHeight;
		}
		// older versions of IE
		else
		{
			viewport_width = document.getElementsByTagName('body')[0].clientWidth;
			viewport_height = document.getElementsByTagName('body')[0].clientHeight;
		}

		var document_dimensions = document.viewport.getDimensions();
		var document_center_x = viewport_width / 2;

		// align the overlay vertically in the top third of the viewport
		var document_center_y = viewport_height / 3;

		var loverlay_window = $('loverlay_window');

		var window_dimensions = loverlay_window.getDimensions();

		var window_width = window_dimensions['width'];
		var window_height = window_dimensions['height'];

		var window_x = document_center_x - (window_width / 2);

		// align vertically in the top third of the viewport
		var window_y = document_center_y - (window_height / 3);

		loverlay_window.style.left = (loverlay.left_scroll_offset + window_x) + 'px';
		loverlay_window.style.top = (loverlay.top_scroll_offset + window_y) + 'px';
	},


	// In IE, select elements with non-hidden visibility hover on top of the loverlay

	hide_selects: function()
	{
		$$('select').each(loverlay.hide_select);
	},


	hide_select: function (select)
	{
		if (loverlay.select_is_in_overlay(select))
		{
			return;
		}

		select.setStyle({visibility: 'hidden'});
	},


	show_selects: function()
	{
		$$('select').each(loverlay.show_select);
	},


	show_select: function(select)
	{
		if (loverlay.select_is_in_overlay(select))
		{
			return;
		}

		select.setStyle({visibility: 'visible'});
	},


	select_is_in_overlay: function(select)
	{
		if (! loverlay.overlay_select_ids)
		{
			return false;
		}

		for (var i = 0; i < loverlay.overlay_select_ids.length; i++)
		{
			if (select.id == loverlay.overlay_select_ids[i])
			{
				return true;
			}
		}

		return false;
	},


	save_scroll_offsets: function()
	{
		var scroll_offsets = document.viewport.getScrollOffsets();

		loverlay.top_scroll_offset = scroll_offsets['top'];
		loverlay.left_scroll_offset = scroll_offsets['left'];
	},


	call_on_success: function(transport, json)
	{
		if (loverlay.on_success)
		{
			loverlay.on_success(transport, json);
			loverlay.on_success = null;
		}
	}
};



var lpopup =
{
	ok_callback: null,
	cancel_callback: null,


	info: function(message, title, class_base, ok_label, ok_callback)
	{
		var icon = "<img src='/icons/16x16/info.png'/>";

		if (! title)
		{
			title = 'Info';
		}

		lpopup.alert(icon, title, message, class_base, ok_label, ok_callback);
	},


	warn: function(message, title, class_base, ok_label, ok_callback)
	{
		if (! title)
		{
			title = 'Warning';
		}

		var icon = "<img src='/icons/16x16/important.png'/>";

		lpopup.alert(icon, title, message, class_base, ok_label, ok_callback);
	},


	error: function(message, title, class_base, ok_label, ok_callback)
	{
		if (! title)
		{
			title = 'Error';
		}

		var icon = "<img src='/icons/16x16/warning.png'/>";

		lpopup.alert(icon, title, message, class_base, ok_label, ok_callback);
	},


	alert: function(title_icon, title_text, message, class_base, ok_label, ok_callback)
	{
		if (! ok_label)
		{
			ok_label = 'Ok';
		}

		var title = title_icon + '<span class="lpopup_title_text">' + title_text + '</span>';

		message += '<div class="lpopup_buttons_box clear_both_after">';
		message += lpopup.create_ok_button(ok_label, ok_callback);
		message += '</div>';

		var content_class = 'lpopup_content';
		var window_class = 'lpopup_window';

		if (class_base)
		{
			content_class += ' ' + class_base + '_content';
			window_class += ' ' + class_base + '_window';
		}

		loverlay.display(message, title, content_class, window_class, true);

		$('lpopup_ok_button').focus();
	},


	confirm: function(message, ok_callback, cancel_callback, ok_label, cancel_label, class_base)
	{
		this.confirm_ok_callback = ok_callback;

		var icon = "<img src='/icons/16x16/important.png'/>";

		if (! ok_label) ok_label = 'Ok';
		if (! cancel_label) cancel_label = 'Cancel';

		var content = "<div class='loverlay_message'>" + message + "</div>";
		content += lpopup.create_confirm_buttons_box(cancel_label, cancel_callback, ok_label, ok_callback);

		var content_class = 'lpopup_content';
		var window_class = 'lpopup_window';

		if (class_base)
		{
			content_class += content_class + ' ' + class_base + '_content';
			window_class += window_class + ' ' + class_base + '_window';
		}

		loverlay.display(content, icon + 'Confirm', content_class, window_class, true);
	},


	create_confirm_buttons_box: function(cancel_label, cancel_callback, ok_label, ok_callback)
	{
		var buttons_box = "<div class='lpopup_buttons_box clear_both_after'>";

		buttons_box += lpopup.create_cancel_button(cancel_label, cancel_callback);
		buttons_box += lpopup.create_ok_button(ok_label, ok_callback);

		buttons_box += '</div>';

		return buttons_box;
	},


	loverlay_deactivate_ok_callback: function()
	{
		loverlay.deactivate();

		if (this.ok_callback)
		{
			this.ok_callback();
			this.ok_callback = null;
		}
	},


	loverlay_deactivate_cancel_callback: function()
	{
		loverlay.deactivate();

		if (this.cancel_callback)
		{
			this.cancel_callback();
			this.cancel_callback = null;
		}
	},


	create_ok_button: function(text, ok_callback)
	{
		this.ok_callback = ok_callback;

		var button = '<button id="lpopup_ok_button"';

		button += ' onclick="lpopup.loverlay_deactivate_ok_callback()';
		button += '">' + text + '</button>';

		return button;
	},


	create_cancel_button: function(text, cancel_callback)
	{
		this.cancel_callback = cancel_callback;

		var button = '<button id="lpopup_cancel_button"';

		button += ' onclick="lpopup.loverlay_deactivate_cancel_callback()';
		button += '">' + text + '</button>';

		return button;
	}
};



function set_timezone()
{
	var date = new Date();
	var parameters = { timezone_offset: date.getTimezoneOffset() };

	new Ajax.Request('/preferences/0', { method: 'put', parameters: parameters });
}



function lpaginator_get_url(url)
{
    $$('body').each( function(element) { element.setStyle({ cursor: 'wait' }); } );

    var options = { method: 'get', evalScripts: true, onComplete: lpaginator_restore_cursor };
    new Ajax.Updater({ success: 'view' }, url, options);
}


function lpaginator_restore_cursor()
{
    $$('body').each( function(element) { element.setStyle({ cursor: 'auto' }); } );
}




var lhighlight =
{
	class_name: 'highlight',
	time_interval: 2,


	start: function(element)
	{
		element.addClassName(lhighlight.class_name);

		var periodical_executer = new PeriodicalExecuter(lhighlight.stop, lhighlight.time_interval);
		periodical_executer.element = element;
	},


	stop: function(periodical_executer)
	{
		periodical_executer.element.removeClassName(lhighlight.class_name);
		periodical_executer.stop();
	}
};

