/* shared.js: shared site functions */

// global ajax setup
jQuery.ajaxSetup({
	type: "POST"
});

function log(msg) {
	try {
		console.debug(msg);
	} catch (err) {
		
	}
}

function trace() {
	try {
		console.trace();
	} catch (err) {
		
	}
}

function addIdHash(id) {
	if (id.indexOf("#") == 0) {
		return id;
	} else {
		return "#" + id;
	}
}

function trackThis(trackingObject)
{
	try
	{
    	switch(trackingObject.type)
    	{
    		case "event":
    			try
				{
					var s = trackingObject.label.split("|");
					pageTracker._trackEvent(s[0], s[1]);
				}
				catch(err){}
    			break;
    		
    		case "page":
    			try
				{
					pageTracker._trackPageview(trackingObject.label);
				}
				catch(err){}
    			break;
    	}
    }
    catch(err){}
}

function frameBreak()
{
	var S=['hugo.wddg.com','www.funny-games.biz'];
	function chk(l) { 
		for (var i=0,s;s=S[i];i++) if (l==s) return 1; 
	}

	if (window!=top) { 
		
		var l; 
		if (document.referrer && (l=document.referrer.split('/')[2]) && chk(l)) top.location=window.location; 
	} 
}

function showBox(id) {
	var container = $(id);
	if (container) container.show();
}

function hideBox(id) {
	var container = $(id);
	if (container) container.hide();
}

function anchorMove(destination)
{
	var currentHref = location.href;
	location.href = currentHref.substr(0, currentHref.lastIndexOf("#")) + "#" + destination;
}

var tempNav = "";
var prevHeight = 0;
function toggleMore() {
	if($('#more_games').is(":visible") == true)
	{
		$('#nav').removeClass();	
		$('#nav').addClass(tempNav);
		$('#home_leaderboard_ad').css('height',prevHeight);
	}else{
		tempNav = $('#nav').attr('class');
		$('#nav').removeClass();
		$('#nav').addClass('more');
		var tmpHeight = $('#more_games').height();
		prevHeight = $('#home_leaderboard_ad').height();
		$('#home_leaderboard_ad').css('height',tmpHeight-60);
		trackThis({type:'event', label:'Top Nav|Top Nav - Expand More'});
	}
	$('#more_games').toggle();
}

function toggleAdvancedSearchBox(boxId) {
	toggleBox(boxId, 'giant_search_box');
	if ($(addIdHash(boxId)).attr("class").indexOf("_open") >= 0) {
		$("#st_advanced_" + boxId).value = $("#st_" + boxId).value;
		$("#st_" + boxId).hide();
		$("#img_" + boxId).hide();
		$("#box_top_" + boxId).hide();
	} else {
		$("#st_advanced_" + boxId).value = "";
		$("#st_" + boxId).show();
		$("#img_" + boxId).show();
		$("#box_top_" + boxId).show();
	}
}

function selectTab(tabID, contentID, trackingObject)
{
	
	if($(currentGPTab)) { $(addIdHash(currentGPTab)).removeClass(); }
	$(addIdHash(currentGPContent)).hide();
	currentGPTab = tabID;
	currentGPContent = contentID;
	if($(tabID)) $(addIdHash(tabID)).addClass("current");
	$(addIdHash(contentID)).show();
	
	trackThis(trackingObject);
}
                                                                                         
function toggleBox(boxID,boxName)
{
	if($(addIdHash(boxID)).hasClass(boxName))
	{
		$(addIdHash(boxID)).removeClass();
		$(addIdHash(boxID)).addClass(boxName + "_open");
	}else{
		$(addIdHash(boxID)).removeClass();
		$(addIdHash(boxID)).addClass(boxName);
	}
}

function toggleStyle(styleName)
{
	$('div[id^=score_]').each(function(e) {
		e.removeStyle(); 
		e.addStyle(styleName);
	});
	
}

function toggleSearch(styleName)
{
	$('div[id^=game_result_]').each(function(e) {
		e.removeStyle(); 
		e.addStyle(styleName);
	});
}

var currentSPTab = "game_tab";

function swapDivAndTab(tabID,divID,styleName)
{
	if(currentSPTab != tabID)
	{                    
		$(addIdHash(divID)).removeClass();
		$(addIdHash(divID)).addClass(styleName);
		$(addIdHash(currentSPTab)).removeClass();
		
		currentSPTab = tabID;
		
		$(addIdHash(currentSPTab)).addClass("current");
	}
	
}

