﻿var queryFixTimeout;
var searchedTags = new Array();
var searchedPhrases = new Array();
var hash;
var lastHash = "";
var dataPath = "data/searchResults.aspx";
var cdn = "http://files.bayrozgar.com/";
//var cdn = "";
var defaultViewMode = "gallery";
var viewMode;
var pageNum = 1;
var queryParams = "";
var pagerBesides = 6;
var tagsOn = true;

$(document).ready(function() {

	//mark nav item
	$("#mainNav a:contains('Directory')").addClass('selected');
	startHashTimer();
	if (location.search.indexOf("?q=") > -1) {
		//removing all parameters but the first one (q) and converting to hash
		var newLocation = location.href;
		if (newLocation.indexOf("&") > -1) {
			newLocation = newLocation.substr(0, newLocation.indexOf("&"));
		}
		//redirecting to JS version
		newLocation = newLocation.replace("?q=", "#");
		location = newLocation;
		return;
	}
	initPagefunctionality();
	//loadAds();

});

function initPagefunctionality() {
		$("#q").keyup(function() {
			var lastChar = $("#q").val().substr(-1);
			if (lastChar != " " && lastChar != ":") {
				clearSearchString();
			}

		});

		if (getCookie("viewmode") == "gallery" || getCookie("viewmode") == "list") {
			viewmode = getCookie("viewmode");
		} else {
			viewmode = defaultViewMode;
		}
		setViewMode(viewmode);

		$("#viewModeHolder").click(function() {
			toggleViewMode();
		});

		//$("#infoPanel").draggable();
		//$("#closeInfoPanel").click(function() { $("#infoPanel").fadeOut("slow") });

		if (getCookie("showTags") == "0") {
			hideTags();
		}

		$("#tagsCollapser").click(function() {
			if (tagsOn) { hideTags() } else { showTags() };
		})

		//by css default - apps and unselectedtags are hidden.
		//When not loading through AJAX, this will show them
		if (location.hash.length < 2) { //empty or #
			initResults()
		}

		activateBackToTop();

		if ($.browser.msie && $.browser.version < 7) {
			alert("Bayrozgar.com is best viewed on modern browsers(IE7+, Firefox 2+, Safari, Chrome)");
		}

	}


function startHashTimer() {
	hashTimer = setInterval(function() {
		hash = location.hash;
		if (hash != lastHash && hash != "#") {
			queryParams = hash.replace("#", "");
			if ($("#q").val() != queryParams) {
				$("#q").attr("value", queryParams);
				clearSearchString();
				removeSearchDuplicates();
			}
			loadData(true);
			lastHash = hash;
			reportStats('search/' + queryParams);
		}
	}, 1000);

}


function loadData(updateTags) {
	//showMessage(getRandomMessage("working"),"working");
	$('html, body').animate({ scrollTop: 0 }, 500);
	if (updateTags) {
		$("#unselectedTags").slideUp("slow");
	}
	$("#dataHolder").load(dataPath + "?q=" + queryParams + "&pg=" + pageNum, {}, function() {
		$("#pager").html($("#dataHolder #pagingData").html());
		$("#appsList").html($("#dataHolder #appsData").html());
		$("#nextBack").html($("#dataHolder #nextBackData").html());
		$("#selectedTags").html($("#dataHolder #selectedTagsData").html());
		$("#unselectedTags").html($("#dataHolder #unselectedTagsData").html());
		//$("#unselectedTags span:contains('()')").hide();
		$("#appsListHolder h1").html($("#dataHolder #headlineData").html());
		document.title = $("#dataHolder #headlineData").html() + " on Go2Web20";
		$("#dataHolder").empty();
		initResults();
	});
	//setTimeout(function() {
	//}, 0);
}

function initResults() {
			//showMessage("");
			animateApps();
			$("#unselectedTags").slideDown(300);
			activateTooltip(viewMode == "gallery");
			pageNum = 1; //reset for future searches
			if (queryParams.length > 0) {
				$("#unselectedTags").removeClass("noCount");
			} else {
				$("#unselectedTags").addClass("noCount");
				$("#unselectedTags li:first-child").addClass("popular");
			}

			
}
/*
function parseData(xml, updateTags) {
	setViewMode(viewMode);
	//showMessage("");
	animateApps();
	if (_totalPages == 0) {
		showNoResults();
	}

}
*/

