var toon = new toon_lib;
toon.init(window.location);

////////////////////////////////////
// global and static vars
////////////////////////////////////
var defaultImg = "http://i.cdn.turner.com/toon/tools/img/pixel.gif";	// defualt image inserted if a badge or avatar image is missing
var cdnPrefix = "http://i.cdn.turner.com/v5cache/CARTOON/site/";		// cdn image path prefix
var itemDivHt = 71;														// height of the single item display for calculating the total slide displacement

var maxCount = 0;														// total number of items to display; variable for "friends" view
var dspAvt = readCookie('davatar');										// display avatar read from cookie
var dspUser = readCookie('dname');										// display name read from cookie

var dspTid = readCookie('TEGid');										// display ID read from cookie
var slideMin = 0;														// zero position of the slider
var slideMax = 9060;													// max top of the slider

var slideCurr = 0;														// slider's current top
var slidersEnabled = false;
var dspAvt = readCookie('davatar');										// get current user's avatar from cookie

var dspUser = readCookie('dname');										// get current user's name from cookie
var fpActive = false;													// saves state for the freinds panel - false:closed, true:open


////////////////////////////////////
// READ COOKIE
////////////////////////////////////
function readCookie(cookieName){
	var theCookie=""+document.cookie;
	var ind=theCookie.indexOf(cookieName);
	if (ind==-1 || cookieName=="") return ""; 
	var ind1=theCookie.indexOf(';',ind);
	if (ind1==-1) ind1=theCookie.length;
	return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

////////////////////////////////////
// GET MSIB ACTIVITY STREAM DATA
//
// requests the logged-in user's friends and their combined activities; if there is no logged in user,
// does soemthing else
////////////////////////////////////
function getMSIBASData(tabString) {
	jQuery('#centerSection .left .feedwrapper .feeditems .inner').html('<div style="width: 40px; margin: 0 auto; margin-top: 20px;"><img src="/users/tools/img/loader_lg.gif" width="40" height="40" alt="" border="0"></div>');
	toon.msib_id_activity_stream({msib_id:dspTid, with_friends:"true"}, function(fdata) {
		displayFeed(fdata,tabString);
	});
}

////////////////////////////////////
// GET ALL ACTIVITY STREAM DATA
//
// requests the data for all users activities
////////////////////////////////////
function getAllASData(tabString) {
	jQuery('#centerSection .left .feedwrapper .feeditems .inner').html('<div style="width: 40px; margin: 0 auto; margin-top: 20px;"><img src="/users/tools/img/loader_lg.gif" width="40" height="40" alt="" border="0"></div>');
	toon.all_activity_stream({count: 100}, function(adata) {
//	toon.all_activity_stream({url: '/tools/includes/all_activities.json', count: 300}, function(adata) {
		displayFeed(adata,tabString);
	});
}

////////////////////////////////////
// SHOW ACT FRIENDS
//
// toggles the activity stream nav
// also fires call for the corresponding activity stream data
////////////////////////////////////
var fString = '<span>FRIENDS</span><span> | </span><a href="javascript: showActFriends();">EVERYONE</a>';
var eString = '<a href="javascript: showActFriends();" class="off">FRIENDS</a><span> | </span><span>EVERYONE</span>';
function showActFriends() {
	dspTid = readCookie('TEGid');
	var emptyTabs = true;
	if (fpActive == false) {
		if (CartoonMSIB.isLoggedIn()) { 
			getMSIBASData(fString);
		} else {
			jQuery('.friendspromo').css('display','block');
			emptyTabs = false;
		}
		fpActive = true;
		adbpGameCategory('gp_feed_friendsfilter')
		writeString = fString;
	} else { 
		jQuery('.friendspromo').css('display','none');
		getAllASData(eString);
		fpActive = false;
		adbpGameCategory('gp_feed_everyonefilter')
		writeString = eString;
	}
	if (emptyTabs == true) {
		jQuery('#centerSection .left .feedwrapper .sortwrapper').html('<span>FRIENDS</span><span> | </span></span><span>EVERYONE</span>');
	} else {
		jQuery('#centerSection .left .feedwrapper .sortwrapper').html(fString);
	}
}


////////////////////////////////////
// GET JSON LENGTH
//
////////////////////////////////////
function getJSONLength(data) {
	jsonLength = 1;
	jQuery.each(data, function(key, val) {
		jsonLength++;
	});
	return jsonLength;
}

////////////////////////////////////
// DISPLAY FEED
//
////////////////////////////////////
function displayFeed(data,tabString) {
	upperLimit = data.length;

	// reset display and clear slide timer
	if (slidersEnabled) {
		clearAllTOs()
	}
	jQuery('#centerSection .left .feedwrapper .feeditems .inner').html('<div style="width: 40px; margin: 0 auto; margin-top: 20px;"><img src="/users/tools/img/loader_lg.gif" width="40" height="40" alt="" border="0"></div>');

	//jQuery('<div></div>').html(data.toSource()).prependTo('body');
	// counter used to find the end of the data and limit the display if necessary
	var i = 0;
	var j = 1;

	// all data and HTML will be concatenated into a big string, writeString, to reduce the number of times
	// the DOM is modified - faster in general and less intensive for IE
	var writeString = "";

	// check for error message
	if (data.server_error == undefined) {
		// loop through the available data nodes
		jQuery.each(data, function(key, val) {
			// iterate the upper limit loop
			j += 1;

			// only display 210 nodes; discard any nodes missing data
			if (i < 210) {
				// if no user or badge data, skip this node
				// check for item type; 2 = badge, 11 = top score, anything else = unwanted
				if ((val.app_id == "11" && val.user_data != undefined) || (val.app_id == "2" && val.user_data != undefined && val.badge_data != undefined)) {
					// insert a new item wrapper
					writeString += '<div class="item">';

					// start with the avatar image and link
					writeString += '<div class="avtimg">';

					// check for undefined/missing user data
					if (val.user_data != undefined) {
						// if the data is there:
						// generate the image path and profile path
						avtImgSrc = cdnPrefix + val.user_data.avatar;
						if (tabString == fString) {
							avtLink = "/profiles/" + val.user_data.playerID.replace(/\s/g,'-') + "?atclk_gp=gp_feed_friends_avatar" + i;
							usrLink = "/profiles/" + val.user_data.playerID.replace(/\s/g,'-') + "?atclk_gp=gp_feed_friends_username" + i;
						} else {
							avtLink = "/profiles/" + val.user_data.playerID.replace(/\s/g,'-') + "?atclk_gp=gp_feed_everyone_avatar" + i;
							usrLink = "/profiles/" + val.user_data.playerID.replace(/\s/g,'-') + "?atclk_gp=gp_feed_everyone_username" + i;
						}
						// add the avatar to the string
						writeString += '<a href="' + avtLink + '"><img src="' + avtImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';

						// add the text wrapper
						writeString += '<div class="text"><div class="user" ';
						
						// determine if the visiting user is the user featured in this item
						// does not matter if user is logged in
						//if (dspUser.toUpperCase() == val.user_data.playerID.toUpperCase()) {
						if (dspTid == val.user_id) {
							writeString += 'style="background: url(/games/tools/img/main/flag_you.jpg) top left no-repeat;">';
							writeString += '<a href="' + usrLink + '"><img src="' + defaultImg + '" width="100" height="14" border="0" alt="" /></a></div>';
						} else {
							writeString += '><a href="' + usrLink + '">' + val.user_data.playerID + '</a></div>';
						}
						// if the user matches the current item, substitute in the custom background
					} else {
						// if the data is missing
						writeString += '<img src="' + defaultImg + '" width="50" height="50" alt="" border="0" /></div>';
						writeString += '<div class="text"><div class="user">Unknown user</div>';
					}

					// check for app id to get correct image and text nodes
					if (val.app_id == "2") {
						// check for undefined/missing badge data
						writeString += '<div class="desc">';
						if (val.badge_data != undefined) {
							// if the data is there:
							// look for a product URL
							if (val.badge_data.attributes.product_url != undefined) {
								productURL = true;
								if (tabString == fString) {
									pUrl = val.badge_data.attributes.product_url + "?atclk_gp=gp_feed_friends_glink" + i;
								} else {
									pUrl = val.badge_data.attributes.product_url + "?atclk_gp=gp_feed_everyone_glink" + i;
								}
							} else {
								productURL = false;
							}
							// look for a product name
							if (val.badge_data.attributes.product_name != undefined) {
								productName = true;
							} else {
								productName = false;
							}
							bdgImgSrc = cdnPrefix + val.badge_data.media_parameters.earned.url;
							// fork based on product data available
							if ((productURL) && (productName)) {
								// fork based on product number
								// 100000 = Cartoon profile badge; all else = content product
								if (parseInt(val.badge_data.attributes.product) == 100000) {
									writeString += "Earned the <span class=\"bold\">" + val.badge_data.attributes.display_name + "</span> badge on the <a href=\"" + pUrl + "\">" + val.badge_data.attributes.product_name + "</a></div></div>";
									writeString += '<div class="bdgimg"><a href="' + usrLink + '"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';
								} else {
									writeString += "Earned the <span class=\"bold\">" + val.badge_data.attributes.display_name + "</span> badge in <a href=\"" + pUrl + "\">" + val.badge_data.attributes.product_name + "</a></div></div>";
									writeString += '<div class="bdgimg"><a href="' + pUrl + '"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';
								}
							} else if ((productURL) && (!(productName))) {
								writeString += 'Earned the <span class="bold">' + val.badge_data.attributes.display_name + '</span> badge.</div></div>';
								writeString += '<div class="bdgimg"><a href="' + pUrl + '"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';
							} else if ((!(productURL)) && (productName)) {
								// fork based on product number
								// 100000 = Cartoon profile badge; all else = content product
								if (parseInt(val.badge_data.attributes.product) == 100000) {
									writeString += 'Earned the <span class="bold">' + val.badge_data.attributes.display_name + '</span> badge on the ' + val.badge_data.attributes.product_name + '</div></div>';
									writeString += '<div class="bdgimg"><a href="' + pUrl + '"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';
								} else {
									writeString += 'Earned the <span class="bold">' + val.badge_data.attributes.display_name + '</span> badge in ' + val.badge_data.attributes.product_name + '</div></div>';
									writeString += '<div class="bdgimg"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></div>';
								}
							} else {
								writeString += 'Earned a badge</div></div>';
								writeString += '<div class="bdgimg"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></div>';
							}
						} else {
							// if the data is missing:
							writeString += 'Description not found.</div></div>';
							writeString += '<div class="bdgimg">';
							writeString += '<img src="' + defaultImg + '" width="50" height="50" alt="" border="0" /></div>';
						}
						writeString += '<div class="clearer"></div></div>';
					// if the item is top score
					} else if (val.app_id == "11") {
						// check for undefined/missing badge data
						writeString += '<div class="desc">';
						if (val.product_data != undefined) {
							// if the data is there:
							// look for a product URL
							if (val.product_data.product_Url != undefined) {
								productURL = true;
								pUrl = val.product_data.product_Url + "?atclk_gp=gp_feed_everyone_glink" + i;
							} else {
								productURL = false;
							}
							// look for a product name
							if (val.product_data.product_name != undefined) {
								productName = true;
							} else {
								productName = false;
							}

							// look for the leaderboard type
							if (val.template_params.personal_ranking == "false") {
								thisRank = "Top 10 Leaderboard";
								descPrfx = "Made the";
								bdgImgSrc = cdnPrefix + val.product_data.product_ImageAllTimeTrophy;
							} else {
								descPrfx = "Made a";
								thisRank = "Personal Best";
								bdgImgSrc = cdnPrefix + val.product_data.product_ImageWeeklyTrophy;
							}

							// fork based on product data available
							if ((productURL) && (productName)) {
								writeString += descPrfx + ' <span class="bold">' + thisRank + '</span> in <a href="' + pUrl + '">' + val.product_data.product_name + '</a></div></div>';
								writeString += '<div class="bdgimg"><a href="' + pUrl + '"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';
							} else if ((productURL) && (!(productName))) {
								writeString += descPrfx + ' <span class="bold">' + thisRank + '</span></div></div>';
								writeString += '<div class="bdgimg"><a href="' + pUrl + '"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></a></div>';
							} else if ((!(productURL)) && (productName)) {
								writeString += descPrfx + ' <span class="bold">' + thisRank + '</span> badge in ' + val.product_data.product_name + '</div></div>';
								writeString += '<div class="bdgimg"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></div>';
							} else {
								writeString += 'Made the score.</div></div>';
								writeString += '<div class="bdgimg"><img src="' + bdgImgSrc + '" width="50" height="50" alt="" border="0" /></div>';
							}

						} else {
							// if the data is missing:
							writeString += 'Description not found.</div></div>';
							writeString += '<div class="bdgimg">';
							writeString += '<img src="' + defaultImg + '" width="50" height="50" alt="" border="0" /></div>';
							writeString += '</div>';
						}
						writeString += '<div class="clearer"></div></div>';
					} else {
						//ignore
					}

					// close out this item
					writeString += '</div>';
					i++;
				}
			}
			if (j == upperLimit) {
				slideMax = 0;
				slideCurr = 0;
				slideMax = (71 * i) - 497;
				if (slideMax - 497 >= 0) {
					innerTop =  (slideMax * -1) + "px";
				} else {
					innerTop =  "0px";
				} 
				
				initSliders();
				jQuery('#centerSection .left .feedwrapper .feeditems .inner').html(writeString).attr('style','top: ' + innerTop);
				jQuery('#centerSection .left .feedwrapper .sortwrapper').html(tabString);
			}
		});
	} else {
			// if an error is found
	}
}


jQuery(document).ready(function(){

	if (CartoonMSIB.isLoggedIn()) {
		getMSIBASData(fString);
		fpActive = true;
	} else {
		getAllASData(eString);
	}

	initAllGenres();
});

var timeOuts = new Array();
function clearAllTOs() {
	while (timeOuts.length > 0) {
		clearTimeout(timeOuts.pop());
	}
}

function initSliders() {
	jQuery('#feedRight').click(function(){
		if (slidersEnabled) {
			clearAllTOs()
			if (slideCurr + 497 < slideMax) {
				slideDistance = 497;
			} else if (slideCurr + 497 > slideMax) {
				if (slideMax < 497) {
					slideDistance = slideMax;
				} else {
					slideDistance = slideMax - slideCurr;
				}
			} else {
				slideDistance = 0;
			}
			jQuery('#centerSection .left .feedwrapper .feeditems .inner').animate({top: '+=' + slideDistance},200);
			slideCurr += slideDistance;
			timeOuts.push(setTimeout("slideAnimOne()",3000));
		}
	}).mouseover(function(){
			jQuery(this).find('img').attr('src','/games/tools/img/main/btn_up_hover.png');
	}).mouseout(function(){
			jQuery(this).find('img').attr('src','/games/tools/img/main/btn_up.png');
	});
	
	jQuery('#feedLeft').click(function(){
		if (slidersEnabled) {
			clearAllTOs()
			if (slideMin - slideCurr < 0 && slideMin - slideCurr > -497) {
				slideDistance = slideCurr;
			} else if (slideMin - slideCurr == 0) {
				slideDistance = 0;
			} else {
				slideDistance = 497;
			}
			jQuery('#centerSection .left .feedwrapper .feeditems .inner').animate({top: '-=' + slideDistance},200);
			slideCurr -= slideDistance;
			timeOuts.push(setTimeout("slideAnimOne()",3000));
		}
	}).mouseover(function(){
			jQuery(this).find('img').attr('src','/games/tools/img/main/btn_down_hover.png');
	}).mouseout(function(){
			jQuery(this).find('img').attr('src','/games/tools/img/main/btn_down.png');
	});
	
	jQuery('#centerSection .left .feedwrapper .feeditems .inner').mouseover(function(){
		if (slidersEnabled) {
			clearAllTOs()
		}
	}).mouseout(function(){
		if (slidersEnabled) {
			timeOuts.push(setTimeout("slideAnimOne()",3000));
		}
	});

	slidersEnabled = true;
	timeOuts.push(setTimeout("slideAnimOne()",3000));
}

function slideAnimOne() {
	if (slideCurr + 71 < slideMax && slideMax > 479) {
		jQuery('#centerSection .left .feedwrapper .feeditems .inner').animate({top: '+=71'},500);
		slideCurr += 71;
	}
	timeOuts.push(setTimeout("slideAnimOne()",3000));
}

function doStreamLogin(){
	LoginModule.showLoginWindow({visible: true}, 'login');
	getAllASData(eString);
}





var currentGenre = 0;
var availGenres = new Array();
function initAllGenres() {
	jQuery.ajax({
		type: "get",
		url: "/cnservice/cartoonsvc/content/xml/getContentsByContentType.do?contentTypeName=Featured_Genres_Area&depth=1" + previewFormat,
		dataType: "xml",
		error: function () {
			// do this on AJAX error
		},
		success: function(data) {
			jQuery(data).find('Featured_Genres_Area').each(function(){
				if (jQuery(this).attr('contentName') == "Featured Games") {
					i = 0;
					jQuery(this).find('genres').each(function(){
						var genreHash = new Array(jQuery(this).find('display_name').text(),jQuery(this).attr('contentId'));
						availGenres[i] = genreHash;
						i++;
					});
				}
			});
			writeGenreNav();
		}
	});
}

function writeGenreNav() {
	var writeString = '<div class="allGenresHdrTextWrapper">';
	for (i = 0; i < availGenres.length; i++) {
		writeString += '<a href="javascript:swapAllGenreSet(\'allGenres' + i + 'Wrapper\',\'allGenres' + i + 'Scroll\',\'0' + i + '\');" id="0' + i + '" class="allGenresHdrText">';
		writeString += availGenres[i][0].toUpperCase() + ' GAMES</a>';
		if (i < availGenres.length - 1) {
			writeString += ' <span class="allGenresHdrText">|</span> ';
		}
	}
	writeString += '</div>';
	writeString += '<div class="allGenresHdrCloseWrapper">';
	writeString += '<a href="javascript:swapAllGenreSet(\'centerSection\');" class="allGenresHdrCloseText">X &nbsp;CLOSE</a>';
	writeString += '</div>';
	jQuery('#allGenresNavHdr').html(writeString);

	getCurrentGenre(currentGenre);
}

function getCurrentGenre(pos) {
	if (pos < availGenres.length) {
		currCName = availGenres[pos][0];
		jQuery.ajax({
			type: "get",
			url: "/cnservice/cartoonsvc/content/xml/getContentsByContentType.do?contentTypeName=game&attribName=game_genre.title&depth=2&filterContentId=43863&sortBy=Game_Priority_ID:desc&attribValues=" + currCName,
			dataType: "xml",
			error: function () {
				// do this on AJAX error
			},
			success: function(data) {
				jQuery('<div></div>').attr('id','allGenres' + pos + 'Wrapper').appendTo('#allGenresSection');
				var writeString = '<div class="gameShadowTop"></div>';
				writeString += '<div id="allGenres' + pos + 'Scroll"><div>';
				writeString += '<div id="allGenres' + availGenres[pos][1] + 'Block">';
				jQuery(data).find('Game').each(function(){
					writeString += '<div class="allGenreLinkWrapper" style="background:url(http://i.cdn.turner.com/v5cache/CARTOON/site/';
					writeString += jQuery(this).find('game_100x75_image').find('srcUrl').text();
					writeString += ') top center no-repeat;">';
					writeString += '<a href="' + jQuery(this).find('Page_URL').text() + '">';
					writeString += '<img src="http://i.cdn.turner.com/v5cache/CARTOON/site/';
					writeString += jQuery(this).find('overlay').find('srcUrl').text();
					writeString += '" width="100" height="75" border="0" alt="{Title}" border="0"></a></div>';
				});
				writeString += '</div></div><div class="gameShadowBtm"></div></div>';
				currentGenre += 1;
				getCurrentGenre(currentGenre);
				jQuery('#allGenres' + pos + 'Wrapper').html(writeString);
			}
		});
	}
}


