var Nieroty = {

	start: function() {
		this.lightbox();
		this.hideMessageBox();
		this.removeWithAjax();
		this.removeUploadWithAjax();
		this.removeItemPicker();
		this.datePicker();
		//this.payments();
		this.editForm();
		this.selectCategory();
		this.tableSelect();
		this.pagination();
		this.ajaxSuspendUser();
		this.ajaxAcceptUser();
		this.ajaxRemoveUser();
		//this.statistics();
		this.dateTime();
		this.pictureUploader();
		this.itemPicker();
		this.faq();
		this.emailPicker();
		this.tooltip();
		this.calculatePrice();
		this.shortCompanyName();
		this.formErrors();
	},

	formErrors: function() {
		if (errors.length && document.URL.match(/\/register/)) {
			$.each(errors, function(index, error) {
				$('form div:has(select):has(label[for='+error+']), form div:has(input[type=text][name='+error+']), form div:has(input[type=password][name='+error+']), form div:has(input[type=checkbox][name='+error+']), form div:has(select[name^='+error+'])').addClass('error');
			});
			$('form > div:has(select), form > div:has(input[type=text]), form > div:has(input[type=password]), form div:has(input[type=checkbox])').each(function() {
				if ($(this).find('input').length == 2) {
					$(this).find('input').each(function() {
						var url = ($.inArray($(this).attr('name'), errors) > -1) ? 'invalid.gif' : 'valid.gif';
						$(this).parent().append($('<img />').attr('src', '/img/validation/'+url).addClass('valid'));
					});
					$(this).find('img').eq(1).before($('<span />').text(' /'));
				}
				else {				
					if ( $(this).find('input[type=text]').length == 0 || $(this).hasClass('error') || $(this).find('input').attr('value')) {
						var url = ($(this).hasClass('error')) ? 'invalid.gif' : 'valid.gif';
						$(this).append($(' <img />').attr('src', '/img/validation/'+url).addClass('valid'));
					}
				}
			});
		}
	},

	shortCompanyName: function() {
		$('#company_name_short').focus(function() {
			if ( ! $(this).attr('value'))
			{
				$(this).attr('value', $('#company_name').attr('value'));
			}
		});
	},

	calculatePrice: function() {
		var price_td = $('td#price');
		var price = 0;

		if (price_td) {
			price_td.parents('table').find('input').each(function() {
				var cur_price = parseFloat($(this).attr('value').replace(',', '.')) * parseFloat($(this).parent().prev().prev().text());
				price += cur_price ? cur_price : 0;
			});
			price_td.text(Math.round(price.toString() * 100) / 100 + ' PLN');
			setTimeout('Nieroty.calculatePrice()', 500);
		}
	},

	tooltip: function() {
		$('a.tooltip').each(function() {
			var tooltip = $(this);

			$.ajax({
				url: tooltip.attr('href'),
				success: function(html) {
					tooltip.qtip({
						content: html,
						hide: {when: 'mouseout', fixed: true},
						position: {adjust: {x: -5, y: -5}}
					})
					.click(function() {
						return false;
					});
				}
			});
		});
	},

	lightbox: function() {
		$('a[href$=png], a[href$=jpg]').lightBox({
			imageLoading: '/img/lightbox/lightbox-ico-loading.gif',
			imageBtnClose: '/img/lightbox/lightbox-btn-close.gif',
			imageBtnPrev: '/img/lightbox/lightbox-btn-prev.gif',
			imageBtnNext: '/img/lightbox/lightbox-btn-next.gif',
			txtImage: 'Zdjęcie',
			txtOf: 'z'
		});
	},

	hideMessageBox: function() {
		$('#message').click(function() {
			$(this).slideToggle("slow");
		});
	},

	removeWithAjax: function () {
		$('table.data:not(.upload) td.remove a').click(function() {
			if (confirm("Czy na pewno chcesz usunąć tę pozycję z listy?")) {
				var a = $(this);
				$.ajax({
					url: $(this).attr('href'),
					success: function() {
						if ($('table.data tr:has(td)').length > 1) {
							a.parent().parent().fadeOut('slow', function() {
								$(this).remove()
							});
						}
						else {
							location.reload();
						}
					}
				});
			}
			return false;
		});
	},

	removeUploadWithAjax: function () {
		$('table.data.upload.items td.remove a').unbind().click(function() {
			if ($(this).parent().prev().find('a').length == 0 || confirm("Czy na pewno chcesz usunąć to zdjęcie?")) {
				var a = $(this);
				$.ajax({
					url: $(this).attr('href'),
					success: function() {
						a.parent().parent().fadeOut('slow', function() {
							var table = $(this).parents('table').eq(0);
							$(this).remove();
							Nieroty.correctNumerationInUploadTable(table);
						});
					}
				});
			}
			return false;
		});
	},

	datePicker: function() {
		var dates = $('form div.date input[type=text]').datepicker({
			changeMonth: true,
			changeYear: true,
			dateFormat: 'yy-mm-dd',
		onSelect: function(selectedDate) {
				var option = (this.id == "start_time" || this.id == 'date_from' || this.id == 'promotion_date_from') ? "minDate" : "maxDate";
				var instance = $(this).data("datepicker");
				var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
				dates.not(this).datepicker("option", option, date);
			}
		});
	},

	payments: function() {
		$('table.payments tr td').click(function() {
			if ( ! $(this).find('input').size()) {
				var value = $(this).text();
				var amount = value.split(String.fromCharCode(160))[0];
				var currency = value.split(String.fromCharCode(160))[1];
				var td = $(this);
				$(this).text('').append($('<input />').attr('value', amount)).find('input').select().change(function() {
					var accountTypeId = td.prevAll().length;
					var chargeId = td.parent().prevAll().length;
					$.post('/admin/payments/change/'+accountTypeId+'/'+chargeId, {value : $(this).val()}, function(saved_amount) {
						td.text(saved_amount);
					});
				}).blur(function() {
					$(this).change();
				}).keyup(function(e) {
					if(e.keyCode == 13) {
						$(this).blur();
					}
				});
			}
		});
	},

	editForm: function () {
		var editButtons = $('form.preview div.buttons').html();
		$('form.preview input').attr('disabled', 'disabled');
		$('form.preview div.buttons').html('<a href="#" class="edit">Edytuj</a>').find('a').click(function() {
			$(this).parents('form').find('input').removeAttr('disabled');
			var url = $(this).parents('form').attr('action')+'/edit_buttons';
			$(this).parents('form').find('.buttons').html(editButtons);
		});
	},

	selectCategory: function() {
		$('.select_category select').not(':last').change(function() {
			var selectBox = $(this);
			var categoryId = $(this).attr('value');
			$.ajax({
				url: '/search/get_'+(selectBox.parent().hasClass('negotiation') ? 'negotiation_' : '')+'subcategories/'+categoryId,
				success: function(data) {
					selectBox.next().find('option').remove();
					selectBox.next().next().find('option').remove();
					$.each($.parseJSON(data), function(index, name) {
						selectBox.next().append($('<option/>').attr('value', index).text(name));
					});
				}
			});
		});
	},

	tableSelect: function() {
		var table = $('table.data.more');
		$('<div />').addClass('table').append($('<div />').addClass('table-slider')).insertBefore(table).find('div').append(table);

		table.parent().before('<h2>pokaż:</h2><ul></ul>');
		var ul = table.parent().parent().find('ul');
		table.find('thead th').each(function() {
			var th = $(this);
			var label = $(this).text();
			$('<li>')
				.append($('<input />').attr({'type': 'checkbox', 'id': label, 'checked': 'checked'}))
				.append($('<label />').attr('for', label).text(label))
				.appendTo(ul).find('input').change(function() {
					var col_number = $(this).parent().prevAll('li').length + 1;
					var column = table.find("tr td:nth-child("+col_number+"), tr th:nth-child("+col_number+")");
					if ($(this).is(':checked')) {
						column.removeAttr('style');
						ul.find('input').removeAttr('disabled');
					}
					else {
						var checked_inputs = ul.find('input:checked');
						if (checked_inputs.size() == 1) {
							checked_inputs.attr('disabled', 'disabled');
						}
						column.attr('style', 'display: none');
					}
				});
		});

		var prev = table.parent().parent().prev();
		if (prev && prev.attr('class') == 'pagination') {
			prev.insertBefore(table.parent());
		}

		var disable_fields = Params.get('disable_fields');
		if (disable_fields) {
			disable_fields = disable_fields.split('.');
			$('div.table > ul > li input').each(function(i, checkbox) {
				if ($.inArray(i.toString(), disable_fields) > -1) {
					$(checkbox).click();
					$('.table table tr td:nth-child('+(i+1)+'), .table table tr th:nth-child('+(i+1)+')').attr('style', 'display: none');
				}
			});
		}
	},

	pagination: function() {
		if ($('div.table > ul')) {
			$('p.pagination a').click(function() {
				var disable_fields = [];
				$('div.table > ul > li input').each(function(i) {
					if ($(this).is(':not(:checked)'))
					{
						disable_fields.push(i);
					}
				});
				Params.add('disable_fields', disable_fields.join('.'));
				var targetUrl = $(this).attr('href').indexOf('?') > -1 ? $(this).attr('href').slice(0, $(this).attr('href').indexOf('?')) : $(this).attr('href');
				$(this).attr('href', targetUrl+Params.getQuery());
			});
		}
	},

	ajaxSuspendUser: function() {
		$('td.suspend.ajax a').click(function() {
			var a = $(this);
			var message = 'Czy na pewno chcesz ' + (a.text() == 'odwieś' ? 'odwiesić' : 'zawiesić') + ' tego użytkownika?';
			if (confirm(message)) {
				$.ajax({
					url: a.attr('href'),
					success: function(html){
						a.text(a.text() == 'zawieś' ? 'odwieś' : 'zawieś');
						a.parents('tr').toggleClass('suspended');
					}
				});
			}
			return false;
		});
	},

	ajaxAcceptUser: function() {
		$('td.accept.ajax a').click(function() {
			var a = $(this);
			var message = 'Czy na pewno chcesz zaakceptować tego użytkownika?';
			if (confirm(message)) {
				$.ajax({
					url: a.attr('href'),
					success: function(html){
						if (a.parent().parent().parent().find('tr:has(td)').size() == 1) {
							location.reload();
						}
						else {
							a.parent().parent().remove();
						}
					}
				});
			}
			return false;
		});
	},

	ajaxRemoveUser: function() {
		$('td.remove.ajax a').click(function() {
			var a = $(this);
			var message = 'Czy na pewno chcesz usunąć tego użytkownika?';
			if (confirm(message)) {
				$.ajax({
					url: a.attr('href'),
					success: function(html){
						a.parent().remove();
					}
				});
			}
			return false;
		});
	},

	statistics: function() {
		$('form.statistics select').change(function() {
			$(this).parents('form').submit();
		});

		$('form.statistics div.buttons').remove();
	},

	dateTime: function() {
		var daytime = $('.daytime');

		if (daytime) {
			var now = daytime.find('input').eq(0);
			var later = daytime.find('input').eq(1);

			now.change(function() {
				later.parent().find('select, input').attr('disabled', 'disabled');
				later.removeAttr('disabled');
			});

			later.change(function() {
				later.parent().find('select, input').removeAttr('disabled');
			});

			daytime.find('input[type=radio]:checked').change();
		}
	},

	pictureUploader: function() {
		$('.add-next-photo').click(function() {
			var table = $(this).parent().prev();

			if (table.find('tr:has(td)').length < 9) {
				var form_id = $('input[name=form_id]').attr('value');

				var make_tr = function(id) {
					return $('<tr />')
						.append($('<td />').text(id))
						.append($('<td />').append($('<img />').attr('src', '/img/thumbnail.png')))
						.append($('<td />').append($('<input />').attr('type', 'file').attr('id', 'image_' + id).attr('name', 'image_' + id)))
						.append($('<td />').addClass('preview'))
						.append($('<td />').addClass('remove').append($('<a />').attr('href', '/account/sale/remove_picture/'+form_id+'/'+id).text('usuń')));
				}

				var new_id = table.find('tr:has(td)').length + 1;
				table.find('tbody').append(make_tr(new_id));
				Nieroty.removeUploadWithAjax();
			}
			
			return false;
		});
	},

	itemPicker: function() {
		$('.add-next-item').click(function() {
			var table = $(this).parent().prev();

			var select = table.find('tr:has(td)').eq(0).find('td:has(select)').eq(0).html();

			var make_tr = function(id) {
				return $('<tr />')
					.append($('<td />').text(id))
					.append($('<td />').append($('<input />').attr('id', 'item_'+id+'_name').attr('name', 'item_'+id+'_name')))
					.append($('<td />').append($('<input />').attr('id', 'item_'+id+'_price').attr('name', 'item_'+id+'_price')))
					.append($('<td />').append($('<input />').attr('id', 'item_'+id+'_amount').attr('name', 'item_'+id+'_amount')))
					.append($('<td />').append(select.replace(new RegExp("_1_", 'g'), "_"+id+"_")))
					.append($('<td />').addClass('remove').append($('<a />').attr('href', '#').text('usuń')));
			}

			var new_id = table.find('tr:has(td)').length + 1;
			table.find('tbody').append(make_tr(new_id));
			Nieroty.removeItemPicker();
			return false;
		});
	},

	removeItemPicker: function() {
		$('table.data.items.form td.remove a').unbind('click').click(function() {
			var table = $(this).parents('table');

			if (table.find('tr:has(td)').length > 1) { //&& confirm('Czy na pewno chcesz usunąć ten element z lsity?')) {
				$(this).parent().parent().fadeOut('slow', function() {
					$(this).remove();
					Nieroty.correctNumerationInTable(table);
				});
			}
			else
			{
				$(this).parent().parent().find('input').attr('value', '');
			}
			return false;
		});
	},

	correctNumerationInTable: function(table) {
		table.find('tbody tr').each(function(index) {
			var previous_id = parseInt($(this).find('td').eq(0).text());
			var current_id = index + 1;

			if (current_id != previous_id) {
				$(this).find('td').eq(0).html(current_id);
				$(this).find('input, select').each(function() {
					$(this).attr('name', $(this).attr('name').replace(new RegExp("_"+previous_id+"_", 'g'), '_'+current_id.toString()+'_'));
					$(this).attr('id', $(this).attr('id').replace(new RegExp('_'+previous_id+'_', 'g'), '_'+current_id.toString()+'_'));

					$(this).attr('name', $(this).attr('name').replace(new RegExp("_"+previous_id+"$", 'g'), '_'+current_id.toString()));
					$(this).attr('id', $(this).attr('id').replace(new RegExp('_'+previous_id+'$', 'g'), '_'+current_id.toString()));
				});
				$(this).find('select').each(function() {
				});
			}
		});
	},

	correctNumerationInUploadTable: function(table) {
		table.find('tbody tr').each(function(index) {
			var previous_id = parseInt($(this).find('td').eq(0).text());
			var current_id = index + 1;

			if (current_id != previous_id) {
				$(this).find('td').eq(0).text(current_id);
				$(this).find('td').eq(2).find('input').attr('id', 'image_'+current_id).attr('name', 'image_'+current_id);
				$(this).find('td').eq(3).find('a').attr('href', function() {
					return $(this).attr('href').replace(/image_\d\./, 'image_'+current_id+'.');
				});
				$(this).find('td').eq(4).find('a').attr('href', function() {
					return $(this).attr('href').replace(/\d+$/, current_id);
				});
			}
		});
	},

	emailPicker: function() {
		$('.add-next-email').click(function() {
			var table = $(this).parent().prev();

			var select = table.find('tr:has(td)').eq(0).find('td:has(select)').eq(0).html();

			var make_tr = function(id) {
				return $('<tr />')
					.append($('<td />').text(id))
					.append($('<td />').addClass('big').append($('<input />').attr('id', 'email_'+id).attr('name', 'email_'+id)))
					.append($('<td />').addClass('remove').append($('<a />').attr('href', '#').text('usuń')));
			}

			var new_id = table.find('tr:has(td)').length + 1;
			table.find('tbody').append(make_tr(new_id));
			Nieroty.removeItemPicker();
			return false;
		});
	},

	faq: function() {
		$('.faq .answer').hide();
		$('.faq .question').attr('style', 'cursor:pointer').click(function() {
			$(this).toggleClass('active');
			$(this).next().next().toggle();
		});
	},
	
}

