var SearchPanel = {};

SearchPanel.ItemsIDs = new Array();
SearchPanel.ItemIDToObjectName = new Array();
SearchPanel._sFilterString = "";
SearchPanel._bIsHomePage = true;
SearchPanel.NormalHeight = null;
SearchPanel.CollapsedHeight = null;
SearchPanel.LastMarkedItem = null;
SearchPanel.LastMarkedItemList = null;


SearchPanel.OnItemClick = function(sender, e){
	SearchPanel.Reset(true);	
	sender.MarkItem(e.Item);
	SearchPanel.LastMarkedItem = e.Item;
	SearchPanel.LastMarkedItemList = sender;
	var index = document.getElementById("SearchResultsIndex");
	if(index != null)
		index.innerHTML = "("+ sender.getAttribute("Tag") +": "+ sender.GetItemText(e.Item) +")";
	SearchPanel.DoSearch(false, e.Item);
}

SearchPanel.DoSearch = function(collectOnly, triggerItem){
	if(typeof(triggerItem) == "undefined")
		triggerItem = null;
	SearchPanel._sFilterString = "1=1";
	
	if(SearchPanel.LastMarkedItem != null && triggerItem == null){
		SearchPanel.LastMarkedItemList.ClearMarkedItems(false);
	}
	
	for(var z = 0; z < SearchPanel.ItemsIDs.length; z++){
		
		var sObjectName = SearchPanel.ItemIDToObjectName[SearchPanel.ItemsIDs[z]];
		if(sObjectName == "CUSTOM"){
			var Element = document.getElementById(SearchPanel.ItemsIDs[z] + "_0");
			
			if(Element != null && typeof(Element.value) != "undefined"){
				if(Element.value.match("%s") && Element.value != ""){
					var arElementSuffix = Element.value.split("%s");
					
					for(var x = 1; x < arElementSuffix.length; x++){
						Element = document.getElementById(SearchPanel.ItemsIDs[z] + arElementSuffix[x]);
						var oDate = new Date(Element.value);
						var Value = oDate.toMySQLFormat(true);
						
						if(Value == null){
							Value = Element.value;
						}
						
						var Filter = Element.getAttribute("custom").replace("%s", Value.replace("'", "\\'"));
						if(Value != ''){
							SearchPanel._sFilterString += Filter;
						}else{
							return false;
						}
					}
				}else{
					var cnt = 0;
					var atLeastOneFound = false;
					do{
						if(Element.getAttribute("ignore") == null) 
							Element.setAttribute("ignore", "false");
//						else if(typeof(Element.getAttribute("ignore")) == "string"){
//							Element.setAttribute("ignore", (Element.getAttribute("ignore").toLower() == "true") ? true : false);
//						}
							
						//alert(Element.id +"(Ignore): " + Element.getAttribute("ignore"));
						if(Element.value != '' && Element.getAttribute("ignore") == "false" && Element.getAttribute("custom") != null && ((Element.type == "checkbox" && Element.checked) || Element.type != "checkbox")){
							var template = Element.getAttribute("custom");
							var matches = template.match("{([a-zA-Z0-9_-]+)}");
							for(var i = 0; matches != null && i < matches.length; i++){
								if(matches[i].substr(0, 1) != "{"){
									var control = document.getElementById(matches[i]);
									if(control != null){
										template = template.replace("{"+ matches[i] +"}", control.value);
									}
								}
							}
							//alert(Element.value.replace("'", "\\'"));
							var Filter = template.replace("%s", Element.value.replace("'", "\\\\'"));
							//alert("Custom: "+ Element.getAttribute("custom"));
							SearchPanel._sFilterString += Filter;
							atLeastOneFound = true;
						}else{
							//alert(Element.id +", "+ Element.getAttribute("custom") + ", "+ Element.value + " ("+ (Element.value != '') +")" +", "+ Element.type + " ("+ ((Element.type == "checkbox" && Element.checked) || Element.type != "checkbox") +"), "+ Element.getAttribute("ignore") +" ("+ (Element.getAttribute("ignore") == false) +")");
						}
						cnt++;
					}while((Element = document.getElementById(SearchPanel.ItemsIDs[z] + "_"+ cnt)) != null);
					
				}
			}
		}else{
			var Control = document.getElementById(SearchPanel.ItemsIDs[z]);
			var CheckAll = document.getElementById(SearchPanel.ItemsIDs[z] + "_CheckAll");
			//var bCheckAll = CheckAll.getAttribute("CheckAll");
			var bCheckAll = 0;
			var TotalCount = Control.GetItemsCount();
			
			if(typeof(bCheckAll) != "undefined" && bCheckAll == 1){
				
			}else{
				if(TotalCount > 0){
					var bHasFilter = false;
					var bFirst = true;
					for(var x = 0; x < TotalCount; x++){
						var Item = Control.GetItem(x);
						if(Control.IsItemChecked(Item)){
							SearchPanel._sFilterString += "";
							if(!bFirst){
								SearchPanel._sFilterString += ", "
							}else{
								SearchPanel._sFilterString += " AND EXISTS(SELECT mrel.MaterialID FROM Material" + sObjectName + " mrel WHERE mrel.MaterialID=Material.MaterialID AND mrel." + sObjectName + "ID IN(";
								bFirst = false;
								bHasFilter = true;
							}
							SearchPanel._sFilterString += Control.GetItemValue(x);
						}
					}
					if(bHasFilter){
						SearchPanel._sFilterString += "))";
					}
				}
			}
		}
	}
	//alert(SearchPanel._sFilterString);
	if(collectOnly)
		return SearchPanel._sFilterString;
		
	var list = document.getElementById("ArticleList");
	if(list == null){
		var content = document.getElementById("Content");
		var HttpRequest = new CHttpRequest();
		HttpRequest.QueryString = "AjaxType=HTML&RequestFile=UI.SearchResults&MethodName=XRender";
		HttpRequest.AssyncCall = true;
		HttpRequest.AddProperty("Arguments[FilterString]", SearchPanel._sFilterString);
		HttpRequest.Additional = {Content: content, TriggerItem: triggerItem};
		HttpRequest.OnResponse = SearchPanel.OnSearchResponse;
		HttpRequest.Send();
		content.innerHTML = "<div style='width: 100%; height: 50%; padding: 0px 30px 100px 0px; font-size: 20px; text-align: center; color: #888888; background-color: white;'>Loading Search Results...</div>";
	}else{
		SearchPanel._sFilterString = SearchPanel._sFilterString.replace("\'", "'");
		SearchPanel.SetFilter(SearchPanel._sFilterString);
		if(triggerItem == null)
			document.getElementById("SearchResultsIndex").innerHTML = "";
	}
	if(!SearchPanel.IsPinned){
		SearchPanel.Hide();
	}
}

