﻿var NP	= {
	timeout:	1000,
	timeoutId:	null,
	lastFeedTimestamp:	0,
	testBannerEl:	null,
	skipTestBanner:	false,
	testBannerTimeoutId:	null,
	feedMod:	null,
	
	jsonsubmit:	function(frm, options) {
		frm	= $(frm);
		if (!options) {
			options = {};
		}
		if(!options.success) {
			options.success	= function (jd) {
				if (jd.messages) {
					NP.addMessages(jd.messages);
				}
			}
		}
		$.ajax({
			url:	frm.attr('action'),
			data:	frm.serialize(),
			dataType:	'json',
			type:	'post',
			success:	options.success
		});
		return true;
	},
	
	jsonlink:	function(a, options) {
		a	= $(a);
		if (!options) {
			options = {};
		}
		if(!options.success) {
			options.success	= function (jd) {
				if (jd.messages) {
					if (options.remove) a.remove();
					NP.addMessages(jd.messages);
				}
			}
		}
		$.ajax({
			url:	a.attr('href'),
			dataType:	'json',
			success:	options.success
		});
		return true;
	},
	
	addMessage:	function(msg) {
		$('#messages').append('<li>'+msg+'</li>');
		NP.setMessagesTimeout();
	},
	
	addMessages:	function(msgs) {
		$.each(msgs,function(k,v){NP.addMessage(v)});
	},
	
	setMessagesTimeout:	function() {
		var lis	= $('#messages').children();
		setTimeout(function(){lis.slideUp('slow')},5000);
	},

	update: function () {
		$.getJSON( BASE_URL + 'feed/update/' + NP.lastFeedTimestamp + '/' + NP.feedMod,
			function(data){
				NP.feed(data);
			}
			);
		NP.resetTimeout();
	},

	feed: function (data) {
		if (data._feed) {
			$.each(data._feed, function (k,v) {
				if ('string' == typeof v && 'string' == typeof k) {
					$('#'+k).html(v);
				}
				else if (v._runme) {
					eval(v._runme);
				}
			})
		}
		if (this.timeoutId) {
			clearTimeout(this.timeoutId);
		}
	},

	resetTimeout:	function () {
		if (this.timeoutId) {
			clearTimeout(this.timeoutId);
		}
		NP.timeoutId	= setTimeout(NP.update, NP.timeout);
	},

	testBannerRotate:	function () {
		return false;
	},

	Dim: {
		enable: function (options) {
			clearTimeout(NP.Dim.timeout);
			if (!NP.Dim.dimDiv) {
				NP.Dim.dimDiv	= $('<div class="hidden dim"></div>');
				NP.Dim.dimDiv.message	= $('<div class="message"></div>');
				NP.Dim.dimDiv.appendTo("body");
				NP.Dim.dimDiv.message.appendTo(NP.Dim.dimDiv);
			}
			if (options.message) {
				NP.Dim.dimDiv.message.text(options.message).show();
			}
			else {
				NP.Dim.dimDiv.message.hide();
			}
			if (options.cssClass) {
				NP.Dim.dimDiv.attr('class', options.cssClass);
			}
			else {
				NP.Dim.dimDiv.attr('class', 'dim');
			}
			if (options.timeout) {
				NP.Dim.timeout	= setTimeout(NP.Dim.disable, options.timeout);
			}
			NP.Dim.dimDiv.show();
		},

		disable: function (options) {
			if (NP.Dim.dimDiv) {
				NP.Dim.dimDiv.hide();
			}
		}
	}
}

