
function ToggleDisplayType(type)
{
	if(document.all) // IE only
	{
		var childs = $("result-pages").childNodes;
		for(var i=0; i<childs.length; i++)
		{
			if((childs[i].nodeType == 1) && (childs[i].nodeName.toLowerCase() == "ul"))
				childs[i].className = type;
		}
		$("result-pages").position = "relative";
		IEFlag = (type=="details" && IEFlag==false)?true:false;
	}
	else
	{
		$("result-pages").childElements().each(function(item)
		{
			if(item.nodeName.toLowerCase() == "ul")
				item.className = type;
		});
	}
	PageResultThumbView();
}

function isInPage()
{
	var result = false;
	var get = location.search.substr(1);
	get.split('&').each(function (item)
	{
		var param = item.split('=');
		if((param[0] == 'inpage') && (item.substr(7) == 1))
			result = true;
	});
	return result;
}

function GetSearchString()
{
	var q = '';
	var get = location.search.substr(1);
	get.split('&').each(function (item)
	{
		var param = item.split('=');
		if(param[0] == 'q')
			q = item.substr(2);
	});
	return q;
}

function GetCheckedEntryType()
{
	var result = [];
	var LIs = $("result-entry-types").childElements();
	LIs.each(function(item)
	{
		if(item.firstChild.checked)
			result.push(item.firstChild.value);
	});
	return result;
}

function GetCurrentTags()
{
	var Tags = [];
	$("tags").childElements()[0].childElements().each(function(item)
	{
		var RX = /entry_tag_([0-9]+)/;
		if(RX.match(item.id))
			Tags.push(item.id.match(RX)[1]);
	});
	
	return Tags;
}

function GetCurrentPage()
{
	var epage = '';
	var get = location.search.substr(1);
	get.split('&').each(function (item)
	{
		var param = item.split('=');
		if(param[0] == 'epage')
			epage = item.substr(6);
	});
	return epage;
}

function GetSearchRefinements()
{
	// get current tag ids
	var CurTags = [];
	var LIs = $("rs-content").childElements()[0].childElements();
	LIs.shift();
	LIs.each(function(item)
	{
		var rx = /refine_item_([0-9]+)/;
		if(rx.match(item.id))
			CurTags.push(item.id.match(rx)[1]);
	});
	
	
	
	var q = GetSearchString();
	
	new Ajax.Request("/RefineSearchTags", 
	{
		parameters : { 'tags' :  CurTags.join(","), 'q' : q, 'inpage': (isInPage()?1:0)},
		method : 'get',
		onSuccess: function (response)
		{
			var reply = response.responseText;
			if(!reply.empty())
			{
				reply.split(",").each(function(item)
				{
					var tag = item.split("=");
					AddRefinement(tag[0], tag[1]);
				});
			}
		}
	});
}

function GetRefineText(id)
{
	var TagText = $("refine_item_"+id).childElements()[0].innerHTML;
	return TagText.substr(0, TagText.lastIndexOf('(')).strip();
}

function SearchSuggest(tag_id, TagSuggest)
{
	TagSuggest == TagSuggest==undefined?false:TagSuggest;
	var TagID = tag_id;
	if(TagSuggest)
		var TagText = $("tag_suggest_"+tag_id).innerHTML;
	else
		var TagText = GetRefineText(TagID);
	
	var Tags = $("tags").childElements()[0];
	var ChildOfTags = Tags.childElements();
	var FirstTag = ChildOfTags[0].innerHTML;
	var LastTag = ChildOfTags[ChildOfTags.length-1].innerHTML;
	
	ChildOfTags.shift();

	var TagHeader = document.createElement("li");
	TagHeader.id = "tag-header";
	TagHeader.innerHTML = FirstTag;
	
	var TagInput = document.createElement("li");
	TagInput.id = "tag-input";
	TagInput.innerHTML = LastTag;
	
	var ul = document.createElement("ul");
	ul.appendChild(TagHeader);
	ChildOfTags.each(function(item)
	{
		if(item.id != "tag-input")
		{
			var TagItem = document.createElement("li");
			TagItem.id = item.id;
			TagItem.innerHTML = item.innerHTML;

			ul.appendChild(TagItem);
		}
	});
	
	// add new tag
	if($("entry_tag_"+TagID))
		alert("Tag is already added.");
	else
	{
		var TagItem = document.createElement("li");
		TagItem.id = "entry_tag_"+TagID;
		TagItem.innerHTML = '<div class="tag-container"><em><span>'+TagText+' </span></em><b onclick="SearchUntag('+TagID+');"><img src="/images/new_subdomain/tag-delete.jpg"/></b></div>';
		ul.appendChild(TagItem);
	}
	
	ul.appendChild(TagInput);
	
	$("tags").replaceChild(ul, $("tags").childElements()[0]);

	UpdateResultEntry();
	
	try{
		toggle_element("ts-container", 'hide');
	}catch(e){}
}