SearchPanel.OnSearchResponse = function(httpRequest, e){
	//Additional.innerHTML = httpRequest.responseText;
	Ajax.LoadContent(e.Content, httpRequest.responseText);
	SearchPanel._bIsHomePage = false;
	var list = document.getElementById("ArticleList");
	list.ResizeHeaderScrollContainer();
	if(e.TriggerItem != null && typeof(e.TriggerItem) != "undefined")
		document.getElementById("SearchResultsIndex").innerHTML = "("+ SearchPanel.LastMarkedItemList.getAttribute("Tag") +": "+ SearchPanel.LastMarkedItemList.GetItemText(e.TriggerItem) +")";
	else
		document.getElementById("SearchResultsIndex").innerHTML = "";
}

// VLADI
SearchPanel.SetFilter = function(filter){
	var list = document.getElementById("ArticleList");
	if(list == null)
		return;
	list.CurrentPage = 1;
	list.StaticFilter = filter;
	list.Refresh();
}

SearchPanel.OnFilterPartChanged = function(sender, e){
	SearchPanel.RefreshCount();
}

SearchPanel._currentRequest = null;
SearchPanel._countContainer = null;
SearchPanel._colorFader = null;

SearchPanel.RefreshCount = function(){
	var filter = SearchPanel.DoSearch(true, null);
	if(SearchPanel._currentRequest != null){
		SearchPanel._currentRequest.Abort();
	}
	SearchPanel._currentRequest = new CHttpRequest();
	SearchPanel._currentRequest.QueryString = "AjaxType=HTML&RequestFile=UI.SearchResults&MethodName=XGetCount";
	SearchPanel._currentRequest.AssyncCall = true;
	SearchPanel._currentRequest.AddProperty("Arguments[FilterString]", filter);
	//SearchPanel._currentRequest.Additional = {Content: content, TriggerItem: triggerItem};
	SearchPanel._currentRequest.OnResponse = SearchPanel.RefreshCount_Callback;
	SearchPanel._currentRequest.Send();
	
	document.getElementById("SearchPanelCountContainer").innerHTML = "Loading...";
}

