// Copyright (C) 2004-2005 InstantService, Inc. All rights reserved. 
// All content is protected under U.S. copyright laws. 
// Any unauthorized duplication, modification, or reverse-engineering of this code without express 
// written permission of InstantService, Inc. is a violation of copyright law and is subject to 
// penalty and prosecution. 

function II_getRules()
{ 
  var arrRules = II_getCookie(II_gCookieName);
  return((arrRules == null) ? new Array() : arrRules.split('^^^'));
}

function II_getTestServers()
{ 
  var arrTestServers = II_getCookie(II_gTSCookieName);
  return((arrTestServers == null) ? new Array() : arrTestServers.split(','));
}

function II_getUsingTestServers()
{
  var ii_useTestRules = false;
  var ii_arr = II_getTestServers();
  
  var ii_idx;
  for (ii_idx = 0; ii_idx < ii_arr.length; ii_idx++)
  {
    if (ii_arr[ii_idx] == document.location.host)
    {
      ii_useTestRules = true;
      break;
    }
  }
  
  return(ii_useTestRules);
}

function II_getMatchHistory()
{
  var arrMatchHistory = II_getCookie('IS_MatchHistory');
  return((arrMatchHistory == null) ? new Array() : arrMatchHistory.split('^'));
}

function II_getStoredValues()
{
  var arrStoredValues = II_getCookie('IS_StoredValues');
  return((arrStoredValues == null) ? new Array() : arrStoredValues.split(','));
}

function II_getCookie(name) 
{  
  var arg = name + "=";  
  var alen = arg.length;  
  var clen = document.cookie.length;  
  var i = 0;  

  while (i < clen) 
  {    
    var j = i + alen;    
    if (document.cookie.substring(i, j) == arg)   
    {   
      var endstr = document.cookie.indexOf (";", j);  
    
      if (endstr == -1)    
        endstr = document.cookie.length;  
 
      return unescape(document.cookie.substring(j, endstr));
    }

    i = document.cookie.indexOf(" ", i) + 1;    
    if (i == 0) break;   
  }  

  return null;
}

function II_setCookie(name, value) 
{  
  var argv = II_setCookie.arguments;  
  var argc = II_setCookie.arguments.length;  
  var expires = (argc > 2) ? argv[2] : null;  

  document.cookie = name + "=" + escape(value) + 
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
    "; path=/"  +  
    ((II_gDomain == null || II_gDomain == "") ? "" : ("; domain=" + II_gDomain));
}

function II_testCookieCapability()
{
  var result = false;

  II_setCookie('IS_TestCookie', 'test', null);
  var val = II_getCookie('IS_TestCookie');
  II_setCookie('IS_TestCookie', 'test', new Date(0));
  if (val != null && val == 'test')
    result = true;

  return(result);
}
        
function II_updateMatchHistoryCookie() 
{
  var i = j;
  var j = 0; 
  var HistoryEntry = document.location.href;

  if (document.referrer == document.location.href)
    return false;

  var arrRules        = II_getRules(); 
  var arrMatchHistory = II_getMatchHistory();

  if (arrMatchHistory.length > II_MAX_RULEMATCHLIST_SIZE - 1)
    arrMatchHistory = II_shiftMatchHistoryCookie(arrMatchHistory, II_MAX_RULEMATCHLIST_SIZE);

  if ((HistoryEntry != null) && (HistoryEntry != "undefined")) 
  {
    arrMatchHistory[arrMatchHistory.length] = ' ';

    var nMatch = -1;
    var sSearchMatch = '';

    for (i=0; i < arrRules.length; i++)
    {
      var search = II_findMatch(HistoryEntry, arrRules[i]);
      if (search.length > 0)
      {           
        if (arrMatchHistory[arrMatchHistory.length - 1].length > 1)
          arrMatchHistory[arrMatchHistory.length - 1] += '```';
          
        arrMatchHistory[arrMatchHistory.length - 1] += search;
      }
    }

    var fullList = "";
    for (j=0; j <= arrMatchHistory.length - 1; j++)
    { 
      fullList += arrMatchHistory[j];
      if (j < arrMatchHistory.length - 1)
        fullList += "^";
    }

    II_setCookie('IS_MatchHistory', fullList, II_COOKIE_EXPIRATION);

    var pages = II_getStoredValue("PageCountSinceLastShown");
    pages = ((pages == '') ? 1 : parseInt(pages) + 1);
    II_updateStoredValue("PageCountSinceLastShown", pages);
  }

  return true;
}