function SearchUntag(id)
{
	$("entry_tag_"+id).remove();
	UpdateResultEntry();
}

function SearchSuggestion()
{
	var value = $("new-tag").value.strip();
	if(!value.empty())
	{	
		// replace "/test.php?action=suggest" with the url of page returning suggested tags
		var ajx = new Ajax.Request('/tags/search_related?text='+value+"&q="+GetSearchString()+"&inpage="+(isInPage()?1:0), 
			{
				onSuccess : function(response)
				{
                    $("tag-suggest").innerHTML = response.responseText + '<div id="ts-footer"></div>';
                    toggle_element("ts-container", 'show');
				}
			});
	}
	else
		toggle_element("ts-container", 'hide');
}

function TagSuggest()
{
	var value = $("page_tags").value.strip();
	if(!value.empty())
	{	
		// replace "/test.php?action=suggest" with the url of page returning suggested tags
		var ajx = new Ajax.Request('/tags/search_related?text='+value+"&q="+GetSearchString()+"&inpage="+(isInPage()?1:0), 
			{
				onSuccess : function(response)
				{
                    $("tag-suggest").innerHTML = response.responseText + '<div id="ts-footer"></div>';
                    toggle_element("tag-suggest", 'show');
				}
			});
	}
	else
		toggle_element("tag-suggest", 'hide');
}

function UpdateResultEntry(page, sort_option)
{
	var EntryTypes = GetCheckedEntryType();
	var QueryText = GetSearchString();
	var SearchTags = GetCurrentTags();
	var sort_result = (sort_option == undefined)?Sort:sort_option;
	page = (page==undefined)?1:page;
	
	if((sort_option != undefined) && (sort_option != null))
    {
        var ageLIs = $("result-entry-sort").childElements();
        ageLIs.each(function(item){
            item.className = '';             
        });
		Sort = sort_option;
		$('sort_'+sort_option).className = 'selected';
    }

	new Ajax.Request('/search/UpdateResult', {
		method : 'get',
		parameters : {
			'q' : QueryText,
			'epage' : page,
			'tags[]' : SearchTags,
			'types[]' : EntryTypes,
			'inpage': (isInPage()?1:0),
			'sort': sort_result
			},
		onSuccess : function(response)
		{
			var reply = response.responseText;
			var regex = /([0-9]+)/;
			var result_count = reply.match(regex)[1];
			var result_text = reply.replace(regex, '');
			$("entry-result-count").innerHTML = "(" + result_count + (result_count==1?" entry":" entries") + ")";
			$("result-entries").childElements()[0].innerHTML = result_text;
			RefineTags();
			UpdatePaging(page);
			
			_qacct="p-44VxhKUX2975c";
			quantserve();
		}
	});

}

function RefineTags()
{
	// get checked entry types
	var EntryTypes = GetCheckedEntryType();
	var QueryText = GetSearchString();
	var SearchTags = GetCurrentTags();

	new Ajax.Request('/search/RefineResultTags', {
		method : 'get',
		parameters : {
			'q' : QueryText,
			'tags[]' : SearchTags,
			'types[]' : EntryTypes,
			'inpage': (isInPage()?1:0)
			},
		onSuccess : function(response)
		{
			var reply = response.responseText;
			var Tags = reply.split(/\n/m);
			
			var UL = $("refine_tags");
			var LIs = UL.childElements();
			
			var newUL = document.createElement("ul");
			newUL.id = "refine_tags";
			newUL.appendChild(LIs[0]);
			
			var CurrentTags = GetCurrentTags();
			var TagCtr = 1;
			Tags.each(function(item)
			{
				if(TagCtr++ > 10) return;
				var tag = item.split("|");
				var TagID = tag[0];
				var TagText = item.substr(item.indexOf("|")+1);
				
				if(!CurrentTags.include(TagID))
				{
					var LI = document.createElement("li");
					LI.id = "refine_item_"+TagID;
					LI.innerHTML = '<a id="tag_refine_'+TagID+'" onclick="SearchSuggest('+TagID+');" href="javascript: void(0);">'+TagText+'</a>';
					newUL.appendChild(LI);
				}
			});
			var LI = document.createElement("li");
			LI.id = "rs-more";
			LI.innerHTML = '<a title="more..." onclick="GetSearchRefinements();" href="javascript: void(0);"><img alt="more..." src="/images/new_subdomain/more.png"/></a>';
			newUL.appendChild(LI);
			
			
			$("refine_tags").parentNode.replaceChild(newUL, $("refine_tags"));
		}
	});

}

