/*********************************
   nav.js for EA.com
   code by Byron Tredwell (byron(AT)blastradius.com)
*********************************/

/*******************************
  FUNCTIONS FOR GLOBAL INIT
******************************/
var sectionTabs = null;
var filterTabs = null;
// SET HERE FOR REFERENCE ONLY - OVERRIDEN BY THE DCR FOR THE GLOBAL NAV //
var baseBuyURL     = "http://eastore.ea.com/shopping/product/detailmain.jsp?itemType=PRODUCT&itemID="
var baseSearchURL  = "http://eastore.ea.com/shopping/browse/directorymain.jsp?keyword="
initArray[initArray.length] = initGameFinder;
initArray[initArray.length] = initPersitence;
initArray[initArray.length] = initTitleNav;

/*******************************
******************************/
 
/*******************************
   MENU FLYOUTS
******************************/
var currentflyout = null;
function toggleMenuLayer(layer,mark,parent,left,top)
{
   layer = getElm(layer);
   if(!layer)
      return;
   if(isNaN(left) == true)
      left = 0;
   if(isNaN(top) == true)
      top = 0;
      
   if(currentflyout && currentflyout != layer && currentflyout.style.display == "block")
   {
      currentflyout.style.display = "none"
      var m = currentflyout.mark;
      m.className = m.className.substring(0,m.className.indexOf(" hover"));
   }
   mark = check(mark);
   currentflyout = layer;
   layer.mark = mark;
   layer.style.top  = (getOffsetProperty(mark, "Top",parent) + mark.offsetHeight + top) +"px";
   layer.style.left = (getOffsetProperty(mark, "Left",parent) + left) +"px";
   
   if(layer.style.display == "block")
   {
      layer.style.display = "none";
      mark.className = mark.className.substring(0,mark.className.indexOf(" hover"));
      safariFlashFix("show");
   }else{
      layer.style.display = "block";
      mark.className = mark.className +" hover";
      if(getElm(layer.id+"BG"))
      {
         var bg = getElm(layer.id+"BG");
         bg.style.height = layer.offsetHeight +"px";
         if(isMac && !isSafari)
            setOpacity(bg,100);
      }
      safariFlashFix("hide");
   }
}

function showMenuLayer(layer,mark,parent,left,top)
{
   if(currentflyout && currentflyout.style.display == "block")
   {
      currentflyout.style.display = "none";
      var m = currentflyout.mark;
      m.className = m.className.substring(0,m.className.indexOf(" hover"));
   }
   keepUp(getElm(layer));
   toggleMenuLayer(layer,mark,parent,left,top);
}
   
function delayHide(elm){
      if(typeof elm != "object")
         elm = getElm(elm);
      elm.keepMeUp = false;
      setTimeout('hideMenuLayer()',100);
}
   
function keepUp(elm){
   if(!elm)
      return;
      elm.keepMeUp = true;
}
   
function hideMenuLayer(){
      if(!currentflyout)
         return;
      if(!currentflyout.keepMeUp)
      {
         currentflyout.style.display = "none";
         var mark = currentflyout.mark;
         mark.className = mark.className.substring(0,mark.className.indexOf(" hover"));
         currentflyout = null;
         safariFlashFix("show");
      }
}

/*******************************
   SAFARI FLASH FIX
******************************/
function safariFlashFix(state)
{
   var ua = navigator.userAgent.toLowerCase();
   if(ua.indexOf('safari') != -1)
   {
      var divs = document.getElementsByTagName("div");
      for(var i=0;i<divs.length;i++)
      {
         if(divs[i].className.indexOf("FLASH") >=0)
         {
            if(state == "hide")
            {
               divs[i].openWidth = divs[i].offsetWidth;
               divs[i].style.overflow = "hidden";
               divs[i].style.width = "1px";
            }
            if(state == "show")
            {
               divs[i].style.width = divs[i].openWidth + "px";
               divs[i].style.overflow = "visible";
            }
         }
      }
      redrawWin();
   }
}

/*******************************
   TITLE NAV
******************************/

function initTitleNav()
{
   var tn = getElm("C_title_nav");
   if(tn)
   {
      var tnCont = tn.parentNode;
      tnCont.style.zIndex = 5;
      tnCont.bg.style.zIndex = 4;
      tnCont.bg.style.backgroundColor = NAV_COLOR;
      if(isMac && !isSafari)
      {
         setOpacity(tnCont.bg,100);
         var tnFR =  getElm("tnFindRetailBg");
         setOpacity(tnFR,100);
      }else{
         setOpacity(tnCont.bg,NAV_ALPHA);
      }
      
      if(top.location.href.indexOf("index") >= 0 || top.location.href.indexOf("home") >= 0  || top.location.href.charAt(top.location.href.length-1) == "/" )
      {
         toggleTitleNav(getElm("tnToggle"));
      }
      
   }
}
function toggleTitleNav(anch)
{
   var tn = getElm("C_title_nav");
   if(tn)
   {
   	var tnCont = tn.parentNode;
   	var tnTop = getElm("tnTop");
   	var tnBot = getElm("tnBot");
   	if(!tn.state)
   	   tn.state = "closed";
   	if(tn.state == "open")
   	{
		anch.className = "tnItem tnClosed";
		tn.state = "closed";
     	 	writeHTML(anch, openMenuText);
		getElm("tnFindRetail").style.display = "none";
		tnCont.style.height = tnTop.offsetHeight +"px";
		tn.style.height = tnCont.style.height;
		safariFlashFix("show");
	}else{
		anch.className = "tnItem tnOpen";
		tn.state = "open";
		writeHTML(anch, closeMenuText);
		tnCont.style.height = (tnTop.offsetHeight+tnBot.offsetHeight) +"px";
		tn.style.height = tnCont.style.height;
		safariFlashFix("hide");
	}
	tnCont.bg.style.height  = (parseInt(tnCont.style.height) + COMP_BORDER_WIDTH)+"px";
   }
}
var currenttnSubNav = null;
function toggleTitleSubNav(anch)
{
   var tn = getElm("C_title_nav");
   if(tn)
   {
   	var tnCont = tn.parentNode;
   	var tnTop = getElm("tnTop");
  	var tnBot = getElm("tnBot");
   	var sunNavNum = anch.id.substring(7);
   	var subNav = getElm("tnSubLinks_"+sunNavNum);
   
   	if(currenttnSubNav && currenttnSubNav != subNav)
   	{
         currenttnSubNav.style.display = "none";
         currenttnSubNav.anch.className = "tnItem tnClosed";
   	}
   	currenttnSubNav = subNav;
   	currenttnSubNav.anch = anch;
   
   	if(currenttnSubNav.style.display == "block")
   	{
         currenttnSubNav.style.display = "none";
         currenttnSubNav.anch.className = "tnItem tnClosed";
   	}else{
         currenttnSubNav.style.display = "block";
         currenttnSubNav.anch.className = "tnItem tnOpen";
   	}
   	tnCont.style.height = (tnTop.offsetHeight+tnBot.offsetHeight) +"px";
   	tn.style.height = tnCont.style.height;
   	tnCont.bg.style.height  = (parseInt(tnCont.style.height) + COMP_BORDER_WIDTH)+"px";
   }
}