var currentFeatureImage = "feature_image_1";

function popFeature(featureID,featurePath) {
	$('#popUpThumb').get(0).src = $("#feature_" + featureID).get(0).src;
	  
	$('#popUpThumbFrame').removeClass();
	$('#popUpThumbFrame').addClass("over_button_" + featureID);
	$('#popUpThumbFrame').show();
	//$('#popUpThumbFrame').style.left = Event.pointerX(event);
	//$('#popUpThumbFrame').style.top = Event.pointerY(event);
	if(currentFeatureImage != 'feature_image_' + featureID)
	{
		
		//$(currentFeatureImage).fade();
		new Effect.Opacity(currentFeatureImage,{from: 1.0, to: 0.0});
		//$('#feature_image_' + featureID)
		new Effect.Opacity('feature_image_' + featureID,{from: 0.0, to: 1.0});
		//$('#feature_image_' + featureID).Opacity({from: 0.0, to: 1.0});
		currentFeatureImage = 'feature_image_' + featureID;
	}
	
}

function popOutFeature() {
	$('#popUpThumbFrame').hide();
}

var currentCSTab = "my_cs_default_module_buffer";
var currentCSContentTab = "my_cs_default_module";

function myCSTab(bufferTabID, contentTabID)
{	
	if(bufferTabID == currentCSTab)
	{
		$(addIdHash(currentCSTab)).hide();	
		$(addIdHash(currentCSContentTab)).hide();			
		
		$("#my_cs_default_module_buffer").show();				
		
		$("#my_cs_default_module").show();
		
		//$("#my_cs_expander").className = "expand";
		
		currentCSTab = "my_cs_default_module_buffer";
		currentCSContentTab = "my_cs_default_module";
	}else{
		$(addIdHash(currentCSTab)).hide();	
		$(addIdHash(currentCSContentTab)).hide();	
			
		//$("#my_cs_expander").className = "close";
				
		$(addIdHash(bufferTabID)).show();			
		$(addIdHash(contentTabID)).show();
		
		currentCSTab = bufferTabID;
		currentCSContentTab = contentTabID;
		
	}
}

function expandCSTab()
{
	if(currentCSTab == "my_cs_default_module_buffer")
	{
		myCSTab('trophies_module_buffer','trophies_module')
	}else{
		
		myCSTab('my_cs_default_module_buffer','my_cs_default_module')
	}
}

function ImageSwap(imageID, imagePath)
{
	$(addIdHash(imageID)).get(0).src=imagePath;
}

function popupDialog(contentID,height,width) {	
	
	w = new UI.Window({    
	    id: 	   'popup',
	    width:         width,
	    height:        height,
	    minWidth:      width,
	    minHeight:     height,	
	    shadow: true}).show();
	    w.setContent($(contentID).innerHTML);
	    w.setPosition(100,300);
}

function getClientFlashVersion() {
	var playerVersion = swfobject.getFlashPlayerVersion();
	return playerVersion.major + "." + playerVersion.minor + "." + playerVersion.release; 
}

function showAjaxMessage(msg) {
	$('#ajax_popup_content').html(msg);
	ajaxWindow = new UI.Window({    
	    id: 	   'popup',
	    width:         500,
	    height:        310,
	    minWidth:      500,
	    minHeight:     310,	
	    shadow: true}).show();
	    ajaxWindow.setContent($('#ajax_popup').html());
	    ajaxWindow.center();
	    ajaxWindow.setPosition(100);
}

function showAjaxError() {
	alert("Sorry, an error occurred.");
}

function addGameFavorite(gameId, callback) {

	$.ajax({
		url: "/ajax/add-favorite",
		data: {	"gameId": gameId },
		success: function(jo) {
			if (jo.status == "ok") {
				if (callback) {
					callback.callback(jo);
				}
			} else {
				showAjaxError();
			}
		},
		error: function() {
			showAjaxError();
		}
	});
	
}

function bookmarkGame(url, title) {
	
	var switchCopy = false;
	
	if (!$.browser.msie && window.sidebar) {
		window.sidebar.addPanel(title, url, "");
		switchCopy = true;
	} else if ($.browser.msie && window.external) {
		window.external.AddFavorite(url, title);
		switchCopy = true;
	} else {
		alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
	}
	
	if (switchCopy) {
		var li = $("div#game_header_module ul li.bookmarks");
		if (li && li.length > 0) {
			li[0].html("<a href='#'><span>Bookmarked</span></a>");
		}
	}

}

