﻿var AdvancedSearch={};
AdvancedSearch.Init=function () {
	this.Element=$("advancedSearchForm");
	this.Opener=$("contentMenu");

	$("advancedSearchLink").makeLink();

	var subjectSelect=$("advancedSearchSubject").firstChild;

	var calendar=new Mantis.Calendar();

	this.Calendar=calendar;

	hideCalendar();
	this.Element.appendChild(calendar.Element);

	var fromDate=validDate(Mantis.QS.Get("FromDate")),
		toDate=validDate(Mantis.QS.Get("ToDate"));

	if (!toDate || !fromDate) {
		toDate=new Date();
		//fromDate=new Date();
		//fromDate.setMonth(fromDate.getMonth()-1);
		fromDate=new Date(2004,0,1);
	}

	toDateChange(toDate);
	fromDateChange(fromDate);

	var searchQuery=Mantis.QS.Get("Q");
	if (searchQuery) $("searchQuery").value=searchQuery;

	var subjectId=Mantis.QS.Get("Subjectid");
	if (subjectId) subjectSelect.value=subjectId;

	if (Mantis.QS.Get("SearchIn")=="Subject") $("advancedSearchInSubject").checked=true;

	$("searchQuery").observe("keydown",function (e) {
		if (e.keyCode==Event.KEY_RETURN) {
			Event.stop(e);
			GoogleSearch($("searchQuery").value);
		}
	});
	$("searchImage").observe("click",function () {
		Event.stop(e);
		GoogleSearch($("searchQuery").value);
	});

	var inputs=(
		$A(this.Element.getElementsByTagName("input"))
		.concat($A(this.Element.getElementsByTagName("select")))
	);

	inputs.each(function (o) {
		$(o).observe("keydown",function (e) {
			if (e.keyCode==Event.KEY_RETURN) {
				searchAdvanced();
				Event.stop(e);
			}
		});
	});

	$("advancedSearchFromDateLabel").onclick=function () {
		if (calendar.Element.visible()) return hideCalendar();
		calendar.OnChange=fromDateChange;
		calendar.SetDate(fromDate);
		showCalendar(this);
	};
	$("advancedSearchToDateLabel").onclick=function () {
		if (calendar.Element.visible()) return hideCalendar();
		calendar.OnChange=toDateChange;
		calendar.SetDate(toDate);
		showCalendar(this);
	};

	function searchAdvanced() {
		var publicationTypes=[];

		AdvancedSearch.Types.each(function (type) { if (type.Checked) publicationTypes.push(type.PublicationTypeId); });
		// if all checked, no need to filter
		if (publicationTypes.length==AdvancedSearch.Types.length) publicationTypes=null;

		SiteSearch(
			$("searchQuery").value,
			fromDate,
			toDate,
			+subjectSelect.value || 0,
			publicationTypes,
			$("advancedSearchInSubject").checked ? "Subject" : "All"
		);
	}

	$("advancedSearchButton").onclick=function () { searchAdvanced(); };

	function hideCalendar() {
		Mantis.Reut.Client.ToggleProblematicTagVisibility(AdvancedSearch.Element,"select",true);
		calendar.Element.hide();
	}
	function showCalendar(o) {
		calendar.Element.show();

		var style={};
		style.top=o.offsetTop+o.offsetParent.offsetTop+o.offsetParent.offsetParent.offsetTop+o.offsetHeight+10+"px";
		style.left=((o.offsetLeft+o.offsetParent.offsetLeft+o.offsetParent.offsetParent.offsetLeft))-5;
		if (Mantis.Reut.Client.Language.Direction==Mantis.Reut.Client.Language.LanguageDirection.RTL) style.left-=calendar.Element.offsetWidth;
		style.left+="px";

		calendar.Element.setStyle(style);
		Mantis.Reut.Client.ToggleProblematicTagVisibility(AdvancedSearch.Element,"select",false);

		//HiderIframe.Show(calendar.Element);
	}
	function fromDateChange(date) {
		fromDate=date;
		hideCalendar();
		$("advancedSearchFromDateValue").value=date.ToClient();
		$("advancedSearchFromDateValue").onblur=function () {
			var newDate=Date.Parse(this.value);
			if (!newDate) {
				this.value=date.ToClient();
				showDateFormatError();
			}
			else {
				date=newDate;
				fromDateChange(date);
			}
		};
		validateDates();
	};
	function toDateChange(date) {
		toDate=date;
		hideCalendar();
		$("advancedSearchToDateValue").value=date.ToClient();
		$("advancedSearchToDateValue").onblur=function () {
			var newDate=Date.Parse(this.value);
			if (!newDate) {
				this.value=date.ToClient();
				showDateFormatError();
			}
			else {
				date=newDate;
				toDateChange(date);
			}
		};
		validateDates();
	};

	var advancedSearchDateError=$("advancedSearchDateError");
	function showDateFormatError() {		
		advancedSearchDateError.show();
		advancedSearchDateError.setOpacity(1);
		new Effect.Fade(advancedSearchDateError,{delay:2,duration:2});
	}

	function validateDates() {
		if (fromDate>toDate) {
			var tmp=fromDate;
			fromDate=new Date(toDate);
			toDate=new Date(tmp);

			$("advancedSearchFromDateValue").value=fromDate.ToClient();
			$("advancedSearchToDateValue").value=toDate.ToClient();
		}
	};

	AdvancedSearch.CheckboxImage={
		Off:Site.RootPath+"Language/"+Mantis.Reut.Client.Language.Culture+"/Images/misc/cb.gif",
		On:Site.RootPath+"Language/"+Mantis.Reut.Client.Language.Culture+"/Images/misc/cb_checked.gif"
	};
};
AdvancedSearch.LoadPublicationTypes=function (callback) {
	if (AdvancedSearch.Types) return false;
	Mantis.Reut.Code.DAL.AjaxGetPublicationTypes(
		function (res) {
			if (res.value) {
				AdvancedSearch.Types=res.value;
				if (typeof(callback)=="function") callback(AdvancedSearch.Types);
			}
		}
	);
};
AdvancedSearch.Open=function () {
	if (AdvancedSearch.Stair && AdvancedSearch.Stair.Opened) {
		AdvancedSearch.Stair.Remove(2); // 2 - duration
		return;
	}
	StairwayToHeaven.RemoveAll();

	var stair=new Stair(this.Opener);
	var div=stair.Element;
	div.id="advancedSearch";
	
	div.appendChild(this.Element);

	AdvancedSearch.Stair=stair;

	Mantis.Reut.Client.OuterShadow.ApplyBottom(div,4,20);

	stair.Wait(true);

	stair.Move(function () {
		if (!AdvancedSearch.LoadPublicationTypes(function (types) {
			var publicationTypes=Mantis.QS.Get("PublicationTypes");
			if (publicationTypes && publicationTypes.length) publicationTypes=$A((""+publicationTypes).split(","));

			types.each(function (type) {
				var div=_("div",$("advancedSearchPublicationTypeList"));
				div.addClassName("type");

				if (publicationTypes && publicationTypes.length) type.Checked=publicationTypes.include(type.PublicationTypeId);
				else type.Checked=true;

				type.Checkbox=_("img",_("div",div,{ className:"cb" }),{ src:AdvancedSearch.CheckboxImage[type.Checked ? "On" : "Off"] });
				type.Checkbox.setStyle({"background-color":"#"+type.Color});
				type.Checkbox.addClassName("hand");
				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());
				}
				//type.Checkbox=_('<input type="checkbox" name="advancedSearchType" value="'+type.PublicationTypeId+'"/>',div);
				_("div",div).innerHTML=type.Header;
			});

			stair.Wait(false);
		})) stair.Wait(false);
	},1);

	return false;
};
AdvancedSearch.CheckAll=function (state) {
	this.Types.each(function (type) { type.Checkbox.SetState(state); });
};

$dl(function () { AdvancedSearch.Init(); });
//Event.observe(window,"load",function () { AdvancedSearch.Init();AdvancedSearch.Open(); });
function validDate(sDate) {
	if (!sDate) return null;
	var oDate=sDate.split("-"),
		dDate=new Date(+oDate[0],+oDate[1]-1,+oDate[2]);
	return dDate.getMonth()+1==oDate[1] && dDate.getFullYear()==oDate[0] ? dDate : null;
}
Date.prototype.ToClient=function () {
	return this.Format(Mantis.Reut.Client.Language.Definitions["clientdateformat"]);
};