function tnOverlayToggle(elmID)
{
   var tnFR = getElm(elmID);
   if(tnFR)
   {
   	if(tnFR.style.display == "block")
      	tnFR.style.display = "none";
   	else
      	tnFR.style.display = "block";
   } 
   var tnLn = getElm("tnLinks");   
   if(tnLn)
   {
	tnFR.style.height = tnLn.offsetHeight+"px";
   }
}

/*******************************
   ******************************
      EXTENTEND NAV LAYERS
   ******************************
******************************/

var enAniSpeed = 10;
if(isSafari)
   enAniSpeed = 25;
var enAniTimer = null;

var PL = null;
var plScrollbar = null;

var GF = null;
var gfScrollbar = null;

function toggleExtenedNav(type)
{
   if(!GF)
      return;
   if(!PL)
      return;
      
   var primaryLayer = eval(type);
   var secondaryLayer = (primaryLayer == GF) ? PL : GF;
   if(!primaryLayer || !secondaryLayer)
      return;
      
   switch (primaryLayer.aniDir){
      case(-1): primaryLayer.aniDir = 1;
      case(1) : primaryLayer.aniDir = -1;
      default : {
         if(getClip(primaryLayer,'b') >= primaryLayer.maxClip)
         {
            primaryLayer.aniDir = -1;
         }
         if(getClip(primaryLayer,'b') <= 0)
         {
            primaryLayer.aniDir = 1;
         }
      }
   }
   //IF THE OTHER LAYER WAS NOT CLOSED
   if(secondaryLayer.open){
      secondaryLayer.aniDir = -1;
   }
   
   //LAYER AND MASTHEAD ADJUSTMENT
   if(type == "GF"){
      GF.parentNode.style.zIndex = 105;
      PL.parentNode.style.zIndex = 95;
      getElm("gamesLink").className = "siteLink clicked";
      if(GF.aniDir == 1){
         getElm("mastheadGF").style.display = "block";
         getElm("mastheadPL").style.display = "none";
         getElm("mastheadNorm").style.display = "none";
      }
   }
   if(type == "PL"){
      PL.parentNode.style.zIndex = 105;
      GF.parentNode.style.zIndex = 95;
      if(getElm("nationLoginLink"))
         getElm("nationLoginLink").className = "siteLink clicked";
      if(PL.aniDir == 1){
         getElm("mastheadPL").style.display = "block";
         getElm("mastheadGF").style.display = "none";
         getElm("mastheadNorm").style.display = "none";
      }
   }

   if(!isSafari){
      clearInterval(enAniTimer);
      enAniTimer = setInterval("animateExtendedNav()",25);
   }else{
      clipNavLayer(GF,true);
      clipNavLayer(PL,true);
      setExtendNavVisualState();
   }
}

/*******************************
   PERSITENT NATION LAYER
******************************/
/* set in navigation.jsp
var navRepImage = 'http://images.ea.com/sports/_img/nav/rep';
*/
function initPersitence()
{
   PL = getElm("persistentNation");
   if(!PL)
      return;
   if(getElm("plScrollbar"))
      plScrollbar = new scrollbar("plScrollbar","plGamesList");
   if(isLoggedIn)
   {
      if(getElm("plRep"))
         loadXMLDoc("/framework/_includes/nation/xml_user_profile.jsp?playername="+playerName+"&platform="+playerPlatform ,"pl_user_stats",doPLstatsReady,doPLstatsWait);
      if(getElm("plFriends"))
         loadXMLDoc("/framework/_includes/nation/xml_friends_online.jsp","pl_friends",plFriendsReady,plFriendsWait);
   }
   setClip(PL,0,PL.offsetWidth,0,0);
   PL.maxClip = PL.offsetHeight;
   PL.aniDir = 0;
   PL.closed = true;
   PL.open = !PL.closed;
   var anchs = PL.getElementsByTagName("a");
   
   for(var i=0;i<anchs.length;i++)
   {
      anchs[i].href = anchs[i].href.replace("|getredirecturl|",escape(reDirectURL))
   }
   for(var i=0;i<anchs.length;i++)
   {
      anchs[i].href = anchs[i].href.replace("|getredirecturllogout|",reDirectURL)
   }   
}

function doPLstatsWait()
{
   if(typeof doPlayerStatsWait != "undefined")
      doPlayerStatsWait("info_all_")
}
function doPLstatsReady()
{
   if(!xmlDocs["pl_user_stats"])
      return;
      
   var statsXML = xmlDocs["pl_user_stats"].xml;
   if(!statsXML)
      return;
   //if the function doPlayerInfoReady exists we are on a profile page pass the xml on
   //if(typeof doPlayerInfoReady != "undefined")
   //  doPlayerInfoReady("info_all_","pl_user_stats");
      
   var repNode = statsXML.getElementsByTagName("EARep");   
   if(!repNode[0]){
      return;
   }
	var curRep = getNodeValue(repNode[0]);
   if (curRep) {
		if (curRep.charAt(0) == "+") curRep = curRep.substring(1);
      getElm("plRep").style.backgroundImage = 'url('+navRepImage+(parseInt(curRep)*10)+'.gif)';
   }
}

