var SearchWebResults = {
	init:function () {
		/*var page=/[\?&]page=(\d+)/.test(location.search) ? +RegExp.$1 || 1 : 1;
		SearchWebResults.oRequest.page=page;*/

		var params={};
		location.search.substr(1).replace(/(.*?)=(.*?)(?:&|$)/g,function (match,key,value) {
			if (!value) value="";
			params[key]=decodeURIComponent(value.replace(/\+/g," "));
		});

		$.extend(SearchWebResults.oRequest,params);
	},

	oRequest: {page:1},
	InitDoRequest: function(oProps) {
		$("#movies-streaminglinks_3").click();
		if (oProps.isSeries) {
			$("#MovieSearch").css("display","none");
			$("#EpisodeSearch").css("display","block");
			var oEl=$("#episodes_option");
			oEl.parent().children().removeClass("hovered");
			oEl.addClass("hovered");
			MiniHP.SelectSearchOption('webstreaminglinks');
			$("#hp-episode-search-query").val(oProps.searchQuery);
		}
		$("#MovieSearch").find(".input_moviesearch").val(oProps.searchQuery);
		MiniHP.Search();
	},

	InitDoRequestApr: function(oProps) {
		MiniHP.SelectSearchOptionApr({id:"SearchTypeItem13"},true);
		if (oProps.isSeries) {
			MiniHP.SearchResults_SwitchBetweenOptionsApr({id: "episodes_option"},true);
			$("#hp-episode-search-query").val(oProps.searchQuery);
		}
		$("#MovieSearch").find(".input_moviesearch").val(oProps.searchQuery);
		MiniHP.Search();
	},

	loadResults:function (page) {
		loadGoogleLinks(
			function (results) {
				$("#SearchResultsLoader").css("display","none");
				$("#SearchWebResults").css("display","block");

				$("#SearchWebResults_Pages").find(".C").removeClass("bold");
				$("#SearchWebResults_NextPage").removeClass("disabled");
				$("#SearchWebResults_PreviousPage").removeClass("disabled");

				if ($("#SearchWebResults_Pages").children().length == SearchWebResults.oRequest.page)
				{
					$("#SearchWebResults_NextPage").addClass("disabled");
				} else if (SearchWebResults.oRequest.page == 1)
				{
					$("#SearchWebResults_PreviousPage").addClass("disabled");
				}
				$("#SearchWebResults_Pages").children(":eq("+(SearchWebResults.oRequest.page-1)+")").find(".C").addClass("bold");


				$("#HpWebSearchResultsTotal").html(results.cursor.estimatedResultCount);
				$("#HpWebSearchResultsQuerySearched").html(SearchWebResults.getSearchQuery());

				if (results.cursor && results.cursor.currentPageIndex!==undefined) {
					var page=results.cursor.pages[results.cursor.currentPageIndex];
					if (page) {
						var from=+page.start+1,to;
						var nextPage=results.cursor.pages[results.cursor.currentPageIndex+1];
						if (nextPage) to=nextPage.start;
						else to=results.cursor.estimatedResultCount;
						$("#HpWebSearchResultsFrom").html(from);
						$("#HpWebSearchResultsTo").html(to);
						$("#web-results-info").show();
					}

					var pageItemSource='';
					var pagesSouece=[];

					var pageIndex=results.cursor.currentPageIndex+1,
						pageCount=results.cursor.pages.length,
						eachSideMax=3;
					var start=pageIndex-eachSideMax,
						end=pageIndex+eachSideMax;

					var hasMoreBefore=true,hasMoreAfter=true;

					if (start<1) {
						hasMoreBefore=false;
						end+=Math.abs(start)+1;
						start=1;
					}
					if (end>pageCount) {
						hasMoreAfter=false;
						start-=end-pageCount;
						if (start<1) start=1;
						end=pageCount;
					}

					for (var i=start;i<=end;i++) {
						pagesSouece.push('<a onmouseover="this.className=\'Page Docked\'" onmouseout="this.className=\'Page\'" class="Page" href="javascript:SearchWebResults.DoRequest({page:'+i+'})"><span class="L"></span><span class="C'+(i==pageIndex ? " bold" : "")+'">'+i+'</span><span class="R"></span></a>');
					}
					$("#SearchWebResults_Pages").html(pagesSouece.join(""));
				}

				//$("#qContent").val(SearchWebResults.getSearchQuery());
			},
			MiniHP.isSearchForEpisodes() ? "episode" : "category",
			(function () {
				var data={};
				data.type=MiniHP.isSearchForEpisodes() ? "episode" : "category";
				data.categoryName=SearchWebResults.oRequest.categoryName || "Full Movie";
				if (data.type!="category") {
					data.seasonNumber=$("#MiniSearchSeason").val();
					data.episodeNumber=$("#MiniSearchEpisode").val();
				}

				data.range=SearchWebResults.oRequest.range;

				return data;
			})()
		);
	},

	DoRequest: function(oProps,bReset,fullFetch) {
		for (var i in oProps) SearchWebResults.oRequest[i] = oProps[i];

		if (bReset)
			SearchWebResults.oRequest = {page:1}

		$("#SearchWebResults").css("display","none");
		$("#SearchResultsLoader").css("display","block");


		var options=$.extend({
			mode:"websearch",
			q:SearchWebResults.getSearchQuery(),
			searchType:WEB_SEARCH_TYPE
		},SearchWebResults.oRequest);

		if ($("#episodes_option").hasClass("hovered")) {
			options.tv=1;
			options.episode=+$("#MiniSearchEpisode").val() || "";
			options.season=+$("#MiniSearchSeason").val() || "";
		}

		return location.href="/search-results.asp?"+$.param(options);

		if (fullFetch) {
			$.ajax({
				type: "POST",
				url: ROOT_URL+"magazine-new-controls.asp?rnd="+new Date().getTime(),
				data: {
					ctl:"HpWebSearchResults"/*,
					options:JSON.stringify($.extend({
						searchType:$("#hp-search-type").val(),
						searchQuery:SearchResults.getSearchQuery()
					},SearchResults.oRequest))*/
				},
				success: function(msg){
					$("#HpSearchResultsPlaceHolder").html(msg);
					SearchWebResults.loadResults(SearchWebResults.oRequest.page);
				}
			});
		}
		else SearchWebResults.loadResults(SearchWebResults.oRequest.page);

		// Values: SearchWebResults.Range,SearchWebResults.Query,SearchWebResults.bIsTvSeries,SearchWebResults.Episode,SearchWebResults.Season,SearchWebResults.page
	},
	
	NextPage: function() {
		SearchWebResults.DoRequest({page:SearchWebResults.oRequest.page+1},null);
	},

	PreviousPage: function() {
		SearchWebResults.DoRequest({page:SearchWebResults.oRequest.page-1},null);
	},

	currentLoadedPage:1,

	goToPage:function (pg) {
		//return alert(pg);
		if (pg==SearchWebResults.currentLoadedPage) return $log("same page");
		SearchWebResults.currentLoadedPage=pg;
		$log("Loading page",pg);
		SearchWebResults.oRequest.page=pg;
		simulateMouseEvent($(".gsc-cursor-page",SearchWebResults.container)[pg-1],"click");
	},

	getSearchQuery:function () {
		var searchQuery=SearchWebResults.oRequest.searchQuery || $(MiniHP.isSearchForEpisodes() ? "#hp-episode-search-query" : "#hp-search-query").val();
		if ($.inArray(searchQuery,MiniHP.SearchRadioValues)>-1) searchQuery="";

		return searchQuery;
	}
};