function refineSearch(addedTag) {
	if (hash.toLowerCase().indexOf("tag:"+addedTag.toLowerCase()) > -1) return;
	$("#unselectedTags li:contains('" + addedTag + "')").slideUp("fast");
	$("#selectedTags").append("<li onclick=\"removeTag('" + addedTag + "')\">" + addedTag + "</li>");
	$("#selectedTags").children("li:last")
		.css("display", "none")
		.slideDown("fast", function() {
			if (hash.length > 0) {
				location = hash + "+tag:" + addedTag;
			} else {
				location = "#tag:" + addedTag;
			}
		});
}
function removeTag(tagStr) {
	//$("div:contains('John')")
	$("#selectedTags li:contains('" + tagStr + "')").slideUp("fast");
	location = hash.replace("+tag:" + tagStr, "")
					.replace("tag:" + tagStr + "+", "")
					.replace("tag:" + tagStr, "");
	
}

function page(newPageNum) {
	pageNum = newPageNum;
	//alert("load from pagination ('page')");
	loadData(false);

}

function submitSearchForm() {
	clearSearchString();
	location.href = "/#" + $("#q").val();
	return false;
}


function clearSearchString() {
	var q = $("#q").val().toLowerCase();
	var re = /[^a-zA-Z0-9 -_:+]/g;
	q = q.replace(re, "").replace(" ", "+");
	var qParts = q.split("+");
	var searchParts = new Array();

	for (var i = 0; i < qParts.length; i++) {
		var qPart = qParts[i];
		if (qPart.length == 0) {
			qParts.splice(i, 1);
		}else if (qPart.substr(0,4) == "tag:") {
			qPart = "tag:" + clearSearchPhrase(qPart.substr(4));
		} else {
			qPart = clearSearchPhrase(qPart);
		}
		qParts[i] = qPart;
	}

	q = qParts.join("+");
	$("#q").attr("value", q);
	clearTimeout(queryFixTimeout);
}

function removeSearchDuplicates() {
	var qParts = $("#q").val().split("+");
	if (qParts.length > 1) {
		for (var i = 1; i < qParts.length; i++) {
			for (var k = 0; k < i; k++) {
				if (qParts[i] == qParts[k]) {
					qParts.splice(i, 1);
				}
			}
		}
		$("#q").attr("value", qParts.join("+"));
		clearSearchString();
	}
}

function clearSearchPhrase(str) {
	var re = /[^a-zA-Z0-9-_ ]/g;
	var clearQ = str.replace(re, "");
	return clearQ;
}


function organizeQuery(messyQuery) {
	var q = messyQuery.replace("?q=", "");
	q = q.replace(" ", "+").replace("%20", "+");
	var qParts = q.split("+");
	var qParts2 = new Array();
	for (var i = 0; i < qParts.length; i++) {
		if (qParts[i].length > 0) {
			qParts2.push(qParts[i]);
		}
	}
	newQ = qParts2.join("+");
	return "?q=" + newQ;
}

function setViewMode(newMode) {
	if (newMode != "gallery" && newMode != "list") {
		return;
	}
	
	$("#appsList").removeClass("galleryViewMode");
	$("#appsList").removeClass("listViewMode");
	$("#appsList").addClass(newMode + "ViewMode");
	//$("#viewModeHolder").css("background-position", (newMode == "gallery") ? "0 -23px" : "0 0");
	//$("#tooltip").css("display", (newMode == "gallery") ? "block" : "none");
	viewMode = newMode;
	activateTooltip(newMode=="gallery");
	//activateInfoPanel();
	setCookie("viewmode", newMode, 30);
}

function toggleViewMode() {
	if (viewMode == "gallery"){
		otherMode = "list"
	}else if (viewMode == "list"){
		otherMode = "gallery"
	}else{
		otherMode = defaultViewMode;
	}
	reportStats("viewMode/" + otherMode);
	setViewMode(otherMode);
}

//var messageTimeout;
function showMessage(msg, anim) {
	if (msg == "") {
		$("#message").css("left","-700px");
	}else{
		$("#message").append(msg).css("left", "-400");
	}

	/*
	clearTimeout(messageTimeout);
	if (msg == "") {
		messageTimeout = setTimeout(function() {
			$("#message").animate({ "left": "-700px" }, 300);
		 }, 1000);
	} else {
		$("#message")
			.empty()
			.append(msg)
			//.append("<img src='images/msgAnim_" + anim + ".gif'/>")
			.animate({"left": "-400"}, 300 )
			.append("<img src='images/msgAnim.gif'/>");
	}*/
}
//var tooltipTimeout;
var tooltipOn;
function activateTooltip(toShow) {
	tooltipOn = toShow;
	//clearTimeout(tooltipTimeout);
	$("#appsList .app .logo").hover(function(e) {
		if (tooltipOn) {
			var appElement = $(this).parent().parent();
			var descHtml = appElement.children(".description:first").children("h2").children("a").html().replace(":</strong>","</strong><br/>");
			var logoHeight = $(this).height();
			$("#tooltip")
			.empty()
			.append(descHtml)
			.css("top", appElement.offset().top - 40 + logoHeight + "px")
			.css("left", appElement.offset().left + "px")
			.css("width", appElement.width() - 10 + "px")
			.show();
			//.fadeIn("fast");
		}
	}, function() {
		//tooltipTimeout = setTimeout(function() {
		$("#tooltip").hide();
		//}, 500);
	});

}


