﻿/*****************

  (c) 2006 Q42 B.V.

  The contents of this file, partially or in whole, may not be reproduced
  without prior written permission by Q42 B.V.

*****************/

function Favorites()
{
  Spif.DOMEvents.attach(window, "load", this.doLoad, this);
}

Favorites.prototype = {

  doLoad: function() {
    Spif.DOMEvents.attach(document, "click", favorites.doClick);
    favorites.updateFavorites(true);
  },

  updateFavorites: function(first) {
    // check for a cookie and put the count in the "favorites" link at the top if it exists
    var extramenu = document.getElementById('extramenu');
    if (!extramenu) return;
    var elFavs = extramenu.getElementsByTagName('li')[0].getElementsByTagName('a')[0];
    var regex = /[0-9]+/g;
    if (Cookie.exists("favorites")) {
      var cookie = Cookie.read("favorites");

      // Check if a favorites cookie from the old site is used
      if (cookie.indexOf("#") != -1) {
        Cookie.remove("favorites"); // Remove the cookie
        if (first) elFavs.innerHTML += " (0)";
        else elFavs.innerHTML.replace(regex, 0);
      }
      else // Regular favorites cookie is found
      {
        cookie = cookie.substring(1, cookie.length);
        var favs = cookie.indexOf("|") != -1 ? cookie.split("|") : [cookie];
        // put class=added on all the links that are in the cookie
        if (cookie != "") {
          for (var i = 0; i < favs.length; i++) {
            try {
              document.getElementById('add-to-favorites_' + favs[i].split(";")[0]).className += " added";
              document.getElementById('add-to-favorites_' + favs[i].split(";")[0]).innerHTML = resources.messages.favorites.already_added;
            }
            catch (e) { }
          }
          if (first) elFavs.innerHTML += " (" + favs.length + ")";
          else elFavs.innerHTML.replace(regex, favs.length);
        }
        else {
          if (first) elFavs.innerHTML += " (0)";
          else elFavs.innerHTML.replace(regex, 0);
        }
      }
    }
    else {
      if (first) elFavs.innerHTML += " (0)";
      else elFavs.innerHTML.replace(regex, 0);
    }
  },

  // determine whether to add or remove a cookie based on the element classname
  doClick: function(e) {
    el = e.srcElement || e.target;
    if (/add-to-favorites\b/.test(el.className) && !/\badded\b/.test(el.className)) {
      favorites.addItemToFavs(el);

      if (e.preventDefault)
        e.preventDefault();

      return false;
    }

    if (/\bremove-from-favorites\b/.test(el.className)) {
      favorites.removeItemFromFavs(el);

      if (e.preventDefault)
        e.preventDefault();

      return false;
    }

    if (/\badded/.test(el.className)) {
      el.blur();
      if (e.preventDefault)
        e.preventDefault();
      return false;
    }
  },

  // Add to favorites when you click "add to favorites"
  // Write the id and code from the link to a cookie
  addItemToFavs: function(el) {
    var id = el.id.split('_')[1];
    var code = el.className.replace(/result-/, '').replace(/add-to-favorites code-/, '');

    if (!Cookie.isSupported()) {
      alert(resources.messages.favorites.no_cookies);
      return false;
    }

    // if the ID is already in the cookie, don't do anything (shouldn't happen)
    var regex = new RegExp("\\|" + id);
    if (regex.test(Cookie.read("favorites"))) return false;

    Cookie.write('favorites', Cookie.read('favorites') + '|' + id + ";" + code, (60 * 60 * 24 * 365), '/', '', 0);
    favorites.updateFavoritesButton(1);
    el.className += ' added beforeAnimation morph-duration1500';
    el.innerHTML = resources.messages.favorites.already_added;
    Spif.ClassNameAbstraction.replace(el, 'beforeAnimation', 'afterAnimation');
    el.blur();

    if (Cookie.exists("vswebauthtoken")) {
      var url = "/MyVSClient/ExecuteFunction.aspx";
      url += "?function=AddFavorite";
      url += "&param1=" + id;
      url += "&param2=" + code;
      url += "&nocache=" + new Date().getTime();
      xmlhttp.request(url, null, false, "AddFavorite", false);
    }

    return false;
  },

  removeItemFromFavs: function(el) {
    var id = el.id.split('_')[1];
    var code = el.className.replace(/result-/, '').replace(/remove-from-favorites code-/, '');

    if (!Cookie.isSupported()) {
      alert(resources.messages.favorites.no_cookies);
      return false;
    }

    // remove the favorite from the cookie
    var cookie = Cookie.read("favorites");
    var regex = new RegExp("\\|" + id + ";" + code);

    cookie = cookie.replace(regex, '');
    Cookie.write('favorites', cookie, (60 * 60 * 24 * 365), '/', '', 0);

    // update the link at the top of the page
    favorites.updateFavoritesButton(-1);

    // remove the entire result from the DOM
    var removeEl = document.getElementById('result_' + id);
    removeEl.parentNode.removeChild(removeEl);
    var removeSeperator = document.getElementById('seperator_' + id);
    removeSeperator.parentNode.removeChild(removeSeperator);
    var removeTable = document.getElementById('table_' + + id);
    removeTable.parentNode.removeChild(removeTable);

    if (Cookie.exists("vswebauthtoken")) {
      if (Cookie.exists("vswebauthtoken")) {
        var url = "/MyVSClient/ExecuteFunction.aspx";
        url += "?function=DeleteFavorite";
        url += "&param1=" + id;
        url += "&param2=" + code;
        url += "&nocache=" + new Date().getTime();
        xmlhttp.request(url, null, false, "DeleteFavorite", false);
      }
    }

    return false;
  },

  updateFavoritesButton: function(amount) {
    var el = document.getElementById('extramenu').getElementsByTagName('li')[0].getElementsByTagName('a')[0];
    var regex = /[0-9]+/g;
    switch (amount) {
      case 0:
        el.innerHTML = el.innerHTML.replace(regex, 0);
        break;
      case 1:
        var currentAmount = el.innerHTML.match(regex)[0];
        if (currentAmount == 0 && amount == -1)
          break;
        el.innerHTML = el.innerHTML.replace(regex, parseInt(currentAmount) + amount);
        break;
      case -1:
        var currentAmount = el.innerHTML.match(regex)[0];
        if (currentAmount == 0 && amount == -1)
          break;
        el.innerHTML = el.innerHTML.replace(regex, parseInt(currentAmount) + amount);
        break;
      default:
        break;
    }
  }
};
var favorites = new Favorites();