SearchPanel.RefreshCount_Callback = function(httpRequest, e){
	var countText = httpRequest.responseText;
	SearchPanel._currentRequest = null;
	var container = document.getElementById("SearchPanelCountContainer");
	container.innerHTML = countText + " articles found";
	if(SearchPanel._colorFader == null){
		SearchPanel._colorFader = new Controls.UI.ColorFader();
		SearchPanel._colorFader.FromColorString = "#FF5F00";
		//SearchPanel._colorFader.FromColorString = "#FF0000";
		SearchPanel._colorFader.ToColorString = "#2615A0";
		SearchPanel._colorFader.Interval = 10;
		SearchPanel._colorFader.Steps = 40;
		SearchPanel._colorFader.OnColorChangedDelegate = SearchPanel.RefreshCount_OnColorChanged;
		SearchPanel._colorFader.Target = container;
	}else{
		SearchPanel._colorFader.Cancel();
	}
	container.style.color = SearchPanel._colorFader.FromColorString;
	window.setTimeout(SearchPanel.RefreshCount_StartFading, 1 * 1000);
}

SearchPanel.RefreshCount_OnColorChanged = function(target, color){
	target.style.color = color;
}

SearchPanel.RefreshCount_StartFading = function(){
	SearchPanel._colorFader.Fade();
}

SearchPanel.BlockIDs = new Array("CountriesBlock", "TopicsBlock", "IndustriesBlock");

SearchPanel.ResizeBlock = function(name, width, left, listID, pickID, hasAllFooter){
	BaseSiteBlock.Resize(name, width);
	BaseSiteBlock.Move(name, left, null);
	
	if(listID != null && typeof(listID) != "undefined"){
		list = document.getElementById(listID);
		if(list != null){
			try{
				list.SetWidth(width - 4);
			}catch(e){};
		}
	}
	
	if(pickID != null && typeof(pickID) != "undefined"){
		var pick = document.getElementById(pickID);
		if(pick != null){
			pick.style.width = (width - 4 - 10) + "px";
		}
	}
	
	if(hasAllFooter){
		var allFooter = document.getElementById(name +"_AllFooter");
		if(allFooter != null)
			allFooter.style.width = (width - 6) + "px";
	}
	
	return left + width;
}

SearchPanel.IsPinned = true;

SearchPanel.TogglePin = function(button){
	if(SearchPanel.IsPinned){
		SearchPanel.IsPinned = false;
		//button.innerHTML = "Pin";
		button.style.display = "none";
		button.nextSibling.style.display = "";
		SearchPanel.Hide(true);
	}else{
		button.style.display = "none";
		button.previousSibling.style.display = "";
		SearchPanel.IsPinned = true;
		SearchPanel.Show(true);
		SearchPanel.RestorePanelColor();
	}
	SettingsManager.SaveSetting("SearchPanel.IsFloating", SearchPanel.IsPinned ? 0 : 1);
}

SearchPanel.Hide = function(resizeContainer){
	var currentHeight = BaseSiteBlock.GetHeight("SearchPanelBlock");
	var container = document.getElementById("SearchPanel");
	BaseSiteBlock.Resize("SearchPanelBlock", null, SearchPanel.CollapsedHeight);
	if(resizeContainer){
		container.style.height = (SearchPanel.CollapsedHeight + SearchPanel.Top) +"px";
		SearchResults.ResizeToFreeSpace();
	}
	SearchPanel.Opened = false;
}

