var fk_alerts = false,
    fk_currentTab = 0,
    fk_currentSubTab = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    fk_pageTitleBase = '',
    fk_loadedTab = [],
    fk_savedForm = [],
    fk_loadingContent = 'Loading content...',
    fk_results = 'show',
    fk_withForm = 0,
    fk_withRating = 'talent',
    fk_withSkills = 'current',
    fk_withMfSkills = 0,
    fk_ntPlayersShow = '',
    fk_specialString = null;

function fk_newPage(tab, pageTitle, loadTabs) {
  fk_currentTab = tab;
  fk_pageTitleBase = pageTitle;
  if (loadTabs) {
    $('main-content').update(fk_loadingContent);
    fk_updateData(loadTabs + '&tab=' + fk_currentTab + '&ajax=2', null);
  }
}

function fk_loadContent(pars, tab, reload) {
  if (typeof fk_liveViewer != 'undefined' && fk_liveViewer.get('running')) {
    clearTimeout(liveTimer);
    fk_liveViewer.get('running') = false;
  }
  var loaded = 0, mainContent = $('main-content');
  fk_loadedTab[fk_currentTab] = mainContent.innerHTML + ' ';
  fk_saveForms(fk_currentTab);
  
  if (fk_loadedTab[tab] && !reload) {
    loaded = 1;
    mainContent.update(fk_loadedTab[tab]);
    fk_onComplete();
  } else {
    if (reload) {
      if (reload != 1) {
        pars += (pars.length > 0 ? '&' : '') + $(reload).serialize();
      }
    }
    mainContent.update(fk_loadingContent);
    var myAjax = new Ajax.Updater('main-content',
                                  '?',
                                  { method: 'post',
                                    evalScripts: true,
                                    parameters: pars,
                                    onSuccess: function (transport, json) {
                                      if (fk_alerts) {
                                        alert('fk_loadContent() response: ' + transport.responseText); // Used to be able to see the error output for this type of server request.
                                      }
                                      
                                      var str;
                                      
                                      if (json.js) {
                                        var length = json.js.length,
                                            head = $$("head")[0],
                                            child = head.childNodes,
                                            i, j;
                                        for (i = 0; i < length; i++) {
                                          var numChild = child.length,
                                              found = false;
                                          for (j = 0; j < numChild; j++) {
                                            if (child[j].type == "text/javascript") {
                                              if (child[j].src == json.js[i]) {
                                                found = true;
                                                break;
                                              }
                                            }
                                          }
                                          if (!found) {
                                            var newScript = document.createElement('script');
                                            newScript.type = 'text/javascript';
                                            newScript.src = json.js[i];
                                            head.appendChild(newScript);
                                          }
                                        }
                                      }
                                      if (json.css) {
                                        var length = json.css.length,
                                            head = $$('head')[0],
                                            child = head.childNodes,
                                            i, j;
                                        for (i = 0; i < length; i++) {
                                          var numChild = child.length,
                                              found = false;
                                          for (j = 0; j < numChild; j++) {
                                            if (child[j].type == "text/css") {
                                              if (child[j].href == json.css[i]) {
                                                found = true;
                                                break;
                                              }
                                            }
                                          }
                                          if (!found) {
                                            var cssNode = document.createElement('link');
                                            cssNode.type = 'text/css';
                                            cssNode.rel = 'stylesheet';
                                            cssNode.href = json.css[i];
                                            cssNode.media = 'screen';
                                            head.appendChild(cssNode);
                                          }
                                        }
                                      }
                                      if (json.money) {
                                        $('club-money').update(json.money.amount);
                                      }
                                      if (json.content) {
                                        $(json.content.id).update(json.content.html);
                                        if (json.content.reference && json.content.container) {
                                          $(json.content.container).style.height = $(json.content.reference).offsetHeight + 'px';
                                        }
                                      }
                                      if (json.redirect) {
                                        mainContent.update(fk_loadingContent);
                                        str = '?loc=' + json.redirect.loc;
                                        if (json.redirect.error) {
                                          str += '&error=' + json.redirect.error;
                                        }
                                        if (fk_alerts) {
                                          alert(str); 
                                        }
                                        window.location = str;
                                      }
                                      if (json.initiateLoadTabs) {
                                        str = json.initiateLoadTabs.loadTabs + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
                                        if (fk_alerts) {
                                          alert('fk_loadContent initiateLoadTabs');
                                          alert(str);
                                        }
                                        fk_updateData(str, null);
                                      }
                                      if (json.loadTab) {
                                        str = 'loc=' + json.loadTab.loc + '&ajax=1';
                                        if (fk_alerts) {
                                          alert('fk_loadContent loadTab');
                                          alert(str);
                                        }
                                        $('main-content').update(fk_loadingContent);
                                        fk_loadContent(str, fk_currentTab, 1);
                                      }
                                      if (json.unloadTabs) {
                                        if (fk_alerts) {
                                          alert('fk_loadContent unloadTabs');
                                        }
                                        var tabs = json.unloadTabs.tabs,
                                            length = tabs.length,
                                            i;
                                        for (i = 0; i < length; i++) {
                                          fk_loadedTab[tabs[i]] = null;
                                          fk_savedForm[tabs[i]] = null;
                                        }
                                      }
                                      if (json.switchTab) {
                                        str = '?loc=' + json.switchTab.loc + '&ajax=1';
                                        if (fk_alerts) {
                                          alert(str); 
                                        }
                                        fk_loadContent(str, json.switchTab.tab, 1);
                                        fk_loadedTab[json.switchTab.unload] = null;
                                        fk_savedForm[json.switchTab.unload] = null;
                                      }
                                      if (json.updateTabs) {
                                        if (fk_alerts) {
                                          alert('fk_loadContent updateTabs');
                                        }
                                        var length = json.updateTabs.tab.length,
                                            tab,
                                            link,
                                            i;
                                        for (i = 0; i < length; i++) {
                                          tab = json.updateTabs.tab[i];
                                          link = $(tab.id);
                                          link.href = tab.url;
                                          link.onclick = new Function(tab.action);
                                        }
                                        length = fk_loadedTab.length;
                                        for (i = 0; i < length; i++) {
                                          fk_loadedTab[i] = null;
                                        }
                                        length = fk_savedForm.length;
                                        for (i = 0; i < length; i++) {
                                          fk_savedForm[i] = null;
                                        }
                                      }
                                      if (json.specialString) {
                                        fk_specialString = json.specialString.str;
                                      }
                                    },
                                    onComplete: function(transport) {
                                      fk_onComplete();
                                    },
                                    onFailure: function (transport, json) {
                                      if (json.redirect) {
                                        mainContent.update(fk_loadingContent);
                                        str = '?loc=' + json.redirect.loc + '&error=' + json.redirect.error;
                                        if (fk_alerts) {
                                          alert(str); 
                                        }
                                        window.location = str;
                                      }
                                    }
                                  });
  }
  $('main-tabs_0').blur();
  if (tab >= 0) {
    var tabs = $$('.tab-active'),
        length = tabs.length,
        e, i;
    for (i = 0; i < length; i++) {
      e = tabs[i];
      if (e.id != ('main-tabs_' + tab) && e.id != ('footer-tabs_' + tab)) {
        e.addClassName('tab-hidden').removeClassName('tab-active');
      }
    }
    $('main-tabs_' + tab).addClassName('tab-active').removeClassName('tab-hidden');
    if ($('main-tabs_' + tab).hasClassName('hidden')) {
      $('main-tabs_' + tab).removeClassName('hidden');
    }
                                      
    $('footer-tabs_' + tab).addClassName('tab-active').removeClassName($('footer-tabs_' + tab), 'tab-hidden');
    fk_currentTab = tab;
    if (loaded) {
      fk_updateForms(tab);
    }
    document.title = fk_pageTitleBase + $('main-tabs_' + tab + '_name').innerHTML;
    $('blue-nav').update(document.title.replace(/ - /g, " &raquo; "));
    if (fk_ntPlayersShow != '') {
      fk_changeNtPlayersTab(false);
    }
    if (typeof fk_liveViewer != 'undefined' && fk_liveViewer.get('tab') == fk_currentTab && !fk_liveViewer.get('running')) {
      fk_liveViewer.get('running') = true;
      divScroll.activeScroll(true);
      liveTimer = setTimeout("fk_livePlay()", liveTimeout * liveTimeoutSpeed);
    }
  }
}