function plFriendsWait()
{
   getElm("plFriends").innerHTML = "???";
   if(typeof doFriendsWait != "undefined")
      doFriendsWait("friends_all_")
}
function plFriendsReady()
{
   if(!xmlDocs["pl_friends"])
      return;
      
   var friendsXML = xmlDocs["pl_friends"].xml;
   if(!friendsXML)
      return;
   //if the function doFriendsReady exists we are on a profile page pass the xml on
   if(typeof doFriendsReady != "undefined")
      doFriendsReady("friends_all_","pl_friends");
      
   var numberNode = friendsXML.getElementsByTagName("number");
   if(!numberNode[0]){
      getElm("plFriends").innerHTML = "???";
      return;
   }
   if (getNodeValue(numberNode[0])) {
      getElm("plFriends").innerHTML = getNodeValue(numberNode[0]);
   }else{
      getElm("plFriends").innerHTML = "???";
   }
}

/*******************************
   GAME FINDER
******************************/

function initGameFinder()
{
   GF = getElm("gameFinder");
   if(!GF)
      return;
      
   sectionTabs = new tabSet("gfFilterOneTabs",tabOneSelectedIndex,setGFFilters);
   filterTabs  = new tabSet("gfFilterTwoTabs",0,setGFFilters,true);
   gfScrollbar = new scrollbar("gfScrollbar","gfSportsList");
   
   setClip(GF,0,GF.offsetWidth,0,0);
   GF.maxClip = GF.offsetHeight;
   GF.aniDir = 0;
   GF.scrollDir = 0;
   GF.scrollDist = 0;
   GF.closed = true;
   GF.open = !GF.closed;
   GF.state = "filter"; // filter/free
   GF.category = "games"; // games/sports 
   if(sectionTabs.currentTab == getElm("gfSectionSportsTab"))
      GF.category = "sports"; 
   GF.platform = null;
   GF.esrb = null;
   GF.genre = null;
   GF.defaultText = "";
   GF.gfFreeName = "";
   GF.resultsLeft = 17;
   GF.arrowWidth = 16;
   GF.resultsTop = 23;
   GF.gameWidth = 213; //actual width + spacing
   GF.gameCount = 0;
   GF.games = new Array();
   //close the select on load
   hide3rdTierSearch();
   //START SECOND FILTER IN "OFF" STATE
   if(filterTabs.currentTab)
   {
      filterTabs.currentTab.className = "tab gfTab";
      filterTabs.currentTab = null;
   }
   loadXMLDoc("/framework/_includes/xml_game_finder.jsp","gamelist",doGamesXMLReady,doGamesXMLWait);
}

function getKeyString(elm)
{
   if(!elm)
      return false;
   if(!elm.id)
      return false;
   return elm.id.substring(elm.id.indexOf("gfkey_")+6);
}

function getKeyText(key)
{
   var keyELm = getElm("gfkey_"+key);
   if(keyELm)
      return getElm("gfkey_"+key).innerHTML;
   else
      return "";
}

/*******************************
   ANIMATIONS
******************************/

function animateExtendedNav()
{
   clipNavLayer(GF);
   clipNavLayer(PL);
   if(GF.aniDir == 0 && PL.aniDir == 0)
   {
      clearInterval(enAniTimer);
      setExtendNavVisualState();
   }
}

function setExtendNavVisualState()
{
   if(GF.closed){
      getElm("mastheadGF").style.display = "none";
      getElm("gamesLink").className = "siteLink";
   }else{
      getElm("mastheadGF").style.display = "block";
      getElm("gamesLink").className = "siteLink clicked";
   }
   if(PL.closed){
      getElm("mastheadPL").style.display = "none";
      if(getElm("nationLoginLink"))
         getElm("nationLoginLink").className = "siteLink";
   }else{
      getElm("mastheadPL").style.display = "block";
      if(getElm("nationLoginLink"))
         getElm("nationLoginLink").className = "siteLink clicked";
   }
   if(GF.closed && PL.closed)
     getElm("mastheadNorm").style.display = "block";
   else
     getElm("mastheadNorm").style.display = "none";
}

function clipNavLayer(L,skip)
{
   if(skip){
      if(L.aniDir == -1)
         setClip(L,0,L.offsetWidth,0,0);
      else if(L.aniDir == 1)
         setClip(L,0,L.offsetWidth,L.maxClip,0);
   }else{
      clipBy(L,0,0,L.aniDir*enAniSpeed,0);
   }
   
   if(getClip(L,'b') >= L.maxClip)
   {
      setClip(L,0,L.offsetWidth,L.maxClip,0);
      L.aniDir = 0;
      L.closed = false;
      L.open = !L.closed;
   }
   if(getClip(L,'b') <= 0)
   {
      setClip(L,0,L.offsetWidth,0,0);
      L.aniDir = 0;
      L.closed = true;
      L.open = !L.closed;
   }
}

function gfScroll(dir)
{
   clearInterval(enAniTimer);
   if(GF.scrollDist >= 0)
      return;
   var aR = getElm("gfResultsArrowRight");
   var aL = getElm("gfResultsArrowLeft");
   GF.scrollDir = dir; 
   if(Math.abs(GF.scrollDir) != 1){
      aR.className = "gfResultsArrow";
      aL.className = "gfResultsArrow";
      return;
   }
   if(GF.scrollDir == -1){
      aR.className = "gfResultsArrow gfRADown";
      aL.className = "gfResultsArrow";
   }
   if(GF.scrollDir == 1){
      aR.className = "gfResultsArrow";
      aL.className = "gfResultsArrow gfRADown";
   }
   enAniTimer = setInterval("scrollGameFinder()",50);
}