SearchPanel.Show = function(resizeContainer){
	var currentHeight = BaseSiteBlock.GetHeight("SearchPanelBlock");
	var container = document.getElementById("SearchPanel");
	BaseSiteBlock.Resize("SearchPanelBlock", null, SearchPanel.NormalHeight);
	if(resizeContainer){
		container.style.height = (SearchPanel.NormalHeight + SearchPanel.Top) +"px";
		SearchResults.ResizeToFreeSpace();
	}
	SearchPanel.Opened = true;
}

SearchPanel.Highlight = function(){
	var container = document.getElementById("SearchPanelBlock");
	if(container == null)
		return;
	if(container.style.backgroundImage.indexOf("_MouseOver") == -1){
		container.style.backgroundImage = container.style.backgroundImage.replace(".jpg", "_MouseOver.jpg");
		SearchPanel.ChangePanelColor("#FAFAFA");
	}
}

SearchPanel.Restore = function(){
		var container = document.getElementById("SearchPanelBlock");
	if(container == null)
		return;
	if(container.style.backgroundImage.indexOf("_MouseOver") != -1){
		container.style.backgroundImage = container.style.backgroundImage.replace("_MouseOver.jpg", ".jpg");
		SearchPanel.RestorePanelColor();
	}
}

SearchPanel.RestorePanelColor = function(){
	var container = document.getElementById("SearchPanelBlock");
	if(container == null)
		return;
	container.style.backgroundColor = container.style.originalBackgroundColor;
	var footer = document.getElementById("SearchPanelBlock_Footer");
	footer.style.backgroundColor = container.style.originalBackgroundColor;
}

SearchPanel.ChangePanelColor = function(color){
	var container = document.getElementById("SearchPanelBlock");
	if(container == null)
		return;
	
	container.style.originalBackgroundColor = container.style.backgroundColor;
	container.style.backgroundColor = color;
	var footer = document.getElementById("SearchPanelBlock_Footer");
	footer.style.backgroundColor = color;
}

SearchPanel.Opened = false;

SearchPanel.Panel_MouseOver = function(e){
	if(!SearchPanel.IsPinned && !SearchPanel.Opened){
		//SearchPanel.ChangePanelColor("white");
		SearchPanel.Highlight();
		
		if(SearchPanel._showTimeout == null)
			SearchPanel._showTimeout = window.setTimeout(SearchPanel.Panel_MouseOver_OnTimer, 1000);
	}
}

SearchPanel.Panel_MouseOver_OnTimer = function(){
	//document.getElementById("DebugLayer").innerHTML += "Will Show<br/>";
	SearchPanel.Show(false);
	SearchPanel.Restore();
	SearchPanel._showTimeout = null;
	if(SearchPanel._hideTimeout != null){
		window.clearTimeout(SearchPanel._hideTimeout);
		SearchPanel._hideTimeout = null;
	}
}

SearchPanel._showTimeout = null;
SearchPanel._hideTimeout = null;

SearchPanel.Panel_MouseOut = function(e){
	if(!SearchPanel.IsPinned && !Utilities.DOM.IsParentOf(document.getElementById("SearchPanel"), Utilities.Events.GetToElement(e))){
		SearchPanel.Restore();
		SearchPanel._hideTimeout = window.setTimeout(SearchPanel.Panel_MouseOut_OnTimer, 300);
		if(SearchPanel._showTimeout != null){
			window.clearTimeout(SearchPanel._showTimeout);
			//document.getElementById("DebugLayer").innerHTML += "Clearing Show Timeout<br/>";
			//SearchPanel._showTimeout = null;
		}
	}
	if(!Utilities.DOM.IsParentOf(document.getElementById("SearchPanel"), Utilities.Events.GetToElement(e)))
		SearchPanel.RestorePanelColor();
}

SearchPanel.Panel_MouseOut_OnTimer = function(){
	if(!SearchPanel.IsPinned){
		SearchPanel.Hide(false);
		if(SearchPanel._showTimeout != null){
			window.clearTimeout(SearchPanel._showTimeout);
			SearchPanel._showTimeout = null;
		}
		SearchPanel._hideTimeout = null;
	}
}