function fk_updateData(pars, form) {
  if (form) {
    if (form != 1) {
      pars += (pars.length > 0 ? '&' : '') + $(form).serialize();
    }
  }

  var myAjax = new Ajax.Request('?',
                                { method: 'post',
                                  parameters: pars,
                                  onSuccess: function (transport, json) {
                                    if (fk_alerts) {
                                      alert('fk_updateData() response: ' + transport.responseText); // Used to be able to see the error output for this type of server request.
                                    }
                                    
                                    var str;

                                    if (json.js) {
                                      var length = json.js.length,
                                          head = $$("head")[0],
                                          child = head.childNodes,
                                          i, j;
                                      for (i = 0; i < length; i++) {
                                        var numChild = child.length,
                                            found = false;
                                        for (j = 0; j < numChild; j++) {
                                          if (child[j].type == "text/javascript") {
                                            if (child[j].src == json.js[i]) {
                                              found = true;
                                              break;
                                            }
                                          }
                                        }
                                        if (!found) {
                                          var newScript = document.createElement('script');
                                          newScript.type = 'text/javascript';
                                          newScript.src = json.js[i];
                                          head.appendChild(newScript);
                                        }
                                      }
                                    }
                                    if (json.css) {
                                      var length = json.css.length,
                                          head = $$("head")[0],
                                          child = head.childNodes,
                                          i, j;
                                      for (i = 0; i < length; i++) {
                                        var numChild = child.length,
                                            found = false;
                                        for (j = 0; j < numChild; j++) {
                                          if (child[j].type == "text/css") {
                                            if (child[j].href == json.css[i]) {
                                              found = true;
                                              break;
                                            }
                                          }
                                        }
                                        if (!found) {
                                          var cssNode = document.createElement('link');
                                          cssNode.type = 'text/css';
                                          cssNode.rel = 'stylesheet';
                                          cssNode.href = json.css[i];
                                          cssNode.media = 'screen';
                                          head.appendChild(cssNode);
                                        }
                                      }
                                    }
                                    if (json.removeBookmark) {
                                      var table = $(json.removeBookmark.table);
                                      table.deleteRow($(json.removeBookmark.id).rowIndex);  
                                      table.deleteRow($(json.removeBookmark.id + "_dots").rowIndex);  
                                    }
                                    /* remove this av use json.confirm instead? */
                                    if (json.bidConfirm) {
                                      if (json.bidConfirm.type == 'alert') {
                                        alert(json.bidConfirm.alert);
                                      } else {
                                        if (confirm(json.bidConfirm.confirm)) {
                                          str = '?loc=' + json.bidConfirm.loc + '&bidvalue=' + json.bidConfirm.bidValue + '&agent_avg=' + json.bidConfirm.agentAvg + '&agent_max=' + json.bidConfirm.agentMax + '&control_id=' + json.bidConfirm.controlId + '&ajax=1';
                                          if (fk_alerts) {
                                            alert(str); 
                                          }
                                          fk_loadContent(str, json.bidConfirm.tab, 1);
                                        }
                                      }
                                    }
                                    
                                    
                                    if (json.confirm) {
                                      if (json.confirm.alert) {
                                        alert(json.confirm.alert);
                                      } else {
                                        if (confirm(json.confirm.confirm)) {
                                          str = '?loc=' + json.confirm.loc;
                                              
                                          if (json.confirm.params) {
                                            $H(json.confirm.params).keys().each(function (key) {
                                              str += '&' + key + '=' + json.confirm.params[key];
                                            });
                                          }
                                          
                                          if (json.confirm.ajax) {
                                            str += '&ajax=' + json.confirm.ajax;
                                          }
                                          
                                            
                                          if (fk_alerts) {
                                            alert('confirm:\n\n' + str); 
                                          }
                                          
                                          
                                          switch (json.confirm.ajax) {
                                            case 1:
                                              fk_loadContent(str, json.confirm.tab, (json.confirm.form ? json.confirm.form : 1));
                                              break;
                                            case 2:
                                              fk_updateData(str, (json.confirm.form ? json.confirm.form : 1));
                                              break;
                                            default:
                                              $('main-content').update(fk_loadingContent);
                                              window.location = str;
                                              break;
                                          }
                                        } else {
                                          if (json.confirm.deny) {
                                            str = '?loc=' + json.confirm.deny.loc;
                                                
                                            if (json.confirm.deny.params) {
                                              $H(json.confirm.deny.params).keys().each(function (key) {
                                                str += '&' + key + '=' + json.confirm.deny.params[key];
                                              });
                                            }
                                            
                                            if (json.confirm.deny.ajax) {
                                              str += '&ajax=' + json.confirm.deny.ajax;
                                            }
                                            
                                            if (fk_alerts) {
                                              alert('confirm (deny):\n\n' + str); 
                                            }
                                            
                                            switch (json.confirm.deny.ajax) {
                                              case 1:
                                                fk_loadContent(str, json.confirm.deny.tab, (json.confirm.form ? json.confirm.form : 1));
                                                break;
                                              case 2:
                                                /* naz: test adding form */
                                                fk_updateData(str, (json.confirm.form ? json.confirm.form : 1));
                                                break;
                                              default:
                                                $('main-content').update(fk_loadingContent);
                                                window.location = str;
                                                break;
                                            }
                                          }
                                        }
                                      }
                                    }
                                    if (json.money) {
                                      $('club-money').update(json.money.amount);
                                    }
                                    if (json.content) {
                                      $(json.content.id).update(json.content.html);
                                      if (json.content.reference && json.content.container) {
                                        $(json.content.container).style.height = $(json.content.reference).offsetHeight + 'px';
                                      }
                                    }
                                    if (json.contentContent) {
                                      $(json.contentContent.id).update(transport.responseText);
                                      if (json.contentContent.reference && json.contentContent.container) {
                                        $(json.contentContent.container).style.height = $(json.contentContent.reference).offsetHeight + 'px';
                                      }
                                    }
                                    if (json.killLink) {
                                      var obj = $(json.killLink.id);
                                      obj.addClassName('dead-link');
                                      obj.onclick = function () { return false; };
                                      //obj.href = 'javascript:void(0);';
                                    }
                                    if (json.messages) {
                                      fk_msgAction(json.messages);
                                    }
                                    if (json.redirect) {
                                      $('main-content').update(fk_loadingContent);
                                      str = '?loc=' + json.redirect.loc;
                                      if (json.redirect.error) {
                                        str += '&error=' + json.redirect.error;
                                      }
                                      if (fk_alerts) {
                                        alert(str); 
                                      }
                                      window.location = str;
                                    }
                                    if (json.initiateLoadTabs) {
                                      str = json.initiateLoadTabs.loadTabs + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
                                      if (fk_alerts) {
                                        alert('fk_updateData initiateLoadTabs');
                                        alert(str);
                                      }
                                      $('main-content').update(fk_loadingContent);
                                      fk_updateData(str, null);
                                    }
                                    if (json.loadTabs != null) {
                                      if (fk_alerts) {
                                        alert('fk_updateData loadTabs');
                                      }
                                      var part = transport.responseText.split('{{{[[[loadTabs]]]}}}'),
                                          length = part.length,
                                          content = true,
                                          number;
                                      if (fk_alerts) {
                                        alert(part[0]); // Used to be able to see the error output for this type of server request.
                                      }
                                      for (i = 0; i < length; i++) {
                                        content = !content;
                                        if (content) {
                                          if (number == json.loadTabs) {
                                            $('main-content').update(part[i]);
                                            part[i].evalScripts();
                                          } else {
                                            fk_loadedTab[number] = part[i];
                                          }  
                                        } else {
                                          number = Number(part[i]);
                                        }
                                      }
                                    }
                                    if (json.unloadTabs) {
                                      if (fk_alerts) {
                                        alert('fk_updateData unloadTabs');
                                      }
                                      var tabs = json.unloadTabs.tabs,
                                          length = tabs.length,
                                          i;
                                      for (i = 0; i < length; i++) {
                                        fk_loadedTab[tabs[i]] = null;
                                        fk_savedForm[tabs[i]] = null;
                                      }
                                    }
                                    if (json.loadTab) {
                                      str = 'loc=' + json.loadTab.loc + '&ajax=1';
                                      if (fk_alerts) {
                                        alert('fk_updateData loadTab');
                                        alert(str);
                                      }
                                      $('main-content').update(fk_loadingContent);
                                      fk_loadContent(str, fk_currentTab, 1);
                                    }
                                    if (json.collapseExpand) {
                                      if (fk_alerts) {
                                        alert('fk_updateData collapseExpand');
                                      }
                                      var list = json.collapseExpand.list,
                                          length = list.length,
                                          i;
                                      for (i = 0; i < length; i++) {
                                        fk_collapse(list[i], json.collapseExpand.action);
                                      }
                                    }
                                    if (json.updateResultsToggle) {
                                      fk_results = json.updateResultsToggle.status;
                                      var button = $('results_toggle');
                                      button.update(json.updateResultsToggle.text);
                                      button.blur();
                                    }
                                    if (json.updateFormToggle) {
                                      fk_withForm = Number(json.updateFormToggle.status);
                                      var button = $('form_toggle');
                                      if (fk_withForm) {
                                        button.removeClassName('off');
                                        button.addClassName('on');
                                        button.update(json.updateFormToggle.text);
                                      } else {
                                        button.removeClassName('on');
                                        button.addClassName('off');
                                        button.update(json.updateFormToggle.text);
                                      }
                                      button.blur();
                                    }
                                    if (json.updateRatingToggle) {
                                      fk_withRating = json.updateRatingToggle.status;
                                      var button = $('rating_toggle');
                                      button.update(json.updateRatingToggle.text);
                                      button.blur();
                                    }
                                    if (json.updateSkillsToggle) {
                                      fk_withSkills = json.updateSkillsToggle.status;
                                      var button = $('skills_toggle');
                                      button.update(json.updateSkillsToggle.text);
                                      button.blur();
                                    }
                                    if (json.updateMfSkillsToggle) {
                                      fk_withMfSkills = Number(json.updateMfSkillsToggle.status);
                                      var button = $('mf_skills_toggle');
                                      if (fk_withMfSkills) {
                                        button.removeClassName('off');
                                        button.addClassName('on');
                                        button.update(json.updateMfSkillsToggle.text);
                                      } else {
                                        button.removeClassName('on');
                                        button.addClassName('off');
                                        button.update(json.updateMfSkillsToggle.text);
                                      }
                                      button.blur();
                                    }
                                    if (json.siteHelp) {
                                      Tip(json.siteHelp.content, TITLE, json.siteHelp.title + $('blue-nav').innerHTML, DELAY, 0, STICKY, true, CLOSEBTN, true, WIDTH, 350, FOLLOWSCROLL, true, FIX, [10, 10]);
                                    }
                                    if (json.disableSubmit) {
                                      fk_disableSubmit();
                                    }
                                    if (json.removePlayerFromLineup) {
                                      fk_removePlayerFromLineup(json.removePlayerFromLineup.player, json.removePlayerFromLineup.row, json.removePlayerFromLineup.activeChoiceClass);
                                      if (json.removePlayerFromLineup.status) {
                                        fk_updateLineupStatus(json.removePlayerFromLineup.status);
                                      }
                                    }
                                    if (json.addPlayerInLineup) {
                                      if (json.addPlayerInLineup.failed) {
                                        $('add_player').disabled = false;
                                        alert(json.addPlayerInLineup.failed);
                                      } else {
                                        fk_addPlayerInLineup(json.addPlayerInLineup.player);
                                        if (json.addPlayerInLineup.status) {
                                          fk_updateLineupStatus(json.addPlayerInLineup.status);
                                        }
                                      }
                                    }
                                    if (json.editPlayerInLineup) {
                                      if (json.editPlayerInLineup.failed) {
                                        $('edit_player').disabled = false;
                                        $('cancel_edit').disabled = false;
                                        alert(json.editPlayerInLineup.failed);
                                      } else {
                                        fk_editPlayerInLineup(json.editPlayerInLineup.player, json.editPlayerInLineup.gkTab);
                                        if (json.editPlayerInLineup.status) {
                                          fk_updateLineupStatus(json.editPlayerInLineup.status);
                                        }
                                      }
                                    }
                                    if (json.teamOrderInfo) {
                                      id = $('team-order-info');
                                      if (id.innerHTML == '') {
                                        id.update(fk_loadingContent);
                                      }
                                      id.update(json.teamOrderInfo.text);
                                    }
                                    if (json.changeSearchLeagues) {
                                      $('search-division').update(json.changeSearchLeagues.division);
                                      $('search-series').update(json.changeSearchLeagues.series);
                                      $('num-series').update(json.changeSearchLeagues.numSeries);
                                    }
                                    if (json.forumlogin) {
                                      $('username').value = json.forumlogin.username;
                                      $('password').value = json.forumlogin.password;
                                      $('forum-form').submit();
                                    }
                                    if (json.forumopen) {
                                      $('forum-form').submit();
                                    }
                                    if (json.phpbb3login) {
                                      $('username').value = json.phpbb3login.username;
                                      $('password').value = json.phpbb3login.password;
                                      $('forum-form').submit();
                                    }
                                    if (json.dutyInfo) {
                                      $('dutyInfo').update(json.dutyInfo.content);
                                    }
                                    if (json.reSearch) {
                                      if (fk_loadedTab[json.reSearch.search]) {
                                        $('main-content').update(fk_loadedTab[json.reSearch.search]);
                                        var tabs = $$('.tab-active'),
                                            length = tabs.length,
                                            e, i;
                                        for (i = 0; i < length; i++) {
                                          e = tabs[i];
                                          if (e.id != ('main-tabs_' + json.reSearch.search) && e.id != ('footer-tabs_' + json.reSearch.search)) {
                                            e.addClassName('tab-hidden').removeClassName('tab-active');
                                          }
                                        }
                                        $('main-tabs_' + json.reSearch.search).addClassName('tab-active').removeClassName('tab-hidden');
                                        $('footer-tabs_' + json.reSearch.search).addClassName('tab-active').removeClassName($('footer-tabs_' + json.reSearch.search), 'tab-hidden');
                                        fk_currentTab = json.reSearch.search;
                                        fk_updateForms(json.reSearch.search);
                                        fk_loadContent('loc=transfers.results&ajax=1', json.reSearch.results, json.reSearch.form);
                                      }
                                    }
                                    if (json.moveListItem) {
                                      var id = $(json.moveListItem.id),
                                        sibling,
                                        list,
                                        imgs;
                                      switch (json.moveListItem.dir) {
                                        case -1:
                                          sibling = id.previous();
                                          sibling.insert({before: id});
                                          break;
                                        case 1:
                                          sibling = id.next();
                                          sibling.insert({after: id});
                                          break;
                                      }
                                      
                                      list = id.up('ul').select('li[id]');
                                      [id, sibling].each(function(el){
                                          imgs = el.down('.move-arrow').descendants();
                                          imgs.each(function(img){
                                            if (el === list.first()) {
                                              if (img.hasClassName('move-arrow-up')) {
                                                img.removeClassName('move-arrow-up')
                                                   .addClassName('move-arrow-up-disabled');
                                              }
                                            } else {
                                              if (img.hasClassName('move-arrow-up-disabled')) {
                                                img.removeClassName('move-arrow-up-disabled')
                                                   .addClassName('move-arrow-up');
                                              }
                                            }
                                            
                                            if (el === list.last()) {
                                              if (img.hasClassName('move-arrow-down')) {
                                                img.removeClassName('move-arrow-down')
                                                   .addClassName('move-arrow-down-disabled');
                                              }
                                            } else {
                                              if (img.hasClassName('move-arrow-down-disabled')) {
                                                img.removeClassName('move-arrow-down-disabled')
                                                   .addClassName('move-arrow-down');
                                              }
                                            }
                                          });
                                      });
                                    }
                                    if (json.specialString) {
                                      fk_specialString = json.specialString.str;
                                    }
                                  },
                                  onComplete: function (transport) {
                                    fk_onComplete();
                                  },
                                  onFailure: function (transport, json) {
                                    if (json.redirect) {
                                      $('main-content').update(fk_loadingContent);
                                      str = '?loc=' + json.redirect.loc + '&error=' + json.redirect.error;
                                      if (fk_alerts) {
                                        alert(str); 
                                      }
                                      window.location = str;
                                    }
                                  }
                                });
}

