// JScript File

/*		EXPECTED:
*		UID
*		siteId
*		page
*		vehicleYear
*		vehicleMake
*		vehicleModel
*		vehicleTrim
*		vehicleVIN
*		currentDomain
*		secureRequestPath - OPTIONAL
*		ACTIONS ADDED TO ACTIONCOLLECTION
*/

var reynoldsAnalyticsImages = new Array;
var reynoldsAnalyticsIndex = 0;

var waUrl = document.URL
var waBrowser = navigator.appName;
var waJavaEnabled = navigator.javaEnabled();
var waColorDepth = screen.colorDepth
var waResolution = screen.width + " x " + screen.height;
var waLanguage = navigator.appName == "Netscape" ? navigator.language : navigator.userLanguage;
var waCookiesAllowed;
var waReferrer = document.referrer;
var waRightNow = new Date();
var waJan1 = new Date(waRightNow.getFullYear(), 0, 1, 0, 0, 0, 0);  // jan 1st
var waJuly1 = new Date(waRightNow.getFullYear(), 6, 1, 0, 0, 0, 0); // july 1st
var waTemp = waJan1.toGMTString();
var waJan2 = new Date(waTemp.substring(0, waTemp.lastIndexOf(" ") - 1));
waTemp = waJuly1.toGMTString();
var waJuly2 = new Date(waTemp.substring(0, waTemp.lastIndexOf(" ") - 1));
var waTimeOffset = (waJan1 - waJan2) / (1000 * 60 * 60);
var waDaylightOffset = (waJuly1 - waJuly2) / (1000 * 60 * 60);
var waDST;
var waHemisphere;
var waExpirationDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1));
var waUserIdentifier;

var waScriptElements = document.getElementsByTagName("script");
var waJavascriptQueryString = "";
var waAnalyticsQueryStringFound = false;

function waPost() 
{
   wa_Post();
}

var cacheVar = null;


function wa_Post()
{
	if(GUID != null)
	{
		cacheVar = GUID;
		waUserIdentifier = GUID;
	}
   
	GUID = null;

   if (typeof siteId != 'undefined' && typeof waImagePath != 'undefined') 
   {
      if (waTimeOffset == waDaylightOffset) 
      {
         waDST = "0";
      }
      else 
      {
         if (waTimeOffset - waDaylightOffset >= 0) 
         {
            waTimeOffset = waDaylightOffset;
            waHemisphere = "southern";
         }
         else 
         {
            waHemisphere = "northern";
         }

         waDST = "1";
      }

      wa_SetCookie('WACookie', 'true', null, '/', null, null);

      if (wa_GetCookie('WACookie')) 
      {
         waCookiesAllowed = true;
         wa_DeleteCookie('WACookie', '/', null);

         waAnalyticsCookieValue = wa_GetCookie('WAuid' + siteId);
         
         if (typeof waAnalyticsCookieValue != 'undefined' && waAnalyticsCookieValue != null && waAnalyticsCookieValue != '' && waAnalyticsCookieValue != 'undefined') 
         {
            waUserIdentifier = waAnalyticsCookieValue;
         }
         else 
         {
            wa_SetCookie('WAuid' + siteId, waUserIdentifier, waExpirationDate, '/', null, null);
         }
      }
      else 
      {
         waCookiesAllowed = false;
      }

      wa_GenerateRequest();
   }
}

for (i = 0; !waAnalyticsQueryStringFound && i < waScriptElements.length; i++) 
{
   if (waScriptElements[i].src && waScriptElements[i].src.toLowerCase().indexOf("webanalytics") > 0) 
   {
      var beginningOfQueryString = waScriptElements[i].src.indexOf("?");

      if (beginningOfQueryString > 0) 
      {
         waJavascriptQueryString = waScriptElements[i].src.substr(beginningOfQueryString + 1);
      }

      waAnalyticsQueryStringFound = true;
   }
}

function wa_GetUniqueQueryStringItems(queryStringBeingMergedInto, queryStringBeingMergedFrom) 
{

   var splitQueryString = queryStringBeingMergedFrom.split("&");

   for (i = 0; i < splitQueryString.length; i++) 
   {
      var qsItem = splitQueryString[i].split("=");
      var key = qsItem[0].toLowerCase();
      var lowerQueryString = queryStringBeingMergedInto.toLowerCase();

      if (!(lowerQueryString.indexOf("&" + key + "=") > 0) && !(lowerQueryString.indexOf("?" + key + "=") > 0)) 
      {
         queryStringBeingMergedInto += "&" + qsItem[0] + "=" + qsItem[1];
      }
   }

   return (queryStringBeingMergedInto);
}

