
var myApp = {}; // a bit of protection for global variables
myApp.pArray = new Array(); // global variable to hold player_ids of players from selected squad
myApp.pNameArray = new Array(); // global variable to hold player names of players from selected squad
myApp.sel_cell = "";
myApp.ajaxActive = false;
myApp.pHash = new jsHash();


//Adds HashMap like functionality to javascript
//methods include removeItem, getItem, setItem, hasItem
function jsHash() {
  this.length = 0;
  this.items = new Array();
  for (var i = 0; i < arguments.length; i += 2) {
    if (typeof(arguments[i + 1]) != 'undefined') {
      this.items[arguments[i]] = arguments[i + 1];
      this.length++;
    }
  }

  this.removeItem = function(in_key)
  {
    var tmp_value;
    if (typeof(this.items[in_key]) != 'undefined') {
      this.length--;
      var tmp_value = this.items[in_key];
      delete this.items[in_key];
    }
    return tmp_value;
  }

  this.getItem = function(in_key)
  {
    return this.items[in_key];
  }

  this.setItem = function(in_key, in_value)
  {
    if (typeof(in_value) != 'undefined') {
      if (typeof(this.items[in_key]) == 'undefined') {
        this.length++;
      }

      this.items[in_key] = in_value;
    }
    return in_value;
  }

  this.hasItem = function(in_key)
  {
    return typeof(this.items[in_key]) != 'undefined';
  }
}



// creates a cookie on clients browser
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

function eraseCookie(name) {
  createCookie(name,"",-1);
}

// gets activated when user clicks on Player name in main page
// set the player_id parameter in the querystring
// param : String player_id
function setPlayerID(id, squad_id) {
  var playerId = id;
  var cook;

  if ($.browser.safari) {
    cook = myApp.pHash.getItem(playerId);
  } else {
    cook = readCookie(playerId + '_' + squad_id + '_cookie');
  }

  var pFrame = document.getElementById("player_profile_iframe");
  pFrame.src = "player_profile.jsp?player_id=" + playerId + "&squad_id=" + squad_id + "&count_type=" + cook;

  var pl_arr = myApp.pArray;
  for (var i = 0; i < pl_arr.length; i++) {
    if (playerId === pl_arr[i]) {
      myApp.sel_cell = i;
    }
  }
  setPlayerHead(myApp.sel_cell);
  displayArrows(myApp.sel_cell);
}

// used by the Prev and Next buttons to switch players
// param : String either "prev" or "next"
function switchPlayer(direction, squad_id) {
  var curr_cell = myApp.sel_cell;
  var pl_array = myApp.pArray;
  var pFrame = document.getElementById("player_profile_iframe");

  if (direction === "prev") {
    if (curr_cell != 0) {
      setPlayerHead(curr_cell - 1);
      displayArrows(curr_cell - 1);
      var cook;

      if ($.browser.safari) {
        saveToMain(pl_array[curr_cell]);
        cook = myApp.pHash.getItem(pl_array[curr_cell - 1]);
      } else {
        cook = readCookie(pl_array[curr_cell - 1] + '_' + squad_id + '_cookie');
      }

      pFrame.src = "player_profile.jsp?player_id=" + pl_array[curr_cell - 1] + "&squad_id=" + squad_id + "&count_type=" + cook;
      myApp.sel_cell = curr_cell - 1;
    }
  } else {
    if (curr_cell != pl_array.length) {
      setPlayerHead(curr_cell + 1);
      displayArrows(curr_cell + 1);
      var cook;

      if ($.browser.safari) {
        saveToMain(pl_array[curr_cell]);
        cook = myApp.pHash.getItem(pl_array[curr_cell + 1]);
      } else {
        cook = readCookie(pl_array[curr_cell + 1] + '_' + squad_id + '_cookie');
      }

      pFrame.src = "player_profile.jsp?player_id=" + pl_array[curr_cell + 1]+ "&squad_id=" + squad_id + "&count_type=" + cook;
      myApp.sel_cell = curr_cell + 1;
    }
  }
}

