//For example, to use this function to set a cookie with no expiry date:
//set_cookie ( "username", "John Smith" );

//To set a cookie with an expiry date of 15 Feb 2003:
//set_cookie ( "username", "John Smith", 2003, 01, 15 );

//To set a secure cookie with an expiry date and a domain of elated.com, but no path:
//set_cookie ( "username", "John Smith", 2003, 01, 15, "","elated.com", "secure" );

function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure ) {
  var cookie_string = name + "=" + escape ( value );

  if ( exp_y )
  {
    var expires = new Date ( exp_y, exp_m, exp_d );
  } else {
    // by default, never expire
    var expires = new Date ( 2100, 1, 1 );
  } 

  cookie_string += "; expires=" + expires.toGMTString();

  if (!path)
  {
    path = "/";
  }
  cookie_string += "; path=" + escape ( path );

  if ( domain )
    cookie_string += "; domain=" + escape ( domain );
  
  if ( secure )
    cookie_string += "; secure";
  document.cookie = cookie_string;
}

//To use this function, just pass in the name of the cookie you would like to delete - for example:
//delete_cookie ( "username" );

function delete_cookie ( cookie_name )  {
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

// For example, to retrieve the value of the username cookie:
//  var x = get_cookie ( "username" );
function get_cookie ( cookie_name ) {
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );

  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}


function get_forced_reg_link(trial_link
    , forced_reg_link
    , tracking_enabled
    , action_tracking_cookie_name
    , max_allowed_before_forced_reg
    , is_logged_in
  ){
  var link, numplayed;
  if (tracking_enabled) {
    if (is_logged_in){
      delete_cookie(action_tracking_cookie_name);
      link = trial_link;
    } else {
      numplayed = get_cookie(action_tracking_cookie_name);
      if (!numplayed){
        numplayed = 0;
      }
      numplayed++;
      set_cookie ( action_tracking_cookie_name, numplayed);
      if (numplayed > max_allowed_before_forced_reg){
        link = forced_reg_link;
      } else {
        link = trial_link;
      }
    }
  } else {
    link = trial_link;
  }
  return link;
}

function get_agegate_trial_link(trial_link
    , forced_reg_link
    , tracking_enabled
    , action_tracking_cookie_name
    , max_allowed_before_forced_reg
    , is_logged_in
    , products_id
    , age_gate
  ){
  var link;
  link = get_forced_reg_link(trial_link
      , forced_reg_link
      , tracking_enabled
      , action_tracking_cookie_name
      , max_allowed_before_forced_reg
      , is_logged_in
    );
  link = age_gate  + "?products_id=" + products_id + "&action=age_check&goto=" + escape(link);
  return link;
}

function download_trial(trial_link
    , forced_reg_link
    , tracking_enabled
    , action_tracking_cookie_name
    , max_allowed_before_forced_reg
    , is_logged_in
  ){
  var link;
  link = get_forced_reg_link(as_build_download_link(trial_link)
      , forced_reg_link
      , tracking_enabled
      , action_tracking_cookie_name
      , max_allowed_before_forced_reg
      , is_logged_in
    );
  window.location.href = link;
}

function download_agegate_trial(trial_link, forced_reg_link, tracking_enabled
    , action_tracking_cookie_name, max_allowed_before_forced_reg
    , is_logged_in, products_id  , age_gate  
  ){
  var link;
  link = get_agegate_trial_link(as_build_download_link(trial_link)
      , forced_reg_link
      , tracking_enabled
      , action_tracking_cookie_name
      , max_allowed_before_forced_reg
      , is_logged_in
      , products_id
      , age_gate
    );
  window.location.href = link;
}

function as_build_download_link(link) {
  var t = get_cookie('_t');
  if (!t) {
    return link;
  }
  t = 'tracking=' + escape(t);
  if (link.indexOf('?') == -1) {
    link += '?' + t;
  } else {
    link += '&' + t;
  }
  return link;
}

