

/*
* Objekt pro zpracování výstupu ze serveru
*
*/
function ajaxKosik(url) {
	this.url = url;				// -- adresa skriptu, který bude volán
	this.asynch = false;	// -- příznak zda má být volání asynchronní
	this.method = "GET";	// -- metoda odesílaných údajů z klienta
	this.result = "";			// -- výsledek který vrátil skript ze serveru
	this.getParams = ""		// -- GET parametry
	this.winDetail = false;
	this.soucet = 1;      // -- příznak, zda se mají přidávané kusy přičítat k již existujícím (1) nebo přepisovat (0)
  this.timeLoading =500;// -- čas v milisekundách, jak dlouho se má zobrazovat info o průběhu zpracovávání požadavku - vložení do košíku
	this.timeStart = null;// -- pokud je nastaven asynchronní zápis, tak je zde uložen startovací čas požadavku
  this.Cena = 0;				// -- celková cena košíku
	this.Polozek = 0;			// -- počet položek v košíku
	this.CenaDph = 0;			// -- celková cena s DPH v košíku
	this.IDProduktu = 0;  // -- ID produktu který se aktualizuje, tato hodnota se načítá z vráceného AJAXu
	this.mnozstviProduktu;// -- množství produktu v aktuálním košíku

	this.getCookie();
	this.loadingDiv = false;  // -- info div s průběhem zpracování požadavku
	this.afterPost = false;   // -- tady se může připojit událost, která bude zavolána po aktualizaci košíku
	this.visbleAlways = false;
}

ajaxKosik.prototype.setLoadingDiv = function(div) {
  this.loadingDiv = div;
}

ajaxKosik.prototype.getCookie = function() {
	// -- načtení informací o košíku pokud již existuje
  var c = new String(document.cookie);
  var i1 = c.indexOf('KOSIK=');

  if (i1 >= 0) {
    var i2 = c.indexOf(';',i1);
    var data = c.substring(i1,i2).split('=');

    if (data.length == 2) {
      var cArr = data[1].split('|');
    	this.Polozek = cArr[2];
    	this.Cena = cArr[0];
    	this.CenaDph = cArr[1];
    }
	}
}

ajaxKosik.prototype.getMnozstvi = function(IDProduktu) {
	return Number(document.getElementById("mnoz" + IDProduktu.toString()).value);
}

ajaxKosik.prototype.getCena = function(IDProduktu) {
	return Number(document.getElementById("cena" + IDProduktu.toString()).value);
}

ajaxKosik.prototype.getDph = function(IDProduktu) {
	return Number(document.getElementById("dph" + IDProduktu.toString()).value);
}

/*
*  Naplní objekt získanými hodnotami ze serveru a aktualizuje zobrazení.
*/
ajaxKosik.prototype.refreshDisplay = function() {
	var cArr = this.result.split('|');
	this.Cena = cArr[0];
	this.CenaDph = cArr[1];
	this.Polozek = cArr[2];
	this.IDProduktu = cArr[3];
	this.mnozstviProduktu = cArr[4];

	this.setCookie();
	this.setKosikDisplay(this.visbleAlways);
}

/*
* Odeslání požadavku na skript na serveru a příjem odpovědi.
*
*/
ajaxKosik.prototype.load = function() {
	var url = this.url;
	if (this.getParams != "") url = url + "?" + this.getParams;
	//alert(url);
	var request = getAjaxObject();

	if (this.asynch) {
	  sender = this;

	  // -- událost během průběhu asynchronního zpracování
    request.onreadystatechange = function()
          {

            if (request.readyState == 4) {
              sender.timeStart = null;
              if (request.status == 200) {
                sender.result = request.responseText;
                sender.refreshDisplay();
                sender.setKosikProduktDisplay();
              }
              else {
                alert("Chyba při načítání XML dat:" + request.statusText);
              }
              if (sender.afterPost) sender.afterPost(sender);
            }
          }


	  request.open(this.method,url,this.asynch);
	  request.send("");
    this.timeStart = new Date();

    timer = function() {
      var tmp = new Date();
      if (sender.timeStart == null || tmp - sender.timeStart > sender.timeLoading) {
        if (sender.loadingDiv != false) sender.loadingDiv.style.display = 'none';
        clearInterval(sender.interval);
        sender.timeStart = null;
        //alert(tmp - sender.timeStart);
      }
    }

    this.interval = window.setInterval('timer()',100);
	}
	else {
	  request.open(this.method,url,this.asynch);
	  request.send("");
	  this.result = request.responseText;
	  if (sender.afterPost) sender.afterPost(sender);
	  return this.result;
	}
}