function scrollGameFinder()
{
   var gfC = getElm("gfResultsContainer");
   moveBy(gfC,GF.scrollDir*enAniSpeed,0,0);
   if(getX(gfC) >  GF.resultsLeft){
      setX(gfC, GF.resultsLeft);
      GF.scrollDir = 0;
      clearInterval(enAniTimer);
   }
   if(getX(gfC) < GF.scrollDist+(GF.resultsLeft*2)){
      setX(gfC,GF.scrollDist+(GF.resultsLeft*2));
      GF.scrollDir = 0;
      clearInterval(enAniTimer);
   }
}

/*******************************
   STATES
******************************/

function setGFFilters(srcObj)
{   
   //FILTER ONE GAMES/SPORTS
   if(srcObj.parentNode.parentNode.id == "gfFilterOne")
   {
      if(sectionTabs && filterTabs)
      {
         if(sectionTabs.currentTab == getElm("gfSectionPogoTab") || sectionTabs.currentTab == getElm("gfSectionMobileTab") )
         {  
			return;
         }
         if(sectionTabs.currentTab == getElm("gfSectionGamesTab"))
         {  
            GF.category = "games";  
            baseEAURL = 'http://www.ea.com/';
            defaultPromoID = defaultGamesPromoID;
            if(filterTabs.currentTab == getElm("gfSportsTab"))
               filterTabs.setActiveTab(getElm("gfGamesTab"))
         }
         
         if(sectionTabs.currentTab == getElm("gfSectionSportsTab"))
         {  
            GF.category = "sports";  
            baseEAURL = 'http://www.easports.com/';
            defaultPromoID = defaultSportsPromoID;
            if(filterTabs.currentTab == getElm("gfGamesTab"))
               filterTabs.setActiveTab(getElm("gfSportsTab"))
         }
         //do a soft reset when switching between sports and games
         if(GF.genre)
            GF.genre.className = "";
         GF.genre = null;
         // if genre was the only thing selected when switching and you're not in free search do a hard reset
         if(GF.state != "free"){
            if(!GF.platform && !GF.esrb){
               resetSearch();
            }else{
               hide3rdTierSearch();
               doFilter();
            }
         }else{
            hide3rdTierSearch();
            doFilter();
         }
      }
   }
   //FILTER TWO PLATFORM/GENRE/ESRB
   else if(srcObj.parentNode.parentNode.id == "gfFilterTwo" || srcObj.parentNode.parentNode.parentNode.id == "gfFilterTwo")
   { 
      GF.state = "filter"; 
      getElm("gfGameName").value = gfTextKeywordDefault;
      if(srcObj.pane.style.display == "block"){
         show3rdTierSearch();
         if(gfScrollbar)
            setThirdTierScrollbar(srcObj);
         getElm("gfFilterThreeLabel").innerHTML = srcObj.innerHTML;
         getElm("gfPrompt").style.display = "block";
         getElm("gfResults").style.display = "none"; 
         document.getElementById("gfPromptText").className = "";
         if(srcObj.innerHTML.indexOf(gfTextGenre) >= 0)    { writeHTML("gfPromptText", gfTextSelectYourGenre) };
         if(srcObj.innerHTML.indexOf(gfTextSport) >= 0)    { writeHTML("gfPromptText", gfTextSelectYourSport) };
         if(srcObj.innerHTML.indexOf(gfTextESRB) >= 0)     { writeHTML("gfPromptText", gfTextSelectYourESRB) };
         if(srcObj.innerHTML.indexOf(gfTextPlatform) >= 0) { writeHTML("gfPromptText", gfTextSelectYourPlatform) };
      }else{
         hide3rdTierSearch();
      }
   }
   //FILTER THREE SELECTION OF PLATFORM/GNERE/ESRB
   else if(srcObj.parentNode.parentNode.parentNode.id == "gfFilterThree")
   {
      GF.state = "filter";
      getElm("gfGameName").value = gfTextKeywordDefault;
      setThirdTierFilter(srcObj);
      hide3rdTierSearch();
      srcObj.parentNode.parentNode.style.display = "none";
      doFilter();
   }
   //FILTER FOUR FREE TYPE
   else if(srcObj.parentNode.id == "gfFreeSearch")
   {
      GF.state = "free"; 
      hide3rdTierSearch();
      doFilter();
   }
}

 function setThirdTierScrollbar(srcObj)
 {
   gfScrollbar.target.style.top = "0px";
   gfScrollbar.reset(srcObj.pane.id+"List");
   var catID = srcObj.id.toLowerCase();
   if(catID.indexOf("system") >=0 )
   {
      if(GF.platform)
         gfScrollbar.scrollIntoView(GF.platform.offsetTop, GF.platform.offsetHeight*2)
   }
   if(catID.indexOf("sports") >=0 )
   { 
      if(GF.genre)
         gfScrollbar.scrollIntoView(GF.genre.offsetTop, GF.genre.offsetHeight*2)
   }
   if(catID.indexOf("games") >=0 )
   { 
      if(GF.genre)
         gfScrollbar.scrollIntoView(GF.genre.offsetTop, GF.genre.offsetHeight*2)
   }
   if(catID.indexOf("rating")  >=0 )
   {   
      if(GF.esrb)
         gfScrollbar.scrollIntoView(GF.esrb.offsetTop, GF.esrb.offsetHeight*2)
   }  
 }
            
function setThirdTierFilter(srcObj)
{
   var catID = srcObj.parentNode.parentNode.id.toLowerCase();
   if(catID.indexOf("system") >=0 )
   {
      if(GF.platform)
         GF.platform.className = "";
      GF.platform = srcObj;
      GF.platform.className = "On";
   }
   if(catID.indexOf("sports") >=0 || catID.indexOf("games") >=0 )
   { 
      if(GF.genre)
         GF.genre.className = "";
      GF.genre = srcObj;
      GF.genre.className = "On";
   }
   if(catID.indexOf("rating")  >=0 )
   {   
      if(GF.esrb)
         GF.esrb.className = "";
      GF.esrb = srcObj;
      GF.esrb.className = "On";
   }  
}

