var xmlHttpGetMessages = createXmlHttpRequestObject();
var response = '';

var start_x = 0;
var start_y = 0;

var is_moved = 0;

var x = 0;
var y = 0;

var tmp = new Array();    // два вспомагательных
var tmp2 = new Array();   // массива
var param = new Array();
var time1 = 0;

// ожидание загрузки страницы
// и вызов функции инициализации
try {
  window.addEventListener('load', init, false);
} catch(e) {
  window.onload = init;
}


function getParamGET()
{
 var get = location.search;  // строка GET запроса
 if(get != '') 
  {
   tmp = (get.substr(1)).split('&'); // разделяем переменные
   for(var i=0; i < tmp.length; i++) 
    {
     tmp2 = tmp[i].split('=');   // массив param будет содержать
     param[tmp2[0]] = tmp2[1];   // пары ключ(имя переменной)->значение
   }
  }
}

function getCoords(cursor) {
 try
 {
  // вызывается при перемещении курсора
   if(!cursor) cursor = window.event;
   if (cursor == undefined)
    {
      cursor = window.event;
      c = cursor.button;
      element = cursor.srcElement;
    }
   else
    {
      c = cursor.which;
      element = null;
    }

   if (cursor.pageX || cursor.pageY) 
    {
      x = cursor.pageX;
      y = cursor.pageY;
    }
   else 
    {
      var de = document.documentElement;
      var b = document.body;
      x = cursor.clientX + 
          (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
      y = cursor.clientY + 
          (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }

   if(is_moved == 0)
   {
     start_x = x;
     start_y = y;
     is_moved = 1;
   }
//   coordsFix();
 }
 catch(err) {}
}

// Клик
function coordsFix() {
  m = 0;
  var currentDate = new Date();
  var time2 = currentDate.getTime();

  var is_cookie = navigator.cookieEnabled; // cookie

  var referer = document.referrer;  // referer
//  if(referer == undefined || referer == '') referer = history.previous;

  var ua = navigator.userAgent;  // UserAgent

  var timeclick = time2-time1; // Time offset Load And Click

  var m = 0;

  if(timeclick < 500 && time1 != undefined && time2 != undefined) // Fast Click
  {
   m = 3;
  }
  else if(ua == undefined || ua == '') // No User Agent
  {
    m = 6;
  }
  else if(referer == undefined || referer == '') // No Referer
  {
    m = 4;
  }
  else if(is_cookie == 'false') // No Cookies
  {
    m = 4;
  }
  else if(is_moved == 1) // Ok
  {
    m = 1;
  }
  else // No Mouse
  {
    m = 0;
  }

  process('', 'save.php?aff='+param['aff']+"&m="+m, '');
  var monitorObj = getObj('doc1');
  monitorObj.onmouseover = null;
  monitorObj.onclick = null;
//  setTimeout(doClick(), 500);
}

function getObj(name) {
// функция захвата объекта, используется при инициализации
  if (document.getElementById) return document.getElementById(name);
  else if (document.all) return document.all[name];
  else if (document.layers) return document.layers[name];
  else return false;
}

function init() { // инициализация
  var ua = window.navigator.userAgent;

  // Не поисковые боты?
  if(ua.indexOf ("google")<=0 ||
     ua.indexOf ("bot")<=0 ||
     ua.indexOf ("msn")<=0 ||
     ua.indexOf ("search")<=0 ||
     ua.indexOf ("robot")<=0 ||
     ua.indexOf ("yahoo")<=0 ||
     ua.indexOf ("image")<=0 ||
     ua.indexOf ("rambler")<=0 ||
     ua.indexOf ("yandex")<=0 ||
     ua.indexOf ("crawler")<=0)
   {
    setTimeout(visiblePageHuman(), 700);
   }
   else
   {
    setTimeout(visiblePage(), 1);
   }
}

function visiblePage()
{
 document.getElementById('doc1').style.visibility = 'visible';
}

function visiblePageHuman()
{
 document.getElementById('doc1').style.visibility = 'visible';
 // разбор GET-параметров
 var currentDate = new Date();
 time1 = currentDate.getTime();

 getParamGET();
 if(param['aff'] > 0)
  {
   var monitorObj = getObj('doc1');
   monitorObj.onmouseover = getCoords;
   monitorObj.onclick = coordsFix;
  }
}

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject() 
{

  try
  {
    // try to create XMLHttpRequest object
    xmlHttpGetMessages = new XMLHttpRequest();
  }
  catch(e)
  {
    // assume IE6 or older
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.7.0",
                                    "MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // try every prog id until one works
 
    for (var i=0; i<XmlHttpVersions.length && !xmlHttpGetMessages; i++) 
    {
      try 
      { 
        // try to create XMLHttpRequest object
        xmlHttpGetMessages = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {}
    }
  }
  // return the created object or display an error message
  return xmlHttpGetMessages;
}


// call server asynchronously
function process(Act, serverAddress, Param)
{
  var ServerParams =  '';

  if (xmlHttpGetMessages)
  {
    // try to connect to the server
    try
    {
        if(Param.length > 0)
         {
          ServerParams = "act=" + Act + Param;
         }
        else
         {
          ServerParams = "act=" + Act;
         }
        // call the server page to execute the server-side operation
        xmlHttpGetMessages.open("GET", serverAddress, true); // true - async, false - sync
        xmlHttpGetMessages.setRequestHeader("Content-Type", 
                                   "application/x-www-form-urlencoded");
        xmlHttpGetMessages.onreadystatechange = handleRequestStateChange;

        xmlHttpGetMessages.send(ServerParams);
      // initiate server access
    }
    // display the error in case of failure
    catch (e)
    {
    }
  }
}

// function called when the state of the HTTP request changes
function handleRequestStateChange() 
{
  // when readyState is 4, we are ready to read the server response
  if (xmlHttpGetMessages.readyState == 4) 
  {
    // continue only if HTTP status is "OK"
    if (xmlHttpGetMessages.status == 200) 
    {
      try
      {
        // do something with the response from the server
        handleServerResponse();
      }
      catch(e)
      {
      }
    } 
  }
}

// handles the response received from the server
function handleServerResponse()
{
    // retrieve the server's response 
    response = xmlHttpGetMessages.responseText;
    // if the response is longer than 3 characters, or if it is void, we 
    // assume we just received a server-side error report
    if(response.length == 0)
      throw(response.length == 0 ? "Ошибка сервера" : response);
} 

