// Author: aibrahim@adlucent.com

/**
 * This function returns a parameter value from the URL
 * It returns null if the parameter is not found.
 * The functions only handles unescaping spaces for now.
 */
function getUrlParam(paramName) {
  var paramsStr = document.location.search;

  if (paramsStr.length > 1) {
    // Get rid of initial "?"
    paramsStr = paramsStr.substring(1);
    // Separate parameters
    var params = paramsStr.split("&");
    for (var i = 0; i < params.length; i++) {
      // Separate parameter name and parameter value
      paramToks = params[i].split("=");
      if (paramToks.length > 1) {
        var paramKey = paramToks[0];
        if (paramKey == paramName) {
          var paramVal = paramToks[1];
          // Unescape spaces
          paramVal = paramVal.replace(/\+/g, " ");
          paramVal = paramVal.replace(/%20/g, " ");
          return paramVal;
        }
      }
    }
  }

  return null; // param not found
}

/**
 *   name - name of the cookie
 *   value - value of the cookie
 *   [days] - number of days to expiration date of the cookie,
 *   null indicates a session cookie.
 *   0 indicates a cookie should not be used.
 *   [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 setCookieByDays(name, value, days, path, domain, secure) {
  if (days != 0) {
    // Calculate expiration date
    var exp = null;
    if (days != null) {
      exp = new Date();
      exp.setTime(exp.getTime() + days * (24 * 60 * 60 * 1000)); 
    }
    setCookie(name, value, exp, path, domain, secure);
  }
}

// Code for cookies
// taken from http://www.webreference.com/js/column8/functions.html

/**
 *   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 + "=" + escape(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 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));
}


/**
 * 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";
  }
}

/**
 * date - any instance of the Date object
 * Hand all instances of the Date object to this function for "repairs".
 */
function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}