// runs when thickbox close button is clicked
function doOnClose_iframe() {
  if ($.browser.safari) {
    saveToMain(myApp.pArray[myApp.sel_cell]);
  } else {
    window.location.reload()
  }
}

// used only by safari
function saveToMain(id) {
  var playerId = id;
  var c_iframe = document.getElementById('player_profile_iframe');
  var squadId = document.getElementById("squad_id").value;
  var oDoc = c_iframe.contentWindow || c_iframe.contentDocument;
  if (oDoc.document) {
    oDoc = oDoc.document;
  }

  var i_keep = oDoc.getElementById("keep_perc_" + playerId + "_" +  squadId);
  var i_trade = oDoc.getElementById("trade_perc_" + playerId + "_" +  squadId);

  // set values from thick-box iframe to main document
  var p_keep_perc = document.getElementById("keep_perc_" + playerId + "_" +  squadId);
  var p_trade_perc = document.getElementById("trade_perc_" + playerId + "_" +  squadId);
  var p_keep_shade = document.getElementById("keep_shade_" + playerId + "_" +  squadId);
  var p_trade_shade = document.getElementById("trade_shade_" + playerId + "_" +  squadId);

  p_keep_perc.innerHTML = i_keep.innerHTML;
  p_trade_perc.innerHTML = i_trade.innerHTML;

  p_keep_shade.attributes.getNamedItem("width").value = i_keep.innerHTML + "%";
  p_trade_shade.attributes.getNamedItem("width").value = i_trade.innerHTML + "%";

  var keepBut = document.getElementById("keep_" + playerId + "_" + squadId);
  var tradeBut = document.getElementById("trade_" + playerId + "_" + squadId);

  var vType = oDoc.getElementById("vType");
  if (vType.value == 'keep') {
    tradeBut.className = 'trade_btn trade_unpressed';
    keepBut.className = 'keep_btn keep_pressed aVoted';
  } else if (vType.value == 'trade') {
    tradeBut.className = 'trade_btn trade_pressed aVoted';
    keepBut.className = 'keep_btn keep_unpressed';
  }
}

// function that gets elements by classname
function getElementsByClassName(classname, node)  {
  if(!node) node = document.getElementsByTagName("body")[0];
  var a = [];
  var re = new RegExp('\\b' + classname + '\\b');
  var els = node.getElementsByTagName("*");
  for(var i=0,j=els.length; i<j; i++)
      if(re.test(els[i].className))a.push(els[i]);
  return a;
}

// sets the thickbox player name header
function setPlayerHead(cCell) {
  var pName = myApp.pNameArray[cCell];
  var heading = document.getElementById("playerName_Head");
  heading.innerHTML = pName;
}

// controls which of the left/right arrow are displayed in the thickbox
function displayArrows(cCell) {
  var prev_but = document.getElementById("prev_button");
  var next_but = document.getElementById("next_button");
  var pl_array = myApp.pArray;
  if (cCell === 0) {
    prev_but.className = "hidden";
  } else {
    prev_but.className = "thickbox prev";
  }

  if (cCell === (pl_array.length - 1)) {
    next_but.className = "hidden";
  } else {
    next_but.className = "thickbox next";
  }
}

function hasBeenVoted(player_id) {
  var aVoted = getElementsByClassName('aVoted');
  if (aVoted.length > 0) {
    for (var i = 0; i < aVoted.length; i++) {
      var tempEl = aVoted[i];
      var tempVar = tempEl.id;
      var tempArr = tempVar.split('_');
      var v_id = tempArr[1];
      if (v_id == player_id) {
        return true;
        break;
      }
    }
  }
  return false;
}