function resetSearch()
{
   if(GF.platform)
      GF.platform.className = "";
   if(GF.genre)
      GF.genre.className = "";
   if(GF.esrb)
      GF.esrb.className = "";
   
   GF.platform = null;
   GF.genre = null;
   GF.esrb = null;
   GF.gfFreeName = "";
   
   GF.state = "filter"; 
   getElm("gfGameName").value = gfTextKeywordDefault;
   
   hide3rdTierSearch();
   if(filterTabs.currentTab)
   {
   filterTabs.currentTab.className = "tab gfTab";
   filterTabs.currentTab = null;
   }
   
   getElm("gfPrompt").style.display = "block";
   getElm("gfResults").style.display = "none"; 
      
   document.getElementById("gfPromptText").className = "";
   writeHTML("gfPromptText", GF.defaultText);
   
   var gamesXML = xmlDocs["gamelist"].xml;
   var gn = getNodeById(gamesXML,defaultPromoID);
   var gDiv = formatGame(gn);
   writeHTML("gfPromo", "<div class='enLabel'><div>"+gfTextGameLatestReleaseHdr+"</div></div>");
   getElm("gfPromo").appendChild(gDiv);
   
   if(sectionTabs.currentTab == getElm("gfSectionPogoTab") || sectionTabs.currentTab == getElm("gfSectionMobileTab"))
   {
      if(GF.category == "sports") 
         sectionTabs.setActiveTab(getElm("gfSectionSportsTab"))
      else
         sectionTabs.setActiveTab(getElm("gfSectionGamesTab"))
   }
}

function show3rdTierSearch()
{
   getElm("gfFilterThree").style.display = "block";
   moveTo("gfPrompt",448,0,15);
   setWidth("gfPrompt",227);
   moveTo("gfResults",448,0,5);
   setWidth("gfResults",227);
   moveTo("gfResultsContainer",GF.resultsLeft,GF.resultsTop,1); 
}
function hide3rdTierSearch()
{
   getElm("gfFilterThree").style.display = "none";
   moveTo("gfPrompt",223,0,15); 
   setWidth("gfPrompt",452);   
   moveTo("gfResults",223,0,5); 
   setWidth("gfResults",452);
   moveTo("gfResultsContainer",GF.resultsLeft,GF.resultsTop,1); 

   if(GF.gameCount == 0){
      getElm("gfPrompt").style.display = "block";
      getElm("gfResults").style.display = "none"; 
      writeHTML("gfPromptText", GF.defaultText);
   }else{
      if(GF.genre || GF.esrb && GF.platform)
      {
         getElm("gfPrompt").style.display = "none";
         getElm("gfResults").style.display = "block";
      }else{
         getElm("gfPrompt").style.display = "block";
         getElm("gfResults").style.display = "none"; 
         showRefineSearch();
      }
   }
   if(filterTabs.currentTab)
   {
      filterTabs.currentTab.className = "tab gfTab";
      filterTabs.currentTab = null;
   }
}

/*******************************
   FILTER
******************************/

function doFreeSearchFocus(free)
{
   if(free.value == gfTextKeywordDefault)
      free.value = "";
   if(free.value != "")
   {
      GF.gfFreeName = free.value.toLowerCase();
      setGFFilters(free); 
   }else{
      /*hide3rdTierSearch();
      getElm("gfPrompt").style.display = "block";
      getElm("gfResults").style.display = "none"; 
      writeHTML("gfPromptText", GF.defaultText);*/
   }
}
function doFreeSearchBlur(free)
{
   if(free.value == "")
      free.value = gfTextKeywordDefault;
}

function doFilter()
{
   if(!xmlDocs["gamelist"])
      return;
      
   var numReqMatches = 0;
   if(GF.platform)
      numReqMatches++;
   if(GF.esrb)
      numReqMatches++;
   if(GF.genre)
      numReqMatches++;
   
   var gamesXML = xmlDocs["gamelist"].xml;
   GF.gameCount = 0;
   GF.games = new Array();
   //find the first ELEMENT_NODE node - its our root (IE will place a PROCESSING_INSTRUCTION_NODE in there)
   for(var i=0; i < gamesXML.childNodes.length; i++)
   {
      if(gamesXML.childNodes[i].nodeType == Node.ELEMENT_NODE)
      {
         gamesXML = gamesXML.childNodes[i];
         break;
      }
   }
   if( (GF.state == "free" && GF.gfFreeName == "") ||  (GF.state == "free" && GF.gfFreeName == gfTextKeywordDefault.toLowerCase()) || (GF.state == "filter" && numReqMatches == 0) )
   {
      //NOTHING TO FILTER ON
      getElm("gfPrompt").style.display = "block";
      getElm("gfResults").style.display = "none";   
      var gn = getNodeById(gamesXML,defaultPromoID);
      var gDiv = formatGame(gn);
      writeHTML("gfPromo", "<div class='enLabel'><div>"+gfTextGameLatestReleaseHdr+"</div></div>");
      getElm("gfPromo").appendChild(gDiv);
      return;
   }else{
      getElm("gfPrompt").style.display = "none";
      getElm("gfResults").style.display = "block";
   }
   parseGameList(gamesXML,numReqMatches);
   
   if(GF.genre || GF.esrb && GF.platform || GF.gameCount == 0 || GF.state == "free" || GF.esrb && GF.gameCount < 5) //|| GF.platform && GF.gameCount < 5
   {
      writeGFgames();
   }else{
      showRefineSearch();
   }
   showGFPromo(gamesXML);
}

