google.load('language', '1');

$(function(){
	
	$('A[rel*=external]').attr('target', '_blank');
	
	var $Q		= $('#inspireMe TEXTAREA');
	var $MSG	= $('.msg');
	var $V		= $('#variante');
	var $FRM	= $('#inspireMe');
	
	var ROWS	= 0;
	var prevQ	= [];
	var inLang	= 'ro';
	var outLang	= 'ja';
	
	var lastCol = '';
	
	
	$Q.limitText(500, '.counter').keypress(function(){
		$MSG.html('');
	});
	
	$('#random-link').click(function() {
		var count = Math.floor(Math.random()*8410);
		var link = 'http://inspira-ma.te-rog.eu/#' + count;
		window.location = link; 
	});
	
	
	
	var oldHash = '';
	var checkHash = setInterval(function(){
		var newHash = window.location.hash.replace('#', '');
		if ( newHash != oldHash ) {
			oldHash = newHash;
			loadSaved(newHash);
		}
	}, 200);
	
	$FRM.submit(function(e){
		e.preventDefault();

		ROWS	= 0;
		prevQ	= [];
		var val = $Q.val();
		
		if ( val != '' ) {
			$Q.addClass('loading');
			resetRows(function(){
				saveNew(val);
			});
		}
	});
	
	function doInspire(Q) {

		if ( ROWS <= 30 ) {
			
			addRow(Q);
			
			google.language.translate(Q, inLang, outLang, function(result) {
				if (result.translation) {
					google.language.translate(result.translation, outLang, inLang, function(result) {
						if (result.translation) {
							if ( !in_array(result.translation, prevQ) ) {
								prevQ[ROWS] = result.translation;

								doInspire(result.translation);
							} else {
								$Q.removeClass('loading');
							}
						}
					});
				}
			});
		} else {
			$Q.removeClass('loading');
		}
		
		ROWS++;
		
	}
	
	function addRow(txt) {
		var className = 'v' + Math.floor( Math.random() * 8 );
		
		while ( className == lastCol ) {
			className = 'v' + Math.floor( Math.random() * 8 );
		}
		lastCol = className;
		
		var nr = ROWS + 1;
		
		var LI = '<li class="' + className + '">';
		
		if ( nr == 1 ) {
			LI += '<h5><sup>varianta</sup>' + nr + '</h5>';
		} else {
			LI += '<h5><sup>a</sup>' + nr + '<sub>-a variantă</sub></h5>';
		}
		
		LI += '<p>' + txt + '</p>';
		LI += '</li>';
		
		$V.stop().css({height:'auto'}).append(LI).find('LI:last').fadeIn(400);
		
	}
	
	function resetRows(fnc) {
		ROWS	= 0;
		prevQ	= [];
		$V.html('').css( {height : 'auto', display : 'block'});
		
		if ( typeof fnc == 'function' ) {
			fnc();
		}
	}

	
	function initForm() {
		$Q.addClass('loading').val('').change();
		resetRows();
	}
	
	function saveNew( Q ) {
		$MSG.html('');
		$.ajax({
				type	: 'GET',
				url		: './_ajax.php',
				data	: 'Q=' + encodeURIComponent(Q),
				dataType: 'json',
				cache	: false,
				success	: function(msg){
					if ( msg.error ) {
						$MSG.addClass('error').html(msg.error);
					} else {
						window.location.hash = oldHash = msg.ID;
						doInspire(Q);
					}
				},
				complete: function() {
					$Q.removeClass('loading');
				}
			});
	}
	
	function loadSaved( hash ){
		initForm();
		$MSG.html('');

		$.ajax({
				type	: 'GET',
				url		: './_ajax.php',
				data	: 'ID=' + hash,
				dataType: 'json',
				cache	: false,
				success	: function(msg){
					if ( msg.error ) {
						$MSG.addClass('error').html(msg.error);
					} else {
						$Q.val(msg.Q).change();
						doInspire(msg.Q);
					}
				},
				complete: function() {
					$Q.removeClass('loading');
				}
			});
	}
});

$.fn.extend({  
         limitText: function(limit, counter) {
			
			var interval;
			var $this = $(this);
					
			$this.focus(function(){
				interval = window.setInterval(reCalculate, 100);
			});
			
			$this.blur(function(){
				clearInterval(interval);
				reCalculate();
			});
			
			$this.change(function(){
				reCalculate();
			});
			
			function reCalculate() { 
				var val = $this.val();
				var length = val.length;
				
				if ( length > limit ) {
					$this.val($this.val().substring(0, limit));
				}
				
				if ( $(counter).size() ) {
					$(counter).html( (limit-length<=0) ? '0' : limit-length );
				}
			}
			
			reCalculate();
			
			return $this;
        } 
}); 


function in_array (needle, haystack) {
	for (key in haystack) {
		if (haystack[key] == needle) {
			return true;
		}
	}
	return false;
}
