var GH4 = window.GH4 || {};

GH4.Trophies = {

     1 : { "src" : "graphics/trophy_pick_wuss.gif", "title" : "Kitty Fingers - Complete any five songs", "width" : "22", "height" : "22" },
     2 : { "src" : "graphics/trophy_pick_moneybags.gif", "title" : "Fraternizer - Complete first Song Group on Expert", "width" : "22", "height" : "22" },
     4 : { "src" : "graphics/trophy_pick_solocareer.gif", "title" : "Castle Stormer - Complete second Song Group on Expert", "width" : "22", "height" : "22" },
     8 : { "src" : "graphics/trophy_pick_streak_coop.gif", "title" : "Festival Favorite - Complete third Song Group on Expert", "width" : "22", "height" : "22" },
    16 : { "src" : "graphics/trophy_pick_buttonmasher.gif", "title" : "Head breaker - Complete all songs on drums", "width" : "22", "height" : "22" },
    32 : { "src" : "graphics/trophy_pick_enlightened.gif", "title" : "Axe Murderer - Complete all songs on guitar", "width" : "22", "height" : "22" },
    64 : { "src" : "graphics/trophy_pick_fail90.gif", "title" : "Ringer - Get 5 stars on 5 Expert songs", "width" : "22", "height" : "22" },
   128 : { "src" : "graphics/trophy_pick_trackcollector.gif", "title" : "Prodigy - Get 5 stars on 10 Expert songs", "width" : "22", "height" : "22" },
   256 : { "src" : "graphics/trophy_pick_earnings.gif", "title" : "The Gold Pick - Get 5 stars on all 15 Expert songs", "width" : "22", "height" : "22" },
   512 : { "src" : "graphics/trophy_pick_whammy.gif", "title" : "Endless - Hit 300 notes in a row", "width" : "22", "height" : "22" },
  1024 : { "src" : "graphics/trophy_pick_streaker.gif", "title" : "Chain Lightning - Get over 150,000 points on a song", "width" : "22", "height" : "22" },
  2048 : { "src" : "graphics/trophy_pick_notesfromhell.gif", "title" : "Legendary - Reach Legend rank in multiplayer", "width" : "22", "height" : "22" }

};