function removeGameFavorite(gameId, callback) {

	$.ajax({
		url: "/ajax/remove-favorite",
		data: {	"gameId": gameId },
		success: function(jo) {
			if (jo.status == "ok") {
				if (callback) {
					callback.callback(jo);
				}
			} else {
				showAjaxError();
			}
		},
		error: function() {
			showAjaxError();
		}
	});

}

function underConstruction() {
	alert("Feature under development.");
}

function refreshCaptcha() {

	var url = "/ajax/refresh-captcha";

	$.ajax({
		url: url,
		success: function(data) {
			$("#captcha_text").value = data;
			$("#captcha_image").src = "/captcha?captchaText=" + data;
		},
		error: function() {
			showAjaxError();
		}
	});

}

var leaderHash = new jQuery.Hashtable();
var currentUrl;
var currentTab = 0;
var selectedPage = 1;

function selectLeaderboardRange(divId, gameId, index, length, pageSize, page, popup, findMe, hideTrophies, callback) {
	
	showLoading(divId);
	
	if (index != undefined) currentTab = index;
	if (page != undefined) selectedPage = page;
	
	var buttons = $("#leaderboard_menu ul li");
	$.each( buttons, function(i){
			$(this).removeClass("current");
		   if (i == currentTab) $(this).addClass("current");
	});	
	
	var range = "day";
	if (currentTab == 0) {
		range = "day";
	} else if (currentTab == 1) {
		range = "week";
	} else if (currentTab == 2) {
		range = "month";
	} else if (currentTab == 3) {
		range = "all";
	}

	var gameLevel = 0;
	if (document.frmLeaderBoard && document.frmLeaderBoard.gameLevel) {
		gameLevel = document.frmLeaderBoard.gameLevel.value;
	}
	
	var url = "/ajax/leaderboard?id=" + gameId + "&gameLevel=" + gameLevel + "&length=" + length + "&pageSize=" + pageSize + "&range=" + range + "&page=" + selectedPage;
	if (popup) url += "&popup=yes";
	if (findMe) url += "&findMe=yes";
	if (hideTrophies) url += "&showTrophies=no";

	currentUrl = url;

	var content = leaderHash.get(url);
	if (content != null) {
		$(addIdHash(divId)).html(content);
		if (callback) callback.callback();
		return;
	}
	
	

	$.ajax({
		url: url,
		success: function(data) {
			$(addIdHash(divId)).html(data);
			leaderHash.add(currentUrl, data);
			if (callback) callback.callback();
		},
		error: function() {
			showAjaxError();
		}
	});

}

function findMeOnLeaderboard(divId, gameId, length, pageSize, popup, hideTrophies, callback) {
	selectLeaderboardRange(divId, gameId, undefined, length, pageSize, undefined, popup, true, hideTrophies, callback);
}

function showLoading(divId) {
	$(divId).html('<div class="ajax_loader">&nbsp;</div>');
}

function showLeaderboard(gameId) {
	var features = "width=680, height=800, scrollbars=yes, toolbar=no, status=no, noresize";
	window.open("/leaderboard?id=" + gameId, "leaderboard", features);
}

function changeLeaderboardTab(newTab, oldTab, extraButtonFlags)
{
	showBox(newTab + '_leaderboard');
	hideBox(oldTab + '_leaderboard');
	
	$(addIdHash(newTab) + '_tab').removeClass();
	$(addIdHash(newTab) + '_tab').addClass('current');
	$(addIdHash(oldTab) + "_tab").removeClass();
	
	if(extraButtonFlags==true)
	{
		$('#full_leaderborad_button').show();
		$('#my_rank_button').show();
	}else{
		$('#full_leaderborad_button').hide();
		$('#my_rank_button').hide();
	}
	
}

function popupChallengeHowTo() {
	var features = "width=592, height=490, scrollbars=no, toolbar=no, status=no, noresize";
	window.open("challenge-how-to", "how_to_challenge", features);
}

function showHelp(key) {
	var features = "width=592, height=490, scrollbars=no, toolbar=no, status=no, noresize";
	window.open("/faq-popup?key=" + key, "show_help", features);
}

function popupInviteFB() {
	var features = "width=810, height=600, scrollbars=no, toolbar=no, status=no, noresize";
	window.open("/facebook/invite-friends", "invite_friends", features);
}

