// JScript File for faux Gatherer search functions
// Templated off of WotC's official Magic: The Gathering(tm) Gatherer site

// Variables.

// Expiration date - when I graduate.
var exp = new Date('Thu Jan 1 2010 00:00:00');


// Functions.

function initializebox() {
  var cookie_val = getCookie("Multiverse-Searchpane");
  if(cookie_val == 1) {
    document.getElementById('_searchbox').className = "";
    document.getElementById('_searchlink').innerHTML = "advanced >";
    deleteCookie("Multiverse-Searchpane");
    setCookie("Multiverse-Searchpane", 1, exp);
  }
}

function buildQueryString(page, set, images, rules) {
  var params = "";

  params += appendString('_nameIn', 'name');
  params += appendString('_typeIn', 'type');
  params += appendString('_textIn', 'text');
  params += appendString('_flavorIn', 'flavor');
  params += appendString('_artistIn', 'artist');
  params += appendString('_costIn', 'cost');
  params += appendString('_minpIn', 'minp');
  params += appendString('_maxpIn', 'maxp');
  params += appendString('_mintIn', 'mint');
  params += appendString('_maxtIn', 'maxt');
  params += appendString('_minccIn', 'mincc');
  params += appendString('_maxccIn', 'maxcc');
  params += appendString('_minnumIn', 'minnum');
  params += appendString('_maxnumIn', 'maxnum');
  params += appendColor();
  params += appendRarity();

  if(images == "yes") {
    params += "&images=yes";
  }

  if(rules == "yes") {
    params += "&rules=yes";
  }

  if(params != "") {
    params = params.substr(1, params.length);
    window.location.href = page + "?set=" + set + "&" + params;
  }

}


function buildQuickQueryString(page, set, images, rules) {
  var params = "";

  params += appendString('_searchIn', 'search');

  if(images == "yes") {
    params += "&images=yes";
  }

  if(rules == "yes") {
    params += "&rules=yes";
  }

  if(params != "") {
    params = params.substr(1, params.length);
    window.location.href = page + "?set=" + set + "&" + params;
  }
}


function appendString(id, argName) {
  var arg = "";
  if(document.getElementById(id).value != "") {
    arg = "&" + argName + "=" + document.getElementById(id).value;
  }
  return arg;
}


function appendColor() {
  var temp = "";
  if(document.getElementById('_monoIn').checked) {
    temp += "m";
  }
  if(document.getElementById('_goldIn').checked) {
    temp += "g";
  }
  if(document.getElementById('_hybridIn').checked) {
    temp += "h";
  }
  if(temp != "") {
    temp = "&color=" + temp;
  }
  return temp;
}


function appendRarity() {
  var temp = "";
  if(document.getElementById('_commonIn').checked) {
    temp += "C";
  }
  if(document.getElementById('_uncommonIn').checked) {
    temp += "U";
  }
  if(document.getElementById('_rareIn').checked) {
    temp += "R";
  }
  if(document.getElementById('_mythicIn').checked) {
    temp += "M";
  }
  if(temp != "") {
    temp = "&rarity=" + temp;
  }
  return temp;
}


function onTextKeyDown(event, page, set, images, rules) {
  if(event.keyCode == 13) {
    // Ensure we end all event processing.
    event.returnValue = false;
    event.cancelBubble = true;
    buildQueryString(page, set, images, rules) ;
    return event.returnValue;
  }
  return event.keyCode;
}


function onQuickTextKeyDown(event, page, set, images, rules) {
  if(event.keyCode == 13) {
    // Ensure we end all event processing.
    event.returnValue = false;
    event.cancelBubble = true;
    buildQuickQueryString(page, set, images, rules) ;
    return event.returnValue;
  }
  return event.keyCode;
}


function togglebox() {
  if(document.getElementById('_searchbox').className == "searchbox") {
    document.getElementById('_searchbox').className = "";
    document.getElementById('_searchlink').innerHTML = "advanced >";
    deleteCookie("Multiverse-Searchpane");
    setCookie("Multiverse-Searchpane", 1, exp);
  } else {
    document.getElementById('_searchbox').className = "searchbox";
    document.getElementById('_searchlink').innerHTML = "advanced +";
    deleteCookie("Multiverse-Searchpane");
    setCookie("Multiverse-Searchpane", 0, exp);
  }
}


/**
 * Sets a Cookie with the given name and value.
 *
 * name       Name of the cookie
 * value      Value of the cookie
 * [expires]  Expiration date of the cookie (default: end of current session)
 * [path]     Path where the cookie is valid (default: path of calling document)
 * [domain]   Domain where the cookie is valid
 *              (default: domain of calling document)
 * [secure]   Boolean value indicating if the cookie transmission requires a
 *              secure transmission
 */
function setCookie(name, value, expires, path, domain, secure)
{
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}


/**
 * Gets the value of the specified cookie.
 *
 * name  Name of the desired cookie.
 *
 * Returns a string containing value of specified cookie,
 *   or null if cookie does not exist.
 */
function getCookie(name)
{
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1)
    {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
    {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}


/**
 * Deletes the specified cookie.
 *
 * name      name of the cookie
 * [path]    path of the cookie (must be same as path used to create cookie)
 * [domain]  domain of the cookie (must be same as domain used to create cookie)
 */
function deleteCookie(name, path, domain)
{
    if (getCookie(name))
    {
        document.cookie = name + "=" + 
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}
