var loadedtabs = new Object();

function loadTabAjax(tabID, contentID, sourceAction, trackingObject, defaultModuleId, defaultModuleName, params) {

    if ((typeof params == undefined || params == null) && typeof defaultModuleId != undefined) {
        params = { box : defaultModuleId};
    } else {
        params.box = defaultModuleId;
    }

    if (loadedtabs[contentID] != true) {
        switchToLoadingDiv(contentID);
        selectTab(tabID, contentID, trackingObject);
        
		$.ajax({
			url: sourceAction,
			data: params,
			success: function(data) {
				$(addIdHash(contentID)).html(data);
				loadedtabs[contentID] = true;
				if (defaultModuleId != undefined && defaultModuleName != undefined) {
                    toggleBox(defaultModuleId, defaultModuleName);
                }
				
			},
			error: function() {
				alert("An error occurred.");
			}
		});
        
    } else {
        selectTab(tabID, contentID, trackingObject);
    }
    
    bannerRotate('cs_square_banner');
}

var loadedBoxes = new Object();
function loadBoxAjax(boxID,boxName, sourceAction, params) {

    if (typeof params == undefined || params == null) {
        params = {};
    }

    if (loadedBoxes[boxID] != true) {
       // toggleBox(boxID, boxName);
        switchToLoadingDiv(boxID);

		$.ajax({
			url: sourceAction,
			data: params,
			success: function(data) {
				$(addIdHash(boxID)).html(data);
				loadedBoxes[boxID] = true;
			},
			error: function() {
				alert("An error occurred.");
			}
		});
        
    } else {
        //toggleBox(boxID, boxName);
    }

}

function switchToLoadingDiv(id) {
    $(addIdHash(id)).innerHTML = '<div class="ajax_loader">&nbsp;</div>';
}

/*
    Challenges Tab
 */

var inviteeCounts;

/** function used to add an invitee
 *  to a challenge
 */
