<!--
// company  : Moniforce
// module   : webSensor-Commerce JavaScript library
// $Id: wsc.js,v 1.11 2006/06/13 08:22:26 vbi Exp $

// create new mfinfo object
var mfinfo = new MFInfo();

// create "macro" functions for backwards compatibility

// moni_pva = mfinfo.load
function moni_pva(sid, pg, xtr)
{
  mfinfo.siteid = sid;
  return mfsend(mfinfo, 'load', pg, null, xtr);
}

// moni_frame = mfinfo.frame
function moni_frame(sid, pg, xtr)
{
  mfinfo.siteid = sid;
  return mfsend(mfinfo, 'frame', pg, null, xtr);
}

// moni_click = mfinfo.click
function moni_click(sid, obj, pg, xtr)
{
  mfinfo.siteid = sid;  
  return mfsend(mfinfo, 'click', pg, obj, xtr);
}

// MFInfo class

// constructor mfinfo
function MFInfo()
{  
  // members declarations
  
  // image address where the information will be sent to
  this.imageaddress = 'tag.moniforce.com/pv';  
  // project identification number
  this.siteid = '';
  // [<page group>'|']*n<page name>
  this.page = document.title;
  
  // screen width
  this.scrw = screen.width;
  // screen height
  this.scrh = screen.height;
  // color depth
  this.cols = screen.colorDepth;
  // user language
  this.lng  = mfgetuserlanguage();  
    
  // method declarations
  
  // invoked by onload event of content page and moni_pva
  this.load   = mfinfo_load;
  // invoked by onload event of page containing frameset and moni_frame
  this.frame  = mfinfo_frame;
  // invoked by onclick event of page objects and moni_click
  this.click  = mfinfo_click;  
  // invoked by onclick event of page objects and moni_sclick non blocking variant
  this.sclick  = mfinfo_sclick;  
  
  return;
}

// invoked by onload event on content page
function mfinfo_load(page)
{
  return mfsend(this, 'load', page, null, null);
}

// invoked by onload event on page containing frameset
function mfinfo_frame(page)
{
  return mfsend(this, 'frame', page, null, null);
}

// invoked by onclick event on anchor or form objects
function mfinfo_click(page, object, extra)
{
  return mfsend(this, 'click', page, object, extra);
}

// invoked by onclick event on anchor or form objects non-blocking
function mfinfo_sclick(page, object, extra)
{
  return mfsend(this, 'sclick', page, object, extra);
}

// global functions

// gather and send webSensor-Commerce information
var mfurl = '';
function mfsend(mfinfo, action, page, object, extra)
{
  // get protocol
  var protocol = document.location.protocol;
  
  // update imageaddress
  mfinfo.imageaddress = mfinfo.imageaddress.replace(/<siteid>/gi, mfinfo.siteid);  
  
  // update page
  if (!mfisempty(page))
    mfinfo.page = page; 

  // get location
  var location = document.location.href;
  
  // update page & location
  var forminfo = '';
  if (action == 'click' || action == 'sclick')
  {
    if (object.nodeName == 'FORM')
    {
      if (mfisempty(page))
        mfinfo.page = 'form on ' + document.title;
      location = object.action;
      // update forminfo
      forminfo = mfgetforminfo(object);
    }
    else if (object.nodeName == 'A')
    {
      if (mfisempty(page))
        mfinfo.page = (object.text ? object.text : object.innerText);
      location = object.href;    
    }
  }
  
  // get referrer
  var referrer = (action == 'click' || action == 'sclick') ? document.location : mfgetreferrer();

  // set time stamp
  var timestamp = new Date().getTime();

  // update cookies
  var cookies = mfupdatecookies();
  
  // update extra
  extra = mfenumerateextra(extra, mfinfo);

  // assemble image url containing websensor information  
  mfurl = protocol + '//' + mfinfo.imageaddress + '?' +
          'loc=' + escape(location) +
          '&ref=' + escape(referrer) +
          '&act=' + action +
          '&ts=' + timestamp +
          cookies +
          forminfo +
          extra;
			 
  // load url
  if (action != 'click')
    mfloadimagenonblocking(mfurl);
  else
    mfloadimageblocking(mfurl, object, 0);
  
  // return false for click action, aborting initiated action by client  
  if (action == 'click')
    return false;
  else
    return;
}