var Banners = {

	state: true,

	construct: function() {
		this.menu = $('#banners ul li');
		this.banners = $('#banners div.banner');

		this.menu.find('a').click(function() {
			Banners.change($(this).parent().prevAll().size());
			Banners.state = false;
			return false;
		});

		this.start();
	},

	change: function(i) {
		this.menu.removeClass('active').eq(i).addClass('active');
		this.banners.hide().eq(i).show();
	},

	start: function() {
		if (this.state) {
			var active = $('#banners ul li.active');
			var i = (active.size() ? active.prevAll().size() + 1 : 0) % this.menu.size();
			this.change(i);
			setTimeout('Banners.start()', 5000);
		}
	}

}

var Params = {

	construct: function() {
		this.query = document.location.search.slice(1);
		this.search = {};

		if (this.query) {
			$.each(this.query.split('&'), function(i, expr) {
				var key = expr.split('=')[0];
				var value = expr.split('=')[1];
				Params.add(key, value);
			});
		}
	},

	get: function(key) {
		return this.search[key];
	},

	add: function(key, value) {
		this.search[key] = value.toString();
	},

	getQuery: function() {
		return $.param(this.search) ? '?'+$.param(this.search) : '';
	}

}

$().ready(function () {
	Params.construct();
	Nieroty.start();
	Banners.construct();
});
