///////////////////////////////////////////////////////////////////////////
/**
 * Override the default Element.hide and show behavior to allow for the
 * element to not exist
 */
Object.extend(Element, {
  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      if (element)  {
          element.style.display = 'none';
      }
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      if (element)  {
          element.style.display = '';
      }
    }
  }
});

///////////////////////////////////////////////////////////////////////////
/*
   name - name of the cookie
   value - value of the cookie
   [expires] - expiration date of the cookie
     (defaults to end of current session)
   [path] - path for which the cookie is valid
     (defaults to path of calling document)
   [domain] - domain for which the cookie is valid
     (defaults to domain of calling document)
   [secure] - Boolean value indicating if the cookie transmission requires
     a secure transmission
   * an argument defaults when it is assigned null as a placeholder
   * a null placeholder is not required for trailing omitted arguments
*/
function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + encodeURIComponent(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

/*
  name - name of the desired cookie
  return string containing value of specified cookie or false
  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 decodeURIComponent(dc.substring(begin + prefix.length, end));
}

/*
   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)
   path and domain default if assigned null or omitted if no explicit
     argument proceeds
*/
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";
  }
}

function initializeCookie(cookieName, value, expire)  {
    var cookieData = getCookie(cookieName);
    
    if (expire == null)  {
        var expire = new Date();
        expire.setFullYear("2099", "12", "31");
    }

    if (cookieData == null)  {
        // no cookie present
        saveToCookie(cookieName, value, expire, '/');
    }
}

/*
 * saves a value to a cookie, overwriting anything that may or 
 * may not already be in the cookie.
 */
function saveToCookie(cookieName, val, expire)  {
    if (expire == null)  {
        var expire = new Date();
        expire.setFullYear("2099", "12", "31");
    }
    
    setCookie(cookieName, val, expire, '/');
}

/*
 * appends value to the end of the existing data in the cookie
 */
function appendToCookie(cookieName, val, delim, expire)  {
    // get current cookie data and append
    var current = getCookie(cookieName);
    
    if (delim == null)  {
        delim = " ";
    }

    if (expire == null)  {
        var expire = new Date();
        expire.setFullYear("2099", "12", "31");
    }
    if (current == "")  {
        setCookie(cookieName, val, expire, '/');
    }
    else  {
        setCookie(cookieName, current + delim + val, expire, '/');
    }
}

function browserAcceptsCookies()  {
    setCookie("acceptance-test", "test");
    if (getCookie("acceptance-test") == "test")  {
        deleteCookie("acceptance-test");
        return true;
    }
    else  {
        return false;
    }
}


function isNullOrJustSpaces(s){
  if(s == ""){
      return 1;
  }else{
    var m = /^ +$/.exec(s);
    if(m){
      return 1;
    }else{
      return 0;
    }
  }
}

// add a dedupe function to the Array object
Array.prototype.dedupe = function () {
    var temp = new Array();
    this.sort();

    for (i = 0; i < this.length; i++) {
        if (this[i] == this[i + 1]) {
            continue;
        }
        
        temp[temp.length] = this[i];
    }
    
    return temp;
} 

// From A List Apart -- accessible popups 
// -------------------------------------
var _POPUP_FEATURES = "resizable=yes, scrollbars=yes, location=0, " +
    "statusbar=0, menubar=0, width=400, height=300";

function isUndefined(a) {
    return typeof a == 'undefined';
} 

function raw_popup(url, target, features) {
    if (isUndefined(features)) {
        features = _POPUP_FEATURES;
    }

    if (isUndefined(target)) {
        target = '_blank';
    }
    
    var theWindow = window.open(url, target, features);
    theWindow.focus();
    
    return theWindow;
}

function link_popup(src, features) {
    return raw_popup(src.getAttribute('href'), 
        src.getAttribute('target') || '_blank', features);
}
// -----------------------------------------
// END From A List Apart 

var base = {
    escape_javascript: function(str)  {
      var safe = str.replace(/</,'&lt;').replace(/>/,'&gt;').
                replace(/'/,'\'').replace(/"/,'\"');
      return safe;
    }
};