function II_updateStoredValue(name, value)
{
  var updated = false;
  var arrStoredValues = II_getCookie('IS_StoredValues');

  if (arrStoredValues == null)
    arrStoredValues = new Array();
  else
    arrStoredValues = arrStoredValues.split(',');

  for (var idx=0; idx < arrStoredValues.length; idx++)
  {
    var arrNameValue = arrStoredValues[idx].split('`');
    if (arrNameValue[0] == name)
    {
      updated = true;
      arrStoredValues[idx] = name + '`' + value;
    }
  }

  if (!updated)
    arrStoredValues[arrStoredValues.length] = name + '`' + value;

  II_setCookie('IS_StoredValues', arrStoredValues, II_COOKIE_EXPIRATION);
}

function II_getStoredValue(name)
{
  var arrStoredValues = II_getCookie('IS_StoredValues');

  if (arrStoredValues == null)
    arrStoredValues = new Array();
  else
    arrStoredValues = arrStoredValues.split(',');

  for (var idx=0; idx < arrStoredValues.length; idx++)
  {
    var arrNameValue = arrStoredValues[idx].split('`');
    if (arrNameValue[0] == name)
      return(arrNameValue[1]);
  }

  return('');
}

function II_shiftMatchHistoryCookie(arrHistory, maxsize) 
{ 
  var i = 0;
  var newArray = new Array();

  for (i = 0; i < maxsize - 1; i++) 
    newArray[i] = arrHistory[i + 1];

  return(newArray);
}

function II_createTestServersCookie()
{
  var i = 0;

  var fullList = "";
  if (window.arrTestServers)
  {
    for (i=0; i <= arrTestServers.length - 1; i++)
    { 
      fullList += arrTestServers[i];
      if (i < arrTestServers.length - 1)
        fullList += ",";
    }
  }
  
  if (fullList == "")
    fullList = "no_testservers_defined";
 
  II_setCookie(II_gTSCookieName, fullList, null);
}

function II_createRulesCookie(rulesType)
{
  var i = 0;
  var ii_arr = null;
  
  if (rulesType == "test")
    ii_arr = window.arrTestRules;
  else
    ii_arr = window.arrRules;

  // create live version rules
  var fullList = "";
  if (ii_arr)
  {
    for (i=0; i <= ii_arr.length - 1; i++)
    { 
      fullList += ii_arr[i];
      if (i < ii_arr.length - 1)
        fullList += "^^^";
    }
  }
  if (fullList == "")
    fullList = "(no rules defined)";
 
  II_setCookie(II_gCookieName, fullList, null);

  II_updateStoredValue("PageCountSinceLastShown", 0);
  II_updateStoredValue("PrevOfferCount", 0);
  II_updateStoredValue("PrevOfferTime", 0);
  II_updateStoredValue("LastShownRuleID", 0);

  if (window.II_gVersion)
   II_updateStoredValue("Version", II_gVersion);
}

function II_loadRules()
{
  var arrRules = II_getRules(); 

  if (arrRules.length == 0)
  {
    if (II_testCookieCapability())
    {
      document.write('<script src="' + II_gProtocol + '://admin.instantservice.com/resources/smartbutton/' + II_gAccountID + '/Servers.js" type="text/javascript"></script>');
    }
  }
}

function II_findMatch(searchstr, rule)
{
  var match = '';
  var ruleid = II_getRuleComponent("ruleid", rule);

  switch(II_getRuleComponent("ruletype", rule))
  {
    case '1':
      var sub1 = II_findComponentMatch(ruleid, "excprevvisit", searchstr, rule);
      var sub2 = II_findComponentMatch(ruleid, "exconlyprevvisit", searchstr, rule);
      match = sub1;
      if (match.length > 0 && sub2.length > 0) { match += '```'; }
      match += sub2;
      break;

    case '2':
      var sub1 = II_findComponentMatch(ruleid, "rulevalue1", searchstr, rule);
      var sub2 = II_findComponentMatch(ruleid, "excprevvisit", searchstr, rule);
      var sub3 = II_findComponentMatch(ruleid, "exconlyprevvisit", searchstr, rule);
      match = sub1;
      if (match.length > 0 && sub2.length > 0) { match += '```'; }
      match += sub2;
      if (match.length > 0 && sub3.length > 0) { match += '```'; }
      match += sub3;
      break;

    case '3':
    case '4':
    case '7':
      var sub1 = II_findComponentMatch(ruleid, "firstpagematch", searchstr, rule);
      var sub2 = II_findComponentMatch(ruleid, "excprevvisit", searchstr, rule);
      var sub3 = II_findComponentMatch(ruleid, "exconlyprevvisit", searchstr, rule);
      match = sub1;
      if (match.length > 0 && sub2.length > 0) { match += '```'; }
      match += sub2;
      if (match.length > 0 && sub3.length > 0) { match += '```'; }
      match += sub3;      
      break;

    case '5':
    case '6':
      var sub1 = II_findComponentMatch(ruleid, "firstpagematch", searchstr, rule);
      var sub2 = II_findComponentMatch(ruleid, "secondpagematch", searchstr, rule);
      var sub3 = II_findComponentMatch(ruleid, "excprevvisit", searchstr, rule);
      var sub4 = II_findComponentMatch(ruleid, "exconlyprevvisit", searchstr, rule);
      match = sub1;
      if (match.length > 0 && sub2.length > 0) { match += '```'; }
      match += sub2;
      if (match.length > 0 && sub3.length > 0) { match += '```'; }
      match += sub3;        
      if (match.length > 0 && sub4.length > 0) { match += '```'; }
      match += sub4;        
      break;
      
    default:
  }

  return(match);
}