document.observe("dom:loaded",function(){fk_onComplete();});

var fk_onComplete = function() {
  /* Placeholder */
  if (!Prototype.Browser.WebKit) {
    $$('input[placeholder]', 'textarea[placeholder]').each(function(el){
      new addPlaceholder(el);
    });
  }
  
  /* Toggle row (table, list)
    table:
      * not .no-hightlight
      * not tr th
    list:
      * not .no-hightlight
  */
  $$('table.hightlightable tr:not(.no-hightlight):not([th])', '.hightlightable li:not(.no-hightlight)').each(function(el){
    el.stopObserving('click').observe('click', function(ev){
      var clickedElement = ev.findElement();
      if (clickedElement.hasClassName('no-hightlight') || clickedElement.up('.no-hightlight'))
        /* check if clickedElement has class 'no-hightlight'
           or if a parent has class 'no-hightlight' */
        return; 
      
      /* toggles marked classes */
      if (el.hasClassName('odd'))
        el.toggleClassName('odd-marked');
      else if (el.hasClassName('even'))
        el.toggleClassName('even-marked');
      else
        el.toggleClassName('marked');
    });
  });
}

function fk_inputType(element) {
  var type = 0;
  if (element.tagName.search(/textarea/i) != -1) {
    type = 5;
  } else if (element.tagName.search(/select/i) != -1) {
    type = 6;
  } else if (element.tagName.search(/input/i) != -1) {
    if (element.getAttribute('type').search(/text/i) != -1) {
      type = 1;
    } else if (element.getAttribute('type').search(/checkbox/i) != -1) {
      type = 2;
    } else if (element.getAttribute('type').search(/radio/i) != -1) {
      type = 3;
    } else if (element.getAttribute('type').search(/hidden/i) != -1) {
      type = 4;
    } else {
      type = 0;
    }
  }
  return type;
}

