/**
 * StoreDriver
 */
var StoreDriver = new Class({
	cart: null,

  initialize: function(cart){
    this.cart = cart;
  },

	/**
	 * Add the product to the order.
	 */
  add: function(product){
    var cart = this.cart;
    var requestUrl = webshop.buildRequestUrl('addItem');
    jQuery.ajax({
      //'url': 'service/add.php',
      'url': requestUrl,
      'data': product.data,
      'dataType': 'json',
      'type': 'post',
      'success': function(response){
        if (0 != response.errorCode){
            alert(response.errorString);
        }
        else
        {
	    		cart.add(product.update(response.responseData));
        }
      },
      'error': function(response){
        alert(response.responseText);
      }});
	},

  change: function(product){
    var cart = this.cart;
    var requestUrl = webshop.buildRequestUrl('setItemQuantity');
    jQuery.ajax({
      'url': requestUrl,
      'data': product.data,
      'dataType': 'json',
      'type': 'post',
      'success': function(response){
        if (0 != response.errorCode){
            alert(response.errorString);
        }
        else
        {
            cart.change(product.update(response.responseData));
        }
      },
      'error': function(response){
        alert(response.responseText);
      }});
	},

  remove: function(product){
    var cart = this.cart;
    var requestUrl = webshop.buildRequestUrl('removeItem');
    jQuery.ajax({
      'url': requestUrl,
      'data': product.data,
      'dataType': 'json',
      'type': 'post',
      'success': function(response){
        if (0 != response.errorCode){
            alert(response.errorString);
        }
        else
        {
            cart.remove(product);
        }
      },
      'error': function(response){
        alert(response.responseText);
      }});
  },

  buildRequestUrl: function(action){
      var machineHash = (Cookie.get('m')
          ? Cookie.get('m')
          : -1
          );
      var userHash = (Cookie.get('u')
          ? Cookie.get('u')
          : -1
          );
      var requestUrl = '/json/'+action
          +'/m/'+escape(machineHash)
          +'/u/'+escape(userHash)
          ;
      return requestUrl;
  }

});

/**
 * SuggestDriver
 */
var SuggestDriver = new Class({
  search: null,

  initialize: function(search){
    this.search = search;
  },

  suggest: function(query){
    var search = this.search;
    if(!(shop=jQuery('#search-catalog-select').val()))
    	shop='';
    //var requestUrl = webshop.buildRequestUrl('search');
    jQuery.ajax({
      'url': '/suggest.php',
      //'url': requestUrl,
      'data': {'query': query, 'catalog':shop},
      'dataType': 'json',
      'type': 'post',
      'success': function(response){
         search.suggest(response.responseData);
         jQuery('.moresearchresults').attr('href','/zoekresultaten/?livesearch='+jQuery('#livesearch-input').val());
      },
      'error': function(response){
      	if(response.responseText)
        	alert(response.responseText);
      }});
  }

});


/**
 * MapDriver
 */
var MapDriver = new Class({
  mapper: null,

  initialize: function(map){
    this.mapper = map;
  },
  map: function(zip){
    var map = this.mapper;
    jQuery.ajax({
      'url': webshop.buildRequestUrl('zipToLocation'),
      'data': {zip: zip},
      'dataType': 'json',
      'type': 'post',
      'success': function(response){
        map.process(response);
      },
      'error': function(response){
        alert(response.responseText);
      }
    });
  }

});