function UpdatePaging(page)
{
	var EntryTypes = GetCheckedEntryType();
	var QueryText = GetSearchString();
	var SearchTags = GetCurrentTags();
	page = (page==undefined)?1:page;
	
	new Ajax.Request('/search/UpdatePaging', {
		method : 'get',
		parameters : {
			'q' : QueryText,
			'epage' : page,
			'tags[]' : SearchTags,
			'types[]' : EntryTypes,
			'inpage': (isInPage()?1:0)
			},
		onSuccess : function(response)
		{
			var reply = response.responseText;
			var rx = /<div class="paging">(.*)<\/div>/m;
			if(rx.match(reply))
			{
				var paging = reply.match(rx);
				
				$$("div.paging").each(function(div)
				{
					div.innerHTML = paging[1];
				})
			}
			else
				$$("div.paging").each(function(div)
				{
					div.innerHTML = "";
				})
		}
	});
}

function go2page(page)
{
	if(page != null)
		UpdateResultEntry(page);
}

/* -------------------------------- [category related] -------------------------------- */

function go2catpage(page)
{
	if(page != null)
		UpdateResultPage(page);
}

function GetCatID()
{
	//var rx = /\/categories\/new_show\/([0-9]+)/;
	var rx = /\/categories\/show\/([0-9]+)/;
	var path = location.pathname;
	if(rx.match(path))
		return path.match(rx)[1];
	return '';
}

function UpdateResultPage(page)
{
	var QueryText = GetCatID();
	var SearchTags = GetCurrentTags();
	page = (page==undefined)?1:page;

	new Ajax.Request('/categories/UpdatePages', {
		method : 'get',
		parameters : {
			'c' : QueryText,
			'page' : page,
			'tags[]' : SearchTags
			},
		onSuccess : function(response)
		{
			var reply = response.responseText;
			var rx = /^([0-9]+)/;
			
			var limit = 36;
			var TotalPages = parseInt(reply.match(rx)[1]);
			$("category-result-count").innerHTML = "("+ TotalPages + " " + (TotalPages==1?"page":"pages") + ")";
			var StartPage = ((page-1)*limit) + 1;
			if(StartPage>TotalPages)
				StartPage = TotalPages;
			$("category-start-page").innerHTML = StartPage;
			var EndPage = (((page-1)*limit)) + limit;
			if(EndPage>TotalPages)
				EndPage = TotalPages;
			$("category-end-page").innerHTML = EndPage;
			$("category-total-pages").innerHTML = TotalPages;
			
			reply = reply.replace(rx, '');
			var ResultPages = $("result-pages");
			var ul = ResultPages.childElements()[0];
			//var legend = $("legend");
			
			//var newUL = document.createElement("ul");
			//newUL.className = ul.className;
			//newUL.innerHTML = reply;
			//newUL.appendChild(legend);
			
			var rx = new RegExp('<ul class="details">', 'img');
			if(rx.test(reply))
				reply = reply.replace(rx, '<ul class="'+ul.className+'">');
			var newUL = '<ul class="'+ul.className+'">'+reply+'</ul>';
			
			//ul.remove();
			ResultPages.innerHTML = newUL;
			//ResultPages.appendChild(newUL);
			
			// spacer
			var spacer = document.createElement("div");
			spacer.className = "spacer";
			ResultPages.appendChild(spacer);
			
			UpdateCategoryRefine();
			UpdateResultPaging(page);
			
			PageResultThumbView();
			
			_qacct="p-44VxhKUX2975c";
			quantserve();
		}
	});
}

function UpdateResultPaging(page)
{
	var QueryText = GetCatID();
	var SearchTags = GetCurrentTags();
	page = (page==undefined)?1:page;

	new Ajax.Request('/categories/UpdatePaging', {
		method : 'get',
		parameters : {
			'c' : QueryText,
			'page' : page,
			'tags[]' : SearchTags
			},
		onSuccess : function(response)
		{
			var reply = response.responseText;
			var rx = /<div class="paging">(.*)<\/div>/m;
			if(rx.match(reply))
			{
				var paging = reply.match(rx);
				
				$$("div.paging").each(function(div)
				{
					div.innerHTML = paging[1];
				})
			}
			else
				$$("div.paging").each(function(div)
				{
					div.innerHTML = "";
				})
		}
	});
}

