/*
	Copyright © Eleanor CMS
	http://eleanor-cms.ru
	info@eleanor-cms.ru

	Sponsored by: Roman Borkunov (Qnut)
*/
$.fn.socialmagic=function(o)
{
	o=$.extend({
		name:"socialmagic",//Уникальное имя (для хранилища)
		title:CORE.Lang("sm_share"),
		description:CORE.Lang("sm_content"),
		textlocked:CORE.Lang("sm_locked"),
		facebook:true,
		plusone:true,
		twitter:true,
		vk:false,
		vk_shared:false,//Контент раскроется когда пользователю не просто понравилось, но и с другими поделился

		uniq:location.pathname.substr( CORE.site_path.length ),//Уникальный идентификатор контента
		unwrap:true,//Автоудаление тега .socialmagic, оставляя все его содержимое
		delay:0,//Счетчик до возможности закрытия
		canclose:false//Возможность закрыть
	},o),
		storage=localStorage.getItem(o.name),
		SaveStorage=function()
		{
			try
			{
				localStorage.setItem(o.name,JSON.stringify(storage));
			}
			catch(e)
			{
				if(e==QUOTA_EXCEEDED_ERR)
					alert("Storage quota exceeeded!");
			}
		},
		FBurl2cb={},//Массив соответствия url=>callback
		objects={};

	if(!o.facebook && !o.plusone && !o.twitter && !o.vk)
		return this;

	storage=storage=storage ? $.parseJSON(storage) : {};
	this.each(function(){
		var th=$(this),
			uniq=th.data("uniq"),
			done=th.data("done");

		if(!uniq)
		{
			uniq=o.uniq;
			th.data("uniq",uniq);
		}

		if(uniq in storage)
		{
			if(o.unwrap || th.data("unwrap"))
				th.children().unwrap();
		}
		else if(!done)
		{
			if(uniq in objects)
				objects[uniq]=objects[uniq].add(this);
			else
				objects[uniq]=th;
		}
	});
	$.each(objects,function(i,object){
		object.hide().data("done",true);

		var url=object.data("url"),
			canclose=o.canclose || object.data("canclose"),
			outer=$("<div>").addClass("socialmagic-outer").html("<div class=\"socialmagic-topline\"></div><div class=\"socialmagic-content\"><div class=\"socialmagic-banner\">"+o.title+"</div><div class=\"socialmagic-body\"><table><tr class=\"socialmagic-share\"></tr></table></div></div><div class=\"socialmagic-footer\">"+o.description+"</div><div class=\"socialmagic-close\"></div>").insertAfter(object.filter(":last")),
			share=outer.find(".socialmagic-share"),
			footer=outer.find(".socialmagic-footer"),
			to,
			ShowContent=function(ok,time)
			{
				clearTimeout(to);
				to=setTimeout(function()
				{
					outer.fadeOut("slow",function(){ outer.remove(); });
					object.fadeIn("slow",function(){
						if(o.unwrap || object.data("unwrap"))
							object.children().unwrap();
					});

					var uniq=object.data("uniq");
					if(ok)
						storage[uniq]=true;
					else
						delete storage[uniq];
					SaveStorage();
				},time||500);
			};

		if(object.size()>1)
		{
			var prev=$("<div class=\"socialmagic-outer\"><p class=\"socialmagic-warning\">"+o.textlocked+"</p></div>");
			object.not(":last").after(prev);
			outer=outer.add(prev);
		}

		//vk.com
		if(o.vk)
		{
			share.append("<td><div id=\"vk-like-"+i+"\"></div></td>");
			VK.Widgets.Like("vk-like-"+i,{type:"mini",pageUrl:url ? url : null});
			VK.Observer.subscribe(o.vk_shared ? "widgets.like.shared" : "widgets.like.liked",function(){
				ShowContent(true);
			});
			o.vk=false;//Поскольку ВК допускает установку только 1й кнопки на странице - она будет отображаться там, кому первому повезет
		}

		//facebook
		if(o.facebook)
		{
			share.append("<td><div class=\"fb-like\" "+(url ? "data-href=\""+url+"\" " : "")+" data-send=\"false\" data-layout=\"button_count\" data-width=\"100\" data-show-faces=\"true\" data-action=\"recommend\"></div>");
			FBurl2cb[ url ? url : location.href ]=ShowContent;
		}

		//twitter
		if(o.twitter)
		{
			share.append("<td><a href=\"http://twitter.com/share\" class=\"twitter-share-button\" data-count=\"horizontal\" data-lang=\""+CORE.language.substr(0,2)+"\" data-related=\"Eleanor_CMS\""+(typeof o.twitter=="string" ? " data-via=\""+o.twitter+"\"" : "")+(url ? " data-url=\""+url+"\" " : "")+">Tweet</a></td>");
			share.find("td:last").on("tweet",function(){
				ShowContent(true)
			});
		}

		//google plus
		if(o.plusone)
		{
			var cbname="PlusClick"+i;
			share.append("<td><div class=\"g-plusone\" "+(url ? "data-href=\""+url+"\" " : "")+"data-callback=\""+cbname+"\" data-size=\"medium\"></div></td>");
			window[cbname]=function(r){
				ShowContent();
			};
		}

		if(canclose)
		{
			var ManualClose=function()
				{
					footer.html(CORE.Lang("sm_canclose")); 
					outer.find(".socialmagic-close").show().click(function(){
						ShowContent()
					});
				};
		}

		if(o.delay>0)
		{
			var timex=o.delay,
				interval=setInterval(function(){
					var text=CORE.Lang("sm_wait");
					if($.isFunction(text))
					{
						footer.html(o.description+" "+text(timex--));
						if(timex<=0)
						{
							clearInterval(interval);
							if(canclose)
								ManualClose();
							else
								ShowContent(false);
						}
					}
				},1000);
		}
		else if(canclose)
			ManualClose();
	});

	if(!$.isEmptyObject(objects))
	{
		//facebook
		if(o.facebook)
		{
			FB.Event.subscribe("edge.create",function(href){
				if(href in FBurl2cb)
					FBurl2cb[href](true,10000);
			});
		}

		//twitter
		twttr.events.bind("tweet",function(event){
			$(event.target).closest("td").trigger("tweet");
		});
	}
	return this;
};