function ajaxInsert(el){
  var elID = el.id;
  var splitArr = elID.split('_');
  var player_id = splitArr[1];
  var squad_id = splitArr[2];
  var count_type = splitArr[0];

  if ($.browser.safari) {
    var cook = myApp.pHash.getItem(player_id);
    var hasVoted = hasBeenVoted(player_id);

    if ((cook == undefined) && (!myApp.ajaxActive) && (!hasVoted)) {
      $.ajax({
        beforeSend: function(){
          myApp.ajaxActive = true;
          //createCookie(player_id + '_' + squad_id + '_cookie', count_type, 100);
        },
        type: "POST",
        url: "update.jsp",
        data: "player_id="+ player_id +"&squad_id="+ squad_id + "&type="+ count_type,
        dataType: "html",
        success : function(msg) {
          myApp.ajaxActive = false;
          afterAjaxSuccess(count_type, player_id, squad_id, msg);
        },
        error : function() {
          myApp.ajaxActive = false;
          //eraseCookie(player_id + '_' + squad_id + '_cookie');
        }
      });
    }
  } else {
    var cook = readCookie(player_id + '_' + squad_id + '_cookie');
    if ((!cook) && (!myApp.ajaxActive)) {
      $.ajax({
        beforeSend: function(){
          myApp.ajaxActive = true;
          createCookie(player_id + '_' + squad_id + '_cookie', count_type, 100);
        },
        type: "POST",
        url: "update.jsp",
        data: "player_id="+ player_id +"&squad_id="+ squad_id + "&type="+ count_type,
        dataType: "html",
        success : function(msg) {
          myApp.ajaxActive = false;
          afterAjaxSuccess(count_type, player_id, squad_id, msg);
        },
        error : function() {
          myApp.ajaxActive = false;
          eraseCookie(player_id + '_' + squad_id + '_cookie');
        }
      });
    }
  }
  return false;
}

function afterAjaxSuccess(cType, player, squad, results) {
  var keepBut = document.getElementById("keep_" + player + "_" + squad);
  var tradeBut = document.getElementById("trade_" + player + "_" + squad);
  var keepPerc = document.getElementById("keep_perc_" + player + "_" + squad);
  var tradePerc = document.getElementById("trade_perc_" + player + "_" + squad);
  var keepShade = document.getElementById("keep_shade_" + player + "_" + squad);
  var tradeShade = document.getElementById("trade_shade_" + player + "_" + squad);
  var vType = document.getElementById("vType");
  var voteArr = results.split('+');
  var keepCount = voteArr[0];
  var tradeCount = voteArr[1];

  keepPerc.innerHTML = keepCount;
  tradePerc.innerHTML = tradeCount;

  if (($.browser.msie) && (parseInt(jQuery.browser.version) == 7)) {
    $("#" + keepShade).attr("width", keepCount + "%");
    $("#" + tradeShade).attr("width", tradeCount + "%");
  } else {
    keepShade.attributes.getNamedItem("width").value = keepCount + "%";
    tradeShade.attributes.getNamedItem("width").value = tradeCount + "%";
  }

  if ($.browser.safari) {
    if (cType == 'keep') {
      myApp.pHash.setItem(player, 'keep');
      tradeBut.className = 'trade_btn trade_unpressed';
      keepBut.className = 'keep_btn keep_pressed aVoted';
      vType.value = 'keep';
    } else if (cType == 'trade') {
      myApp.pHash.setItem(player, 'trade');
      tradeBut.className = 'trade_btn trade_pressed aVoted';
      keepBut.className = 'keep_btn keep_unpressed';
      vType.value = 'trade';
    }
  } else {
    if (cType == 'keep') {
      tradeBut.className = 'trade_btn trade_unpressed';
      keepBut.className = 'keep_btn keep_pressed';
    } else if (cType == 'trade') {
      tradeBut.className = 'trade_btn trade_pressed';
      keepBut.className = 'keep_btn keep_unpressed';
    }
  }
}