SearchPanel.Reset = function(hideConfirmation){
	if(!hideConfirmation && !confirm("Are you sure you want to reset the search form?"))
		return;
	var list, combo, input, checkbox;
	list = document.getElementById("SearchPanel_SEE Countries");
	list.UncheckAll();
	list = document.getElementById("SearchPanel_Topics");
	list.UncheckAll();
	list = document.getElementById("SearchPanel_Industries");
	list.UncheckAll();
//	list = document.getElementById("SearchPanel_Companies");
//	list.UncheckAll();
//	list = document.getElementById("SearchPanel_People");
//	list.UncheckAll();
	
	combo = document.getElementById("SearchPanel_FreeText_1");
	combo.selectedIndex = 0;
	input = document.getElementById("SearchPanel_FreeText_0");
	input.value = "";
	
	combo = document.getElementById("SearchPanel_Date_0");
	combo.selectedIndex = 4;
	input = document.getElementById("SearchPanel_Date_1");
	input.value = "";
	input = document.getElementById("SearchPanel_Date_2");
	input.value = "";
	input = document.getElementById("SearchPanel_Date_3");
	input.value = "";
	combo = document.getElementById("SearchPanel_Type_0");
	combo.selectedIndex = 0;
	combo = document.getElementById("SearchPanel_Other_0");
	combo.selectedIndex = 0;
	combo = document.getElementById("SearchPanel_Other_1");
	combo.selectedIndex = 0;
	combo = document.getElementById("SearchPanel_Other_2");
	combo.selectedIndex = 0;
	checkbox = document.getElementById("SearchPanel_Other_3");
	checkbox.checked = false;
	
	
	SearchPanel.RefreshCount();
}

SearchPanel.SaveSearch = function(){
	SearchPanel.DoSearch(true);
	
	SettingsManager.SaveSetting("SearchPanel.FilterString", SearchPanel._sFilterString);
	
	var list, combo, input, checkbox;
	
	list = document.getElementById("SearchPanel_SEE Countries");
	SettingsManager.SaveSetting("SearchPanel_SEE_Countries.SelectedValues", list.GetSelectedValues());
	
	list = document.getElementById("SearchPanel_Topics");
	SettingsManager.SaveSetting("SearchPanel_Topics.SelectedValues", list.GetSelectedValues());
	SettingsManager.SaveSetting("SearchPanel_Topics.Mode", SearchListFilter.CurrentModes["SearchFilterTopic"]);
	
	list = document.getElementById("SearchPanel_Industries");
	SettingsManager.SaveSetting("SearchPanel_Industries.SelectedValues", list.GetSelectedValues());
	SettingsManager.SaveSetting("SearchPanel_Industries.Mode", SearchListFilter.CurrentModes["SearchFilterIndustry"]);
	
//	list = document.getElementById("SearchPanel_Companies");
//	SettingsManager.SaveSetting("SearchPanel_Companies.SelectedValues", list.GetSelectedValues());
//	
//	list = document.getElementById("SearchPanel_People");
//	SettingsManager.SaveSetting("SearchPanel_People.SelectedValues", list.GetSelectedValues());
	
	combo = document.getElementById("SearchPanel_FreeText_1");
	SettingsManager.SaveSetting("SearchPanel.FreeText.Option", combo.value);
	
	input = document.getElementById("SearchPanel_FreeText_0");
	SettingsManager.SaveSetting("SearchPanel.FreeText.Text", input.value);
	
	combo = document.getElementById("SearchPanel_Date_0");
	SettingsManager.SaveSetting("SearchPanel.Date.Option", combo.value);
	
	input = document.getElementById("SearchPanel_Date_1");
	SettingsManager.SaveSetting("SearchPanel.Date.CustomDate", input.value);
	
	input = document.getElementById("SearchPanel_Date_2");
	SettingsManager.SaveSetting("SearchPanel.Date.From", input.value);
	
	input = document.getElementById("SearchPanel_Date_3");
	SettingsManager.SaveSetting("SearchPanel.Date.To", input.value);
	
	combo = document.getElementById("SearchPanel_Type_0");
	SettingsManager.SaveSetting("SearchPanel.Type.Option", combo.value);
	
	combo = document.getElementById("SearchPanel_Other_0");
	SettingsManager.SaveSetting("SearchPanel.Other.Cost", combo.value);
	
	combo = document.getElementById("SearchPanel_Other_1");
	SettingsManager.SaveSetting("SearchPanel.Other.Picture", combo.value);
	
	combo = document.getElementById("SearchPanel_Other_2");
	SettingsManager.SaveSetting("SearchPanel.Other.File", combo.value);
	
	checbox = document.getElementById("SearchPanel_Other_3");
	SettingsManager.SaveSetting("SearchPanel.Other.TopOnly", checbox.checked ? checbox.value : 0);
	
	alert("Settings successfuly saved.");
}

