var xmlHttp = createXmlHttpRequestObject();
var disabledControls = new Array();
var timer;
var requestTrigger = false;

var icon;

function createXmlHttpRequestObject()
{
  var xmlHttp;
  
  try
  {
    xmlHttp = new XMLHttpRequest();
  }
  catch (e)
  {
    var XmlHttpVersions = new Array("Msxml2.XMLHTTP.6.0",
                                    "Msxml2.XMLHTTP.5.0",
                                    "Msxml2.XMLHTTP.4.0",
                                    "Msxml2.XMLHTTP.3.0", 
                                    "Msxml2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    for (var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++)
    {
      try
      {
         xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e)
      {
      }
    }
  }
  
  if (!xmlHttp) {
    alert("Error creating the XMLHttpRequest object.");
  } else {
    return xmlHttp;
  }
}

function handleRequestStateChange()
{
  if (xmlHttp.readyState == 4)
  {
    if (xmlHttp.status == 200)
    {
      try
      {
                handleServerResponse();
      }
      catch (e)
      {
        alert ("Error reading the response: " + e.toString());
      }
    } else {
      alert("There was a problem accessing the server: " + xmlHttp.statusText);
    }
  }
}

function handleServerResponse()
{
  requestTrigger = false;

  var xmlResponse = xmlHttp.responseXML;
  
  if (!xmlResponse || !xmlResponse.documentElement) {
    throw("Invalid XML structure:\n" + xmlHttp.responseText);
  }
  
  var rootNodeName = xmlResponse.documentElement.nodeName;
  
  if (rootNodeName == "parsererror") {
    throw("Invalid XML structure:\n" + xmlHttp.responseText);
  }
  
  xmlRoot = xmlResponse.documentElement;

  if (rootNodeName != "response" || !xmlRoot.firstChild) {
    throw("Empty XML response:\n" + xmlHttp.responseText);
  }

  errorElement = xmlRoot.getElementsByTagName('error').item(0);
  
  if (!errorElement) {
    throw("response/error element expected:\n" + xmlHttp.responseText);
  }
  
  errorCodeElement = errorElement.getElementsByTagName('code').item(0);

  if (!errorCodeElement) {
    throw("response/error/code element expected:\n" + xmlHttp.responseText);
  }
  
  errorCode = errorCodeElement.firstChild.data;
  
  if (errorCode != '0') {
    errorDescription = errorElement.getElementsByTagName('description').item(0).firstChild.data;
    throw("Error response:\n" + errorDescription);
  }
  
  requestElement = xmlRoot.getElementsByTagName('request').item(0);

  if (!requestElement) {
    throw("response/request element expected:\n" + xmlHttp.responseText);
  }
  
  requestCommandElement = requestElement.getElementsByTagName('command').item(0);

  if (!requestCommandElement) {
    throw("response/request/command element expected:\n" + xmlHttp.responseText);
  }

  command = requestCommandElement.firstChild.data;
  
  requestActionElement = requestElement.getElementsByTagName('action').item(0);

  if (!requestActionElement) {
    throw("response/request/action element expected:\n" + xmlHttp.responseText);
  }

  action = requestActionElement.firstChild.data;
  
  answerElement = xmlRoot.getElementsByTagName('answer').item(0);

  if (!answerElement) {
    throw("response/answer element expected:\n" + xmlHttp.responseText);
  }
  switch (command) {
    case 'cart':
      switch (action) {
        case 'add_product':
        case 'buy_now':
        case 'multiple_products_add_product':
                  addProductResponse(answerElement);
          break;
      }
      break;
  }
}

function makeRequest(params, async, senddata)
{
  if (xmlHttp)
  {
    try
    {
      xmlHttp.open("POST", "request.php?" + params, async);
      
      if (async) {
        xmlHttp.onreadystatechange = handleRequestStateChange;
      }

      xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlHttp.setRequestHeader("Content-length", senddata.length);
      xmlHttp.setRequestHeader("Connection", "close");

      
      xmlHttp.send(senddata);
      
      if (!async) {
        handleServerResponse();
      }
    }
    catch (e)
    {
      alert ("Can't connect to server:\n" + e.toString());
    }
  }
}

function addProductResponse(answerElement)
{
  if (window.opener != null) {
    var box = window.opener.document.getElementById("ajax_sc");
  } else {
    var box = document.getElementById("ajax_sc");
  }

  if (box != null) {
    if (navigator.userAgent.indexOf('MSIE') > -1) {
      box.innerHTML = answerElement.childNodes[0].nodeValue;
    } else {
      box.innerHTML = answerElement.textContent;
    }
  }
  showOk();
  timerHide = setTimeout( "addHandler(document, \'mousemove\', hideOk)", 500);
}


SHOW_ADDED = 1; // set 0 if you no need show
Offset_X = -10;
Offset_Y = -30;

function addHandler(object, event, handler) // Thanks xpoint.ru!
{
  if (typeof object.addEventListener != 'undefined') {
    object.addEventListener(event, handler, false);
  } else if (typeof object.attachEvent != 'undefined') {
    object.attachEvent('on' + event, handler);
  } else {
    var handlersProp = '_handlerStack_' + event;
    var eventProp = 'on' + event;
    if (typeof object[handlersProp] == 'undefined') {
      object[handlersProp] = [];
      if (typeof object[eventProp] != 'undefined') {
        object[handlersProp].push(object[eventProp]);
      }
      object[eventProp] = function(e) {
        var ret = true;
        for (var i = 0; ret != false && i < object[handlersProp].length; i++) {
          ret = object[handlersProp][i](e);
        }
        return ret;
      } 
    }
    object[handlersProp].push(handler);
  } 
}

function removeHandler(object, event, handler) // Thanks xpoint.ru!
{
  if (typeof object.removeEventListener != 'undefined') {
    object.removeEventListener(event, handler, false);
  } else if (typeof object.detachEvent != 'undefined') {
    object.detachEvent('on' + event, handler);
  } else {
    var handlersProp = '_handlerStack_' + event;
    if (typeof object[handlersProp] != 'undefined') {
      for (var i = 0; i < object[handlersProp].length; i++) {
        if (object[handlersProp][i] == handler) {
          object[handlersProp].splice(i, 1);
          return;
        } 
      } 
    } 
  } 
}

/**
  AJAXBuyNow v2.0
  author Weretennikoff Andrew aka Medreces medreces@yandex.ru
  Released under the GNU General Public License
*/
var x, y;
var loadingImage = new Image();
var okImage = new Image();
var okImageCh = new Image();
loadingImage.src = "images/loading.gif";
okImage.src = "images/ok.gif";
okImageCh.src = "images/okCh.gif";

if (window.opera || (navigator.userAgent.indexOf('MSIE') > -1)) { //IE + Opera
  getM_x = function () { return event.clientX + document.body.scrollLeft; }
  getM_y = function () { return event.clientY + document.body.scrollTop + document.documentElement.scrollTop; }
} else { // Mozilla
  addHandler(document, 'mousemove', function(e) {
    x = e.pageX;
    y = e.pageY;
  });
  getM_x = function () { return x; }
  getM_y = function () { return y; }
}

function showOk() {
  var imgLoading = document.getElementById("_loading_");
  with (imgLoading) {
    src = okImage.src;
    style.visibility = "visible";
  } 
}

function showOkCh() {
  var imgLoading = document.getElementById("_loading_");
  with (imgLoading) {
    src = okImageCh.src;
    style.visibility = "visible";
  } 
}

function hideOk() {
  if (document.getElementById("_loading_")) {
    document.getElementById("_loading_").style.visibility = "hidden";
  }
  removeHandler(document, 'mousemove', hideOk);
}

function showLoading() {
  var imgLoading = document.getElementById("_loading_");
  if(!imgLoading) {
    imgLoading = document.createElement("img");
    with(imgLoading) {
      id = "_loading_";
      style.position = "absolute";
      style.visibility = "hidden";
    }
    document.body.appendChild(imgLoading);
  }
  with(imgLoading) {
    src = loadingImage.src;
    style.left = (getM_x() + Offset_X) + "px";
    style.top = (getM_y() + Offset_Y) + "px";
    style.visibility = "visible";
  } 
}

function hideLoading() {
  if(document.getElementById("_loading_")) {
    document.getElementById("_loading_").style.visibility = "hidden";
  }
}

function doBuyNowGet(req_data) {
  if (!requestTrigger) {
    showLoading();
    var params = 'cmd_command=cart&cmd_action=buy_now';
    makeRequest(params, true, req_data); 
  }
}

function doAddProduct(form) {
  if (!requestTrigger) {
    showLoading();
    var senddata = new Object();
    var fe = form.elements;
    var req_data = '';
    for (var i = 0; i < fe.length; i++) {
      if (fe[i].type == "radio" || fe[i].type == "checkbox" ) {
        if (fe[i].checked) {
          senddata[fe[i].name] = fe[i].value;
          req_data += fe[i].name + '=' + fe[i].value + '&';
        }
      } else {
        senddata[fe[i].name] = fe[i].value;
        req_data += fe[i].name + '=' + fe[i].value + '&';
      }
    }
    var params = 'cmd_command=cart&cmd_action=add_product';
    makeRequest(params, true, req_data); 
  }

  return false;
}

function doAddProductMultiple(form) {
  if (!requestTrigger) {
    showLoading();
    var senddata = new Object();
    var fe = form.elements;
    var req_data = '';
    for (var i = 0; i < fe.length; i++) {
      if (fe[i].type == "radio" || fe[i].type == "checkbox" ) {
        if (fe[i].checked) {
          senddata[fe[i].name] = fe[i].value;
          req_data += fe[i].name + '=' + fe[i].value + '&';
        }
      } else {
        senddata[fe[i].name] = fe[i].value;
        req_data += fe[i].name + '=' + fe[i].value + '&';
      }
    }
    var params = 'cmd_command=cart&cmd_action=multiple_products_add_product';
    makeRequest(params, true, req_data); 
  }

  return false;
}

