var DEBUG = false;
var baseurl = 'http://www.snus-kaufen.de/';

function sendData (url, prod) {
	var rand   = Math.random(9999);
	var pars   = 'product_id=' + prod + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: showLoad, onComplete: showResponse} );
}

function manageCart( task, item ) {
   var url = baseurl + 'ajax/' + task;
   sendData( url, item );
}



function clearCart () {
   	var urlClear = baseurl + 'ajax/clear';
	var rand   = Math.random(9999);
	var pars   = 'clear=true&rand=' + rand;
	if (confirm('Möchten Sie diesen Artikel aus dem Warenkorb ?')) var myAjax = new Ajax.Request( urlClear, {method: 'post', parameters: pars, onLoading: showLoad, onComplete: showClearResponse} );
}

function showClearResponse (originalRequest) {
	$('loading').style.display = "none";
	$('btnLeegmaken').style.display = "none";
	$('btnWinkelwagen').style.display = "none";
	$('cartInfo').innerHTML = originalRequest.responseText;
}

function showResponse (originalRequest) {
	$('loading').style.display = "none";
	$('btnLeegmaken').style.display = "block";
	$('btnWinkelwagen').style.display = "block";
	$('cartInfo').innerHTML = originalRequest.responseText;
}

function showLoad () {
	$('loading').style.display = "block";
	$('btnKassa').style.display = "none";
}

function winkelwagenPlus ( prod ) {
	var wwUrl  = baseurl + 'warenkorb/plus/'; 
	var rand   = Math.random(9999);
	var pars   = 'plus=1&rand=' + rand;
	var myAjax = new Ajax.Request( wwUrl + prod, {method: 'post', parameters: pars, onLoading: winkelwagenLoad, onComplete: winkelwagenResponse} );
}

function winkelwagenMin ( prod ) {
	var wwUrl  = baseurl + 'warenkorb/min/'; 
	var rand   = Math.random(9999);
	var pars   = 'min=1&rand=' + rand;
	var myAjax = new Ajax.Request( wwUrl + prod, {method: 'post', parameters: pars, onLoading: winkelwagenLoad, onComplete: winkelwagenResponse} );
}

function winkelwagenVerwijder ( prod ) {
	var wwUrl  = baseurl + 'warenkorb/verwijder/'; 
	var rand   = Math.random(9999);
	var pars   = 'min=1&rand=' + rand;
	if (confirm('Möchten Sie diesen Artikel aus dem Warenkorb?')) var myAjax = new Ajax.Request( wwUrl + prod, {method: 'post', parameters: pars, onLoading: winkelwagenLoad, onComplete: winkelwagenResponse} );
}

function winkelwagenResponse (originalRequest) {
	$('wwLoading').style.display = "none";
	$('wwDetails').innerHTML = originalRequest.responseText;
}

function winkelwagenLoad () {
	$('wwLoading').style.display = "block";
}