function II_findComponentMatch(ruleid, componentname, searchstr, rule)
{
  var match = '';
  
  if (componentname == "excprevvisit" || componentname == "exconlyprevvisit")
  {
    // these two component have to be subdivided and searched
    var list = II_getRuleComponent(componentname, rule);
    if (list.length > 0)
    {
      var arrList = list.split('^');
      if (arrList != null && arrList.length > 0)
      {
        for (var idx=0; idx < arrList.length; idx++)
        {
          var sub = arrList[idx];
          if (searchstr != null && searchstr.indexOf(sub) != -1)
          {
            if (match.length > 0) 
              match += '```';
            match += ruleid + '`' + sub;
          }              
        }
      }
    }      
  }
  else
  {
    var sub = II_getRuleComponent(componentname, rule);
    if (searchstr != null && searchstr.indexOf(sub) != -1)
    {
      if (match.length > 0) 
        match += '```';
      match += ruleid + '`' + sub;
    }
  }
       
  return(match);
}  

function II_getRuleString(ruleid)
{
  var arrRules = II_getRules();

  for (i=0; i < arrRules.length; i++)
  {
    if (II_getRuleComponent("ruleid", arrRules[i]) == ruleid)
      return(arrRules[i]);
  }

  return('');
}
          
  
function II_getRuleComponent(componentname, rule)
{
  var ruleArray = rule.split('`');
  var arrNames  = new Array( "ruleid", "ruletype", "firstpagematch", "secondpagematch", "rulevalue1", 
                             "rulevalue2", "rulevalue3", "excprevoffercount",  "excprevoffertime", 
                             "excprevvisit", "exconlyprevvisit", "invitedept", "whentoload" );

  if (ruleArray != null && ruleArray.length > 0)
  {
    for (idx=0; idx < arrNames.length; idx++)
    {    
      if (arrNames[idx] == componentname)
        return(ruleArray[idx]);
    }
  }      
  
  return('');
}

function II_getProtocol()
{
  var prot = "http";
  var url = document.location.href;
  if (url != null && url.length > 0)
  {
    url = url.toLowerCase();
    if (url.indexOf("https") == 0) 
      prot = "https";
  }
  return(prot);
}

function II_getDomain()
{ 
  var dom = document.domain;
  var idx = dom.lastIndexOf(".");
  if (idx != -1)
  {
    dom = dom.substring(0, idx) + "X" + dom.substring(idx+1);

    var idx2 = dom.lastIndexOf(".");
    if (idx2 != -1)
      dom = document.domain.substring(idx2);
    else
      dom = document.domain;
  }

  return(dom);
}

function II_gtRS(id)        { return II_getRuleString(id); }
function II_gtRC(val1,val2) { return II_getRuleComponent(val1,val2); }
function II_gtSV(val1)      { return II_getStoredValue(val1); }
function II_upSV(val1,val2) { return II_updateStoredValue(val1,val2); }

var II_gDomain     = II_getDomain();
var II_gProtocol   = II_getProtocol();
var II_gAccountID  = 5836;
var II_gCookieName   = 'IS_Rules_5836';
var II_gTSCookieName = 'IS_TestServers_5836';
var II_gUsingIE    = false;
var II_gUsingNS    = false;

if (document.all && document.getElementById)
  II_gUsingIE = true;
else if (document.getElementById)
  II_gUsingNS = true;  

if (II_gUsingIE || II_gUsingNS)
{
  II_loadRules();
}
  