function wa_GenerateRequest() 
{
   var scriptSrc = waImagePath + cacheVar + '.gif';
   scriptSrc += '?SiteId=' + escape(siteId);
   if (typeof waUserIdentifier != 'undefined' && waUserIdentifier != null && waUserIdentifier != '') { scriptSrc += '&wauid=' + escape(waUserIdentifier); }
   if (typeof page != 'undefined' && page != null && page != '') { scriptSrc += '&Page=' + escape(page); }
   if (typeof waPageCategory != 'undefined' && waPageCategory != null && waPageCategory != '') { scriptSrc += '&pageCategory=' + escape(waPageCategory); }
   if (typeof vehicleYear != 'undefined' && vehicleYear != null && vehicleYear != '') { scriptSrc += '&Year=' + vehicleYear; }
   if (typeof vehicleMake != 'undefined' && vehicleMake != null && vehicleMake != '') { scriptSrc += '&Make=' + vehicleMake; }
   if (typeof vehicleModel != 'undefined' && vehicleModel != null && vehicleModel != '') { scriptSrc += '&Model=' + vehicleModel; }
   if (typeof vehicleTrim != 'undefined' && vehicleTrim != null && vehicleTrim != '') { scriptSrc += '&Trim=' + vehicleTrim; }
   if (typeof styleId != 'undefined' && styleId != null && styleId != '') { scriptSrc += '&StyleId=' + styleId; }
   if (typeof vehicleVIN != 'undefined' && vehicleVIN != null && vehicleVIN != '') { scriptSrc += '&Vin=' + vehicleVIN; }
   if (typeof lotId != 'undefined' && lotId != null && lotId != '') { scriptSrc += '&LotId=' + escape(lotId); }
   if (typeof waUrl != 'undefined' && waUrl != null && waUrl != '') { scriptSrc += '&Url=' + escape(waUrl); }
   if (typeof waBrowser != 'undefined' && waBrowser != null && waBrowser != '') { scriptSrc += '&Browser=' + escape(waBrowser); }
   if (typeof waJavaEnabled != 'undefined' && waJavaEnabled != null) { scriptSrc += '&JavaEnabled=' + escape(waJavaEnabled); }
   if (typeof waColorDepth != 'undefined' && waColorDepth != null && waColorDepth != '') { scriptSrc += '&ColorDepth=' + escape(waColorDepth); }
   if (typeof waResolution != 'undefined' && waResolution != null && waResolution != ' x ') { scriptSrc += '&Resolution=' + escape(waResolution); }
   if (typeof waReferrer != 'undefined' && waReferrer != null && waReferrer != '') { scriptSrc += '&WAReferrer=' + escape(waReferrer); }
   if (typeof waLanguage != 'undefined' && waLanguage != null && waLanguage != '') { scriptSrc += '&Language=' + escape(waLanguage); }
   if (typeof waCookiesAllowed != 'undefined' && waCookiesAllowed != null) { scriptSrc += '&Cookies=' + escape(waCookiesAllowed); }
   if (typeof waTimeOffset != 'undefined' && waTimeOffset != '') { scriptSrc += '&StandardTimeOffset=' + escape(waTimeOffset); }
   if (typeof waDST != 'undefined' && waDST != '') { scriptSrc += '&DaylightSavingsTimeObserved=' + escape(waDST); }
   if (typeof waHemisphere != 'undefined' && waHemisphere != '') { scriptSrc += '&Hemisphere=' + escape(waHemisphere); }
   if (typeof waActionCollection != 'undefined' && waActionCollection != null) 
   {
      for (var i = 0; i < waActionCollection.actions.length; i++) 
      {
         if (waActionCollection.actions[i].name && waActionCollection.actions[i].name != '') { scriptSrc += '&ActionName_' + i + '=' + escape(waActionCollection.actions[i].name); }
         if (waActionCollection.actions[i].type && waActionCollection.actions[i].type != '') { scriptSrc += '&ActionType_' + i + '=' + escape(waActionCollection.actions[i].type); }
         if (waActionCollection.actions[i].data && waActionCollection.actions[i].data != '') { scriptSrc += '&ActionData_' + i + '=' + escape(waActionCollection.actions[i].data); }
         if (waActionCollection.actions[i].details && waActionCollection.actions[i].details != '') { scriptSrc += waActionCollection.actions[i].details; }
      }
   }
   scriptSrc += '&JavaScriptEnabled=true';
   scriptSrc += '&time=' + new Date().getTime();

   if (waJavascriptQueryString != null && waJavascriptQueryString.indexOf('&') > 0) 
   {
      scriptSrc = wa_GetUniqueQueryStringItems(scriptSrc, waJavascriptQueryString);
   }

   if (document.images) 
   {
      reynoldsAnalyticsImages[reynoldsAnalyticsIndex] = new Image;
      reynoldsAnalyticsImages[reynoldsAnalyticsIndex].src = scriptSrc;
      reynoldsAnalyticsIndex++;
   }
   else 
   {
      document.write('<img border="0" name="reynoldsAnalyticsImage" width="1" height="1" src="' + scriptSrc + '" />');
   }

   waActionCollection = null;
}

