function Main() {
  this.init();
}
Main.prototype = {
	init: function() {
		var self = this;
		setInterval(function(){self.status.call(self);}, 30000);
	},
	login: function() {
		$.ajax({
			type: 'POST',
			url: '/login/',
			data: ({username:$('#l_username').val(), 'password':$('#l_password').val(), auto_login:$('#auto_login:checked').val()?1:0}),
			success: function(data) {
				if (data.result == 'ok') {
					location.reload();
				}
				else {
					alert(i18n('Wrong username or password.'));
				}
			}
		});
		return false;
	},
	showLogin: function() {
		var ip = $('#login_inline').offset();
		var f = $('#login_inline_form');
		f.css({left:ip.left-100});
		f.fadeIn();
		return false;
	},
	hideLogin: function() {
		$('#login_inline_form').fadeOut();
	},
	logout: function() {
		$.ajax({
			type: 'POST',
			url: '/login/exit/',
			success: function(data) {
				if (data.result == 'ok') {
					location.reload();
				}
			}
		});
		return false;
	},
	loadContent: function(url) {
		$.ajax({
			type: 'GET',
			url: url,
			success: function(data) {
				if (data.result == 'ok') {
					$('#content').html(data.content);
				}
			}
		});
		location.href = '/last/#'+url;
	},
	showCommentsForm: function() {
		$('#comments_form').show();
		return false;
	},
	cite: function(username) {
		$('#comments_form').show();
		$('#comment_text').val('@'+username+', '+$('#comment_text').val());
		$('#comment_text').focus();
		return false;
	},
	postComment: function() {
		$('#comments_form').hide();
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({comment: $('#comment_text').val(), flags: $('.comment_flags:checked').val()}),
			success: function(data) {
				if (data.result == 'ok') {
					$('#comments').html(data.comments);
				}
				else {
					alert(data.message);
				}
			}
		});
		return false;
	},
	loadComments: function(page) {
		if (_gaq) {
			_gaq.push(['_trackPageview', location.href]);
			_gaq.push(['_trackEvent', 'Comments', 'Page'+page, location.href]);
		}
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {page: page},
			success: function(data) {
				if (data.result == 'ok') {
					$('#comments').html(data.comments);
				}
				else {
					alert(data.message);
				}
			}
		});
		return false;
	},
	like: function() {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({vote: 1}),
			success: function(data) {
				if (data.result == 'ok') {
					$('#like_value').html(data.likes);
					$('#like_link').addClass('active');
				}
				else {
					//alert(data.message);
				}
			}
		});
		return false;
	},
	usernameUsed: false,
	checkRegForm: function(el, mode) {
		var username = $('#reg_username').val();
		var pass1 = $('#reg_password1').val();
		var pass2 = $('#reg_password2').val();
		var email = $('#reg_email').val();
		
		var score = 0;
		var usernameValid = false;
		if (!username) {
			if (mode != 1) {
				this.toggleError($('#reg_username'), i18n('no username'));
				score++;
			}
		}
		else if (!/^[a-zA-Z0-9_-]+$/.test(username)) {
			this.toggleError($('#reg_username'), i18n('incorrect username (a-z, 0-9 and "-")'));
			score++;
		}
		else if (username.length < 3) {
			this.toggleError($('#reg_username'), i18n('username too short'));
			score++;
		}
		else if (username.length > 16) {
			this.toggleError($('#reg_username'), i18n('username too long'));
			score++;
		}
		else if (this.usernameUsed && mode != 1 && mode != 2) {
			this.toggleError($('#reg_username'), i18n('username allready exists'));
			usernameValid = true;
			score++;
		}
		else {
			this.toggleError($('#reg_username'), '');
			usernameValid = true;
		}
		if (mode != 1) {
			if (!pass1) {
				this.toggleError($('#reg_password1'), i18n('no password'));
				score++;
			}
			else if (pass1 != pass2) {
				this.toggleError($('#reg_password1'), i18n('passwords no match'));
				score++;
			}
			else {
				this.toggleError($('#reg_password1'), '');
			}
		}
		if (mode != 2) {
			if (!email) {
				if (mode != 1) {
					this.toggleError($('#reg_email'), i18n('no email'));
					score++;
				}
			}
			else if (!/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/.test(email)) {
				this.toggleError($('#reg_email'), i18n('wrong email format'));
				score++;
			}
			else {
				this.toggleError($('#reg_email'), '');
			}
		}
		
		if (mode == 1 && !email && !username) {
			score++;
		}
		
		$('#reg_register').attr('disabled', score ? 'disabled' : '');
		if (el && el.id == 'reg_username' && usernameValid && mode != 1 && mode != 2) {
			var self = this;
			setTimeout(function() {self.checkUsername(username)}, 1000);
		}
	},
	checkUsername: function(username) {
		//alert('check username ' + username);
		var self = this;
		if (username != $('#reg_username').val()) return;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({check: username}),
			success: function(data) {
				if (username != $('#reg_username').val()) return;
				if (data.result == 'exist') {
					self.usernameUsed = true;
				}
				else {
					self.usernameUsed = false;
				}
				self.checkRegForm(null);
			}
		});
	},
	toggleError: function(el, error) {
		var er = el.next('.error');
		if (!er.length) {
			er = $('<span></span>');
			er.addClass('error');
			el.after(er);
		}
		
		if (error) {
			er.html(error);
			er.show();
		}
		else {
			er.hide();
		}
	},
	registerUsername: function() {
		$('#reg_username').attr('disabled', 'disabled');
		$('#reg_password1').attr('disabled', 'disabled');
		$('#reg_password2').attr('disabled', 'disabled');
		$('#reg_email').attr('disabled', 'disabled');
		$('#reg_register').attr('disabled', 'disabled');
		
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({username: $('#reg_username').val(), password: $('#reg_password1').val(), email: $('#reg_email').val() }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#content').html(i18n('<h2>Registration</h2>A confirmation email has been sent to you.'));
				}
				else {
					alert(data.error);
					$('#reg_username').attr('disabled', '');
					$('#reg_password1').attr('disabled', '');
					$('#reg_password2').attr('disabled', '');
					$('#reg_email').attr('disabled', '');
					self.checkRegForm(null);
				}
			}
		});
		
		return false;
	},
	recoverPassword: function() {
		$('#reg_username').attr('disabled', 'disabled');
		$('#reg_email').attr('disabled', 'disabled');
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({username: $('#reg_username').val(), email: $('#reg_email').val() }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#content').html(i18n('<h2>Password recovery</h2>Recovery email has been sent to you.'));
				}
				else {
					alert(data.error);
					$('#reg_username').attr('disabled', '');
					$('#reg_email').attr('disabled', '');
					self.checkRegForm(null);
				}
			}
		});
		return false;
	},
	recoverUpdate: function() {
		$('#reg_password1').attr('disabled', 'disabled');
		$('#reg_password2').attr('disabled', 'disabled');
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({password: $('#reg_password1').val() }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#content').html(i18n('<h2>Password recovery</h2>Password has been changed.'));
				}
				else {
					alert(data.error);
					$('#reg_password1').attr('disabled', '');
					$('#reg_password2').attr('disabled', '');
					self.checkRegForm(null);
				}
			}
		});
		return false;
	},
	showHTML: function(id, shr) {
		$('#code').val('<a href="http://'+domain+'/toon/'+id+(shr?'/sh'+shr:'')+'"><img src="http://'+domain+'/preview/'+id+'" /></a>');
		$('#code').show();
		$('#code').select();
		return false;
	},
	showBB: function(id, shr) {
		$('#code').val('[url=http://'+domain+'/toon/'+id+(shr?'/sh'+shr:'')+'][img]http://'+domain+'/preview/'+id+'[/img][/url]');
		$('#code').show();
		$('#code').select();
		return false;
	},
	setAvatar: function(id) {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({toon: id}),
			success: function(data) {
				if (data.result == 'ok') {
					//$('#avatar').attr('src', '/preview/' + id);
					location.reload();
				}
			}
		});
		return false;
	},
	share: function(a) {
		window.open(a.href, 'share', 'width=600,height=600,toolbar=0');
		return false;
	},
	favorites: function(val) {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({favorites: val}),
			success: function(data) {
				if (data.result == 'ok') {
					if (val > 0) {
						$('.img_favorites').removeClass('img_favorites').addClass('img_favorites_r');
						$("#favlink").click(function() {return m.favorites(-1)});
					}
					else {
						$('.img_favorites_r').removeClass('img_favorites_r').addClass('img_favorites');
						$("#favlink").click(function() {return m.favorites(1)});
					}
				}
				else {
					//alert(data.message);
				}
			}
		});
		return false;
	},
	giveMedal: function(buy) {
		if (!confirm(i18n('Are you sure?'))) return false;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {medal:1,buy:buy},
			success: function(data) {
				$('.img_toonmedal').removeClass('img_toonmedal').addClass('img_toonmedal_r');
				$("#medallink").click(function() {return false;});
				if (data.result == 'error') {
					alert(data.message);
				}
			}
		});
		return false;
	},
	eatMedal: function(medal_id) {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {medal:medal_id,eat:1},
			success: function(data) {
				alert(i18n('Done!'));
			}
		});
		return false;
	},
	register: function() {
		alert(i18n('Please sign in or register to do this.'));
		return false;
	},
	trComment: function(id, lang) {
		$('#comment-text-'+id).html('<i>Loading...</i>');
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({action: 'translate', comment: id, lang: lang}),
			success: function(data) {
				if (data.result == 'ok') {
					$('#comment-text-'+id).html(data.comment);
				}
			}
		});
		return false;
	},
	trToon: function(lang) {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({action: 'translate', lang: lang}),
			success: function(data) {
				if (data.result == 'ok') {
					$('#description_text').html(data.description);
					$('#toon_title').html(data.title);
				}
			}
		});
		return false;
	},
	checkBuySpidersForm: function(t) {
		var fp = $('#reg_phone');
		var fs = $('#reg_spiders');
		var fm = $('#reg_money');
		var c = 1 / CURRENCY[this.currency];
		if (t == 0) {
			var b=Math.floor(parseInt(fs.val()) * c * 100) / 100;
			if (!isNaN(b)) {
				if (b < 0.1) b = 0.1;
				fm.val(b);
				this.toggleError($('#reg_spiders'), '');
			}
			else {
				this.toggleError($('#reg_spiders'), i18n('Wrong spiders count'));
			}
		}
		else if (t == 1) {
			var b=parseInt(fm.val() / c);
			if (!isNaN(b)) fs.val(b);	
		}
		
		var m = parseFloat(fm.val());
		if (isNaN(m) || m > 15000) {
			this.toggleError($('#reg_money'), i18n('Wrong spiders count'));
		}
		else {
			this.toggleError($('#reg_money'), '');
		}
		$('#reg_buy').attr('disabled', !isNaN(m) && m > 0 ? '' : 'disabled');
	},
	buySpiders: function() {
		var fp = $('#reg_phone');
		var fs = $('#reg_spiders');
		var fm = $('#reg_money');
		var ft = $('#reg_type');
		var self = this;
		
		var c = 1 / CURRENCY[this.currency];
		
		var score = 0;
		var m=parseFloat(fm.val());
		if (!isNaN(m) && m > 0) {
			fs.val(parseInt(m / c));
		}
		else {
			score++;
			this.toggleError($('#reg_money'), i18n('Wrong spiders count'));
		}
		if (ft.val() == 'qiwi' && !/^\(\d\d\d\) ?\d\d\d-\d\d-\d\d$/.test(fp.val())) {
			score++;
			this.toggleError($('#reg_phone'), i18n('Wrong phone format. Should be (123) 456-78-90'));
		}
		if (score == 0) {
			fp.attr('disabled', 'disabled');
			fm.attr('disabled', 'disabled');
			fs.attr('disabled', 'disabled');
			$('#reg_buy').attr('disabled', 'disabled');
			$('#form_info').show();
			$('#form_info').html(i18n('Invoicing...'));
			$.ajax({
				type: 'POST',
				url: location.href,
				data: ({amount: fm.val(), phone: fp.val(), type: ft.val(), currency:self.currency }),
				success: function(data) {
					if (data.result == 'ok') {
						if (data.type == 'qiwi') {
							$('#form_info').html(i18n('Invoice complete.'));
						}
						else if (data.type.substr(0,8) == 'webmoney') {
							for (var f in data.form) {
								$('#' + f).val(data.form[f]);
							}
							$('#webmoney_form').submit();
						}
						else {
							$('#rx_id').val(data.id);
							$('#rx_crc').val(data.crc);
							$('#rx_label').val(data.label);
							$('#rx_amount').val(data.amount);
							$('#rx_label').val(data.label);
							$('#robox_form').submit();
						}
					}
					else {
						$('#form_info').html(i18n('Invoice error.'));
						fp.attr('disabled', '');
						fm.attr('disabled', '');
						fs.attr('disabled', '');
						$('#reg_buy').attr('disabled', '');
					}
				}
			});
		}
		return false;
	},
	checkBuyGoodPlace: function(min) {
		var ft = $('#reg_toon');
		var fs = $('#reg_spiders');
		var t = parseInt(fs.val());
		var score = 0;
		if (isNaN(t) || t < min) {
			score++;
			this.toggleError(fs, i18n('Wrong spiders count'));
		}
		else {
			this.toggleError(fs, '');
		}
		var r = new RegExp('^http://(?:www\\.)?'+domain+'/toon/[A-Za-z0-9_-]{11,12}(?:/continues)?$');
		if (!r.test(ft.val())) {
			score++;
			this.toggleError(ft, i18n('Wrong toon url'));
		}
		else {
			this.toggleError(ft, '');
		}
		$('#reg_buy').attr('disabled', score == 0 ? '' : 'disabled');
	},
	buyGoodPlace: function() {
		$('#reg_toon').attr('disabled', 'disabled');
		$('#reg_spiders').attr('disabled', 'disabled');
		$('#reg_buy').attr('disabled', 'disabled');
		$('#form_info').show();
		$('#form_info').html('...');
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({spiders: $('#reg_spiders').val(), toon: $('#reg_toon').val() }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#form_info').html(data.message);
				}
				else {
					$('#form_info').html(data.message ? data.message : i18n('error'));
					$('#reg_spiders').attr('disabled', '');
					$('#reg_toon').attr('disabled', '');
					$('#reg_buy').attr('disabled', '');
				}
			}
		});
		return false;
	},
	download: function(toon, format, cost, force) {
		if (!force && !confirm(i18n('Are you sure?'))) return false;
		var self = this;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({toon: toon, format:format }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#download_info_'+format).html(data.info);
					if (data.refresh) {
						setTimeout(function() {self.download(toon, format, cost, true)}, 30000);
					}
				}
				else {
					alert(data.message ? data.message : i18n('error'));
				}
			}
		});
		return false;
	},
	increaseEvent: function(event, spiders) {
		$('#spiders_'+event).attr('disabled', 'disabled');
		$('#reg_buy_'+event).attr('disabled', 'disabled');
		$('#form_info_'+event).show();
		$('#form_info_'+event).html('...');
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({spiders: spiders, event: event }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#form_info_'+event).html(data.message);
				}
				else {
					$('#form_info_'+event).html(data.message ? data.message : i18n('error'));
					$('#spiders_'+event).attr('disabled', '');
					$('#reg_buy_'+event).attr('disabled', '');
				}
			}
		});
		return false;
	},
	download: function(toon, format, cost, force) {
		if (!force && !confirm(i18n('Are you sure?'))) return false;
		var self = this;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({toon: toon, format:format }),
			success: function(data) {
				if (data.result == 'ok') {
					$('#download_info_'+format).html(data.info);
					if (data.refresh) {
						setTimeout(function() {self.download(toon, format, cost, true)}, 30000);
					}
				}
				else {
					alert(data.message ? data.message : i18n('error'));
				}
			}
		});
		return false;
	},
	postMessage: function() {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({message: $('#message_text').val()}),
			success: function(data) {
				if (data.result == 'ok') {
					$('#messages').html(data.messages);
				}
				else {
					alert(data.error);
				}
			}
		});
		$('#message_text').val('');
		return false;
	},
	expandPlayer: function(v){
		if (v) {
			$('#player_container').addClass('player_expanded');
		}
		else {
			$('#player_container').removeClass('player_expanded');
		}
		document.cookie='expanded='+(v?1:0)+'; path=/; expires=Mon, 01-Jan-2020 00:00:00 GMT';
		return false;
	},
	toggleAttachSound: function() {
		var s = $('#sound_uploader');
		if (s.is(':visible')) {
			s.hide();
			$('#attachsound_link').removeClass('active');
		}
		else {
			s.show();
			$('#attachsound_link').addClass('active');
		}
	},
	toggleDownload: function() {
		var s = $('#download_links');
		if (s.is(':visible')) {
			s.hide();
			$('#download_link').removeClass('active');
		}
		else {
			s.show();
			$('#download_link').addClass('active');
		}
		return false;
	},
	spam: function(message_id, spam) {
		if (spam == 1) {
			if (!confirm(i18n('This message will be sent to administrator.'))) return false;
		}
		$.ajax({
			type: 'POST',
			url: location.href,
			data: ({message: message_id, spam: spam}),
			success: function(data) {
				if (data.result == 'ok') {
					$('#messages').html(data.messages);
				}
				else {
					alert(data.error);
				}
			}
		});
		return false;
	},
	status: function() {
		$.ajax({
			type: 'POST',
			url: '/status',
			data: {url:location.href},
			success: function(data) {
			
			}
		});
	},
	sendtosand: function() {
		if (!confirm(i18n('Send to sandbox?'))) return false;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {sendtosand:1},
			success: function(data) {
				
			}
		});
		return false;
	},
	currency: 'RUB',
	showPay: function(pay, currency) {
		$('#reg_type').val(pay);
		$('.pay_switch').hide();
		$('.pay_' + pay).show();
		$('.a_pay').removeClass('selected');
		$('.a_' + pay).addClass('selected');
		if (pay == 'smsbil') $('.pay_sum').hide();
		else $('.pay_sum').show();
		if (!currency) currency = 'RUB';
		if (this.currency != currency) {
			this.currency = currency;
			this.checkBuySpidersForm(1);
		}
		var txt = '1 '+i18n(currency)+' = <b class="red">' + CURRENCY[currency] + '</b> ' + i18n('spiders');
		
		$('#exchnage_rate').html(txt);
		$('#currency').html(i18n(currency));
		return false;
	},
	updateSmsTariffs: function(o) {
		var c = $('#sms_country').val();
		$.ajax({
			type: 'POST',
			url: '/spiders/sms/',
			data: {country:c, operator:o==null?'':o},
			success: function(data) {
				if (data.operators) {
					var list=$('#sms_operator');
					list.find('option').remove();
					for (var i in data.operators) {
						list.append('<option value="'+data.operators[i]+'">'+data.operators[i]+'</option>');
					}
				}
				if (data.html) {
					$('#tariffs').html(data.html);
				}
			}
		});
		return false;
	},
	setNickColor: function(color) {
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {color:color},
			success: function(data) {
				if (data.result == 'ok') {
					location.reload();
				}
			}
		});
		return false;
	},
	removeMedal: function(medal) {
		if (!confirm(i18n('Are you sure?'))) return false;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {removemedal:medal},
			success: function(data) {
				if (data.result == 'ok') {
					$('#medal_'+medal).remove();
				}
			}
		});
		return false;
	},
	removeDraft: function() {
		if (!confirm(i18n('Are you sure?'))) return false;
		$.ajax({
			type: 'POST',
			url: location.href,
			data: {removedraft:1},
			success: function(data) {
				if (data.result == 'ok') {
					location.href = data.redirect;
				}
			}
		});
		return false;
	},
	switchAlbum: function(id, link) {
		$.ajax({
			type: 'POST',
			url: '/profile/',
			data: ({album:1, toon: id}),
			success: function(data) {
				if (data.result == 'ok') {
					if (data['in']) $(link).html(i18n('In album'));
					else $(link).html(i18n('Not in album'));
				}
			}
		});
		return false;
	},
	moderatorVote: function(id, vote, cnt) {
		$.ajax({
			type: 'POST',
			url: '/admin/help/',
			data: ({toon_id:id, vote: vote}),
			success: function(data) {
				if (data.result == 'ok') {
					//alert('ok ;)');
					if (vote > 1 && data.hide) $('.toon_preview_'+id).fadeOut();
					$('.toon_preview_'+id+' .selected').removeClass('selected');
					$('.toon_preview_'+id+' .mvote'+vote).addClass('selected');
					$('#moderator_help .selected').removeClass('selected');
					$('#moderator_help .mvote'+vote).addClass('selected');
				}
			}
		});
		return false;
	}
}
var m;
$(function(){
	m = new Main();
})
