//
// +----------------------------------------------------------------------+
// | armenia.ru                                                           |
// +----------------------------------------------------------------------+
// | brrn.armenia.ru                                                      |
// +----------------------------------------------------------------------+
// | Copyright (c) 2008-2009 arax.ru                                      |
// +----------------------------------------------------------------------+
//
// $Id: common.js 429 2010-03-25 17:58:24Z hayk $
//

window.dhtmlHistory.create({
	toJSON: function(o) {
		return $.toJSON(o);
	},
	fromJSON: function(s) {
		return $.evalJSON(s);
	}
});

$(document).ready(function(){

	var lang = $('body').metadata().lang;
	var alnk = $('body').metadata().alnk;

	var gaCode = '%3Cscript type="text/javascript"%3E'+"\n"+
		'try'+"\n"+
		'{'+"\n"+
		'	var pageTracker = _gat._getTracker("UA-3564978-11");'+"\n"+
		'	pageTracker._trackPageview();'+"\n"+
		'}'+"\n"+
		'catch(err) {}'+"\n"+
		'%3C/script%3E'+"\n";

	if ( !$('body').metadata().a )
	{
		gaCode = '<div class="unauthorized" id="card-unauthorized">Для того что бы увидеть полный перевод слова <a href="'+alnk+'">войдите</a> в систему.</div>' + gaCode;
	}

	$.fixView = function () {
		$('#bc').css('margin-top', '0px');
		$('#outbox').css('height', 'auto');

		var bodyHeight = $('body').height();
		var winHeight = $(window).height() - 25;
		var gap = winHeight - bodyHeight + 5;
		if (gap > 0)
		{
			$('#bc').css('margin-top', gap + 'px');
			$('#outbox').css('height', winHeight + 'px');
			$('#outbox').css('visibility', 'visible');
		}
	}

	$.showComment = function () {
		$('#commentform textarea').val('');
		$('#commentshow').hide();
		$('#commentsent').hide();
		$('#commentform').show();
		$('#commentform textarea').focus();
		$.fixView();
	}

	$.hideComment = function (showsent) {
		$('#commentform').hide();
		$('#commentshow').show();
		if (typeof showsent != 'undefined' && showsent)
		{
			$('#commentsent').show();
		}
		else
		{
			$('#commentsent').hide();
		}
		$.fixView();
	}

	$('#lnk_comment_show').click(function() {
		$.showComment();
	});

	$('#lnk_comment_hide').click(function() {
		if (typeof block_comment_submit != 'undefined' && block_comment_submit)
		{
			return;
		}
		$.hideComment();
	});

	$('#lnk_comment_submit').click(function() {
		if (typeof block_comment_submit != 'undefined' && block_comment_submit)
		{
			return;
		}
		var comment = $.trim($('#commentform textarea').val());
		if (!comment)
		{
			alert($('#commentform').metadata().emptyComment);
			$('#commentform textarea').focus();
			return;
		}
		var hash = dhtmlHistory.getCurrentLocation();
		var data = historyStorage.get(hash);
		var word = data ? data.word : '';
		$.ajaxBlockParam = {
			message : '<h1><img src="/img/ajax-loader.gif" /></h1>',
			css: {
				border: 'none',
				padding: '0',
				backgroundColor: 'none',
				color: '#000'
			},
			overlayCSS: {
				backgroundColor: '#ccc',
				opacity: 0.5
			}};
		$.ajax({
			type: 'POST',
			url: '/' + lang + '/feedback',
			data: {comment: comment, word: word, hash: hash},
			dataType: 'json',
			beforeSend: function () {
				block_comment_submit = true;
				$('#commentform').block($.ajaxBlockParam);
			},
			complete: function () {
				$('#commentform').unblock();
				block_comment_submit = false;
			},
			success: function (data) {
				if (data.result)
				{
					$.hideComment(true);
				}
				else
				{
					alert(data.errorMessage.feedback);
				}
			}
		});
	});

	$.getCardIndex = function (data, hash) {
		if (typeof hash == 'undefined')
		{
			return 0;
		}
		for (var i = 0; i < data.length; i++)
		{
			if (data[i].hash == hash)
			{
				return i;
			}
		}
	}

	$.generateTabs = function (data, selidx) {
		var tabsHtml = '';
		for (var i = 0; i < data.length; i++)
		{
			if (i == selidx)
			{
				tabsHtml += '<div class="dicname current {index:' + i + '}">' + data[i].name + '</div>';
			}
			else
			{
				tabsHtml += '<div class="dicname {index:' + i + '}">' + data[i].name + '</div>';
			}
		}
		$('div.title').prepend(tabsHtml);
	}

	$.loadWord = function (word, hash) {
			$.ajax({
				type: 'POST',
				url: '/' + lang + '/translate',
				data: {word: word},
				dataType: 'json',
				beforeSend: function () {
					$('#brrn_word').removeClass('ac_field');
					$('#brrn_loading').show();
				},
				complete: function () {
					$('#brrn_loading').hide();
					$('#brrn_word').addClass('ac_field');
				},
				success: function (data) {
					if (data.result)
					{
						var idx = $.getCardIndex(data.result, hash);

						$('#brrn_word_tr').html(data.result[idx].cardhtml + unescape(gaCode));

						$.generateTabs(data.result, idx);

						var hData =	{
							word: word,
							data: data.result,
							item: idx
						};
						dhtmlHistory.add(data.result[idx].hash, hData);

						document.title = word + ' :: ' + $('body').metadata().title;
						$('#brrn_word_tr').show();
						$.hideComment();

						try
						{
							var pageTracker = _gat._getTracker('UA-3564978-11');
							pageTracker._trackPageview();
						}
						catch(err) {}
					}
					else
					{
						$('#brrn_word_tr').hide();
						// TODO: show error
					}
				}
			});
	}

	$.setWord = function (word, hash, data, idx) {
		$('#brrn_word').val(word);
		$('#brrn_word').removeClass('default');
		if (typeof data != 'undefined')
		{
			document.title = word + ' :: ' + $('body').metadata().title;
			$('#brrn_word_tr').html(data[idx].cardhtml + unescape(gaCode));
			$.generateTabs(data, idx);
			$.hideComment();
		}
		else
		{
			$.loadWord(word, hash);
		}
	}

	$('#brrn_word').focus(function () {
		$(this).select();
	});

	$('#brrn_word').autoComplete({
		script: '/' + lang + '/search',
		varname: 'mask',
		meth: 'post',
		valueSep: null,
		minchars: 1,
		offsety: 0,
		cache: true,
		maxentries: 10,
		noresults: $('body').metadata().emptyResult,
		json: function (data) {
			var res = new Array;
			for (var i = 0; i < data.result.length; i++)
				res.push({
					'id': i,
					'value': data.result[i]['word'],
					'info': data.result[i]['dict_count'] + ' entr' + (data.result[i]['dict_count'] ? 'y' : 'ies')
					});
			return res;
		},
		callback: function (item) {
			$.loadWord(item.value);
		}
	});

	$('#lnk-close-card').live('click', function () {
		$('#brrn_word_tr').hide();
		$.fixView();
	});

	$('a.reference').live('click', function () {
		if ($(this).hasClass('disabled'))
		{
			alert($('body').metadata().disabledReference);
		}
		else
		{
			$.setWord($(this).metadata().word);
		}
	});

	var historyChange = function (hLocation, hData)	{
		if (typeof hData == 'object' && hData != null)
		{
			$.setWord(hData.word, null, hData.data, hData.item);
		}
	}

	dhtmlHistory.initialize();
	dhtmlHistory.addListener(historyChange);

	var hash = '';
	if (hash = dhtmlHistory.getCurrentLocation())
	{
		$.getJSON('/' + lang + '/hash2word/' + encodeURIComponent(hash), function (data) {
			if (data.result)
			{
				$.setWord(data.result, hash);
			}
		});
	}

	$('div.dicname').live('click', function() {
		if ($(this).hasClass('current'))
		{
			return;
		}
		var item = $(this).metadata().index;
		var hash = dhtmlHistory.getCurrentLocation();
		var data = historyStorage.get(hash);
		if (!data)
		{
			return;
		}
		var hData =	{
			word: data.word,
			data: data.data,
			item: item
		};
		dhtmlHistory.add(data.data[item].hash, hData);
		$.setWord(data.word, null, data.data, item);
	});

	$.fixView();
});