function wa_SetCookie(name, value, expires, path, domain, secure) 
{
   document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function wa_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));
}

function wa_DeleteCookie(name, path, domain) 
{
   if (wa_GetCookie(name)) 
   {
      document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-1970 00:00:01 GMT";
   }
}

function convert(value) 
{
   return(wa_Convert(value));
}

function wa_Convert(value)
{
   var hours = parseInt(value);
   value -= parseInt(value);
   value *= 60;
   var mins = parseInt(value);
   value -= parseInt(value);
   value *= 60;
   var secs = parseInt(value);
   var display_hours = hours;
   if (hours == 0) {
      display_hours = "00";
   } else if (hours > 0) {
      display_hours = (hours < 10) ? "+0" + hours : "+" + hours;
   } else {
      display_hours = (hours > -10) ? "-0" + Math.abs(hours) : hours;
   }

   mins = (mins < 10) ? "0" + mins : mins;
   return (display_hours + ":" + mins);
}

function actionObject(actionName, actionType, actionData) 
{
   this.name = actionName;
   this.type = actionType;
   this.data = actionData;
}

function wa_ActionObject(actionName, actionType, actionData) 
{
   this.name = actionName;
   this.type = actionType;
   this.data = actionData;
}

function addAction(actionName, actionType, actionData) 
{
   this.actions[this.actions.length] = new wa_ActionObject(actionName, actionType, actionData);
}

function wa_AddAction(actionName, actionType, actionData) 
{
   this.actions[this.actions.length] = new wa_ActionObject(actionName, actionType, actionData);
}

function actionCollection() 
{
   this.actions = [];
   this.add = wa_AddAction;
}

function wa_ActionCollection() {
   this.actions = [];
   this.add = wa_AddAction;
}

function createEvent(actionName, actionType, actionData) 
{
   wa_CreateEvent(actionName, actionType, actionData);
}

function wa_CreateEvent(actionName, actionType, actionData) 
{
   if (typeof waActionCollection == 'undefined' || waActionCollection == null) 
   {
      waActionCollection = new wa_ActionCollection();
   }
   
   waActionCollection.add(actionName, actionType, actionData);
}

function createEventWithDetails(actionName, actionType, actionData, actionDetails) 
{
   wa_CreateEventWithDetails(actionName, actionType, actionData, actionDetails);
}

function wa_CreateEventWithDetails(actionName, actionType, actionData, actionDetails) 
{
   wa_CreateEvent(actionName, actionType, actionData);

   var currentActionIndex = waActionCollection.actions.length - 1;

   if (typeof actionDetails != undefined && actionDetails != null) 
   {
      for (i = 0; i < actionDetails.length; i++) 
      {
         var keyValuePair = actionDetails[i].split("=");
         
         if (keyValuePair.length == 2) 
         {
            if (typeof waActionCollection.actions[currentActionIndex].details == 'undefined') 
            {
               waActionCollection.actions[currentActionIndex].details = "";
            }

            waActionCollection.actions[currentActionIndex].details += "&ActionDetail" + escape(keyValuePair[0]) + "_" + (currentActionIndex) + "=" + escape(keyValuePair[1]);
         }
      }
   }
}