SearchPanel.Window_Resize = function(e){
	
	var width, height;
//	if(window.innerHeight){
//		width = window.innerWidth;
//		height = window.innerHeight;
//		alert(document.documentElement.clientWidth);
//	}else{
//		width = document.documentElement.clientWidth;
//		height = document.documentElement.clientHeight;
//	}
	width = document.documentElement.clientWidth;
	height = document.documentElement.clientHeight;
		
	width -= 6; // 2x3 padding
	BaseSiteBlock.Resize("SearchPanelBlock", width, null);
	// inner width
	width -= 2; 
	var innerPadding = SearchPanel.Padding;
	var blockSpaceWidth = width - 6 * innerPadding;
	var blockWidth = Math.floor(blockSpaceWidth / 5);
	var middleBlockWidth = blockSpaceWidth - 4 * blockWidth;
	
	var left = innerPadding;
	SearchPanel.ResizeBlock("CountriesBlock", blockWidth, innerPadding, "SearchPanel_SEE Countries", null, true);
	left += blockWidth + innerPadding;
	
	SearchPanel.ResizeBlock("TopicsBlock", blockWidth, left, "SearchPanel_Topics", null, true);
	left += blockWidth + innerPadding;
	
	SearchPanel.ResizeBlock("IndustriesBlock", middleBlockWidth, left, "SearchPanel_Industries", null, true);
	left += middleBlockWidth + innerPadding;
	
//	SearchPanel.ResizeBlock("CompaniesBlock", blockWidth, left, "SearchPanel_Companies", "Companies_MainInput", true);
//	left += blockWidth + innerPadding;
//	
//	SearchPanel.ResizeBlock("PeopleBlock", blockWidth, left, "SearchPanel_People", "People_MainInput", null, true);
//	
//	left = innerPadding;

	SearchPanel.ResizeBlock("FreeTextBlock", blockWidth, left);
	//left += blockWidth + innerPadding;
	SearchPanel.ResizeBlock("DateBlock", blockWidth, left);
	
	left += blockWidth + innerPadding;
	SearchPanel.ResizeBlock("TypeBlock", middleBlockWidth, left);
	//left += middleBlockWidth + innerPadding;
	SearchPanel.ResizeBlock("OtherBlock", blockWidth, left);
	//left += blockWidth + innerPadding;
	
	var buttonBlock = document.getElementById("ButtonBlock");
	if(buttonBlock != null){
		buttonBlock.style.width = blockWidth +"px";
		buttonBlock.style.left = left +"px";
	}

	//SearchPanel.ResizeBlock("FreeTextBlock", 2 * blockWidth + innerPadding, innerPadding);
	//SearchPanel.ResizeBlock("DateBlock", middleBlockWidth + blockWidth + innerPadding, 2 * blockWidth + 3 * innerPadding);
	
//	var buttonBlock = document.getElementById("ButtonBlock");
//	if(buttonBlock != null){
//		buttonBlock.style.width = blockWidth;
//		buttonBlock.style.left = middleBlockWidth + 3 * blockWidth + 5 * innerPadding;
//	}
}

Utilities.Events.RegisterEventHandler(window, "onresize", SearchPanel.Window_Resize);