function ChangeFavoriteCallback(secondaryCallback) {
	this.secondaryCallback = secondaryCallback;
}
ChangeFavoriteCallback.prototype.callback = function(jo) {
	
	var duplicate = jo.duplicate && jo.duplicate == "yes";
	
	if (!duplicate) {
		
		if ($("#top_favorites_module")) {
			$.ajax({
				url: "/ajax/top-favorites",
				success: function(data) {
					$("#top_favorites_module").html(data);
				},
				error: function() {
					alert("An error occurred.");
				}
			});
		}
		
		if ($("#my_candystand_module")) {
	
			closeFavoritesBar();
			
			var secondaryCallback = this.secondaryCallback;
			
			$.ajax({
				url: "/ajax/my-candystand",
				success: function(data) {
					$("#my_candystand_module").html(data);
					if ($("#favorite_count")) $("#favorite_count").html($("a.favorites_thumb").length);
					
					if (secondaryCallback) {
						secondaryCallback.callback(jo);
					}
				},
				error: function() {
					showAjaxError();
				}
			});
			
		}
	}
	
	var li = $("div#game_header_module ul li.favorites");
	if (!duplicate) {
		li.html("<a href='#'><span>Added to favorites</span></a>");				
	} else {
		li.html("<a href='#'><span>One of your Favorites</span></a>");
	}
};

function limitTextArea(textarea, counter, max) {

    var ta = $(textarea);

    if (ta.val().length > max)
        ta.val(ta.val().substring(0, max));
    else
	$(counter).html(max - ta.val().length);
}

var miniPersonalFeedHash = new jQuery.Hashtable();

function navigateMiniPersonalNewsfeed(page, myCsUserName) {
	
	var content = miniPersonalFeedHash.get(page);
	if (content != null) {
		$("#status_update_module").html(content);
		return;
	}

	$.ajax({
		url: "/ajax/mini-personal-newsfeed",
		data: { start : page, userName: myCsUserName },
		success: function(data) {
            $("#status_update_module").html(data);
            miniPersonalFeedHash.add(page, data);
		},
		error: function() {
			showAjaxError();
		}
	});

};

function toggleLoginButtons(toggleOn,toggleOff)
{
	$(addIdHash(toggleOn) + "_button").get(0).src = "/assets/images/modules/widgets/" + toggleOn + "_button_on.gif";
	$(addIdHash(toggleOff) + "_button").get(0).src = "/assets/images/modules/widgets/" + toggleOff + "_button_off.gif";
	$(addIdHash(toggleOn) + "_form").show();
	$(addIdHash(toggleOff) + "_form").hide();
}

function showSiteCode(divID,codeID)
{
	$(addIdHash(divID)).hide();
	$(addIdHash(codeID)).show();
}

function setCookie(c_name, value, expiredays)
{
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) +
                      ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()) + "; path=/";
}

function getCookie(c_name)
{
    if (document.cookie.length > 0)
    {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1)
        {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

function optIn(callback) {

	$.ajax({
		url: "/ajax/opt-in",
		success: function(data) {
	        if (data.status == "success") {
	            callback();
	        } else if (data.status == "bad") {
	            alert(data.msg);
	        }
		},
		error: function() {
			showAjaxError();
		}
	});

}

function bannerRotate(divID) {
	var frame = $(addIdHash(divID) + " iframe").get(0);
	frame.src = frame.src;
}

function isAgeBlocked() {
	return $.cookie("_canregister") == "no"
}

function milliToEndOfDay() {
	var now = new Date();
	var tomorrow = new Date();
	tomorrow.setDate(tomorrow.getDate() + 1);

	tomorrow.setHours(0);
	tomorrow.setMinutes(0);
	tomorrow.setSeconds(0);
	tomorrow.setMilliseconds(0);

	return diff = (tomorrow.getTime() - now.getTime());
}

function expireCookieAtEndOfDay(cookieName, cookieValue) {
	var milli = milliToEndOfDay();

	var date = new Date();
	date.setTime(date.getTime() + milli);
	
	$.cookie(cookieName, cookieValue, { expires: date });	
}

function hasCookie(cookieName) {
	return $.cookie(cookieName) != null;	
}

function hasPendingPopups() {
	if ( $.cookie("_reg") != null ) {
		return true;
	}
	
	return false;
}

function JSONToRequestParams(json) {
	var count = 0;
	var data = '';
	
	for (var keyName in json) {
		var temp = keyName + '=' + json[keyName];
		
		if ( count > 0 ) {
			data += '&';
		}
		
		data += temp;
		count++;
	}
	
	return data;
}