var _currentSearchControl;

SearchWebResults.createWebSearchWithCallback=function (callback,data) {
	var searchControl;

	$log("SearchWebResults.createWebSearchWithCallback",data);

	var partnerId;

	if (data.categoryName=="Trailers / Previews") partnerId='005093127629859270805:glhngjajwqi';
	else if (data.type=="episode" || data.categoryName=="Full Movie") partnerId='partner-pub-1186401135184670:29unvlccbza';

	$log("[mp] searching with "+partnerId);

	searchControl=new google.search.CustomSearchControl(partnerId);
	searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);

	window.sc=searchControl;

	$log(searchControl);

	SearchWebResults._searchCallback=callback;

	if (!SearchWebResults.callbackRewritten) {
		SearchWebResults.callbackRewritten=true;
		var old=google.search.WebSearch.RawCompletion;
		google.search.WebSearch.RawCompletion=function (x,results) {
			old.apply(this,arguments);
			SearchWebResults._searchCallback(results.results,results);

			if (SearchWebResults.oRequest.page>1) SearchWebResults.goToPage(SearchWebResults.oRequest.page);
		};
	}

	if (!SearchWebResults.container) {
		SearchWebResults.container=$("<div/>").css({display:"none"}).appendTo(document.body)[0];
		//simulateMouseEvent($(".gsc-cursor-page")[2],"click");
	}

	searchControl.draw(SearchWebResults.container);

	return searchControl;
};
SearchWebResults.createSearchQuery=function (name,range,isSeries,data) {
	var isDefaultRange=!range || (isSeries && range=="0-40") || (!isSeries && range=="0-400");

	if (range) range=range.split("-");
	else range=[0,isSeries ? 40 : 400];

	var searchTerm=name;//.replace(/^"|"$/g,"");

	if (SearchWebResults.oRequest.addToSearchQuery) {
		searchTerm+=' +'+SearchWebResults.oRequest.addToSearchQuery;
	}

	var rangeBegin=+range[0],rangeEnd=range[1]=="Infinity" ? "5000" : +range[1];

	// if (isDefaultRange) searchTerm+=' -"0..'+(isSeries ? 40 : 400)+' Mb" -Kb ';
	// else searchTerm+=' -"0..'+(rangeBegin-1)+' Mb"'+(rangeEnd ? ' -"'+(rangeEnd+1)+'..5000 Mb" -Kb ' : "");

	if (isDefaultRange) searchTerm+=' -"0 OR '+(isSeries ? 40 : 400)+' Mb" -Kb ';
	else searchTerm+=' -"0 OR '+(rangeBegin-1)+' Mb"'+(rangeEnd ? ' -"'+(rangeEnd+1)+' OR 5000 Mb" -Kb ' : "");

	if (data.type=="episode" && isSeries && +data.seasonNumber && +data.episodeNumber) {
		var zeroEpisode=data.episodeNumber<10 ? "0"+data.episodeNumber : "",
			zeroSeason=data.seasonNumber<10 ? "0"+data.seasonNumber : "";

		searchTerm+='+"{0s}{0e}"OR"s{0s}e{0e}"OR"s{s}e{0e}"OR"s{s}e{e}"OR"s{0s} e{0e}"OR"s{s} e{0e}"OR"s{s} e{e}"OR"{0s}x{0e}"OR"{s}x{0e}"OR"{s}x{e}"OR"{0s}.{0e}"OR"s{0s} ep{0e}"OR"s{s} ep{0e}"OR"s{s} ep{e}"OR".{0s}{0e}."OR"{0s}.ep{0e}"OR"{s}.ep{0e}"OR"{s}.ep{e}"'
			.replace(/\{0e\}/g,zeroEpisode)
			.replace(/\{0s\}/g,zeroSeason)
			.replace(/\{e\}/g,data.episodeNumber)
			.replace(/\{s\}/g,data.seasonNumber);
	}

	//else
	if (SearchWebResults.oRequest.categoryName=="Trailers / Previews") searchTerm='allintitle:"'+name+'"+trailer OR preview';
	//if (data.type=="category") searchTerm+=" "+data.categoryName;
	$log(/*"isSeries="+isSeries,*/"searchTerm="+searchTerm/*,"data=",data*/);
	return searchTerm;
};

