$(function(){
		$("#search > input").Watermark("поиск");
});

$(function() {

	// initialize scrollable
	$("div.thumbline").scrollable().circular().mousewheel();

});



$(function() {


$(".prevPage").click(function() {
	var api = $("div.thumbline").scrollable(); 
	api.prev();
});

$(".nextPage").click(function() {
	var api = $("div.thumbline").scrollable(); 
	api.next();
});


$(".items img").click(function() {

	// calclulate large image's URL based on the thumbnail URL (flickr specific)
	var url = $(this).attr("src").replace("_x75", "");
	var alt = $(this).attr("alt");
	
	// get handle to element that wraps the image and make it semitransparent
	var wrap = $("#image_wrap").fadeTo("medium", 0.5);

	// the large image from flickr
	var img = new Image();

	// call this function after it's loaded
	img.onload = function() {

		// make wrapper fully visible
		wrap.fadeTo("fast", 1);

		// change the image
		wrap.find("img").attr("src", url);
		$("div.topinfo > h2").text(alt);
	};

	// begin loading the image from flickr
	img.src = url;

// when page loads simulate a "click" on the first image
}).filter(":first").click();

});


(function($)
{
	$.fn.favorites=function(params)
	{
		$(".favorites > a").click(function()
		{

			$.getJSON("/action/favorites/",
				{
					tpl_id: params.tpl_id,
					rec_id: params.rec_id
				},
			function (data)
				{
					if(data.status=='ok')
					{
						$("div.favorites > a > span").html(data.text);
						$("div.favorites").removeClass().addClass("favorites").addClass(data.newclass);
					}
				}
			);



		});
	
	}
})(jQuery);


function linkback()
{
	$("h1").text("Добавить ролик");
	$("div.upload").show();
	$("#status").hide();
	return false;
}

function viewform (id,obj)
{
	if ($("#comment").css("display")=='none' || obj!=$("#post_id").attr("value"))
	{
		$("#post_id").attr("value",obj);
		$("#text").attr("value", '');
		$("#comment").appendTo(id);
		$("#comment").show();
		$("#comment #text").focus();
	}else{
		if (obj==$("#post_id").attr("value")){
			$("#comment").hide();
		}
	}
}
	
var Alert = {
	show: function(title, text, class_name) {
		if (!$('#ajax_alert').attr('id')) {
			$('<div id="ajax_alert"></div>').appendTo(document.body);
		}
		$('<div class="item ' + class_name + '"><h2>' + title + '</h2>' + text + '</div>')
			.prependTo($('#ajax_alert'))
			.fadeIn('slow')
			.animate({opacity: 1.0}, 3000)
			.fadeOut('slow', function() {$(this).remove();});
	}
}


function addComment(url)
{
	if ($("#text").attr("value") == '')
	{
		Alert.show('Ошибка', 'Нужно ввести текст комментария', 'error');
		return false;
	}
	$("div.button").addClass("loader");
	$("#addcomment").attr("disabled",'disabled');
	$("#cancelform").attr("disabled",'disabled');
	$.getJSON(url,
		   {
			   comment: $("#text").attr("value"),
			   tpl_id: $("#tpl_id").attr("value"),
			   rec_id: $("#rec_id").attr("value"),
			   post_id: $("#post_id").attr("value")
		   },
		   function(data)
		   {
				if (data.status=='ok')
				{
					$("#addcomment").attr("disabled",'');
					$("#cancelform").attr("disabled",'');
					$("div.button").removeClass("loader");
					$("#comment").hide();

					$(data.comment).appendTo($("#post_id").attr("value"));
					$("#count_c").text($("#count_c").text()*1+1);
					window.location.hash = data.post;
					Alert.show('Спасибо', 'Комментарий успешно добавлен', 'message');
					
					$(".editcomment").editable("/action/editpost/",
					{
			
						type      : 'textarea',
						cancel    : 'Отмена',
						submit    : 'Редактировать',
						height    : '100px',
						cssclass  : 'editface',
						indicator : '<img src="/template/images/loader.gif">',
						tooltip   : "Щелкните чтоб отредактировать этот комментарий",
					}
					);


				}else{
					if (data.status=='error'){
						Alert.show('Ошибка', data.comment, 'error');
					}else
						Alert.show('Ошибка', 'Неизвестная ошибка, комментарий не добавлен', 'error');
						
					$("#addcomment").attr("disabled",'');
					$("#cancelform").attr("disabled",'');
					$("div.button").removeClass("loader");
				
				}
					
		   }
	);
}