//PARSE THE GAME LIST
function parseGameList(gamesXML,numReqMatches)
{
   var games = new Array();
   for(var i=0; i < gamesXML.childNodes.length; i++)
   {
      if(gamesXML.childNodes[i].nodeType != Node.ELEMENT_NODE)
         continue;
      
      if(gamesXML.childNodes[i].nodeName == "game")
      {
      //DO GAME FILTERING
         var gameNodeMatches = 0;
         var gameNode = gamesXML.childNodes[i];
         
         if(GF.category == "sports" && GF.category != gameNode.getAttribute("category")) 
            continue;
        
         //LOOP THRU THE GAME NODES
         for(var j=0; j < gameNode.childNodes.length; j++)
         {
            if(gameNode.childNodes[j].nodeType != Node.ELEMENT_NODE)
               continue;
            //TEXT MATCH IF WORKING OFF 'FREE' FILTER  
            if(GF.state == "free")
            {
               if(GF.gfFreeName == "*")
               {
                  games[games.length] = gameNode;
                  GF.gameCount ++;
                  break;
               }
               if(gameNode.childNodes[j].nodeName == "name")
               {
                  var cnName = getNodeValue(gameNode.childNodes[j])
                  if(cnName.toLowerCase().indexOf(GF.gfFreeName) == 0)
                  {
                     games[games.length] = gameNode;
                     GF.gameCount ++;
                     continue;
                  }
                  var namePieces = cnName.split(" ");
                  for(p in namePieces)
                  {
                     if(namePieces[p].toLowerCase().indexOf(GF.gfFreeName) == 0 )
                     {
                        games[games.length] = gameNode;
                        GF.gameCount ++;
                        break;
                     }
                  }
                  continue;
               }
            }
            //PROPERTY MATCH IF WORKING OFF SET FILTERS
            if(GF.state == "filter")
            {
               if(gameNode.childNodes[j].nodeName == "systems")
               {//systems system
                  var systemNode = gameNode.childNodes[j];
                  for(var k=0; k < systemNode.childNodes.length; k++)
                  {
                     if(systemNode.childNodes[k].attributes)
                     {
                        if(systemNode.childNodes[k].getAttribute("type") == getKeyString(GF.platform))
                        {
                           gameNodeMatches++;
                           break;
                        }
                     }
                  }
               }
               if(gameNode.childNodes[j].nodeName == "genres")
               {//genres genre
                  var genreNode = gameNode.childNodes[j];
                  for(var k=0; k < genreNode.childNodes.length; k++)
                  {
                     if(genreNode.childNodes[k].nodeType != Node.ELEMENT_NODE)
                        continue; 
                        
                     if(genreNode.childNodes[k].attributes)
                     {
                        if(genreNode.childNodes[k].getAttribute("id") == getKeyString(GF.genre))
                        {
                           gameNodeMatches++;
                           break;
                        }
                     }
                  }
               }
               if(gameNode.childNodes[j].nodeName == "esrb")
               {//esrb
                  if(getNodeValue(gameNode.childNodes[j]) == getKeyString(GF.esrb))
                     gameNodeMatches++;
               }
            }// end if state == "filter"
         }// end gameNode loop
         //alert("FILTERED LIST ON "+numMatches+" MATCHES | FOUND "+gameNodeMatches+" MATCHES");
         //ADD GAME TO LIST IF IT PASSED ALL THE FILTERS
         if(gameNodeMatches == numReqMatches && GF.state == "filter")
         {
            games[games.length] = gameNode;
            GF.gameCount ++;
            continue;
         }
      }// end if gameNode == "game"
   }// end gamesXML loop
   
   // alphabetize and assign the games array back to the Game Finder
   games.sort(sortGames)
   function sortGames(a,b)
   {
      if( getNodeValue(a.getElementsByTagName("name")[0]) > getNodeValue(b.getElementsByTagName("name")[0]) )
         return 1
      else if(getNodeValue(a.getElementsByTagName("name")[0]) < getNodeValue(b.getElementsByTagName("name")[0]))
         return -1
      else
         return 0
   }
   GF.games = games;
}
   
function writeGFgames()
{
   //CLEAR THE RESULTS LIST
   clearElm("gfResultsContainer");
   //IF THERE ARE NO MATCHES DISPLAY MSG
   if(GF.gameCount == 0)
   {
      getElm("gfPromo").innerHTML = GF.defaultPromo;
      getElm("gfPrompt").style.display = "block";
      getElm("gfResults").style.display = "none";
      var noResultsText = "<span class='gfResultsFeedText'>"+gfTextSorryPartOne+"<br />"+gfTextSorryPartTwo+" ";
      if(GF.state == "filter")
      {
         noResultsText += (GF.esrb) ? getKeyText(getKeyString(GF.esrb))+" " : "";
         noResultsText += (GF.genre) ? getKeyText(getKeyString(GF.genre))+" " : "";
         noResultsText += gfTextGamePartOne+gfTextGamePartTwo+" ";
         noResultsText += (GF.platform) ? gfTextForThe +" " + getKeyText(getKeyString(GF.platform)) : "";
      }else{
         noResultsText += gfTextGamePartOne+gfTextGamePartTwo+" "+gfTextFreeSearchFeedback +" "+ getElm("gfGameName").value;
      }
      noResultsText += "</span>";
      writeHTML("gfPromptText", noResultsText);
   }else{
    //WRITE THE GAMES OUT
      var c = 0
      for(g in GF.games)
      {
          getElm("gfResultsContainer").appendChild(formatGame(GF.games[g],c));
          c ++;
      }
      var visD = getElm("gfResultsContainer").parentNode.offsetWidth 
      var gfRC = Math.max( (GF.gameWidth*c) , visD )
      getElm("gfResultsContainer").style.width = gfRC+"px";
      GF.scrollDist = visD - gfRC;
      if(GF.scrollDist < 0)
      {
         GF.resultsLeft = GF.arrowWidth;
         // -6 so the last divider is not shown
         GF.scrollDist -= ((GF.arrowWidth*2) + (GF.resultsLeft-6));
         getElm("gfResultsArrowLeft").className = "gfResultsArrow";
         getElm("gfResultsArrowRight").className = "gfResultsArrow";
      }else{
         getElm("gfResultsArrowLeft").className = "gfResultsArrow gfRADisabled";
         getElm("gfResultsArrowRight").className = "gfResultsArrow gfRADisabled";
      }
      moveTo("gfResultsContainer",GF.resultsLeft,GF.resultsTop,1); 
      //WRITE OUT THE RESULTS FEEDBACK
      var resultsText = formatResultsFeedback();
      writeHTML("resultsFeedback", resultsText);
   }
}

