var ajax = [];
function pjx(args,fname,method) {
  this.dt=args[1];
  this.args=args[0];
  method=(method)?method:'GET';
  if(method=='post'){method='POST';}
  this.method = method;
  this.r=ghr();
  this.url = this.getURL(fname);
}

function getVal(id) {
  if (id.constructor == Function ) { return id; }
  if (typeof(id)!= 'string') { return id; }
  var element = document.getElementById(id) || document.forms[0].elements[id];
  if(!element){
     alert('ERROR: Cant find HTML element with id or name: ' +
     id+'. Check that an element with name or id='+id+' exists');
     return 0;
  }
  if (element.type == 'select-multiple') {
  var ans = new Array();
    for (var i=0;i<element.length;i++) {
      if (element[i].selected) {
        ans.push(element[i].value);
      }
    }
    return ans;
  }
  if(element.type == 'radio'){
    var ans =[];
    var elms = document.getElementsByTagName('input');
    var endk = elms.length;
    for(var k=0;k<endk;k++){
      if(elms[k].type=='radio' && elms[k].checked && elms[k].id==id){
        ans.push(elms[k].value);
      }
    }
    return ans;
  }
	if(element.nodeName=='A'){
    return element.href;
  } else if(element.nodeName=='FORM'){
    return element.action;
	}
  if(element.type=='div'){
    return element.innerHTML;
  }else{
    return element.value;
  }
}

function fnsplit(arg) {
  var arg2="";
  if (arg == 'NO_CACHE') { return '&pjxrand='  + Math.random() }
  if (arg.indexOf('_-_') != -1) {
    arga = arg.split(/_-_/);
    arg2 += '&' + arga[0] +'='+ encodeURI(arga[1]);
  } else {
    var ans = getVal(arg);
    if ( typeof ans != 'string' ) {
      if ( ans.length == 0 ) { arg2 += '&args=&' + arg + '='; }
      for (var i=0;i < ans.length;i++) {
        arg2 += '&args=' + encodeURI(ans[i]) + '&' + arg + '=' + encodeURI(ans[i]);
      }
    } else {
      arg2 += '&args=' + encodeURI(ans) + '&' + arg + '=' + encodeURI(ans);;
    }
  }
  return arg2;
}

pjx.prototype.send2perl=function() {
  var r = this.r;
	var dt = this.dt;
  var url=this.url;
  var postdata;
  if(this.method=="POST"){
    var idx=url.indexOf('?');
    postdata = url.substr(idx+1);
    url = url.substr(0,idx);
  }
  r.open(this.method,url,true);
  if(this.method=="POST"){
    r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    r.send(postdata);
  }
  if(this.method=="GET"){
    r.send('');
  }
  r.onreadystatechange=handleReturn;
};

handleReturn = function() {
  for( var k=0; k<ajax.length; k++ ) {
    if (ajax[k].r==null) { ajax.splice(k--,1); continue; }
    if ( ajax[k].r.readyState== 4) { 
      var rsp = ajax[k].r.responseText;  /* the response from perl */
      var splitval = '__pjx__';  /* to split text */
      /* fix IE problems with undef values in an Array getting squashed*/
      rsp = rsp.replace(splitval+splitval+'g',splitval+" "+splitval);
      var data = rsp.split(splitval);  
      dt = ajax[k].dt;
      if (dt.constructor != Array) { dt=[dt]; }
      if (data.constructor != Array) { data=[data]; }
      if (typeof(dt[0])!='function') {
        for ( var i=0; i<dt.length; i++ ) {
          var div = document.getElementById(dt[i]);
					if( data[i] != '' ){
         		if (div.type =='text' || div.type=='textarea' || div.type=='hidden' ) {
         		  div.value=data[i];
         		} else{
         		  div.innerHTML = data[i];
         		}
					}
        }
      } else if (typeof(dt[0])=='function') {
         var d=data;
         var str = "dt[0](";
         for(m=0;m<d.length-1;m++){
           str+= "d[" + m + "],";
         }
         str+="d[" + m +"])";
         eval(str);
      }
      ajax.splice(k--,1);
    }
  }
};

pjx.prototype.getURL=function(fname) {
  var args = this.args;
  var url= 'fname=' + fname;
  for (var i=0;i<args.length;i++) {
    url=url + args[i];
  }
  return url;
};
var ghr=getghr();
function getghr(){
    if(typeof XMLHttpRequest != "undefined")
    {
        return function(){return new XMLHttpRequest();}
    }
    var msv= ["Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0",
    "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0",
    "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
    for(var j=0;j<=msv.length;j++){
        try
        {
            A = new ActiveXObject(msv[j]);
            if(A){ 
              return function(){return new ActiveXObject(msv[j]);}
            }
        }
        catch(e) { }
     }
     return false;
}


function jsdebug(){
    var tmp = document.getElementById('pjxdebugrequest').innerHTML = "<br><pre>";
    for( var i=0; i < ajax.length; i++ ) {
      tmp += '<a href= '+ ajax[i].url +' target=_blank>' +
      decodeURI(ajax[i].url) + ' </a><br>';
    }
    document.getElementById('pjxdebugrequest').innerHTML = tmp + "</pre>";
}

function product_body_content() {
  var args = product_body_content.arguments;
  for( var i=0; i<args[0].length;i++ ) {
    args[0][i] = fnsplit(args[0][i]);
  }
  var l = ajax.length;
  ajax[l]= new pjx(args,"product_body_content",args[2]);
  ajax[l].url = '?' + ajax[l].url;
  ajax[l].send2perl();
  ;
}
function put_to_cart() {
  var args = put_to_cart.arguments;
  for( var i=0; i<args[0].length;i++ ) {
    args[0][i] = fnsplit(args[0][i]);
  }
  var l = ajax.length;
  ajax[l]= new pjx(args,"put_to_cart",args[2]);
  ajax[l].url = '?' + ajax[l].url;
  ajax[l].send2perl();
  ;
}
function leftmenu_catalog_action() {
  var args = leftmenu_catalog_action.arguments;
  for( var i=0; i<args[0].length;i++ ) {
    args[0][i] = fnsplit(args[0][i]);
  }
  var l = ajax.length;
  ajax[l]= new pjx(args,"leftmenu_catalog_action",args[2]);
  ajax[l].url = '?' + ajax[l].url;
  ajax[l].send2perl();
  ;
}
function leftmenu_catalog_body_content() {
  var args = leftmenu_catalog_body_content.arguments;
  for( var i=0; i<args[0].length;i++ ) {
    args[0][i] = fnsplit(args[0][i]);
  }
  var l = ajax.length;
  ajax[l]= new pjx(args,"leftmenu_catalog_body_content",args[2]);
  ajax[l].url = '?' + ajax[l].url;
  ajax[l].send2perl();
  ;
}
function topmenu_action() {
  var args = topmenu_action.arguments;
  for( var i=0; i<args[0].length;i++ ) {
    args[0][i] = fnsplit(args[0][i]);
  }
  var l = ajax.length;
  ajax[l]= new pjx(args,"topmenu_action",args[2]);
  ajax[l].url = '?' + ajax[l].url;
  ajax[l].send2perl();
  ;
}
function transaction_ask_comment() {
  var args = transaction_ask_comment.arguments;
  for( var i=0; i<args[0].length;i++ ) {
    args[0][i] = fnsplit(args[0][i]);
  }
  var l = ajax.length;
  ajax[l]= new pjx(args,"transaction_ask_comment",args[2]);
  ajax[l].url = '?' + ajax[l].url;
  ajax[l].send2perl();
  ;
}