NP.Menu	= {
	menuWrapper:	null,
	mouseOverSensor: null,
	mouseClickSensor:	null,

	init: function (options) {
		var menu	= $(options.menuWrapper);
		menu.mouseover(function() {
			NP.Menu.showDelay(menu);
		});
		menu.mouseout(function() {
			NP.Menu.hideDelay(menu);
		});
		if (menu.mouseClickSensor = $(options.mouseClickSensor)) {
			menu.mouseClickSensor.click(function(){
				NP.Menu.toggle(menu);
			});
		}
		if (menu.mouseOverSensor = $(options.mouseOverSensor)) {
			menu.mouseOverSensor.mouseover(function() {
				NP.Menu.showDelay(menu);
			});
			menu.mouseOverSensor.mouseout(function() {
				NP.Menu.hideDelay(menu);
			});
		}
	},

	toggle: function (menu) {
		if (!menu._shown) {
			NP.Menu.show(menu);
		}
		else {
			NP.Menu.hide(menu);
		}
	},

	show: function (menu) {
		if (menu.hideTimeout) {
			clearTimeout(menu.hideTimeout);
		}
		if (!menu._shown) {
			menu.slideDown();
			menu._shown	= true;
		}
	},

	hide: function (menu) {
		if (menu.showTimeout) {
			clearTimeout(menu.showTimeout);
		}
		if (menu._shown) {
			menu.hide();
			menu._shown	= false;
		}
	},

	showDelay: function (menu) {
		if (menu.hideTimeout) {
			clearTimeout(menu.hideTimeout);
		}
		menu.showTimeout	= setTimeout(function(){
			NP.Menu.show(menu)
			}, 1000);
	},

	hideDelay: function (menu) {
		if (menu.showTimeout) {
			clearTimeout(menu.showTimeout);
		}
		menu.hideTimeout	= setTimeout(function(){
			NP.Menu.hide(menu)
			}, 1000);
	}
}

NP.invite	= function (data) {
	$('#fast_invite_form').hide();
	$('#fast_invite_wait').show();
	$.post(
		base_url + 'friends/invite',
		data,
		function (data) {
			$('#fast_invite_wait').hide();
			$('#fast_invite_form').show();
			$('#fast_invite_succ').html(data.msg).show();
			document.getElementById('fast_invite_form').reset();
			clearTimeout(fastInviteTimeout);
		},
		'json'
		);
	fastInviteTimeout	= setTimeout(NP.inviteTimeout, 60000);
}

NP.inviteTimeout	= function() {
	$('#fast_invite_wait').hide();
	$('#fast_invite_form').show();
	$('#fast_invite_succ').html('<span style="color:red">При попытке отправить приглашение произошла ошибка.</span>').show();
}

NP.clearOnFocus	= function (inp) {
	if (!inp._value || inp._value==inp.value) {
		inp._value	= inp.value;
		inp.value='';
		inp.onblur	= function(){
			NP.resetOnBlur(inp)
			}
	}
}

NP.resetOnBlur	= function (inp) {
	if (inp._value && '' == inp.value) {
		inp.value	= inp._value;
		inp._value	= null;
	}
}

NP.Wall	= {
	post_:	function (url, frm, wall) {
		$.ajax({
			type: 'POST',
			url: url,
			data: $(frm).serialize(),
			success: function(j) {
					if (j.wall) $(wall).html(j.wall);
					$('#wall_content').val('');
				},
			dataType: 'json'
		});
		return true;
	},
	
	post:	function (url, frm, wall) {
		$.ajax({
			type: 'POST',
			url: url,
			data: $(frm).serialize(),
			success: function(j) {
					if (j.wall) $(wall).prepend(j.wall);
					$('#wall_last_id').val(j.wall_last_id);
					$('#wall_content').val('');
				},
			dataType: 'json'
		});
		return true;
	},
	
	remove:	function (a) {
		if (!(a = $(a))) return;
		if (!confirm('Вы действительно хотите удалить эту надпись?')) return true;
		$.ajax({
			type: 'POST',
			url: a.attr('href'),
			success: function(j) {
					if (j.result) a.parents('li').remove();
					else if (j.error) alert(j.error);
				},
			dataType: 'json'
		});
		return true;
	}
}

String.prototype.substitute	= function(data) {
	for (r in data) {
		this.replace('{'+r+'}', data[r]);
	}
}

$(window).load(function(){
setTimeout(function(){$('#messages > li').remove();}, 3000);
NP.setMessagesTimeout();
});