GH4.Page = (function() {

  return {

    stripChildren : function(d) {

      var element = document.getElementById(d);
      var children = element.childNodes;

      for (var i = (children.length - 1); i >= 0; i--) {
        element.removeChild(children[i]);
      }

    },

    doSearch : function() {

      var playerName = HOWF.Utils.trim(document.getElementById("player_search").value);

      if (playerName != "" && playerName != "Enter player's name") {

        HOWF.Ajax.sendRequest("get","ajax.php?action=do_search&pn=" + encodeURI(playerName),GH4.Page.doSearchResponse);

      }

    },

    doSearchResponse : function() {  // inserts the service call info from ajax.php do_search

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

          displayDIV("left_page_content_search");
          GH4.Page.stripChildren("search_name");
          GH4.Page.stripChildren("search_rank");
          GH4.Page.stripChildren("search_battle_points");
          GH4.Page.stripChildren("search_career_points");
          GH4.Page.stripChildren("search_wins");
          GH4.Page.stripChildren("search_guitar_win");
          GH4.Page.stripChildren("search_drums_win");
          GH4.Page.stripChildren("search_about_me");

          document.getElementById("search_rank").appendChild(document.createTextNode(response[1]));
          document.getElementById("search_name").appendChild(document.createTextNode(response[2]));
          document.getElementById("search_battle_points").appendChild(document.createTextNode(response[4]));
          document.getElementById("search_career_points").appendChild(document.createTextNode(response[5]));
          document.getElementById("search_wins").appendChild(document.createTextNode(response[6]));
          document.getElementById("search_guitar_win").appendChild(document.createTextNode(response[7]));
          document.getElementById("search_drums_win").appendChild(document.createTextNode(response[8]));
          // replace the registered text with actual symbol
          document.getElementById("search_about_me").appendChild(document.createTextNode(response[9].replace("&reg;",String.fromCharCode("174"))));

          document.getElementById("search_avatar").src = response[3];

        } else {

          if(response[1] == "Account does not exist") {
            alert("Hmm, I'm sorry.  I can't locate that player.");  //I can't locate that player or my service is down:
          }

        }

      }

    },

    doSBExpand : function(name,d) {

      var box_size = document.getElementById(d);

      if(box_size.style.height == "156px") {

        HOWF.Ajax.sendRequest("get","ajax.php?action=expand_sb&id=" + d + "&pn=" + encodeURI(name) + "&math=" + Math.random(),(function() {
          GH4.Page.doSBResponse(d);
        }));

      }

    },

    doSBResponse : function(d) {  // inserts the service call info from ajax.php expand_sb

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

            GH4.Page.stripChildren(d + "_streak");
            GH4.Page.stripChildren(d + "_wins");
            GH4.Page.stripChildren(d + "_lost");
            GH4.Page.stripChildren(d + "_guitar_wins");
            GH4.Page.stripChildren(d + "_drums_wins");

            document.getElementById(d + "_streak").appendChild(document.createTextNode(response[2]));
            document.getElementById(d + "_wins").appendChild(document.createTextNode(response[3]));
            document.getElementById(d + "_lost").appendChild(document.createTextNode(response[4]));
            document.getElementById(d + "_guitar_wins").appendChild(document.createTextNode(response[5]));
            document.getElementById(d + "_drums_wins").appendChild(document.createTextNode(response[6]));
            document.getElementById(d + "_avatar").src = response[1];

        } else {

          //alert("doSBRresponse error : " + response[0] + " - " + response[1]);

        }

      }

    },

    doSetAvatar : function(d) {

      var img = document.getElementById(d).src;
      HOWF.Ajax.sendRequest("get","ajax.php?action=set_avatar&id=" + img,GH4.Page.doSetAvatarResponse);

    },

    doSetAvatarResponse : function(d) {  // inserts the service call info from ajax.php set_avatar

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

          document.getElementById("main_avatar").src = response[1];
          document.getElementById("current_avatar").src = response[1];


        } else {

          //alert("I can't set the avatar - doSetAvatar: " + response[0]);

        }

      }

    },

    doUpdateProfile : function() {

      hideDIV("left_page_content_popup");
      var js_song = document.getElementById("song").value;
      var js_guitarist = document.getElementById("guitarist").value;
      var js_instrument = document.getElementById("instrument").value;
      var js_game = document.getElementById("game").value;

      HOWF.Ajax.sendRequest("get","ajax.php?action=update_me&s=" + js_song + "&g=" + js_guitarist + "&i=" + js_instrument + "&ga=" + js_game,GH4.Page.doSetProfile);

    },

    doSetProfile : function() {  // inserts the service call info from ajax.php update_me

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

          GH4.Page.stripChildren("about_song");
          GH4.Page.stripChildren("about_guitarist");
          GH4.Page.stripChildren("about_instrument");
          GH4.Page.stripChildren("about_game");

          document.getElementById("about_song").appendChild(document.createTextNode(response[1]));
          document.getElementById("about_guitarist").appendChild(document.createTextNode(response[2]));
          document.getElementById("about_instrument").appendChild(document.createTextNode(response[3]));
          document.getElementById("about_game").appendChild(document.createTextNode(response[4].replace("&reg;",String.fromCharCode("174"))));

        } else {

          //alert("I can't update your profile - doSetProfile: " + response[0]);

        }

      }

    },

    doStartPurchase : function(song) {

      HOWF.Ajax.sendRequest("get","ajax.php?action=start_purchase&song=" + song,GH4.Page.doStartPurchaseResponse);

    },

    doStartPurchaseResponse : function() {

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

          GH4.Page.stripChildren("popup_song_title");
          GH4.Page.stripChildren("popup_song_artist");
          GH4.Page.stripChildren("popup_song_price");
          GH4.Page.stripChildren("popup_song_text");

          document.getElementById("popup_song_title").appendChild(document.createTextNode(response[1]));
          document.getElementById("popup_song_artist").appendChild(document.createTextNode(response[2]));
          document.getElementById("popup_song_price").appendChild(document.createTextNode(response[3]));
          document.getElementById("popup_song_text").appendChild(document.createTextNode(response[5]));
          document.getElementById("popup_song_continue").onclick = new Function('return GH4.Page.doPurchaseSong(\'' + response[4] + '\')');

          document.getElementById("popup_background").style.display = "block";
          document.getElementById("popup_box").style.display = "block";

        } else {

          //alert("doStartPurchaseResponse: " + response[1]);
          alert("[Error 324] I'm sorry, there is an error with my service. If you continue to have this issue, please contact us.");

        }

      }

    },

    doPurchaseSong : function(song) {

      var js_phone = document.getElementById("phone").value;

      HOWF.Ajax.sendRequest("get","ajax.php?action=purchase_song&song=" + song + "&pn=" + js_phone,GH4.Page.doPurchaseSongResponse);

    },

    doPurchaseSongResponse : function() {

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

          document.getElementById("phoneget").style.display = "none";
          document.getElementById("phoneget").value = "";

          GH4.Page.stripChildren("popup_song_text");
          GH4.Page.stripChildren(response[2] + "_state");

          document.getElementById("popup_song_text").appendChild(document.createTextNode(response[1]));
          document.getElementById(response[2] + "_state").appendChild(document.createTextNode("Underway"));
          document.getElementById("popup_song_continue").onclick = new Function('hideDIV(\'popup_box\');hideDIV(\'popup_background\')');


        } else if (response[0] == "308") {

          GH4.Page.stripChildren("popup_song_text");

          document.getElementById("popup_song_text").appendChild(document.createTextNode(response[1]));
          document.getElementById("phoneget").style.display = "block";

          //alert("doPurchaseSongResponse: 308 " + response[2] + " - " + response[1]);  //some crap here for getting their phone number - alert

        } else {

          alert("[Error 311] I'm sorry, there is an error with my service. If you continue to have this issue, please contact us.");
          //alert("[Error 311] I'm sorry, there is an error with my service." + response[2] + " - " + response[1] + " If you continue to have this issue, please contact us.");
          //alert("doPurchaseSongResponse: other" + response[2] + " - " + response[1]);

        }

      }

    },

    doSetPlaced : function(d,type) {

      HOWF.Ajax.sendRequest("get","ajax.php?action=placed_sb&uid=" + d + "&sb=" + type,GH4.Page.doSetPlacedResponse);

    },

    doSetPlacedResponse : function() {  // inserts the service call info from ajax.php place_sb

      if (HOWF.httpRequest.readyState == 4) {

        var response = HOWF.httpRequest.responseText.split("|");

        if (response[0] == "ok") {

          eval("var responseData = { " + response[2] + " };");

          GH4.Page.createLeaderboard("leader_board_placed",responseData,response[1]);

        } else {

          //alert("I can't update sb - doSetPlacedResponse: " + response[0]);

        }

      }

    },

    createLeaderboardRow : function(data,name) {

      var userName = String.toLowerCase(data.username);

      var newRow = document.getElementById("leaderboard_base").cloneNode(true);
      newRow.id = newRow.id + "_" + userName;
      newRow.style.display = "block";

      var tags = newRow.getElementsByTagName("div");

      var numTrophies = 0;
      var numTrophiesContainer = null;

      for (var i = 0; i < tags.length; i++) {

        var rowId = tags[i].id;

        if (!rowId || rowId == "") {
          continue;
        }

        if (rowId == "leaderboard_base_top_username") {

          if(userName == String.toLowerCase(name)) {
            tags[i].parentNode.style.borderColor = "#ff0000";
          }

          tags[i].replaceChild(document.createTextNode(data.username),tags[i].firstChild);

        } else if (rowId == "leaderboard_base_top_score") {

          tags[i].replaceChild(document.createTextNode(data.score),tags[i].firstChild);

        } else if (rowId == "leaderboard_base_top_rank") {

          tags[i].replaceChild(document.createTextNode(data.rank),tags[i].firstChild);

        } else if (rowId == "leaderboard_base_expander") {

          tags[i].onclick = (function() {

            extendz(newRow.id,24,156);
            toggle_minmax(this.id);
            return GH4.Page.doSBExpand(userName,newRow.id);

          });

        } else if (rowId == "leaderboard_base_expanded") {

          var spans = tags[i].getElementsByTagName("span");

          for (var j = 0; j < spans.length; j++) {

            var spanId = spans[j].id;

            if (!spanId || spanId == "") {
              continue;
            }

            // store a reference to trophies container
            if (spanId == "leaderboard_base_num_trophies") {
              numTrophiesContainer = spans[j];
            }

            spans[j].id = "leaderboard_base_" + userName + spanId.substr(16);

          }

          var imgs = tags[i].getElementsByTagName("img");

          for (var k = 0; k < imgs.length; k++) {

            var imgId = imgs[k].id;

            if (!imgId || imgId == "") {
              continue;
            }

            imgs[k].id = "leaderboard_base_" + userName + imgId.substr(16);

          }

        } else if (rowId == "leaderboard_base_top_trophies") {

          for (var x in GH4.Trophies) {

            if (data.trophies & x) {

              var newTrophy = document.createElement("img");
              newTrophy.setAttribute("src",GH4.Trophies[x].src);
              newTrophy.setAttribute("width",GH4.Trophies[x].width);
              newTrophy.setAttribute("height",GH4.Trophies[x].height);
              newTrophy.setAttribute("title",GH4.Trophies[x].title);
              newTrophy.setAttribute("alt",GH4.Trophies[x].title);
              newTrophy.style.display = "inline";
              newTrophy.style.marginRight = "4px";
              newTrophy.style.marginTop = "1px";

              tags[i].appendChild(newTrophy);

              numTrophies++;

            }

          }

        }

        // set the id to something unique
        tags[i].id = rowId + "_" + userName;

      }

      // replace the trophy count
      numTrophiesContainer.replaceChild(document.createTextNode(numTrophies),numTrophiesContainer.firstChild);

      newRow.onmouseover = (function() {

        displayDIV("leaderboard_base_expander_" + userName);

      });

      newRow.onmouseout = (function() {

        hideDIV("leaderboard_base_expander_" + userName);

      });

      return newRow;

    },

    createLeaderboard : function(container,data,name) {

      var containerElement = document.getElementById(container);

      if (!containerElement) {
        return false;
      }

      // empty the container
      GH4.Page.stripChildren(container);

      for (var x in data) {

        containerElement.appendChild(GH4.Page.createLeaderboardRow(data[x],name));

      }

    }

  }

})();