function UpdateCategoryRefine()
{
	var QueryText = GetCatID();
	var SearchTags = GetCurrentTags();
	
	new Ajax.Request('/categories/UpdateRefineTags', {
		method : 'get',
		parameters : {
			'c' : QueryText,
			'tags[]' : SearchTags
			},
		onSuccess : function(response)
		{
			var reply = response.responseText;
			var rx = /<div id="refine-search">/;
			if(rx.match(reply))
			{
				var new_refine_search = document.createElement("div");
				new_refine_search.id = "refine-search";
				rsTEXT = reply.replace(rx, '');
				rsTEXT = rsTEXT.substr(0, rsTEXT.length-8);
				new_refine_search.innerHTML = rsTEXT;

				var refine_search = $("right-column").childElements()[0];
				$("right-column").replaceChild(new_refine_search, refine_search);
			}
		}
	});
}

function GetCategoryRefinements()
{
	// get current tag ids
	var CurTags = [];
	var LIs = $("rs-content").childElements()[0].childElements();
	LIs.shift();
	LIs.each(function(item)
	{
		var rx = /refine_item_([0-9]+)/;
		if(rx.match(item.id))
			CurTags.push(item.id.match(rx)[1]);
	});
	
	var q = GetCatID();
	
	new Ajax.Request("/RefineCategoryTags", 
	{
		parameters : { 'tags' :  CurTags.join(","), 'c' : q},
		method : 'get',
		onSuccess: function (response)
		{
			var reply = response.responseText;
			if(!reply.empty())
			{
				reply.split(",").each(function(item)
				{
					var tag = item.split("=");
					AddRefinement(tag[0], tag[1]);
				});
			}
		}
	});
}

function CategoryTagSuggest(tag_id, TagSuggest)
{
	TagSuggest == TagSuggest==undefined?false:TagSuggest;
	var TagID = tag_id;
	if(TagSuggest)
		var TagText = $("tag_suggest_"+tag_id).innerHTML;
	else
		var TagText = GetRefineText(TagID);
	
	var Tags = $("tags").childElements()[0];
	var ChildOfTags = Tags.childElements();
	var FirstTag = ChildOfTags[0].innerHTML;
	var LastTag = ChildOfTags[ChildOfTags.length-1].innerHTML;
	
	ChildOfTags.shift();

	var TagHeader = document.createElement("li");
	TagHeader.id = "tag-header";
	TagHeader.innerHTML = FirstTag;
	
	var TagInput = document.createElement("li");
	TagInput.id = "tag-input";
	TagInput.innerHTML = LastTag;
	
	var ul = document.createElement("ul");
	ul.appendChild(TagHeader);
	ChildOfTags.each(function(item)
	{
		if(item.id != "tag-input")
		{
			var TagItem = document.createElement("li");
			TagItem.id = item.id;
			TagItem.innerHTML = item.innerHTML;

			ul.appendChild(TagItem);
		}
	});
	
	// add new tag
	if($("entry_tag_"+TagID))
		alert("Tag is already added.");
	else
	{
		var TagItem = document.createElement("li");
		TagItem.id = "entry_tag_"+TagID;
		TagItem.innerHTML = '<div class="tag-container"><em><span>'+TagText+' </span></em><b onclick="CategoryUntag('+TagID+');"><img src="/images/new_subdomain/tag-delete.jpg"/></b></div>';
		ul.appendChild(TagItem);
	}
	
	ul.appendChild(TagInput);
	
	$("tags").replaceChild(ul, $("tags").childElements()[0]);

	UpdateResultPage();
	
	try{
		toggle_element("ts-container", 'hide');
	}catch(e){}
}

function CategoryUntag(id)
{
	$("entry_tag_"+id).remove();
	UpdateResultPage();
}

function CategoryTagSuggestion()
{
	var value = $("new-tag").value.strip();
	if(!value.empty())
	{	
		// replace "/test.php?action=suggest" with the url of page returning suggested tags
		var ajx = new Ajax.Request('/tags/category_related?text='+value+"&c="+GetCatID(), 
			{
				onSuccess : function(response)
				{
                    $("tag-suggest").innerHTML = response.responseText + '<div id="ts-footer"></div>';
                    toggle_element("ts-container", 'show');
				}
			});
	}
	else
		toggle_element("ts-container", 'hide');
}

/* -------------------------------- [/category related] -------------------------------- */