function showRefineSearch(){
   getElm("gfPrompt").style.display = "block";
   getElm("gfResults").style.display = "none";
   var rText = formatResultsFeedback();
    rText += "<span id='gfFeedBackNarrow'>"+gfTextNarrowSearch+" ";
   if(GF.esrb){
      rText += gfTextPlatform+" or ";
      rText += (GF.category == "sports") ? gfTextSport : gfTextGenre;
   }   
   var pLink = "";
   var pKey = getKeyString(GF.platform);

   if(pKey == 'ps3') { pLink = baseEAURL+"ps3.jsp" }
   else if(pKey == 'ps2') { pLink = baseEAURL+"ps2.jsp" }
   else if(pKey == 'ps') { pLink = "" }
   else if(pKey == 'psp') { pLink = baseEAURL+"psp.jsp" }
   else if(pKey == 'pccd') { pLink = baseEAURL+"pc.jsp" }
   else if(pKey == 'pcdvd') { pLink = baseEAURL+"pc.jsp" }
   else if(pKey == 'pc_dl') { pLink = baseEAURL+"pc_download.jsp" }
   else if(pKey == 'xbox360') { pLink = baseEAURL+"xbox360.jsp" }
   else if(pKey == 'xbox') { pLink = baseEAURL+"xbox.jsp" }
   else if(pKey == 'ds') { pLink = baseEAURL+"ds.jsp" }
   else if(pKey == 'gba') { pLink = baseEAURL+"gameboyadvance.jsp" }
   else if(pKey == 'gbasp') { pLink = "" }
   else if(pKey == 'rev') { pLink = "" }
   else if(pKey == 'gcn') { pLink = baseEAURL+"gamecube.jsp" }
   else if(pKey == 'giz') { pLink = "" }
   else if(pKey == 'mobile') { pLink = baseEAURL+"mobile.jsp" }
   else if(pKey == 'wii') { pLink = baseEAURL+"wii.jsp" }   
   if(GF.platform){
      rText += gfTextESRB+" or ";
      rText += (GF.category == "sports") ? gfTextSport : gfTextGenre;
      if(pLink != "")
         rText += "<a href='"+pLink+"'></a>";
         // "+gfTextOrViewAll+""+ getKeyText(getKeyString(GF.platform))+" "+ gfTextGamePartOne+gfTextGamePartTwo+"
   }
   rText = '<div id="gfPromptRefineSearch">'+rText+'</span></div>';
   document.getElementById("gfPromptText").className = "gfPromptRefineSearchBG";
   writeHTML("gfPromptText", rText);
   //document.getElementById("holder").innerHTML = rText.replace(/[<]/gi,"&lt;").replace(/[>]/gi,"&gt;");
}

function formatResultsFeedback()
{
   var rfText = "<div><span class='gfResultsFeedText'>"+gfTextResultTextPartOne+" <span class='gfResultNum'>"+GF.gameCount+"</span> <span class='gfResultFilterFeedback'>";
   if(GF.state == "filter")
   {
      rfText += (GF.esrb) ? "<span class='gfResultTextHighLight'>"+gfTextRatedText+" ("+getKeyString(GF.esrb).toUpperCase()+") "+gfTextFor+" "+getKeyText(getKeyString(GF.esrb))+"</span> " : "";
      rfText += (GF.genre) ?  getKeyText(getKeyString(GF.genre))+" " : "";
      rfText += "<span>";
      rfText += gfTextGamePartOne + ( (GF.gameCount==1) ? "" : gfTextGamePartTwo) + " " ;
      rfText += gfTextResultTextPartTwo+" ";
      rfText += (GF.platform) ?  gfTextForThe+"</span> "+"<span class='gfResultTextHighLight'>"+getKeyText(getKeyString(GF.platform))+"</span>" : "</span>";
   }else{
      rfText += gfTextGamePartOne + ( (GF.gameCount==1) ? "" : gfTextGamePartTwo) + " " ;
      rfText += gfTextFreeSearchFeedback +" "+getElm("gfGameName").value;
   }
    rfText += "</span></span></div>";
    return rfText;
}

function showGFPromo(gamesXML)
{
   //CLEAR THE PROMO SPACE
   clearElm("gfPromo");
   
   //CHECK FOR PROMO
   var promoList = gamesXML.getElementsByTagName("promos")[0];
   promoList = promoList.getElementsByTagName("promo");
   var promoFeature = getPromoSpot(promoList);

   //CHECK FOR RELATED LINKS
   var genreLinks = gamesXML.getElementsByTagName("links");
   var linksToWrite = getPromoSpot(genreLinks);
   
   function getPromoSpot(list)
   {
      var pf = null;
      for(var promo = 0; promo < list.length; promo++)
      {
         if(list[promo].nodeType != Node.ELEMENT_NODE)
            continue;
         if(list[promo].getAttribute("linkage") == getKeyString(GF.esrb))
            pf = list[promo];
      }
      for(var promo = 0; promo < list.length; promo++)
      {
         if(list[promo].nodeType != Node.ELEMENT_NODE)
            continue;
         if(list[promo].getAttribute("linkage") == getKeyString(GF.platform))
            pf = list[promo];
      }
      for(var promo = 0; promo < list.length; promo++)
      {
         if(list[promo].nodeType != Node.ELEMENT_NODE)
            continue;
         if(list[promo].getAttribute("linkage") == getKeyString(GF.genre))
            pf = list[promo];
      }
      return pf;
   }
   
   //WRITE THE PROMO SPOT
   if(linksToWrite)
   {
      var linkNodes = linksToWrite.getElementsByTagName("link");
      var linksHTML = "<div class='enLabel'><div>"+gfTextGameLinksListHdr+"</div></div><div id='gfRelatedLinks'>"
      if(linkNodes.length > 0)
      {
         var aHtml = "";
         for(var links = 0; links < linkNodes.length; links++)
         {
             if(linkNodes[links].nodeType != Node.ELEMENT_NODE)
               continue;
             var h = getNodeValue(linkNodes[links].getElementsByTagName("href")[0]);
             var t = getNodeValue(linkNodes[links].getElementsByTagName("text")[0]);
             aHtml += "<a href='"+h+"'>"+t+"</a>";
         } 
       }
       linksHTML += aHtml+"</div>";
       writeHTML("gfPromo", linksHTML);
   }else{
      if(promoFeature)
         var gn = getNodeById(gamesXML,promoFeature.getAttribute("gameID"));
      else
         var gn = getNodeById(gamesXML,defaultPromoID);
      var gDiv = formatGame(gn);
      writeHTML("gfPromo", "<div class='enLabel'><div>"+gfTextGameLatestReleaseHdr+"</div></div>");
      getElm("gfPromo").appendChild(gDiv);
   }
}