function fk_saveForms(tab) {
  if (navigator.appName != "Microsoft Internet Explorer") {
    var arrForm = $('main-content').getElementsByTagName('form'),
        formLength = arrForm.length,
        arrElement,
        elementLength,
        forms = [],
        inputs,
        i, j, k;
    for (i = 0; i < formLength; i++) {
      inputs = [];
      arrElement = $(arrForm.item(i).id).getElements();
      elementLength = arrElement.length;
      for (j = 0; j < elementLength; j++) {
        switch (fk_inputType(arrElement[j])) {
        case 1:
          // text
        case 4:
          // hidden
        case 5:
          // textarea
          inputs[j] = $F(arrElement[j]);
          break;
        case 2:
          // checkbox
        case 3:
          // radio
          if ($F(arrElement[j]) == null) {
            inputs[j] = 0;
          } else {
            inputs[j] = 1;
          }
          break;
        case 6:
          // select
          if (arrElement[j].multiple) {
            inputs[j] = [];
            for (k = 0; k < arrElement[j].options.length; k++) {
              if (arrElement[j].options[k].selected) {
                inputs[j][k] = 1;
              } else  {
                inputs[j][k] = 0;
              }
            }
          } else{
            inputs[j] = arrElement[j].selectedIndex;
          }
          break;
        }
      }
      forms[i] = inputs;
    }
    fk_savedForm[tab] = forms;
  }
}

