// Диалоги.

var dialog = (function() {
	

	// Конструктор диалога оплаты статусов и рейтингов
	var SpendMoney = function(target /* Цель оплаты */) {

		// Проверка типа аргумента. Если строка, которая совпадает с именем поля
		// в SpendMoney.defaultTypes, то настройки используются оттуда
		// Если объект (с подходящими полями), то используются настройки из
		// него.
		// Все остальное - возвращается undefined.
		if (typeof target === 'string' && SpendMoney.defaultTypes[target] !== undefined) {
			this.options = SpendMoney.defaultTypes[target];
		} else if (typeof target === 'object') {
			this.options = target;
		} else {
			//console.log('Конструктор SpendMoney должен принимать строку или объект.');
			return undefined;
		}
		this.init();

	};

	// Типы диалогов
	SpendMoney.defaultTypes = {
		vip : {
			id : 'vip',
			name : 'Оплатить статус VIP',
			tabs: [	{name: '1 день', price: 6, opCode : 'VIP1'}, {name: '10 дней', price: 34, opCode : 'VIP10'}, {name: '60 дней', price: 135, opCode : 'VIP60'} ],
			successPayed : function(opCode) {
				var ts = new Date().getTime();
				$.getJSON("ajax/paid/process?opCode=" + opCode, { data: ts }, function(response) {
					if (response.error == null) {
						dialog.messageBox("Поздравляем! Теперь Вы - VIP!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						$(".accountValue").html(response.moneyLeft);
						$("#personStatus").html(decodeURIComponent(response.status.replace(/\+/g, " ")));
						$("#personStatusExpiring").html("<b>Истекает</b> " + decodeURIComponent(response.expiring.replace(/\+/g, " ")));
						$(".userProfileCol").addClass(response.cssClass);
						$("#miniBlock").attr('class', 'miniBlock block advVIP');
						$("#becomeVIP").remove();
					} else {
						dialog.messageBox(decodeURIComponent(response.error.replace(/\+/g, " ")));
					}
				});
			}
		},
		balance : {
			id : 'balance',
			name : 'Пополнить свой счёт',
			tabs: [	{name: '34 рубля', price: 34, opCode : 'BALANCE1'},	{name: '85 рублей', price: 85, opCode : 'BALANCE2'}, {name: '200 рублей', price: 200, opCode : 'BALANCE3'} ],
			successPayed : function(opCode) {
				var ts = new Date().getTime();
				$.getJSON("ajax/setStatus/1/10", { data: ts}, function(response) {
					if (response.error == null) {
						dialog.messageBox("Ваш счёт пополнен (на вашей странице всегда виден баланс вашего счёта)");
					} else {
						dialog.messageBox("Произошла ошибка.");
					}
				});
			}
		},
		star : {
			id : 'star',
			name : 'Оплатить статус звезды',
			tabs: [	{name: '1 день', price: 12, opCode : 'STAR1'},	{name: '10 дней', price: 85, opCode : 'STAR10'}, {name: '60 дней', price: 295, opCode : 'STAR60'} ],
			successPayed : function(opCode) {
				var ts = new Date().getTime();
				$.getJSON("ajax/paid/process?opCode=" + opCode, { data: ts }, function(response) {
					if (response.error == null) {
						dialog.messageBox("Поздравляем! Теперь Вы - звезда!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						$(".accountValue").html(response.moneyLeft);
						$("#personStatus").html(decodeURIComponent(response.status.replace(/\+/g, " ")));
						$("#personStatusExpiring").html("<b>Истекает</b> " + decodeURIComponent(response.expiring.replace(/\+/g, " ")));
						$(".userProfileCol").addClass(response.cssClass);
						$("#miniBlock").attr('class', 'miniBlock block advStar');
						$("#becomeStar").remove();
						$("#becomeVIP").remove();
					} else {
						dialog.messageBox(decodeURIComponent(response.error.replace(/\+/g, " ")));
					}
				});
			}
		},
		vote : {
			funId : '',
			successParent : null,
			id : 'vote',
			name : 'Проголосовать за историю',
			tabs: [	{name: '1 голос', price: 34, opCode : 'VOTE1'},	{name: '3 голоса', price: 85, opCode : 'VOTE3'}, {name: '10 голосов', price: 210, opCode : 'VOTE10'} ],
			successPayed : function(opCode) {
				var ts = new Date().getTime();
				$.getJSON("ajax/paid/process?opCode=" + opCode + ":" + funId, { data: ts }, function(response) {
					if (response.error == null) {
						$("#likeCounter").html('<span class="arrow"></span>' + response.likes);
						$(".rating").html('<b>Рейтинг:</b> ' + response.rating);
						if (opCode.substr(4) == "1")
							dialog.messageBox("Ваш голос учтён!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						else
							dialog.messageBox("Голоса учтены!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						$(".accountValue").html(response.moneyLeft);
					} else {
						dialog.messageBox(decodeURIComponent(response.error.replace(/\+/g, " ")));
					}
				});
			}
		},
		gift : {
			personid : '', 
			id : 'gift',
			name : 'Сделать подарок',
			tabs: [
			       {name: 'Книга', price: 34, opCode : 'GIFT1', picCode : 'Book1'},
			       {name: 'Книга', price: 34, opCode : 'GIFT2', picCode : 'Book2'},
			       {name: 'Дракоша', price: 34, opCode : 'GIFT3', picCode : 'Dragon'},
			       {name: 'Шампанское', price: 34, opCode : 'GIFT4', picCode : 'Champagne'},
			       {name: 'Коктейль', price: 34, opCode : 'GIFT5', picCode : 'Drink'},
			       {name: 'Кейс с деньгами', price: 34, opCode : 'GIFT6', picCode : 'MoneyCase'},
			       {name: 'Роза', price: 34, opCode : 'GIFT7', picCode : 'Rose'},
			       {name: 'Букет цветов', price: 34, opCode : 'GIFT8', picCode : 'Flowers1'},
			       {name: 'Букет роз', price: 34, opCode : 'GIFT9', picCode : 'Flowers2'},
			       {name: 'Букет цветов в вазе', price: 34, opCode : 'GIFT10', picCode : 'Flowers3'},
			       {name: 'Золотые слитки', price: 34, opCode : 'GIFT11', picCode : 'Gold'},
			       {name: 'Оскар', price: 34, opCode : 'GIFT12', picCode : 'Oscar'},
			       {name: 'Автомобиль', price: 85, opCode : 'GIFT13', picCode : 'Car'},
			       {name: 'Корона', price: 85, opCode : 'GIFT14', picCode : 'Crown'},
			       {name: 'Корона', price: 85, opCode : 'GIFT15', picCode : 'Crown2'},
			       {name: 'Звезда на «Алее звезд»', price: 85, opCode : 'GIFT16', picCode : 'MovieStar'},
			       {name: 'Золотое яйцо', price: 85, opCode : 'GIFT17', picCode : 'Egg'},
			       {name: 'Кольцо', price: 85, opCode : 'GIFT18', picCode : 'Ring'},
			       {name: 'Рубин', price: 85, opCode : 'GIFT19', picCode : 'Stone1'},
			       {name: 'Бриллиант', price: 85, opCode : 'GIFT20', picCode : 'Stone2'},
			       {name: 'Замок', price: 210, opCode : 'GIFT21', picCode : 'Castle'},
			       {name: 'Банк', price: 210, opCode : 'GIFT22', picCode : 'Bank'},
			       {name: 'Лайнер', price: 210, opCode : 'GIFT23', picCode : 'Ship'},
			       {name: 'Райский остров', price: 210, opCode : 'GIFT24', picCode : 'Island'}
			      ],
			successPayed : function(opCode) {
				$.getJSON("ajax/paid/process?opCode=" + opCode + ":" + personid, function(response) {
					if (response.error == null) {
						dialog.messageBox("Вы сделали подарок!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						$(".accountValue").html(response.moneyLeft);
						getGifts();
					} else {
						dialog.messageBox(decodeURIComponent(response.error.replace(/\+/g, " ")));
					}
				});
			}
		},
		promote : {
			funId : '',
			successParent : null,
			id : 'promote',
			name : 'Поднять историю на главную страницу',
			tabs: [	{name: 'Опубликовать', price: 85, opCode : 'PROMOTE'} ],
			successPayed : function(opCode) {
				var ts = new Date().getTime();
				$.getJSON("ajax/paid/process?opCode=" + opCode + ":" + funId, { data: ts }, function(response) {
					if (response.error == null) {
						
							dialog.messageBox("Ваша история теперь на главной!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
				
						$(".accountValue").html(response.moneyLeft);
					} else {
						dialog.messageBox(decodeURIComponent(response.error.replace(/\+/g, " ")));
					}
				});
			}
		}, 
		
		top100 : {
			rating : 10,
			funId : '',
			successParent : null,
			id : 'top100',
			name : 'Опубликовать в TOP100 <br/>(минимальный рейтинг истории в ТОП100 : ' ,
			tabs: [	{name: '1 голос', price: 34, opCode : 'VOTE1'},	{name: '3 голоса', price: 85, opCode : 'VOTE3'}, {name: '10 голосов', price: 210, opCode : 'VOTE10'} ],
			successPayed : function(opCode) {
				var ts = new Date().getTime();
				$.getJSON("ajax/paid/process?opCode=" + opCode + ":" + funId, { data: ts }, function(response) {
					if (response.error == null) {
						$("#likeCounter").html('<span class="arrow"></span>' + response.likes);
						$(".rating").html('<b>Рейтинг:</b> ' + response.rating);
						if (opCode.substr(4) == "1")
							dialog.messageBox("Ваш голос учтён!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						else
							dialog.messageBox("Голоса учтены!<br /><br />На Вашем счёте осталось <span class=\"accountValue\">" + response.moneyLeft + "</span>");
						$(".accountValue").html(response.moneyLeft);
					} else {
						dialog.messageBox(decodeURIComponent(response.error.replace(/\+/g, " ")));
					}
				});
			}
		},

	};

	SpendMoney.prototype = {
		constructor : SpendMoney,
		version : '1.0',
		dlgClass : 'dlgSpendMoney',
		layer : undefined,
		// Методы
		init : function() { // Инициализация диалога, создание его элементов.
			var giftsClass = "",
				layerWidth = 480;
			
			if (this.options.id  == 'gift') {
				giftsClass = "tabs-gifts";
				layerWidth = 850;
			}

			tempTemplate = "";
			
			if (smsWorking) {				
				tempTemplate += '<div class="paySms paymentType">' +
									'<p>Отправьте SMS с кодом:</p>' +
									'<p class="smsCode" id="dlgSpendMoney-smsCode-{id}">vip555-30</p>' +
									'<p>на короткий номер <span class="red">5554</span>.</p>' +
									'<p class="price">' +
										'<span class="caption" id="priceOfService">Стоимость услуги:</span>' +
										'<span id="dlgSpendMoney-smsPrice" class="red">{price}</span> <span>руб. (с НДС).</span>' +
									'</p>' +
								'</div>' + 
								'<p class="aCenter">или</p>';
			};
			
			tempTemplate += '<div class="payAccount paymentType">' +
								'<p>Оплатите со своего счета:</p>' +
								'<p class="price">' +
								'<span class="caption">На вашем счете:</span>' +
								'<span class="count red" id="dlgSpendMoney-accountPrice">{currBalance}</span><br />' +
								'<span class="caption" id="priceOfService">Стоимость услуги:</span>' +
								'<span class="count red" id="dlgSpendMoney-accountPrice">{price}.00</span>' +
								'</p>' +
								'<div class="paymentButton">' +
									'<button id="btnPayFromAccount-{id}">Оплатить</button>' +
								'</div>' +
							'</div>';
			
			var thisObj = this,
				layer = $('<div class="' + this.dlgClass + '" id="' + this.dlgClass + '-' + this.options.id + '">' +
								'<button class="btnClose">Закрыть</button>' +
								'<h2>' + this.options.name + '</h2>' +
							'</div>'),			
				tabs = $('<div id="tabs"><div class="' + giftsClass + '"><ul class="tabs' + giftsClass + '"></ul></div></div>'),		
				template = tempTemplate,
				content;

			layer.append(tabs);
			
			for (var i = 0; i < this.options.tabs.length; i++) {

				var id = this.options.id + i;
				
				if (this.options.id != 'gift') {
					$('<li><a href="#' + id + '">' + this.options.tabs[i].name + '</a></li>')
						.appendTo($('ul', tabs));
				} else {
					$('<li><a href="#' + id + '" title="' + this.options.tabs[i].name + '"><img src="resources/images/rnb/gifts/gift' + this.options.tabs[i].picCode + '.png" alt="' + this.options.tabs[i].name + '"></img></a></li>')
						.appendTo($('ul', tabs));
				}
				
				content = $(template
						.replace(/{price}/g, this.options.tabs[i].price)
						.replace(/{currBalance}/g, currentBalance)
						.replace(/{id}/g, i))
					.appendTo(tabs)
					.wrapAll('<div id="' + id + '" />');
				
				if (this.options.id == 'gift') {
					$('#priceOfService', content).html('Стоимость подарка:');
				}

				$('#btnPayFromAccount-' + i, layer)
					.button()
					.data({'price': thisObj.options.tabs[i].price, 'opCode' : thisObj.options.tabs[i].opCode})
					.unbind('click')
					.click(function(event) {
						//dialog.messageBox(thisObj.options.name + ': выполнено. Заплачено ' + $(this).data('price') + ' монет');
						thisObj.options.successPayed.call(null, $(this).data('opCode'));
						thisObj.close();
					});
			}

			tabs.tabs();
			
		/*	var giftsWidth = 130 * $('ul li', tabs).length;
			$('ul', tabs).css('width', giftsWidth + 'px');  */

			$('.btnClose', layer).click(function(event) {
				thisObj.close();
			}),

			layer.dialog({
				autoOpen : false,
				modal : true,
				resizable : false,
				width : layerWidth
			});

			this.layer = layer;

		},
		open : function() { // Открытие диалога

			this.layer.dialog('open');

		},
		close : function() { // Закрытие

			this.layer.dialog('close');
			//console.log('SpendMoney: Закрыто');

		},
		
		setMinRat : function(rat) {
			this.minRat = rat;
		},

		getMinRat : function() {
			return this.minRat;
		}

	};

	var messageBox = function(msg, header) {

		var template = '<div class="messageBox">' + 
							'<button class="btnClose">закрыть</button>' +
							'<h2></h2>' +
							'<p></p>' + 
							'<div class="submitButton">' + 
								'<button id="btnOk">ОК</button>' + 
							'</div>' +
						'</div>',
		
		layer = $(template),
		header = header || 'Информация';

		$('h2', layer).html(header);
		$('p', layer).html(msg);

		layer.dialog({
			autoOpen : false,
			minHeight : 100,
			modal : true,
			resizable : false,
			width : 300
		});

		layer.dialog('open');

		$('.btnClose', layer).click(function(event) {
			layer.dialog('destroy').remove();
		});

		$('#btnOk', layer).click(function(event) {
			layer.dialog('destroy').remove();
		});

	};
	
	// Всплывающий слой для показа событий и сообщений. Метод show() должен принимать JSON со списком событий или сообщений.
	var popupEvents = {
		
		list : undefined,
		layer: undefined,
		opened: false,
		
		open: function(json, type, target) {
			
			popupEvents.close();
			
			popupEvents.template = '<div class="popupEvents" id="popupEvents"><h2>{head_text}</h2><ul id="popupListEvents"></ul><div class="popupFooter"><a href="#">Посмотреть все</a></div></div>'; 
			
			if (type == 'messages') {
				popupEvents.template = popupEvents.template.replace(/{head_text}/g, 'Cообщения');
			}
			
			if (type == 'events') {
				popupEvents.template = popupEvents.template.replace(/{head_text}/g, 'События');
			}
			
			this.layer = $(this.template);
			this.layer.click(function(){
				if (type == 'messages') {
					location.href = 'messages';
				}
				if (type == 'events') {
					location.href = 'myevents';
				}
			});
			this.list = $("#popupListEvents", this.layer);
			this.layer
				.hide()
				.appendTo('body')
				.css({
					'left': $(target).offset().left + 'px',
					'top': $(target).offset().top + 24 + 'px'
				})
				.slideDown('fast', function() {
					popupEvents.opened = true;
				});
			
			$(document).unbind('click').click(function(event) {
				if (popupEvents.opened === true && $(event.target)[0].className !== 'popupEvents' && $(event.target).parents('.popupEvents').length === 0) {
					popupEvents.close();
				}
			}); 
			
			if (type == 'messages') {
				popupEvents.fillMessagesBlock(json);
			} else {
				popupEvents.fillEventsBlock(json);
			}
			
			
		},
		
		fillMessagesBlock : function(json) {
			$.each(json, function(key, person) {
				var cityInfo = ' ';
				if (person.country != "") {
					cityInfo = person.country;
					if (person.city != "") {
						cityInfo += ", " + person.city;
					}      
				}
				onlineInfo = person.lastLogoff;
				if (person.online != "") {
					onlineInfo = "Сейчас на сайте";
				}
	//			if (person.newMessagesCount > 0) {
					popupEvents.list.append('<li>' +
												'<div class="popupEventUserPic"><img src="resources/images/userpics/id' + person.id + '_24.png"/></div>' +
												'<div class="popupEventText">' +
													'<span class="popupEventUserName">' + person.fullname + '</span>' +
													'<span class="popupEventUserOnline">' + onlineInfo + '</span>' +
												'</div>' +
												'<div class="popupEventText">' +
													'Отправил вам новых сообщений: <span class="popupEventCountMsg">' + person.newMessagesCount + '</span>,<br>' + 
													' всего : <span class="popupEventCountMsg">' + person.incMessagesCount + '</span>.'+
												'</div>' + 
											'</li>');
	//				}
			});
		},
		
		fillEventsBlock : function(json) {
			$.each(json, function(key, event) {
				
					popupEvents.list.append('<li>' +
												'<div class="popupEventUserPic"><img src="resources/images/userpics/id' + event.pic + '_24.png"/></div>' +
												'<div class="popupEventText">' +
													event.text +
												'</div>' + 
											'</li>');
					}
			);
		},
		
		close: function() {
			
			popupEvents.opened = false;
			
			$(document).unbind('click');
			
			$('.popupEvents')
				.slideUp('fast')
				.remove();
			
		}
		
	};

	// Возвращаем конструкторы и функции
	return {
		SpendMoney : SpendMoney,
		messageBox : messageBox,
		popupEvents: popupEvents
	};

})();
