﻿var PublicationTypesManager={
	List:[],
	Checked:[],

	CookieName:"FilterPublicationTypes_"+Mantis.Reut.Client.Language.LanguageId,

	UpdateMap:function () {
		var types=PublicationTypesManager.Checked.join(",");
		var flash=document.publicationMapFlash || $("publicationMapFlash");
		document.publicationMapFlash.SetVariable("txtPubTypes",types);
	},

	AddRemoveItem:function (id,b) {
		var all=PublicationTypesManager.Checked;

		if (!b) all=all.reject(function (i) { return id==i; });
		else all.push(id);

		PublicationTypesManager.Checked=all;
		PublicationTypesManager.UpdateMap();

		Cookies.set(PublicationTypesManager.CookieName,PublicationTypesManager.Checked.join(","));
	},

	Print:function () {
		var parent=$("publication-type-list");

		var cookieTypes=Cookies.get(PublicationTypesManager.CookieName) || "";
		var rx=/^\d+(,\d+)*$/;
		if (rx.test(cookieTypes)) PublicationTypesManager.Checked=cookieTypes.split(",");
		else PublicationTypesManager.Checked=this.List.pluck("PublicationTypeId");

		PublicationTypesManager.Tooltips.Init();

		this.List.each(function (type) {
			var div=_("div",parent);
			div.addClassName("type");

			type.Checked=PublicationTypesManager.Checked.include(type.PublicationTypeId);

			type.Checkbox=_("img",_("div",div,{ className:"cb" }),{ src:AdvancedSearch.CheckboxImage[type.Checked ? "On" : "Off"] });
			type.Checkbox.setStyle({"background-color":"#"+type.Color});
			type.Checkbox.SetState=function (state) {
				type.Checked=state;
				type.Checkbox.src=type.Checked ? AdvancedSearch.CheckboxImage.On : AdvancedSearch.CheckboxImage.Off;
			};
			type.Checkbox.GetState=function (state) {
				return type.Checked;
			};
			type.Checkbox.onclick=function () {
				this.SetState(!this.GetState());
				PublicationTypesManager.AddRemoveItem(type.PublicationTypeId,this.GetState());
			}
			//type.Checkbox=_('<input type="checkbox" name="advancedSearchType" value="'+type.PublicationTypeId+'"/>',div);

			var header=_("div",div);
			header.innerHTML=type.Header;

			header.onclick=type.Checkbox.onclick.bindAsEventListener(type.Checkbox);

			header.observe("mouseover",PublicationTypesManager.Tooltips.Show.bindAsEventListener(header,type));
			header.observe("mouseout",PublicationTypesManager.Tooltips.Hide);
		});

		$("publication-types").show();
	},

	Tooltips:{
		Last:null,
		Element:null,
		TO:null, // timeout
		Init:function () {
			var t=PublicationTypesManager.Tooltips;
			var el=_("div");
			el.addClassName("type-tooltip");
			el.hide();
			el.observe("mouseover",function () {
				clearTimeout(t.TO);
				t.TO=null;
			});
			el.observe("mouseout",this.Hide.bindAsEventListener(el));
			document.body.appendChild(el);
			this.Element=el;
		},
		Show:function (e,type) {
			if (!type.Summary) return;
			var t=PublicationTypesManager.Tooltips;
			if (t.TO) {
				clearTimeout(t.TO);
				t.TO=null;
			}
			if (t.Last==this) return;
			var el=t.Element;
			el.innerHTML=type.Summary || "";
			var pos=Position.cumulativeOffset(this);
			el.setOpacity(0);
			el.show();
			el.setStyle({left:pos[0]+this.offsetWidth-el.offsetWidth+"px",top:pos[1]+this.offsetHeight+"px"});
			Effect.Appear(el,{duration:.3});

			t.Last=this;
		},
		Hide:function (e) {
			var t=PublicationTypesManager.Tooltips;
			PublicationTypesManager.Tooltips.TO=setTimeout(t.ImmediateHide.bind(t),500);
		},
		ImmediateHide:function (tooltip) {
			var t=PublicationTypesManager.Tooltips;
			t.Element.hide();
			t.TO=null;
			t.Last=null;
		}
	}
};

var mapOpened=false;
function OpenMap() {
	mapOpened=true;
	$("publicationMap").removeClassName("printHidden");
	new Effect.Move($("contentMain"),{
		x:Mantis.Reut.Client.Language.Direction==Mantis.Reut.Client.Language.LanguageDirection.RTL ? $("contentMain").offsetWidth+13 : -$("contentMain").offsetWidth+13,
		duration:1,
		afterFinish:function () {
			if ($("contentMain")) $("contentMain").remove();
			loadMap();
		}
	});
}
Event.observe(
	window,
	"load",
	function () {
		if (/Mode=Map/gi.test(location.href)) loadMap();
		fixLinks();
	}
);
function fixLinks() {
	if (!$("body")) return;
	$A($("body").getElementsByTagName("h3")).each(
		function (h3) {
			$A(h3.getElementsByTagName("a")).each(
				function (a) { a.removeAttribute("href"); }
			);
		}
	);
}
function OpenSubject(subjectId) {
	location.href="Default.aspx?SubjectId="+subjectId;
}
function OpenPublication(publicationId) {
	LoadPublicationData(publicationId);
	//location.href="Publication.aspx?PublicationId="+publicationId;
}
function LoadPublicationData(publicationId) {
	Mantis.Reut.Code.DAL.GetPublicationById(
		publicationId,
		function (res) {
			var pub=res.value;

			if (!pub) return;

			$("mapPubTypeIcon").className="typeIcon typeIcon"+pub.PublicationType.PublicationTypeId;
			$("mapPubTypeIcon").title=pub.PublicationType.Header;
			$("mapPubTypeName").innerHTML=pub.PublicationType.Header;
			$("mapPubDate").innerHTML=pub.PublicationDate.Format(Mantis.Reut.Client.Language.Definitions["clientdateformat"]);
			$("mapPubSubject").innerHTML=pub.MainSubject.Header;
			$("mapPubSubject").href="Default.aspx?SubjectId="+pub.MainSubject.SubjectId;
			$("mapPubHeader").innerHTML=pub.Header;
			$("mapPubHeader").href="Publication.aspx?PublicationId="+pub.PublicationId;
			$("mapPubDesc").href="Publication.aspx?PublicationId="+pub.PublicationId;
			$("mapPubDesc").innerHTML=pub.DescriptionLobby;
			$("mapPubCase").onclick=function () { Case.Add(this,pub.PublicationId) };
			$("mapPubForum").hide();
			$("mapPubOpinions").hide();
			//$("mapPubForum").firstChild.onclick=function () {};
			//$("mapPubOpinions").firstChild.onclick=function () {};
		}
	);
}
function PrintPublication() {
	window.print();
}
function OpenTooltip(b) {
	//alert(b);
	//$("mapPub").setStyle({"z-index":b ? -1 : 1});
}
function LoadMapFlash(publicationId,languageId) {
	$("mapFlash").innerHTML=GetFlashHtml("/Map/Map.swf?PublicationId="+publicationId+"&LanguageId="+languageId,true,0,0,"","publicationMapFlash");
	setTimeout(PublicationTypesManager.UpdateMap.bind(),2000);
}

