var language = function() {
	return 'bs';
}



var grammar =  {
	
	links: function(items) {
		if ( /(0|5|6|7|8|9|10|11|12|13|14)$/.test(items) )
			rez = items+' skraćenih linkova';
		else if ( /(2|3|4)$/.test(items) )
			rez = items+' skraćena linka';
		else if ( /(1)$/.test(items) )
			rez = items+' skraćeni link';
		return rez;
	},
	clicks: function(items) {
		if ( /(0|5|6|7|8|9|10|11|12|13|14)$/.test(items) )
			rez = items+' klikova';
		else if ( /(2|3|4)$/.test(items) )
			rez = items+' klika';
		else if ( /(1)$/.test(items) )
			rez = items+' klik';
		return rez;
	}
		
}



var anchor = function(data) {
	
	var a = document.createElement('a');
	
	if ( data.text ) {
		var text = document.createTextNode(data.text);
		a.appendChild(text);
	}
	
	if ( data.id )
		a.setAttribute('id', data.id);
	
	if ( data.klasa )
		a.setAttribute('class', data.klasa);
	
	if ( data.href )
		a.setAttribute('href', data.href);
	
	if ( data.title )
		a.setAttribute('title', data.title);
	
	if ( data.target )
		a.setAttribute('target', data.target);
	
	return a;
	
};


var form = {
	
	_items: '',
	_default_url: 'http://',
	_default_custom: 'mojLinkIdeOvdje',
	_default_password: 'Lozinka',
	_default_confirm: 'Traženi link zahtjeva lozinku',
	_custom_min: 5,
	_custom_max: 25,
	_pattern_custom: /^[a-zA-Z0-9]+$/,
	_short_message: '',
	
	load: function() {
		form.initValues();
		
		$('#url, #custom, #protected, #protected_long').bind('click', function() {
			$(this).val('');
		});
		
		$('#short').bind('click', function() {
			form.showLoaderIcon('short');
			form.api();
			return false;
		});
	},
	initValues: function() {
		form.markOK('url');
		form.markOK('custom');
		
		form.fShow('url', form._default_url);
		form.fShow('custom', form._default_custom);
		form.fShow('protected', form._default_password);
		form.fShow('protected_long', form._default_confirm);
		form.hShow('custom_counter', form._custom_max);
		
		form.getSystem('_total_urls');
		form.hShow('screen', form._items);
		
		form.focus('url');
	},
	api: function() {
		var u		= escape($('#url').val());
		var c		= ($('#custom').val() !== form._default_custom) ? '&custom='+escape($('#custom').val()) : '';
		var p		= ($('#protected').val() !== form._default_password) ? '&protected='+escape($('#protected').val()) : '';
		var request	= '/api.php?url='+u+c+p;
		
		if ( form.testUrl(u) ) {
		
		$.getJSON(request, function(data) {
			if ( data.error) {
				var html = data.error;
				form.markError('custom');
				form.focus('custom');
				form.hShow('screen', html);
			}
			else {
				var hash = (data.custom) ? data.custom : data.short;
				var href = 'http://'+window.location.hostname+'/'+hash;
				
				var a = $('<a id="a_short" href="'+href+'" title="'+href+'" target="_blank">'+href+'</a>');
				var span = $('<span id="copy">KOPIRAJ</span>');

				$('#screen').html('');
				$('#screen').append(a);
				$('#screen').append(span);
				
				form.copyShortUrl(href);
			}
		});
		}
		
	},
	customCounter: function() {
		$('#custom').keyup(function() {
			
			var v = $('#custom').val();
			var l = $('#custom').val().length;
			
			if ( l > 0 ) {
				
				form._short_message = $('#screen').html();
				
			//	if ( !form.testCustom(v) )
			//	return false;
			}
			
			if ( l === 0 ) {
				form.hShow('custom_counter', form._custom_max);
			}
			
			else if ( l > 0 && l <= form._custom_max ) {
				var c = form._custom_max - l;
				form.hShow('custom_counter', c);
			}
			
			if ( l === form._custom_max ) {
				$('#custom').attr('maxlength', form._custom_max);
			}
			
			if ( l < form._custom_min ) {
				$('#custom').css('color', '#f00');
				form.hShow('screen', 'Upišite najmanje '+ form._custom_min +' znakova [a-Z0-9]');
			}
			else {
				$('#custom').css('color', '#666');
			}
			
		});
	},
	testCustom: function(v) {
		
		var p = form._pattern_custom;
		
		if ( !p.test(v) ) {
			form.markError('custom');
			form.hShow('screen', 'Dozvoljeni znakovi [a-Z0-9]');
			form.stopTypingCustom();
			return false;
		}
		else {
			form.markOK('custom');
			form.hShow('screen', form._short_message);
			form.continueTypingCustom();
			return true;
		}
		
	},
	testUrl: function(u) {
		if ( !u ) {
			form.markError('url');
			form.hShow('screen', 'Unesite dugi link');
			form.focus('url');
			return false;
		}
		else if ( u === form._default_url ) {
			form.markError('url');
			form.hShow('screen', 'Unesite puni link');
			form.focus('url');
			return false
		}
		else if ( !/(http|https)\%3A\/\/[\w\%\.]+/.test(u) ) {
			form.markError('url');
			form.hShow('screen', 'Neispravan link');
			form.focus('url');
			return false
		}
		else {
			form.markOK('url');
			return true;
		}
	},
	getSystem: function(command) {
		
		var q = '/api.php?system='+command;
		
		$.getJSON(q, function(data) {
			
			$.each(data, function(i) {
				var links = grammar.links(data[i]);
				form.hShow('screen', links);
				form._items = $('#screen').html();
			});
		});
		
	},
	copyShortUrl: function(href) {
			
		$('#copy').fadeIn();
		$('#copy').css('cursor', 'pointer');
		
		var clip = new ZeroClipboard.Client();
		clip.setHandCursor(true);
		clip.setText(href);
		clip.glue('copy');
		
		$('#copy, #click_layer').bind('click', function() {
			$('#copy').fadeOut();
		});
		
	},
	stopTypingCustom: function() {
		var l = $('#custom').val().length;
		$('#custom').attr('maxlength', l);
	},
	continueTypingCustom: function() {
		$('#custom').attr('maxlength', form._custom_max);
	},
	focus: function(element) {
		var id = '#'+element;
		$(id).focus();
	},
	fShow: function(e, v) {
		var element = '#'+e;
		$(element).val(v);
	},
	hShow: function(e, v) {
		var element = '#'+e;
		$(element).html(v);
	},
	showLoaderIcon: function(e) {
		var img = $('<img src="/images/design/loader.gif" alt="Loading" />');
		form.hShow(e, img);
	},
	disable: function(e) {
		var element = '#'+e;
		$(element).attr('disabled', 'disabled');
	},
	enable: function(e) {
		var element = '#'+e;
		$(element).removeAttr('disabled');
	},
	readonly: function(e) {
		var element = '#'+e;
		$(element).attr('readonly', 'readonly');
	},
	unreadonly: function(e) {
		var element = '#'+e;
		$(element).removeAttr('readonly');
	},
	markError: function(e) {
		var element = '#'+e;
		$(element).css('color', '#f00');
	},
	markOK: function(e) {
		var element = '#'+e;
		$(element).css('color', '#666');
	}
	
};