function activateInfoPanel() {
	$("#infoPanel")
		.css("top", $("body").outerHeight() - 400 + "px")
		.css("left", ($("body").outerWidth() - $("#infoPanel").outerWidth()) / 2 + "px");
	$(".app").click(function() {
		var descHtml = $(this).children(".description:first").html();
		$("#infoPanelContent")
			.empty()
			.append(descHtml);
		$("#infoPanel").fadeIn("fast")

	});


}



var animateAppsInterval;
function animateApps() {

	var $apps = $("#appsList").children(".app");
	$apps.css("display", "none");
	var totalApps = $apps.length;
	var totalAppsToFade = Math.min(totalApps, 70);
	var counter = 0;
	clearInterval(animateAppsInterval);
	animateAppsInterval = setInterval(function() {
		$("#appsList").children(".app").eq(counter).fadeIn("fast");
		counter++;
		if (counter >= totalAppsToFade) {
			clearInterval(animateAppsInterval);
			for (var i = totalAppsToFade; i < totalApps; i++) {
				$("#appsList").children(".app").eq(i).show();
			}
		}
	}, 20);
}
var animateTagsInterval;
function animateTags() {

	var $sTags = $("#unselectedTags").children("li");
	$sTags.css("display", "none");
	$sTags.css("width", "0");
	var totalTags = $sTags.length;
	//alert(totalTags);
	var counter = 0;
	clearInterval(animateTagsInterval);
	animateTagsInterval = setInterval(function() {
		//alert("a");
		$("#unselectedTags")
			.children("li").eq(counter)
			.show()
			.animate({"width":"145px"},500,"swing");
		counter++;
		if (counter >= totalTags - 1) {
			clearInterval(animateTagsInterval);
		}
	}, 50);
}

function getRandomMessage(collectionName) {
	var alternatives = new Array();
	switch (collectionName.toString().toLowerCase()){
		case "working":
			alternatives = ["Working on it","Right away","Hold on","Coming right up","You were saying...","Busy searching","Sit back, relax","One moment please","Good choice"];
			break;
	}
	return alternatives[Math.floor(Math.random()*alternatives.length)];
	
	
}





function hideTags() {

	$("#tags").slideUp(300, function() {
		$("#appsListHolder").animate({ marginRight: "165px" }, 300);
		$("#tagsCollapser").text("Show tags");
		tagsOn = false;
	});
	setCookie("showTags", "0", 30);
	reportStats("tagsShowHide/hide");

}

function showTags() {
	$("#appsListHolder").animate({ marginRight: "385px" }, 300, "linear", function() {
		$("#tags").slideDown(300);
		$("#tagsCollapser").text("Hide tags");
		tagsOn = true;
	});
	setCookie("showTags", "1", 30);
	reportStats("tagsShowHide/show");
}

function showNoResults() {
	$("#appsList").html("<div id='noResults'>No results found for your search.</div>")
	//TODO: load detailed tips
	//$("#appsList").load("noResults.html");

}

function showAllTags() {
	$("#allTags").load("data/alltags.aspx", {}, function() {
		$("#allTags").css({ "display": "block", "left": ($("body").width() - $("#allTags").width())/2 });
		sortTags("name");
		$(".closeTagsPanel").click(function() {
			closeAllTags();
		});
	})
}
function closeAllTags() {
	tb_remove();//remove lightbox
	//$("#allTags").css("display", "none");
}

function sortTags(sortType) {

	if (sortType == "name") {
		$("#allTagsByName").show();
		$("#allTagsByCount").hide();
		$("#sortName").addClass("selected").blur();
		$("#sortCount").removeClass("selected");

	} else {
		$("#allTagsByName").hide();
		$("#allTagsByCount").show();
		$("#sortCount").addClass("selected").blur();
		$("#sortName").removeClass("selected");
	}
}


function activateBackToTop() {
	$("#totop").hide();
	var totopVisible = false;
	$(document).scroll(function() {
		if ($(window).scrollTop() > 600) {
			if (!totopVisible) {
				$("#totop").slideDown("fast");
				totopVisible = true;
			}
		} else if (totopVisible) {
			$("#totop").slideUp("fast");
			totopVisible = false;
		}
	});

	$("#totop").click(function() {
		$("html").animate({ scrollTop: 0 }, 1000);
	});

}

function loadAds() {
	$("#ads").html(
		"<iframe src='ads.aspx' width='100%' height='650px;' frameborder='0' allowtransparency='true'></iframe>"
	);
}