/*
* Zapíše produkt s hodnotami definovanými v parametrech do košíku na serveru
* a aktualizuje svůj stav
*/
ajaxKosik.prototype.addProduktSet = function(IDProduktu,mnoz,cena) {

  if (this.timeStart != null) {
    alert('Právě je zpracováván předchozí požadavek!');
    return false;
  }

  if (this.loadingDiv != false) {
    this.loadingDiv.style.display = 'inline';
    var e = document.getElementById('rowProdukt' + IDProduktu);
    if (e) {
      this.loadingDiv.style.position = 'absolute';
      this.loadingDiv.style.top = (e.offsetTop + 100).toString() + 'px';
      //alert(document.body.scrollTop);
    }
  }

	this.getParams = "idr=" + IDProduktu.toString() + "&cena=" + cena.toString() + "&mnoz=" + mnoz.toString() + "&soucet=" + this.soucet.toString();
	this.load();

	if (this.asynch) {
	  return true;
	}
	else {
    this.refreshDisplay();
    this.setKosikProduktDisplay();
  	if (this.loadingDiv != false) this.loadingDiv.style.display = 'none';
  	return this.Polozek > 0
	}
}

/*
* Zapíše vybraný produkt do košíku na serveru a aktualizuje svůj stav košíku
*
*/
ajaxKosik.prototype.addProdukt = function(IDProduktu) {
	var mnoz = this.getMnozstvi(IDProduktu);
	var cena = this.getCena(IDProduktu);

	return this.addProduktSet(IDProduktu,mnoz,cena);
}

/*
 * Zapíše produkt do košíku. Odesílá POSTem všechna formulářová data.
 */
ajaxKosik.prototype.addProduktForm = function(IDProduktu) {
	var instance = this;
    var callback = {
    	onSuccess: function(data) {
    		if (instance.loadingDiv != false) instance.loadingDiv.style.display = 'none';
    		instance.result = data;
    		instance.refreshDisplay();
    		instance.setKosikProduktDisplay();    		
    	},
    	onError: function() {
    		if (instance.loadingDiv != false) instance.loadingDiv.style.display = 'none';
    	    alert('Doslo k chybe!');
    	}
    };
    
    if (this.loadingDiv != false) {
        this.loadingDiv.style.display = 'inline';
        var e = document.getElementById('rowProdukt' + IDProduktu);
        if (e) {
          this.loadingDiv.style.position = 'absolute';
          this.loadingDiv.style.top = (e.offsetTop + 100).toString() + 'px';
        }
    }
    
    var a = new Ajax(callback);
    var url = this.url + "?soucet=" + this.soucet;
    a.connectForm(document.getElementById("fmProdukt" + IDProduktu), url);	
}

/*
*  Obnoví stav košíku dle aktuálního stavu na serveru.
*/
ajaxKosik.prototype.refreshKosik = function() {
  if (this.loadingDiv != false) this.loadingDiv.style.display = 'inline';
	this.getParams = "refresh";
	this.load();
  this.refreshDisplay();
	if (this.loadingDiv != false) this.loadingDiv.style.display = 'none';
	return this.Polozek > 0
}

/*
* Nastaví vrácený výsledek ze serveru do cookies.
*
*/
ajaxKosik.prototype.setCookie = function() {
	document.cookie = 'KOSIK=' + this.result;
}

/*
* Nastaví viditelnost informací o košíku dle aktuálního stavu.
*
*/
ajaxKosik.prototype.setKosikDisplay = function(visible) {
	if (document.getElementById("NavUser")) {
  	if (this.Polozek > 0 || document.getElementById('NavLogin') || visible) {
  	  if (document.getElementById("NavUserKosik")) {
  	    document.getElementById("NavUserKosik").style.display = this.Polozek > 0 || visible ? 'inline' : 'none';
  	  }
  		document.getElementById("NavUser").style.display = "block";
  		document.getElementById("NavUserPol").innerHTML = typeof this.Polozek == "undefined" ? '0' : this.Polozek.toString();
    	document.getElementById("NavUserCena").innerHTML =  typeof this.Cena == "undefined" ? '0' : this.Cena.toString();
    	document.getElementById("NavUserDph").innerHTML =  typeof this.CenaDph == "undefined" ? '0' : this.CenaDph.toString();
    }
    else {
 	    document.getElementById("NavUser").style.display = "none";
//      document.getElementById("NavUserKosik").style.display = 'none';
    }
  }
}

/*
*  Nastaví viditelnost a množství daného produktu s ohledem na jeho stav v košíku.
*/
ajaxKosik.prototype.setKosikProduktDisplay = function() {
  if (document.getElementById('KosikMnozstvi' + this.IDProduktu)) {
    if (this.mnozstviProduktu > 0) {
      document.getElementById('KosikMnozstvi' + this.IDProduktu).style.display = 'inline';
      document.getElementById('km' + this.IDProduktu).innerHTML = this.mnozstviProduktu;
    }
    else {
      document.getElementById('KosikMnozstvi' + this.IDProduktu).style.display = 'none';
    }
  }
}

/*
* Událost která je volána z okna kde je zobrazen detail produktu.
*
*/
ajaxKosik.prototype.detailCallback = function() {
	var mnoz = this.winDetail.document.getElementById("mnoz").value;
	var idr  = this.winDetail.document.getElementById("idr").value;
	var cena = this.winDetail.document.getElementById("cena").value;
	this.addProduktSet(idr,mnoz,cena);
}