function winkelwagenLoadHide () {
	$('wwLoading').style.display = "none";
}
function checkFormItem(evt){

	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var url    = baseurl + 'ajax/checkInput';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function checkDatum(evt){
	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var url    = baseurl + 'ajax/checkDatum';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function checkGeboorteDatum(evt){
	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var url    = baseurl + 'ajax/checkGeboorteDatum';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function checkPostcode(evt){
	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var url    = baseurl + 'ajax/checkPostcode';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function checkEmail(evt){
	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var url    = baseurl + 'ajax/checkEmail';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function checkWachtwoord(evt){
	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var url    = baseurl + 'ajax/checkWachtwoord';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function checkVergelijkWachtwoord(evt){
	var form   = document.forms[0].name;
	var elem   = Event.element(evt);
	var wachtwoord = $('wachtwoord').value;
	var url    = baseurl + 'ajax/checkVergelijkWachtwoord';
	var rand   = Math.random(9999);
	var pars   = 'id=' + elem.id + '&value=' + elem.value + '&wachtwoord=' + wachtwoord + '&form= ' + form + '&rand=' + rand;
	var myAjax = new Ajax.Request( url, {method: 'post', parameters: pars, onLoading: false, onComplete: responseForm} );
}

function responseForm(val) {
	var data = unserialize(val.responseText);
	if (DEBUG == true) {
	    $('debug').style.display = "block";
	    $('debug').innerHTML = '<div id="ajaxErr"><I>ajaxResponse </I> {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + data + ' <br>}<br></div>';
	}

	if (data[0] ==  'error') {
	    if ($(data[1]+ 'Err')) removeElement('errors', data[1]+ 'Err');
	    $('errors').style.display = "block";
	    $('errors').innerHTML += '<div id="' + data[1] + 'Err">' + data[2] + '</div>';
	    // $(data[1]).addClassName('error');
	}
	else if (data[0] == 'noerror') {
	    if ($(data[1]+ 'Err')) removeElement('errors', data[1]+ 'Err');
	    // $(data[1]).removeClassName('error'); 
	    if ($('errors').innerHTML.blank()) $('errors').style.display = "none";
	}
	else {
	    if ($('ajaxErr')) removeElement('errors', 'ajaxErr');
	    $('errors').style.display = "block";
	    $('errors').innerHTML += '<div id="ajaxErr"><I>ajaxError </I> {<br/>' + data + ' }</div>';
	}
}

function removeElement(parent,div){
   var d1=document.getElementById(parent);
   var d2=document.getElementById(div);
   d1.removeChild(d2);
}

function unserialize ( inp ) {
 
    error = 0;
    if (inp == "" || inp.length < 2) {
        errormsg = "input is too short";
        return;
    }
    var val, kret, vret, cval;
    var type = inp.charAt(0);
    var cont = inp.substring(2);
    var size = 0, divpos = 0, endcont = 0, rest = "", next = "";
 
    switch (type) {
    case "N": // null
        if (inp.charAt(1) != ";") {
            errormsg = "missing ; for null";
        }
        // leave val undefined
        rest = cont;
        break;
    case "b": // boolean
        if (!/[01];/.test(cont.substring(0,2))) {
            errormsg = "value not 0 or 1, or missing ; for boolean";
        }
        val = (cont.charAt(0) == "1");
        rest = cont.substring(2);  //changed...
        break;
    case "s": // string
        val = "";
        divpos = cont.indexOf(":");
        if (divpos == -1) {
            errormsg = "missing : for string";
            break;
        }
        size = parseInt(cont.substring(0, divpos));
        if (size == 0) {
            if (cont.length - divpos < 4) {
                errormsg = "string is too short";
                break;
            }
            rest = cont.substring(divpos + 4);
            break;
        }
        if ((cont.length - divpos - size) < 4) {
            errormsg = "string is too short";
            break;
        }
        if (cont.substring(divpos + 2 + size, divpos + 4 + size) != "\";") {
            errormsg = "string is too long, or missing \";";
        }
        val = cont.substring(divpos + 2, divpos + 2 + size);
        rest = cont.substring(divpos + 4 + size);
        break;
    case "i": // integer
    case "d": // float
        var dotfound = 0;
        for (var i = 0; i < cont.length; i++) {
            cval = cont.charAt(i);
            if (isNaN(parseInt(cval)) && !(type == "d" && cval == "." && !dotfound++)) {
                endcont = i;
                break;
            }
        }
        if (!endcont || cont.charAt(endcont) != ";") {
            errormsg = "missing or invalid value, or missing ; for int/float";
        }
        val = cont.substring(0, endcont);
        val = (type == "i" ? parseInt(val) : parseFloat(val));
        rest = cont.substring(endcont + 1);
        break;
    case "a": // array
        if (cont.length < 4) {
            errormsg = "array is too short";
            return;
        }
        divpos = cont.indexOf(":", 1);
        if (divpos == -1) {
            errormsg = "missing : for array";
            return;
        }
        size = parseInt(cont.substring(1*divpos, 0));  //changed...
        cont = cont.substring(divpos + 2);
        val = new Array();
        if (cont.length < 1) {
            errormsg = "array is too short";
            return;
        }
        for (var i = 0; i + 1 < size * 2; i += 2) {
            kret = unserialize(cont, 1);
            if (error || kret[0] == undefined || kret[1] == "") {
                errormsg = "missing or invalid key, or missing value for array";
                return;
            }
            vret = unserialize(kret[1], 1);
            if (error) {
                errormsg = "invalid value for array";
                return;
            }
            val[kret[0]] = vret[0];
            cont = vret[1];
        }
        if (cont.charAt(0) != "}") {
            errormsg = "missing ending }, or too many values for array";
            return;
        }
        rest = cont.substring(1);
        break;
    case "O": // object
        divpos = cont.indexOf(":");
        if (divpos == -1) {
            errormsg = "missing : for object";
            return;
        }
        size = parseInt(cont.substring(0, divpos));
        var objname = cont.substring(divpos + 2, divpos + 2 + size);
        if (cont.substring(divpos + 2 + size, divpos + 4 + size) != "\":") {
            errormsg = "object name is too long, or missing \":";
            return;
        }
        var objprops = unserialize("a:" + cont.substring(divpos + 4 + size), 1);
        if (error) {
            errormsg = "invalid object properties";
            return;
        }
        rest = objprops[1];
        var objout = "function " + objname + "(){";
        for (key in objprops[0]) {
            objout += "this['" + key + "']=objprops[0]['" + key + "'];";
        }
        objout += "}val=new " + objname + "();";
        eval(objout);
        break;
    default:
        errormsg = "invalid input type";
    }
    return (arguments.length == 1 ? val : [val, rest]);
}	

  /* Returns the class name of the argument or undefined if 
     it's not a valid JavaScript object. 
  */  
  function getObjectClass(obj) {  
      if (obj && obj.constructor && obj.constructor.toString) {  
          var arr = obj.constructor.toString().match(  
              /function\s*(\w+)/);  
    
          if (arr && arr.length == 2) {  
              return arr[1];  
          }  
      }  
    
      return undefined;  
  }  
    
  /* Serializes the given argument, PHP-style. 
   
     The type mapping is as follows: 
   
     JavaScript Type    PHP Type 
     ---------------    -------- 
     Number             Integer or Decimal 
     String             String 
     Boolean            Boolean 
     Array              Array 
     Object             Object 
     undefined          Null 
   
      The special JavaScript object null also becomes PHP Null. 
      This function may not handle associative arrays or array 
      objects with additional properties well. Returns false when 
      called with an argument that can't be represented in PHP. 
   */  
   function phpSerialize(val) {  
       switch (typeof(val)) {  
       case "number":  
           if (val == NaN || val == Infinity) {  
               return false;  
           }  
     
           return (Math.floor(val) == val ? "i" : "d") + ":" +  
               val + ";";  
     
       case "string":  
           return "s:" + val.length + ":\"" + val + "\";";  
     
       case "boolean":  
           return "b:" + (val ? "1" : "0") + ";";  
     
       case "object":  
           if (val == null) {  
               return "N;";  
           } else if (val instanceof Array) {  
               var idxobj = { idx: -1 };  
     
               return "a:" + val.length + ":{" + val.map(  
                   function (item) {  
                      this.idx++;  
     
                       var ser = phpSerialize(item);  
     
                       return ser ?  
                           phpSerialize(this.idx) + ser :  
                           false;  
                   }, idxobj).filter(  
                   function (item) {  
                       return item;  
                   }).join("") + "}";  
           } else {  
               var class_name = getObjectClass(val);  
     
               if (class_name == undefined) {  
                   return false;  
               }  
     
               var props = new Array();  
     
               for (var prop in val) {  
                   var ser = phpSerialize(val[prop]);  
     
                   if (ser) {  
                       props.push(phpSerialize(prop) + ser);  
                   }  
               }  
     
/*               return "O:" + class_name.length + ":\"" +  
                   class_name + "\":" + props.length + ":{" +  
                   props.join("") + "}"; */  
               return "a:" +  props.length + ":{" +  
                   props.join("") + "}";  
           }  
       case "undefined":  
          return "N;";  
      }  
    
      return false;  
  } 