var reset = {
	
	load: function() {
	
		$('#reset').bind('click', function() {
			if( $(this).attr('checked') )
				alert('Skinutu lozinku nećete moći ponovo postaviti. Da li ste sigurni?');
		})
	}
		
};

var list = function(element, data) {

	var e = $('#'+element);
	var p = $('<p></p>');
	var ul = $('<ul id="list"></ul>');
	$(p).html(ul);

	$.each(data, function(i) {
		
		var href = (data[i].short) ? data[i].short : data[i].custom;
		var click = (data[i].clicked) ? grammar.clicks(data[i].clicked) : '';
		
		if ( data[i].target === 'protected' ) {
			var link = 'http://'+window.location.host+'/'+href;
			var title = link;
		}
		else {
			var dots = (data[i].target.length > 58) ? '...' : ''; 
			var title = data[i].target.substr(0, 55)+dots;
			var link = (data[i].short !== null) ? data[i].short : data[i].custom;
		}

		li = $('<li></li>');
		a = $('<a rel="listlink" href="http://'+window.location.hostname+'/'+link+'" title="'+data[i].target+'" target="_blank">'+title+'</a>');
		span = $('<span class="url_actions"> '+click+' </span>');
		pass = $('<img src="/images/icons/key.png" alt="protected" />');
		abuse = $('<span><a class="abuse" href="http://'+window.location.hostname+'/'+link+'" title="Report Link"><img src="/images/icons/stop.png" alt="Abuse" /></a></span>');

		$(ul).append($(li));
		$(li).append($(a));
		$(li).append(abuse);
		$(li).append(span);
		if (data[i].target === 'protected') {
			$(span).append(pass);
		}
		$(e).append(ul);

	});	
};