function processVideoLinkUrl(url,title) {
	if (!/\btvshack\.net/i.test(url)) url=VIEW_LINK_URL_EXTERNAL.replace("_URL_",encodeURIComponent(url)).replace("_TITLE_",encodeURIComponent(title || ""));
	return url;
				
}

function loadGoogleLinks(callback,type,data) {
	data=data || {};
	type=type || "category";
	if (typeof(google)=="undefined" || typeof(google.search)=="undefined") return;

	//var isCategory=type=="category";

	var itemSource='<div class="search-list-view"><div class="ResultBoxOut"><div class="bgreentl"><div class="bgreentr"><div class="roundedLeft"><div class="roundedRight"><div class="Corner18 ResultBoxIn"><div class="tl"></div><div class="tr"></div><div class="bl"></div><div class="br"></div><div class="TitleCont"><h1><a href="{url}" target="_blank" onmouseover="$(this).parent().parent().css(\'border-bottom\',\'1px solid #cdcdcd\')" onmouseout="$(this).parent().parent().css(\'border-bottom\',\'1px solid #e9e9e9\')">{title}</a></h1></div><div class="Description">{content}</div><div class="ResultInfo"><a href="{url}" target="_blank">{domain}</a></div></div></div></div></div></div></div></div>';

	var container=$("#HpWebSearchResultsList");

	container.empty();

	data.type=type;

	var webSearch=SearchWebResults.createWebSearchWithCallback(function (results,all) {
		if (!(SearchWebResults.oRequest.page>1 && SearchWebResults.currentLoadedPage==1)) {
			container.empty();
			for (var i=0;i<results.length;i++) {
				var res=results[i];

				var url=processVideoLinkUrl(res.url,res.titleNoFormatting);
				var replacements={ i:i+1,title:res.titleNoFormatting.substr(0,55),domain:res.visibleUrl.replace(/^www./,""),url:url,content:res.content };
				var source=itemSource.replace(/\{(.+?)\}/g,function ($0,$1) { return replacements[$1]; });

				$(source).appendTo(container);
			}
		}

		callback(all);
	},data);

	if (!webSearch) return;

	var isSeries=MiniHP.isSearchForEpisodes();

	var searchTerm=SearchWebResults.createSearchQuery(SearchWebResults.getSearchQuery(),data.range,isSeries,data);

	webSearch.execute(searchTerm);

	_currentSearchControl=webSearch;
}

SearchWebResults.init();

function simulateMouseEvent(el,name) {
	if (el.click) el.click();
	else if (el.ownerDocument.createEvent && el.dispatchEvent) {
		var evt=el.ownerDocument.createEvent("MouseEvents");
		evt.initMouseEvent(name,true,true,el.ownerDocument.defaultView,1,0,0,0,0,false,false,false,false,0,null);
		el.dispatchEvent(evt);
	}
}