function parseQuery(s)
{
	s=s.substring(s.indexOf('?')+1);
	var q=s.split('&');
	var r={};
	for(var i=0;i<q.length;i++)
	{
		var t=q[i].split('=');
		r[t[0]]=t[1];
	}
	return r;
}

(function($)
{
	var $event=$.event,$special=$event.special,
		
	$listen=$.listen=function(name,listener,selector,handler)
	{
		if(typeof listener!='object')
		{
			handler=selector;selector=listener;listener=document;
		}
		each(name.split(/\s+/),function(ev)
		{
			ev=$listen.fixes[ev]||ev;
			var idxer=indexer(listener,ev)||indexer(listener,ev,new Indexer(ev,listener));
			idxer.append(selector,handler);
			idxer.start();
		});
	},
	
	indexer=function(elem,name,val)
	{
		return $.data(elem,name+'.indexer',val);
	};
			
	$.extend($listen,{regex:/^((?:\w*?|\*))(?:([#.])([\w-]+))?$/,fixes:{focus:'focusin',blur:'focusout'},cache:function(on){this.caching=on;}});
		
	$.fn.listen=function(name,selector,handler)
	{
		return this.each(function()
		{
			$listen(name,this,selector,handler);
		});
	};
	
	function Indexer(name,listener)
	{
		$.extend(this,{ids:{},tags:{},listener:listener,event:name});
		this.id=Indexer.instances.push(this);
	};
	
	Indexer.instances=[];
	
	Indexer.prototype=
	{
		constructor:Indexer,handle:function(e)
		{
			indexer(this,e.type).parse(e);
		},start:function()
		{
			if(!this.on)
			{
				$event.add(this.listener,this.event,this.handle);this.on=true;
			}
		},parse:function(e)
		{
			var node=e.data||e.target,args=arguments,handlers;
			if(!$listen.caching||!(handlers=this.cache(node))){handlers=[];

			each([node.nodeName,'*'],function(tag)
			{
				var klasses=this.tags[tag];
				if(klasses)each((node.className+' *').split(' '),function(klass)
				{
					if(klass&&klasses[klass])push(handlers,klasses[klass]);
				});
			},this);

		}
		if(handlers[0])
		{
			each(handlers,function(handler)
			{
				if(handler.apply(node,args)===false)
				{
					e.preventDefault();
					e.stopPropagation();
				}
			});
		}
		handlers=args=node=null;
	},
	append:function(selector,handler)
	{
		each(selector.split(/\s*,\s*/),function(selector)
		{
			var match=$listen.regex.exec(selector);

			var id=match[2]=='#'&&match[3],tag=match[1].toUpperCase()||'*',klass=match[3]||'*';

			if(tag)
			{
				tag=this.tags[tag]=this.tags[tag]||{};
				(tag[klass]||(tag[klass]=[])).push(handler);
			}
		},this);
	}};
	
	function each(arr,fn,scope)
	{
		for(var i=0,l=arr.length;i<l;i++) fn.call(scope,arr[i],i);
	};
	
	function push(arr,elems)
	{
		arr.push.apply(arr,elems);
		return arr;
	};
	





	$.fn.stars=function()
	{
		function on(){$(this).parent().addClass('b-rating-stars-'+this.className.substring(1));}
		function off(){$(this).parent().removeClass().addClass('b-rating-stars');}
		

		function click()
		{
			$.getJSON("/action/vote/",
				{
					tpl_id: parseQuery(this.href)['tpl_id'],
					rec_id: parseQuery(this.href)['rec_id'],
					vote: parseQuery(this.href)['vote']
				},
			function (data)
				{
					if(data.status=='ok')
					{
						var r=$("div.rating");
						$("div.vote").hide();
						r.find("i").removeClass().addClass('b-rating-stars').addClass('b-rating-stars-'+data.votes);
						r.find("span").text(data.count);r.show();
					}
				}
			);
			
			
			return false;
		}

	return this.each(
		function()
		{
			var $this=$(this);
			$this.listen("mouseover","a",on).listen("mouseout","a",off);
			if($this.hasClass("can-vote")){$this.listen("click","a",click);}
		}
	);
	}
	
})(jQuery);

(function($)
{

	$.fn.tags=function(params)
	{
		var g=$(this);
		
		var element='';

		$(this).find("img.tag-delete").click(function(event)
		{
			var r=$(".popup-tags-delete");
			r.find("span").text($(this).parent().find("a").html());
			if(navigator.appName == "Microsoft Internet Explorer")
			{
				r.css('left',event.offsetX);
			}else{
				r.css('left',event.clientX - 240);
			}
			r.animate({ opacity: "show" }, "slow");
			element=$(this).parents("li");
		});

		$(".popup-tags-delete .cancel").click(function()
		{
			$(".popup-tags-delete").animate({ opacity: "hide" }, "slow");
		});

		$(".popup-tags-delete .remove").click(function()
		{
			$.getJSON("/action/deltags/",
				{
					tpl_id: params.tpl_id,
					rec_id: params.rec_id,
					tag: $(this).parents(".popup-tags-delete").find("span").html()
				},
			function (data)
				{
					if(data.status=='ok')
					{
						$(".popup-tags-delete").hide();
						element.hide();
					}
				}
			);
		});

		$(".tags-add a").click(function(event)
		{
			if(navigator.appName == "Microsoft Internet Explorer")
			{
				$(".popup-tags-add").css('left',event.offsetX);
			}else{
				$(".popup-tags-add").css('left',event.clientX - 240);
			}
			$(".popup-tags-add").find(".input").attr("value",'');
			$(".popup-tags-add").animate({ opacity: "show" }, "slow");
		});

		$(".popup-tags-add .cancel").click(function()
		{
			$(".popup-tags-add").animate({ opacity: "hide" }, "slow");
		});


		$(".popup-tags-add .ok").click(function()
		{
			$.getJSON("/action/addtags/",
				{
					tpl_id: params.tpl_id,
					rec_id: params.rec_id,
					tag: $(".popup-tags-add").find(".input").attr("value")
				},
			function (data)
				{
					if(data.status=='ok')
					{
						$(".popup-tags-add").animate({ opacity: "hide" }, "slow");
						$("div.tags > ul").empty().append(data.tags);
						$("div.tags").tags({tpl_id: params.tpl_id, rec_id: params.rec_id});
					}
				}
			);
		});
	}
	
})(jQuery);

$(document).ready(function(){

		$(".deletepost").click(function()
		{
			if (!confirm('Вы действительно хотите удалить этот пост?')) return false;

			$.getJSON("/action/deletepost/",
				{
					tpl_id: $(this).attr("tpl_id"),
					rec_id: $(this).attr("rec_id")
				},
			function (data)
				{
					if(data.status=='ok')
					{
						Alert.show('Спасибо', data.info, 'message');
					}else if(data.status=='error')
					{
						Alert.show('Ошибка', data.info, 'error');
					}
				}
			);
		});

		$(".recent-tags a").click(function()
		{	
			$("#tag").focus();
			var s=$("#tag").attr("value");
			if (s != "") s=s+", ";
			$("#tag").attr("value",s+$(this).html());
		});

		$("#feedback").validate({
			rules : {
				mail : {required: true, email : true},
				title : {required: true, rangelength: [5,100]},
				description : {required: true, rangelength: [10,5000]}
			},
			messages : {
				mail : {
					required : "Введите электропочту",
					email : "Нужно указать правильный почтовый ящик"
				},
				title : {
					required : "Введите тему письма",
					rangelength: "Введите не менее, чем 5 символа и не более, чем 100."
				},
				description : {
					required : "Введите текст сообщения",
					rangelength: "Введите не менее, чем 10 символов и не более, чем 5000."
				}
			}
		});

	
		$("#editpass").validate({
			rules : {
				passwd_old : {required: true, rangelength: [3,16]},
				passwd : {required: true, rangelength: [3,16]},
				passwd2 : {required: true, equalTo: "#passwd"}
			},
			messages : {
				passwd_old : {
					required : "Введите текущий пароль",
					rangelength: "Введите не менее, чем 3 символа и не более, чем 20."
				},
				passwd : {
					required : "Введите пароль",
					rangelength: "Введите не менее, чем 3 символа и не более, чем 20."
				},
				passwd2 : {
					required : "Введите пароль, повторно",
					equalTo : "Пароли не совпадают"
				}
			}
		});

		$("#editmail").validate({
			rules : {
				mail : {required: true, email : true,
						remote: {
					        url: "/action/check/",
					        type: "post"
						}
				}

			},
			messages : {
				mail : {
					required : "Введите электропочту",
					email : "Нужно указать правильный почтовый ящик",
					remote : "Почтовый ящик уже есть в базе данных, введите другой"
				}
			}
		});


		$("#reminder").validate({
			rules : {
				mail : {required: true, email : true}
			},
			messages : {
				mail : {
					required : "Введите электропочту",
					email : "Нужно ввести правильный адрес электропочты"
				}
			}
		});


		$("#upload").validate({
			rules : {
				title : {required : true, rangelength: [3,100]},
				description : {rangelength: [10,500]},
				tag  : {maxlength: 268}
			},
			messages : {
				title : {
					required : "Введите название ролика",
					rangelength : "Введите не менее, чем 3 символа и не более, чем 100"
				},
				description : {
					rangelength: "Введите не менее, чем 10 символов и не более, чем 5000."
				},
				tag  : {
					maxlength: "Можно ввести не более 268 симвлоов"
				}
			}
		});


		$("#forum").validate({
			rules : {
				title : {required : true, rangelength: [3,100]},
				description : {required: true, rangelength: [10,5000]},
				tag  : {maxlength: 268}
			},
			messages : {
				title : {
					required : "Введите название темы",
					rangelength : "Введите не менее, чем 3 символа и не более, чем 100"
				},
				description : {
					required : "Введите подробное описание вопроса",
					rangelength: "Введите не менее, чем 10 символов и не более, чем 5000."
				},
				tag  : {
					maxlength: "Можно ввести не более 268 симвлоов"
				}
			}
		});


		$("#login").validate({
			rules : {
				login : {required : true, rangelength: [2,16]},
				passwd : {required: true, rangelength: [3,16]}
			},
			messages : {
				login : {
					required : "Введите логин",
					rangelength : "Введите не менее, чем 2 символа и не более, чем 16"
				},
				passwd : {
					required : "Введите пароль",
					rangelength: "Введите не менее, чем 3 символа и не более, чем 20."
				}
			}
		});


		$("#register").validate({
			rules : {
				login : {required : true, rangelength: [2,16],
						remote: {
					        url: "/action/check/",
					        type: "post"
						}
				},
				passwd : {required: true, rangelength: [3,16]},
				passwd2 : {required: true, equalTo: "#passwd"},
				mail : {required: true, email : true,
						remote: {
					        url: "/action/check/",
					        type: "post"
						}				
				},
				captcha : {required: true, rangelength: [6,6],
						remote: {
					        url: "/action/check/",
					        type: "post"
						}				
				},
				rules : {required: "#rules:unchecked"}
			},
			messages : {
				login : {
					required : "Введите логин",
					rangelength : "Введите не менее, чем 2 символа и не более, чем 16",
					remote : "Логин уже занят или введен с ошибками"
				},
				passwd : {
					required : "Введите пароль",
					rangelength: "Введите не менее, чем 3 символа и не более, чем 20."
				},
				passwd2 : {
					required : "Введите пароль, повторно",
					equalTo : "Пароли не совпадают"
				},
				mail : {
					required : "Введите электропочту",
					email : "Нужно указать правильный почтовый ящик",
					remote : "Почтовый ящик уже есть в базе данных, введите другой"
				},
				captcha : {
					required : "Введите 6 символов с картинки",
					rangelength : "Нужно ввести только 6 символов",
					remote : "Проверка показала, что вы допустили ошибку"
				},
				rules : {required : "Нужно принять условия предоставления сервиса"}
			}
		});
		
		$("blockquote").corner("10px");
		$("#comment").corner("10px");
		$("div.popup-form").corner("10px");

		$("#1,#2,#3,#4,#5,#6,#7,#8,#9,#10").tooltip({ 
			track: true, 
			delay: 0, 
			showURL: false, 
			opacity: 1, 
			fixPNG: true, 
			showBody: " | ", 
			extraClass: "pretty fancy", 
			top: -15, 
			left: 5 
		});
				
		$("#cancelform").click(function()
		{
			$("#comment").hide();
		});
		
		$("a.option").click(function()
		{
			if ($("div.options").css("display")=='none')
			{
				$("div.options").show();
				$("a.option > arr").html("&uarr;");
				$("a.option > span").text("Дополнительно (скрыть)");
			}else{
				$("div.options").hide();
				$("a.option > arr").html("&darr;");
				$("a.option > span").text("Дополнительно (показать)");
			}
		});
		
		/*$("#search > input").focus(function()
		{
			$("#navi > div").animate({ width: "182px" }, "slow");
			$("ul.topnav").animate({ opacity: "hide" }, "slow");
		});

		$("#search > input").blur(function()
		{
			$("#navi > div").animate({ width: "633px" }, "slow");
			$("ul.topnav").animate({ opacity: "show" }, "slow");
		});*/

		$("#search > input").focus(function()
		{
			$("#navi > div").css('width', '182px');
			$("ul.topnav").hide();
		});

		$("#search > input").blur(function()
		{
			$("#navi > div").css('width',' 633px');
			$("ul.topnav").show();
		});
	
		$(".editcomment").editable("/action/editpost/",
		{

			type      : 'textarea',
	        cancel    : 'Отмена',
			submit    : 'Редактировать',
	        height    : '100px',
			cssclass  : 'editface',
			indicator : '<img src="/template/images/loader.gif">',
			tooltip   : "Щелкните чтоб отредактировать этот комментарий",
		});

		$(".editforum").editable("/action/editforum/",
		{

			type      : 'textarea',
	        cancel    : 'Отмена',
			submit    : 'Редактировать',
	        height    : '100px',
			width     : '100%',
			cssclass  : 'editface',
			indicator : '<img src="/template/images/loader.gif">',
			tooltip   : "Щелкните чтоб отредактировать этот текст",
		});

		$(".editforumname").editable("/action/editforumname/",
		{

			type      : 'textarea',
	        cancel    : 'Отмена',
			submit    : 'Редактировать',
			width     : '100%',
			cssclass  : 'editface editfacetitle',
			indicator : '<img src="/template/images/loader.gif">',
			tooltip   : "Щелкните чтоб отредактировать этот текст",
		});

});


(function($) {	
	var map=new Array();
	$.Watermark = {
		ShowAll:function(){
			for (var i=0;i<map.length;i++){
				if(map[i].obj.val()==""){
					map[i].obj.val(map[i].text);					
					map[i].obj.css("color",map[i].WatermarkColor);
				}else{
				    map[i].obj.css("color",map[i].DefaultColor);
				}
			}
		},
		HideAll:function(){
			for (var i=0;i<map.length;i++){
				if(map[i].obj.val()==map[i].text)
					map[i].obj.val("");					
			}
		}
	};
	
	$.fn.Watermark = function(text,color) {
		if(!color)
			color="#666666";
		return this.each(
			function(){		
				var input=$(this);
				var defaultColor=input.css("color");
				map[map.length]={text:text,obj:input,DefaultColor:defaultColor,WatermarkColor:color};
				function clearMessage(){
					if(input.val()==text)
						input.val("");
					input.css("color",defaultColor);
				}

				function insertMessage(){
					if(input.val().length==0 || input.val()==text){
						input.val(text);
						input.css("color",color);	
					}else
						input.css("color",defaultColor);	
				}

				input.focus(clearMessage);
				input.blur(insertMessage);								
				input.change(insertMessage);
				
				insertMessage();
			}
		);
	};
})(jQuery);