function fk_updateForms(tab) {
  if (navigator.appName != "Microsoft Internet Explorer" && fk_savedForm[tab]) {
    var arrForm = $('main-content').getElementsByTagName('form'),
        formLength = arrForm.length,
        arrElement,
        elementLength,
        i, j, k;
    for (i = 0; i < formLength; i++) {
      arrElement = $(arrForm.item(i).id).getElements();
      elementLength = arrElement.length;
      for (j = 0; j < elementLength; j++) {
        switch (fk_inputType(arrElement[j])) {
        case 1:
          // text
        case 4:
          // hidden
        case 5:
          // textarea
          arrElement[j].value = fk_savedForm[tab][i][j];
          break;
        case 2:
          // checkbox
        case 3:
          // radio
          if (fk_savedForm[tab][i][j]) {
            arrElement[j].checked = true;
          } else {
            arrElement[j].checked = false;
          }
          break;
        case 6:
          // select
          if (arrElement[j].multiple) {
            for (k = 0; k < arrElement[j].options.length; k++) {
              if (fk_savedForm[tab][i][j][k]) {
                arrElement[j].options[k].selected = true;
              } else {
                arrElement[j].options[k].selected = false;
              }
            }
          } else{
            arrElement[j].selectedIndex = fk_savedForm[tab][i][j];
          }
          break;
        }
      }
    }
  }
}