// update tracking & persistent cookie
function mfupdatecookies()
{  
  var result                = '';
  var host                  = document.location.host;
  var cookies               = document.cookie;
  var cookiename            = null;
  var cookievalue           = null;
  var cookiedomain          = host.substring(host.lastIndexOf('.', host.lastIndexOf('.') - 1)); 
  var cookiepath            = '/';
  var cookieexpires         = null;
  var trackingcookievalue   = null;
  var persistentcookievalue = null;
  
  // refresh tracking cookie
  cookiename = 'mftrack_js';
  if (cookies.indexOf(cookiename) == -1)
  {     
    if (cookies.indexOf('MfTrack') != -1)
      cookievalue = mfgetcookievalue('MfTrack');
    else
      cookievalue = new Date().getTime() + '.' + Math.round(Math.random() * 2147418112);
    // set tracking cookie
    mfsettrackingcookie(cookiename, cookievalue, cookiedomain, cookiepath);
  }  
  trackingcookievalue = '&tc=' + mfgetcookievalue(cookiename);
  
  // refresh persistent cookie
  cookiename = 'mfpers_js';
  var prefix;
  if (cookies.indexOf(cookiename) == -1)
  {
    if (cookies.indexOf('MfPers') != -1)
      cookievalue = mfgetcookievalue('MfPers');
    else
      cookievalue = new Date().getTime() + '.' + Math.round(Math.random() * 2147418112);
    prefix = '&npc=';
  }
  else 
  {
    cookievalue = mfgetcookievalue(cookiename);
    prefix = '&pc=';
  }
  persistentcookievalue = prefix + cookievalue;
  var date = new Date();
  date.setTime(date.getTime() + (180 * 24 * 60 * 60 * 1000)); 
  cookieexpires = date.toUTCString();
  // set persistent cookie
  mfsetpersistentcookie(cookiename, cookievalue, cookiedomain, cookiepath, cookieexpires);
  
  // assemble basic information
  result = trackingcookievalue + persistentcookievalue;
  
  return result;
}

function mfenumerateextra(extra, mfinfo)
{  
  // update extra  
  extra = (extra == null) ? '' : extra;
     
  // add extra mfinfo members
  for (property in mfinfo)
  {
    if ((property != 'imageaddress') && 
        (property != 'siteid') &&
        (property != 'load') &&
        (property != 'frame') &&
        (property != 'click'))
    {      
      // extra argument format is &mfinfo.property=value
      extra = extra + '&' + property + '=' + escape(eval('mfinfo.' + property));
    }    
  }
  
  if ((!mfisempty(extra)) && (extra.indexOf('&') != 0))
    extra = '&' + extra;
  
  extra = extra.replace(/&/g, '&mfinfo.');
  
  return extra;
}

// load url on 'load' and 'frame' action
function mfloadimagenonblocking(url)
{
  if (document.images) 
  {
    var image = new Image(1, 1);
    image.src = url;
  } 
  else
  {
    if (!document.body)     
      document.write('<body>');
    document.write('<img src="' + url + '" name="moniforce" width="1" height="1">');
  }
  return;
}

// load url on 'click' action
var mfimage  = new Image(1, 1);
var mfobject = null;
function mfloadimageblocking(url, object, level)
{
  // stop at max recursion depth, total delay is max 5100 sec
  if (level > 8)
  {
    mfobject = null;
    // execute intended action
		if ((typeof mfabort == 'undefined') || (!mfabort))
		  mfexecuteobject(object);		  
		return;
  }
  
  // set moniforce image url to start loading the image, thus sending websensor information
  if (mfimage.src != url)
    mfimage.src = url;

	// set DOM object
  if (mfobject != object)
    mfobject = object;
  
  // check if image is loaded
  if (!mfimage.complete) 
  {
    // moniforce image not loaded jet
    // minimize the recursion depth by waiting for exponentionally time units,
    // maximum total delay is aproximatly 5 seconds (sum 2^1*10+2^2*10+2^3*10+...+2^8*10 = 5100ms)    
    setTimeout('mfloadimageblocking("' + url + '", mfobject, ' + (level + 1) + ')', Math.pow(2, level) * 10);
  } 
  else
  {    
    // moniforce image loaded, make final call which will execute intended action
		mfloadimageblocking(url, mfobject, 9);
  }  
  
  return;
}