function addInvitee(checkGame, messageid, startCount) {

    if (typeof messageid == undefined || messageid == null) {
        messageid = "";
    }

    var email = $('#email'+messageid).value;

    if (checkGame && !checkGameSelection($('#challenge_game_dropdown_input'))) {
        return;
    }
    if (email == null || email.length < 1) {
        return;
    }

    // we use this code to handle count validation when we're adding
    // to a previously configured challenge.
    if (typeof startCount == undefined || startCount == null) {
        startCount = 0;
    }

    if (($('#friends_list'+messageid).childElements().size() + startCount) > 9) {
        $('#challenge_email_failure_message'+messageid).innerHTML = "You\'ve already invited the maximum of 9 players to this challenge.";
        showBox("challenge_email_failure"+messageid);
        return;
    }
    var children = $('#friends_list'+messageid).childElements();
    if (!checkDuplicateEmail(children, email, messageid)) {
        return;
    }
    
	$.ajax({
		url: "/ajax/check-email",
		data: { email: email, checkSelf: "true" },
		success: function(jo) {
            if (jo.status == "ok") {
                var childrenCount = $('#friends_list'+messageid).childElements().size();
                var itemName = 'added_email'+childrenCount;
                var li = $("<li />").attr( { "id" : itemName, "class" : "added_email" } ).html(email);
                var a = $("<a />").attr( { "href" : "javascript:removeInvitee('" + itemName + "')", "class" : "delete_button" } );
                var img = $("<img />").attr( { "src" : "/assets/images/modules/my_cs/delete_button.gif" } );
                li.append(a);
                a.append(img);
                $("#friends_list" + messageid).append(li);
                $('#email'+messageid).val("");
                hideBox("challenge_email_failure"+messageid);
            } else {

                var msg = "";
                if (jo.self == "true") {
                    msg = 'You can\'t invite yourself to a challenge.';
                } else {
                    msg = 'The email address you\'ve entered is not valid.';
                }

                $('#challenge_email_failure_message'+messageid).html(msg);
                showBox("challenge_email_failure"+messageid);
            }
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}
/**
 * function used to remove an invitee from a challenge
 * @param invitee
 */
function removeInvitee(invitee) {
    $(invitee).remove();
}

function checkGameSelection(select) {
    var gameName = $('#challenge_game_dropdown_input').selectedIndex;

    if (gameName == 0) {
        $('#challenge_game_failure_message').innerHTML = "You must select a game before adding friends or issuing the challenge.";
        showBox("challenge_game_failure");
        return false;
    } else {
        hideBox("challenge_game_failure");
        return true;
    }
}

function checkInvitesExist(children) {

    if (children.size() == 1) {
        $('#challenge_email_failure_message').innerHTML = "You must invite at least on person to your challenge.";
        showBox("challenge_email_failure");
        return false;
    } else {
        hideBox("challenge_email_failure");
        return true;
    }

}

function checkDuplicateEmail(children, email, messageid) {
    for(var i=1; i<children.size();i++){
        var child = children[i];
        if (getNodeValue(child) == email) {
            var msg = 'You\'ve already added this email address to your invite list.';
            if (typeof messageid == undefined || messageid == null) {
                $('#challenge_email_failure_message').innerHTML = msg;
                showBox("challenge_email_failure");
            } else {
                $('#challenge_email_failure_message'+messageid).innerHTML = msg;
                showBox("challenge_email_failure"+messageid);
            }

            return false;
        } else {
            if (typeof messageid == undefined || messageid == null) {
                hideBox("challenge_email_failure");
            } else {
                hideBox("challenge_email_failure"+messageid);
            }
        }
    }
    return true;
}

function createChallenge(){

    if (!checkGameSelection($('#challenge_game_dropdown_input'))) {
        return;
    }
    var selectedGame = $('#challenge_game_dropdown_input').selectedIndex;
    var gameId = $('#challenge_game_dropdown_input').options[selectedGame].value;
    var children = $('#friends_list').childElements();
    if (!checkInvitesExist(children)) {
        return;
    }

    var emailAddrs = "";
    for(var i=1; i<children.size();i++){
        var child = children[i];
        emailAddrs = emailAddrs + getNodeValue(child) + ",";
    }

	$.ajax({
		url: "/my/create-challenge",
		data: { "gameId": gameId, "friends": emailAddrs },
		success: function(jo) {
            if (jo.status == 'ok') {
                hideBox('create_challenge_module');
                showBox('challenge_end_module');
                /*
                new PeriodicalExecuter(function(pe) {
                    confirmChallengeSent();
                    pe.stop();
                }, 5);
                */
            } else {
                $('#challenge_email_failure_message').html(jo.msg);
                showBox("challenge_game_failure");
            }
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

function confirmChallengeSent() {
    // reset the content status flag & reload
    loadedtabs['challenges_content'] = false;
    loadTabAjax('challenges_tab','challenges_content', '/my/challenges', {type:'page', label:'/MY Pages/MY CS/Challenges'}, 'challenge_1','challenge_group_module');
}

function openAddPlayers(divId) {
    hideBox('challenge_list'+divId);
    showBox('challenge_add'+divId);
}

function addNewFriends(challengeUuid, divId) {

    var children = $('#friends_list'+divId).childElements();

    var emailAddrs = "";
    for(var i=1; i<children.size();i++){
        var child = children[i];
        emailAddrs = emailAddrs + getNodeValue(child) + ",";
    }

	$.ajax({
		url: "/my/add-friends-to-challenge",
		data: { "friends" : emailAddrs, "challengeUuid": challengeUuid },
		success: function(jo) {
            if (jo.status == "ok") {
                confirmChallengeSent();
            } else {
                $('#challenge_email_failure_message'+divId).html(jo.msg);
                showBox("challenge_email_failure"+divId);
            }
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

function confirmChallengeEnded() {
    // reset the content status flag & reload
    loadedtabs['challenges_content'] = false;
    loadTabAjax('challenges_tab','challenges_content', '/my/challenges', {type:'page', label:'/MY Pages/MY CS/Challenges'}, 'challenge_2','challenge_group_module');
}


function endChallenge(uuid) {

	$.ajax({
		url: "/my/end-challenge",
		data: { challengeUuid: uuid },
		success: function(jo) {
            if (jo.status == "ok") {
                confirmChallengeEnded();
            } else {
                $('#challenge_email_failure_message'+divId).innerHTML = jo.msg;
                showBox("challenge_email_failure"+divId);
            }
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

/*
    Icon Tab
 */

var oldAvatarUrl;


function chooseIcon(icon) {
    oldAvatarUrl = $("#avatar_preview").attr("src");
    $('#reset_link').show(); 
    $("#avatar_preview").attr("src", icon);
}

function resetToPreviousIcon(){
    if (oldAvatarUrl != null) {
        var tmpAvatarUrl = $("#avatar_preview").attr("src");
        $("#avatar_preview").attr("src", oldAvatarUrl);
        oldAvatarUrl = tmpAvatarUrl;
    }
}

function saveIcon() {
    
	var avatarIconUrl = $("#avatar_preview").attr("src");

	$.ajax({
		url: "/my/save-icon",
		data: { avatarIconUrl: avatarIconUrl},
		success: function(jo) {
            if (jo.status == "ok") {
            	hideBox("icon_button_module");
                showBox("icon_success_module");
                if ($("#avatar_nav").length > 0 ) $("#avatar_nav").attr("src", $("#avatar_preview").attr("src"));
                if ($("#avatar_my_profile").length > 0 ) $("#avatar_my_profile").attr("src", $("#avatar_preview").attr("src"));
                loadedtabs['home_content'] = false;
                loadedtabs['profile_content'] = false;
                loadTabAjax('profile_tab', 'profile_content', '/my/profile', {type:'page', label:'/MY Pages/MY CS/Edit Profile'});
/*
                new PeriodicalExecuter(function(pe) {
                    hideBox("icon_success_module");
                    showBox("icon_button_module");
                    pe.stop();
                }, 5);
*/

            } else {
                resetToPreviousIcon();
            }
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

function dismissIconSuccessBox() {
    hideBox("icon_success_module");
    showBox("icon_button_module");
}

/*
    Favorites Tab
 */

function addFavorite(selected) {

    var option = selected.options[selected.selectedIndex];
    var gameId = option.value;

    if (gameId.length != 5 ) {
        return;
    }

	$.ajax({
		url: "/my/add-favorites",
		data: {"gameId": gameId},
		success: function(data) {
			$("#favorites_content").html(data);
		},
		error: function() {
			alert("An error occurred.");
		}
	});
}

function removeFavorite(gameId) {

    if (gameId.length != 5 ) {
        return;
    }

	$.ajax({
		url: "/my/remove-favorites",
		data: {"gameId": gameId},
		success: function(data) {
			$("#favorites_content").html(data);
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

/*
    Tournaments Tab
 */

function reloadCompleted(select) {

    var mode =  { mode: select.options[select.selectedIndex].value};
    var searchUser = $F('searchUserName');
    var actionUrl = '/my/completed';

    if (typeof searchUser != undefined && searchUser != null && searchUser != "") {
        mode.userName = searchUser;
        actionUrl = '/my/other-completed'
    }

    loadedBoxes['tournament_5_content'] = false;
    loadBoxAjax('tournament_5_content','challenge_group_module', actionUrl, mode);
    //toggleBox('tournament_5', 'challenge_group_module');

}

function reloadInProgress(select) {

    var mode =  { mode: select.options[select.selectedIndex].value};
    var searchUser = $F('searchUserName');
    var actionUrl = '/my/in-progress';

    if (typeof searchUser != undefined && searchUser != null && searchUser != "") {
        mode.userName = searchUser;
        actionUrl = '/my/other-in-progress'
    }
    
    loadedBoxes['tournament_3_content'] = false;
    loadBoxAjax('tournament_3_content','challenge_group_module', actionUrl, mode);
    //toggleBox('tournament_3', 'challenge_group_module');
}

function reloadScoresAndTrophies(select, mode, user) {
	//alert($("select[name='"+select+"'] option:selected"));
    var sort  =  { sort: $(select).val()};
    //var sort  =  { sort: select.options[select.selectedIndex].value};

    var searchUser = user;

    if (typeof searchUser != undefined && searchUser != null) {
        sort.userName = searchUser;
    }

    loadedtabs['scores_content'] = false;

    if (mode == 'trophy') {
        loadTabAjax('scores_tab', 'scores_content', '/my/trophies', {type:'page', label:'/MY Pages/MY CS/Trophies and Scores'}, null, null, sort);
    } else {
        loadTabAjax('scores_tab', 'scores_content', '/my/scores', {type:'page', label:'/MY Pages/MY CS/Trophies and Scores'}, null, null, sort);
    }
}

function ChangeFavoriteScoresCallback(targetId) {
	this.targetId= targetId;
}

ChangeFavoriteScoresCallback.prototype.callback = function(jo) {

    var duplicate = jo.duplicate && jo.duplicate == "yes";

    if (!duplicate) {
        $(this.targetId).style.display = "none";
    }

};

function tournamentSignup(modId, containerId, tournamentId) {

    var on = $(modId+'_on');
    var statusUpdates;
    if (on.checked == true) {
        statusUpdates = 'on';
    } else {
        statusUpdates = 'off';
    }

	$.ajax({
		url: "/my/signup",
		data: {tournamentId: tournamentId, statusUpdates: statusUpdates},
		success: function(data) {
			$(addIdHash(containerId)).html(data);
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

function tournamentToggleBox(boxID,boxName,id,tid) {
    if (loadedBoxes[boxID] != true) {
        swfobject.embedSWF("/assets/swf/tournaments/tournament.swf?confPath=/pages/body/my/me_content/tournaments/conf.xml&tournamentid="+tid+"&conferenceid=&swlist=", id, "616", "448", "9.0", "/games/flash_express_install.swf");
    }
    toggleBox(boxID, boxName);
}


/*
    Profile Tab
 */

function updateProfile(form_name) {
	var $form = $('form[name=' + form_name +  ']');
	$.ajax({
		url: "/my/profile-save",
		data: $form.serialize(),
		success: function(data) {
			$("#edit_profile_module").html(data);
		},
		error: function() {
			// alert("An error occurred.");
		}
	});

}

function confirmUpdateProfile() {
    // reset the content status flag & reload
    loadedtabs['profile_content'] = false;
    loadTabAjax('profile_tab','profile_content', '/my/profile', {type:'page', label:'/MY Pages/MY CS/Edit Profile'});
}

/*
    Other User Search
*/

function playerSearch() {
    var userName = $('#player_search').val();

    if (typeof userName == undefined || userName == null || userName == "") {
        return;
    }

	$.ajax({
		url: "/my/player-search",
		data: { userName: userName },
		success: function(data) {
            if (data.status == 'ok') {
                window.location.href = "/users/" + userName;
            } else {
                $('#player_search').val() = 'Username not found';
            }
		},
		error: function() {
			alert("An error occurred.");
		}
	});

}

function getNodeValue(node) {

	if ($.browser.msie) {
      return node.innerText;
    }
    
    return node.textContent;
}

function TabLoginCallback(contentId) {
    this.contentId = contentId;
}

/*
  Callback used to reload a my cs tab that's been opened
  in the logged out state.  
 */
TabLoginCallback.prototype.callback = function() {


    var contentId = this.contentId;

    if (window.location.search != null && window.location.search != "") {
        window.location.reload();
    } else {
        var url = "/my/me.do?tab="+contentId;
        window.location.replace(url);
    }
};

var myCsUserName = '';

function refreshFriends(page, pageSize, search) {

	$.ajax({
		url: "/facebook/ajax/friends-wide",
		data: {start : page, pageSize: pageSize, search: search, userName: myCsUserName},
		success: function(data) {
			$("#friends_list").html(data);
		},
		error: function() {
			alert("An error occurred.");
		}
	});

};

function scrollNews(page, size, queryString) {


    var ajaxCall = '/facebook/ajax/newsfeed';
    if(typeof queryString != undefined && queryString != null) {
        ajaxCall = '/facebook/ajax/newsfeed?'+queryString;
    }

	$.ajax({
		url: ajaxCall,
		data: {page: page, size: size},
		success: function(data) {
			$("#personal_news_feed").html(data);
		},
		error: function() {
			alert("An error occurred.");
		}
	});

};

function changeFBEmail()
{
	$('#email_button_fb').hide();
	$('#email_fb').show();
	$('#email_confirm_fb').show();
}

function showWorldRankTab(templateID) {
	$('#friend_ranking').hide();
	$('#world_ranking').show();
	$('#world_rank_tab').attr('src', '/assets/images/modules/my_cs/themes/' + templateID + '/world_rank_tab_on.gif');
	$('#friend_rank_tab').attr('src', '/assets/images/modules/my_cs/themes/' + templateID + '/friend_rank_tab_off.gif');
}

function showFriendRankTab(templateID) {
	$('#world_ranking').hide();
	$('#friend_ranking').show();
	$('#world_rank_tab').attr('src', '/assets/images/modules/my_cs/themes/' + templateID + '/world_rank_tab_off.gif');
	$('#friend_rank_tab').attr('src', '/assets/images/modules/my_cs/themes/' + templateID + '/friend_rank_tab_on.gif');
}