function fk_siteHelp(loc) {
  var str = 'loc=' + loc + '&site_help=' + fk_currentTab + '&ajax=2';
  if (fk_alerts) {
    alert(str); 
  }
  fk_updateData(str, null);
  return false;
}

function fk_toggleSetting(type, loc) {
  var str;
  switch (type) {
  case 'results':
    if (fk_specialString) {
      loc = fk_specialString;
    }
    str = 'loc=' + loc + '&toggle_results=' + (fk_results == 'hide' ? 'show' : 'hide') + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
    break;
  case 'form':
    str = 'loc=' + loc + '&toggle_form=' + (fk_withForm == 0 ? 1 : 0) + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
    break;
  case 'rating':
    str = 'loc=' + loc + '&toggle_rating=' + (fk_withRating == 'talent' ? 'current' : 'talent') + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
    break;
  case 'skills':
    str = 'loc=' + loc + '&toggle_skills=' + (fk_withSkills == 'potential' ? 'current' : 'potential') + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
    break;
  case 'mf_skills':
    str = 'loc=' + loc + '&toggle_mf_skills=' + (fk_withMfSkills == 0 ? 1 : 0) + '&tab=' + fk_currentTab + '&subtab=' + fk_currentSubTab[fk_currentTab] + '&ajax=2';
    break;
  }
  if (fk_alerts) {
    alert(str); 
  }
  fk_updateData(str, null);
  return false;
}