// execute action on DOM object
function mfexecuteobject(object)
{  
  if (object.nodeName == 'FORM')
  {
    // submit form
    object.submit();      
  }
  else if (object.nodeName == 'A')
  { 
    // determine anchor targat
    var target = object.target;
    if (mfisempty(target))
    {
      // target could not be determined, try target resolving for ie 5
      if (object.attributes && (object.attributes['target'] == '[object]'))
        target = object.attributes['target'].value;
    }
    
    // activate anchor
    if (mfisempty(target))
      document.location = object.href;
    else 
      window.open(object.href, object.target);
  }	
  return;
}

// check if variable is empty
function mfisempty(variable)
{
  var result;

  if ((variable == null) || (variable.length == 0))
    result = true;
  else
    result = false;
    
  return result;
}

// check if browser is netscape v4 or internet explorer v4
function mfisoldbrowser() 
{
  var result   = null;
  var agent   = navigator.appName;
  var version = navigator.appVersion.substr(0, 1);
  var ns       = agent.indexOf('Netscape') != -1;
  var ie       = (agent.indexOf('Microsoft') != -1) || (agent.indexOf('MSIE') != -1);
  var ns4     = ns && version == 4;  
  var ie4     = ((agent.indexOf('msie 4')>0) && document.all) ? true : false;  

  result = (ns4 || ie4);
	
  return result;
}

// get referrer
function mfgetreferrer()
{
  var result = '';
  
  if (!mfisoldbrowser()) 
    eval('try  { result = top.document.referrer; } catch(exception) { result = document.referrer; }');
  else 
    result = top.document.referrer;
  
  if (result.lastIndexOf(document.location.host) != -1) 
  {
    var temp = '';
    if (!mfisoldbrowser()) 
      eval('try { temp = parent.document.referrer; } catch(exception) { temp = result; }');
    else 
      temp = parent.document.referrer;
    result = temp;
  }
  
  return result;
}

// get user language
function mfgetuserlanguage()
{
  var result = '';
  
  if (navigator.appName.lastIndexOf('Netscape') != -1)   
    result = navigator.language;
  else 
    result = navigator.userLanguage;
    
  return result;
}

// get aditional information from form object
function mfgetforminfo(form)
{
  var result = '';
  var a,b,c,d,e,f;
  // check for the existance of hidden field 'fflds'
  if (form.fflds)
  {
    var i;    
    for (i = 0; i < form.elements.length; i++)
    {
      if ((form.fflds.value.indexOf(form.elements[i].name) > -1) && 
          (form.elements[i].name != 'fflds') &&
          (!mfisempty(form.elements[i].value)))
          result = result + '&frm.' + form.elements[i].name + '=' + escape(form.elements[i].value);      
    }
  }
  
  return result;
}

// get either tracking or persistent cookie value by name
function mfgetcookievalue(name)
{
  var result  = '';
  var cookies = document.cookie;
  var index   = cookies.indexOf(name);
  
  if (index != -1)
  {    
    var startindex = cookies.indexOf('=', index) + 1;
    var endindex   = cookies.indexOf(';', startindex);
    if (endindex < 0) 
      endindex = cookies.length;
    result = cookies.substring(startindex, endindex);
  }
  
  return result;
}

// set tracking cookie
function mfsettrackingcookie(name, value, domain, path)
{	
  return mfsetpersistentcookie(name, value, domain, path, null);
}

// set persistent cookie
function mfsetpersistentcookie(name, value, domain, path, expires)
{
	domain  = mfisempty(domain)  ? '' : 'domain=' + domain + ';';
	path    = mfisempty(path)    ? '' : 'path=' + path + ';';
	expires = mfisempty(expires) ? '' : 'expires=' + expires + ';';
  document.cookie = name + '=' + value + ';' + domain + path + expires;  
  return;
}
-->