function getChildElements(obj)
{
	if(document.all)
	{
		var childs = [];
		for(var i in obj.childNodes)
		{
			if(obj.childNodes[i].nodeType == 1)
			{
				childs.push(obj.childNodes[i]);
			}
		}
		return childs;
	}
	else
		return obj.childElements();
}

function remove_ClassName(obj, cName)
{
	if(document.all)
		obj.className = obj.className.replace(" "+cName, "");
	else
		obj.removeClassName(cName);
}

function add_ClassName(obj, cName)
{
	if(document.all)
		obj.className += " " + cName;
	else
		obj.addClassName(cName);
}

function PageResultThumbView()
{
	updateThumbnails();
	updateThumbnailsTitle();
	if(document.all && (ResizeCtr==3))
		WindowCurrentScrollWidth = document.body.scrollWidth;
	if(document.all && IEFlag)
	{
		ToggleDisplayType("details");
	}
}

function updateThumbnails()
{
	$$(".page-thumbnail").each(function(item)
	{
		// fix position of info..
		
		var li = item.parentNode;
		var divs = getChildElements(li);
		if(document.all)
		{
			var widthDiff = 0;
			if(ResizeCtr==3)
				widthDiff = Math.ceil((WindowCurrentScrollWidth - document.body.scrollWidth)/2);
			if(widthDiff < 0) widthDiff = 0;
			
			var ResultPage = $("result-page");
			
			//divs[0].style.top = li.offsetTop + ResultPage.offsetTop + "px";
			divs[0].style.marginTop = 50 + "px";/*

			var leftAddends = [];
			leftAddends[0] = li.offsetLeft;
			leftAddends[1] = Math.ceil(ResultPage.offsetLeft/2);
			leftAddends[2] = 45;
			leftAddends[3] = 0-widthDiff;
			
			var leftSum = 0;
			for(var i=0; i<leftAddends.length; i++)
				leftSum+=leftAddends[i];
			
			divs[0].style.left = leftSum + "px";*/
			divs[0].style.marginLeft = -20 + "px";
		}/*
		else
		{
			divs[0].style.top = li.offsetTop + 50 +"px";
			divs[0].style.left = li.offsetLeft + 60 + "px";
		}*/
		
		if (item.parentNode.parentNode.className == "details")
		{
			item.onmouseover = function()
			{
				var sibling = getChildElements(this.parentNode);
				sibling = sibling[0];
				var siblingParent = sibling.parentNode;
				if(!document.all)
				{
					//sibling.style.top = siblingParent.offsetTop + 50 +"px";
					//sibling.style.left = siblingParent.offsetLeft + 60 + "px";
					sibling.style.marginTop = 50 +"px";
					sibling.style.marginLeft = 60 + "px";
				}
				
				sibling.onmouseover = function()
				{
					remove_ClassName(this, "hide");
				}
				sibling.onmouseout = function()
				{
					add_ClassName(this, "hide");
				}
				remove_ClassName(sibling, "hide");
			}
			item.onmouseout = function()
			{
				var sibling = getChildElements(this.parentNode);
				sibling = sibling[0];
				add_ClassName(sibling, "hide");
			}
		}
		else
		{
			item.onmouseover = null;
			item.onmouseout = null;
		}
	});
}

function updateThumbnailsTitle()
{
	$$(".page-thumb-title .page-title").each(function(item)
	{
		if (item.parentNode.parentNode.parentNode.className == "details") 
		{
			item.onmouseover = function(){
				var sibling = getChildElements(this.parentNode.parentNode);
				sibling = sibling[0];
				remove_ClassName(sibling, "hide");
				sibling.onmouseover = function()
				{
					remove_ClassName(this, "hide");
				}
				sibling.onmouseout = function()
				{
					add_ClassName(this, "hide");
				}
			}
			item.onmouseout = function()
			{
				var sibling = getChildElements(this.parentNode.parentNode);
				sibling = sibling[0];
				add_ClassName(sibling, "hide");
			}
		}
		else 
		{
			item.onmouseover = alert;
			item.onmouseout = alert;
		}
	});
}

var oldWindowLoad_sjs = window.onload;
window.onload = function()
{
	if(typeof oldWindowLoad_sjs == "function")
		oldWindowLoad_sjs();
	if(document.all)
		WindowCurrentScrollWidth = document.body.scrollWidth;
	PageResultThumbView();
}
window.onresize = function()
{
	ResizeCtr++;
	PageResultThumbView();
	if(ResizeCtr == 3)
		ResizeCtr = 0;
}
var WindowMaximizedScrollWidth = 0;
var IEFlag = false;
var ResizeCtr = 0;
var Sort = '';