function fk_cleanNumber(elem) {
  var num = Math.abs(parseInt(elem.value));
  if (isNaN(num)) {
    elem.value = '';
  } else {
    elem.value = num;
  }
}

function placeholder(el) { 
  new addPlaceholder($(el));
}

var addPlaceholder = Class.create({
  initialize: function(element, klass){
    this.klass = klass || 'placeholder';
    this.element = $(element).store('placeholder', this);
    
    this.placeholder = this.element.getAttribute('placeholder');

    this.element.observe('focus', this.focus.bind(this));
    this.element.observe('blur', this.blur.bind(this));
    this.element.removeClassName(this.klass);
    this.element.writeAttribute('autocomplete', 'off');
    
    this.reset();
  },
  focus: function(){
    if(this.placeholder && (this.element.value == this.placeholder) && this.active) {
      this.element.value = '';
      this.element.removeClassName(this.klass);
			this.active = false;
    }
  },
  
  blur: function(){
    if(this.placeholder && this.element.value == '') {
      this.element.addClassName(this.klass);
      this.element.value = this.placeholder;
      this.active = true;
    }
  },
  
  reset: function(){
    this.focus();
    this.blur();
    return this;
  }
});


Element.addMethods('TEXTAREA', {
  autogrow: function(element){
    element = $(element);
    this.autogrowOriginalHeight = this.autogrowOriginalHeight || null;
    this.autogrowShadow = this.autogrowShadow || null;
    
    this.grow = function(){
      if (this.autogrowShadow == null){
        this.autogrowShadow = new Element('div', {
          'class':'autogrow_shadow'
        }).setStyle({
          'fontSize'      : element.getStyle('fontSize'),
          'fontFamily'    : element.getStyle('fontFamily'),
          'lineHeight'    : element.getStyle('lineHeight'),
          'paddingTop'    : element.getStyle('paddingTop'),
          'paddingRight'  : element.getStyle('paddingRight'),
          'paddingBottom' : element.getStyle('paddingBottom'),
          'paddingLeft'   : element.getStyle('paddingLeft'),
          'width'         : Math.max(element.getWidth() - 8, 0)+'px'
        });
        $$('body')[0].insert({bottom: this.autogrowShadow});
      } 
      if (this.autogrowOriginalHeight == null){
        this.autogrowOriginalHeight = parseInt(element.getStyle('minHeight'), 10) || 
                                      parseInt(element.getStyle('height'), 10) || 
                                      element.getHeight();
      }
      // Strip HTML tags
      var html = element.value;
      html = html.gsub(/(<|>)/, '')
                 .gsub(/&/,'&amp;')
                 .gsub(/"/,'&quot;')
                 .gsub(/'/,'&#039;');
    
      // IE is different, as per usual
      if (Prototype.Browser.IE) {
        html = html.gsub(/\n/, '<BR />');
      } else {
        html = html.gsub(/\n/, '<br />');
      }
      
      if (this.autogrowShadow.innerHTML != html){
        this.autogrowShadow.update(html);
        
        if (element.getHeight() < this.autogrowShadow.getHeight() || this.autogrowShadow.getHeight() < element.getHeight()){
          element.setStyle({
            height: (Math.max(this.autogrowOriginalHeight,(this.autogrowShadow.getHeight()+parseInt(this.autogrowShadow.getStyle('lineHeight'),10))))+'px'
          });
        }
      }
    }.bind(this);
    
    if (!element.hasClassName('autogrow')) {
      var grow = this.grow.bind(this);
      grow();
      element.addClassName('autogrow')
             .observe('keydown', grow)
             .observe('keyup', grow)
             .observe('keypress', grow)
             .observe('change', grow);
      
    }
    return;
  },
  autogrowShadow: null,
  autogrowOriginalHeight: null
});

function fk_addAutogrow(el) {
  return $(el).autogrow();
}

function fk_toggleActiveListItem(el) {
  el=$(el);
  if (el.tagName.toLowerCase() != 'li') el=el.up('li');
  el.addClassName('active').siblings().invoke('removeClassName', 'active');
}

function fk_toggleRow(el){
  el = $(el);
  if (el.hasClassName('odd')) {
    el.removeClassName('odd');
    el.addClassName('odd-marked');
  } else if (el.hasClassName('even')) {
    el.removeClassName('even');
    el.addClassName('even-marked');
  } else if (el.hasClassName('odd-marked')) {
    el.removeClassName('odd-marked');
    el.addClassName('odd');
  } else if (el.hasClassName('even-marked')) {
    el.removeClassName('even-marked');
    el.addClassName('even');
  } else {
    el.toggleClassName('marked');
  }
}