var paginate = function(element) {
	var p = 1;
	var pages = 10;
	var e = '#page_'+element;

	var ul = document.createElement('ul');
	ul.setAttribute('id', 'paginator')
	
	for( i=1; i<=pages; i++ ) {
		var li = document.createElement('li');
		ul.appendChild(li);
		
		var adata = {klasa:'apaginator', href:'#'+element, text:i};
		var a = anchor(adata);
		
		li.appendChild(a);
	}
	
	$(e).append(ul);
	
	paginateShow(p, element);
	
	$('#page_'+element+' .apaginator:eq(0)').css('background-color', '#aaa');
	$('#page_'+element+' .apaginator:eq(0)').css('color', '#fff');
	
	$('.apaginator').bind('click', function() {
		$('.apaginator').css('background-color', '#fff');
		$('.apaginator').css('color', '#aaa');
		$(this).css('background-color', '#aaa');
		$(this).css('color', '#fff');
		
		var page = parseInt($(this).html());
		paginateShow(page, element);
		return false;
	});
	
}



var paginateShow = function(page, element) {
	
	var items = 10;
	var first = (page-1) * items;
	var last = (first + items) - 1;
	var e = '#page_'+element+' #list li';
	
	$(e).hide();
	
	$(e).each(function(i) {
		if ( i >= first && i <= last )
		$(this).show();
	});
	
}



var page = {
	
	_hash: window.location.hash,
	_hash_clean: window.location.hash.replace('#', ''),
	
	load: function() {
		page.show();
		page.click();
	},
	click: function() {
		$('[rel="page"]').bind('click', function() {
			page._hash_clean = $(this).attr('href').replace(/^[^\#]+\#/, '');
			page.show();
		});
	},
	show: function() {
		var p = '#page_'+page._hash_clean;
		
		$('[id^=page_]').hide();
		
		if ( !$(p).is(':visible, :hidden') || page._hash_clean === 'home' ) {
			form.initValues();
			form.hShow('screen', form._items);
			$('#page_home').show();
		}
		else {
			$(p).show();
		}
		if ( page._hash_clean === 'new' ) {
			$('#page_new ul').remove();
			page.showNew();
		}
		else if ( page._hash_clean === 'popular' ) {
			$('#page_popular ul').remove();
			page.showPopular();
		}
		
	},
	loaderShow: function(e) {
		
		var element = '#'+e;
		
		var div = document.createElement('div');
		div.setAttribute('id', 'loader');
		
		$(element).append(div);
		
		form.showLoaderIcon('loader');
	},
	loaderHide: function() {
		
		$('#loader').remove();
		
	},
	showNew: function() {
		
		page.loaderShow('page_new');
		
		var u = '/api.php?system=_get_new';
		$.getJSON(u, function(data) {
			list('page_new', data);
			paginate('new');
			page.loaderHide();
		});
		
	},
	showPopular: function() {
		
		page.loaderShow('page_popular');
		
		var u = '/api.php?system=_get_popular';
		$.getJSON(u, function(data) {
			list('page_popular', data);
			paginate('popular');
			page.loaderHide();
		});
	}
	
};


var more = {
	
	_visible: 0,
	_speed: 400,
	
	load: function() {
        
        $('#more_options').delay(1000).hide(more._speed);
        
		$('#more').bind('click', function() {
			more._visible += 1;
			if ( more._visible % 2 ) {
				$('#more').attr('value', '▲');
				$('#more_options').show(more._speed);
			}
			else {
			    $('#more').attr('value', '▼');
				$('#more_options').hide(more._speed);
			}
			return false;
		});
		
	},
		
};


$(document).ready(function() {
	
	form.load();
	more.load();
	page.load();
	reset.load();
	
	$('#list li').live('mouseenter', function() { $(this).css('background-color', '#eee'); }); 
	$('#list li').live('mouseleave', function() { $(this).css('background-color', '#fff'); });
	
	$('a.abuse').live('click', function() {
		var listlink=$(this).parents().find('a[rel="listlink"]').get(0);
		var listhref=$(listlink).attr('href');
		var listtitle=$(listlink).attr('title');
		var text='Hello there\n\nI believe that following link should not be on your site:\n\n'+listhref+'\n'+listtitle+'.\n\n{Please provide more details here}';
		$('[title="KONTAKT"]').click();
		$('option[value="abuse"]').attr('selected', 'selected');
		$('textarea[name="text"]').html(text);
		return false;
	});
	
});