//FORMAT A GAME
function formatGame(gameNode,count)
{
   var baseID = "gfR";
   if(!count)
   {
      count = 0; 
      baseID = "gfRPromo";
   }
   var game = document.createElement("DIV");
   game.className = "gfResult";
   if(baseID != "gfRPromo")
      game.style.left = (GF.gameWidth*count)+"px";
 
   game.id = baseID+"_"+count;
   
   var gImg  = createElm("IMG",null,game);
   gImg.className = "gfThumb";
   
   var gText  = createElm("DIV",null,game);
   gText.className = "gfGameText";
      
   var gTitle  = createElm("DIV",null,gText);
   gTitle.className = "gfGameTitle";   
   var gPlat  = createElm("DIV",null,gText);
   gPlat.className = "gfGamePlat";   
   var gEsrb  = createElm("DIV",null,gText);
   gEsrb.className = "gfGameEsrb";
   
   var gLinks  = createElm("DIV",null,game);
   gLinks.className = "gfGameLinks";
   
   var buttonCount = 0;
   
   var gameURL = getNodeValue(gameNode.getElementsByTagName("homepage")[0]);
   if(gameURL != ""){
      var gLink  = createElm("A",null,gLinks);
      gLink.className = "gfButton viewSite";
      gLink.href = gameURL;
      buttonCount++;
   }
  	if(getNodeValue(gameNode.getElementsByTagName("displayFindStoreLink")[0])!="no"){
	  	var gStore  = createElm("A",null,gLinks);
	  	gStore.className = "gfButton findRetail";
	  	gStore.href = baseRetailURL;
		buttonCount++;
	}
		
  	if(getNodeValue(gameNode.getElementsByTagName("displayBuyItLink")[0])!="no"){
	   var gBuy  = createElm("A",null,gLinks);
	   gBuy.className = "gfButton buyIt";
	   buttonCount++;
	}
   game.className += " btnCnt_"+buttonCount;
   
   gImg.src = getNodeValue(gameNode.getElementsByTagName("image_directory")[0])+"box_art_thumb.gif";
   
   writeTo(gTitle,getNodeValue(gameNode.getElementsByTagName("name")[0]));
   writeHTML(gPlat,"<br />");
   var rating = getNodeValue(gameNode.getElementsByTagName("esrb")[0]);
   writeHTML(gEsrb,gfTextRatedText+" ("+rating.toUpperCase()+")<br />"+gfTextFor+" "+getKeyText(rating));
  
   //build the buy link
   var buyLink = "";
   if(GF.platform && GF.state == "filter")
   {  
      var sysNodes = gameNode.getElementsByTagName("system");
      for(var i=0; i < sysNodes.length; i++)
      {
         if(sysNodes[i].attributes)
         {
            if(sysNodes[i].getAttribute("type") == getKeyString(GF.platform))
            {
               // if there is no SKU then give the user the Keyword link
               var eaStoreSKU = sysNodes[i].getAttribute("itemID");
               if(isNaN(parseInt(eaStoreSKU)) == true){
                  if(eaStoreSKU.indexOf("http") >= 0)
                     buyLink = eaStoreSKU;
               }else{
                  buyLink = baseBuyURL + eaStoreSKU;
               }
               break;
            }
         }
      }
   }else{
      var eaStoreKeyword = getNodeValue(gameNode.getElementsByTagName("keyword")[0]);
      if(eaStoreKeyword != "")
      {
         if(eaStoreKeyword.indexOf("http") >= 0)
            buyLink = eaStoreKeyword;
         else
            buyLink = baseSearchURL + eaStoreKeyword;
      }
   }
   if(gBuy!=null){
	   if(buyLink != "")
	      gBuy.href = buyLink;
	   else
	      gBuy.style.display = "none";
	
   }	
   return game;  
}

/*******************************
   XML CALLBACKS
******************************/
function doGamesXMLWait()
{
   clearElm("gfPromptText");
   writeTo("gfPromptText", "LOADING GAMES LIST....");
}

function doGamesXMLReady()
{
   clearElm("gfPromptText");   
   var gamesXML = xmlDocs["gamelist"].xml;
   var numGames = gamesXML.getElementsByTagName("game").length;
   GF.defaultText += "<div class='gfPromptHdr'>"+gfTextWelcome+" "+gfTextEABrand+"</div>";
   
   GF.defaultText += "<span>"+gfTextDefaultTextPartOne.replace("|selector|",gfTextGenreSelector).replace("##",numGames)+"</span><span>"+gfTextDefaultTextPartTwo+"</span>";
   writeHTML("gfPromptText", GF.defaultText);
   
   var gn = getNodeById(gamesXML,defaultPromoID);
   var gDiv = formatGame(gn);
   writeHTML("gfPromo", "<div class='enLabel'><div>"+gfTextGameLatestReleaseHdr+"</div></div>");
   getElm("gfPromo").appendChild(gDiv);
   window.status = " ";
}
