jQuery(document).ready(function($) {
	try{document.execCommand('BackgroundImageCache', false, true);} catch(e) {}
	if ($.fn.nyroModal)
	{
		$.fn.nyroModal.settings.minWidth = 200;
		$.fn.nyroModal.settings.minHeight = 80;
		//$.fn.nyroModal.settings.width = 250;
		//$.fn.nyroModal.settings.height = 100;
		$.fn.modulize = function($settings) {
			var $settings = $settings || {};
			return this.each(function(){
			  var $t = $(this);
				var sizes = ($t.attr('size') || '').split('x');
				if ( sizes.length = 2 )
				{
					//$settings.width = sizes[0];
					//$settings.height = sizes[1];
					$settings = {width: sizes[0], height: sizes[1]};
				}
				$t.nyroModal($settings);
			});
		};
		$('a.popup').modulize();
		$('a.modal').modulize({modal: true});
	}
});
var TEMPLATE = TEMPLATE || false;
var Fn = function () {};
var webRoot = '/';
var buildURL = function(controller, action) {
	if ( TEMPLATE ) return controller;
	var url = webRoot + '/' + controller;
	if ( !action && !controller )
		throw "No URL Specified";
	if ( action )
		url += '/' + action;
	return url.replace(/[\/]{2,}/, '/');
};


var validateForm = function (form, url, is_obj, in_div)
{
	if(is_obj == undefined)
		is_obj = true;
	if (in_div == undefined)
		in_div = '';
	jQuery(form).submit(function(){
		var $t = jQuery(this);
		var result = false;
		jQuery.ajaxSetup({async: false});
		jQuery.post(url, $t.serialize(), function(dataraw) {
			if (is_obj)
			{
				data = eval('(' + dataraw + ')');
				if (data.errorString) {
					result = false;
					$.fn.nyroModalManual({
						content: data.errorString
					})
				} else {
					if (data.responseData.url)
						window.location = data.responseData.url;
					else
						result = true;
				}
			}
			else
			{
				data = dataraw;
				if (data) {
					result = false;
					if (in_div)
					{
						document.getElementById(in_div).innerHTML = data;
					}
					else
					{
						$.fn.nyroModalManual({
							content: data
						})
					}
				} else {
					result = true;
				}
			}
		});

		jQuery.ajaxSetup({async: true});
		//never submit
		if ( result ) return true;
		return false;
	})
}

jQuery(document).ready(function(){
	SearchForm.init();
	Minicart.init();
	Catalog.init();
	Cart.init();
	OrderHistory.init();
	InvoiceHistory.init();
	TheSettingsInit();

	/**
	 *	Handle "search: filter by quality = summer" 
	 */
	$(".summersearch").click(function() {
		
		if ($(".summersearch").hasClass('pseudobutton')) {
			$(".summersearch").removeClass('pseudobutton').addClass('pseudobuttonpressed');
			window.location = $('input[name="location"]').val() + '?' + $('#sort-selector').val() + $('#ipp-selector').val() + '&qual=summer';
		} else {
			$(".summersearch").removeClass('pseudobuttonpressed').addClass('pseudobutton');			
			window.location = $('input[name="location"]').val() + '?' + $('#sort-selector').val() + $('#ipp-selector').val();
		}
		
	});

	/**
	 *	Handle "search: filter by quality = winter" 
	 */
	$(".wintersearch").click(function() {
		
		if ($(".wintersearch").hasClass('pseudobutton')) {
			$(".wintersearch").removeClass('pseudobutton').addClass('pseudobuttonpressed');
			window.location = $('input[name="location"]').val() + '?' + $('#sort-selector').val() + $('#ipp-selector').val() + '&qual=winter';
		} else {
			$(".wintersearch").removeClass('pseudobuttonpressed').addClass('pseudobutton');
			window.location = $('input[name="location"]').val() + '?' + $('#sort-selector').val() + $('#ipp-selector').val();
		}
		
	});


});


var TheSettingsInit = function() {	
	
	if ($("#currency-selector").val() == '1') {
		$("#currencyfactorRow").hide();
	} else {
		$('#currencySymbol').html($('#currency-selector option:selected').text());
	}
	
	$("#currency-selector").change(function () {
		if ($(this).val() == '1') {
			$("#currencyfactorRow").hide();
		} else {
			$("#currencyfactorRow").show();
		}
		$('#currencySymbol').html($('#currency-selector option:selected').text());
	})
	
}


var SearchForm = function() {
	/**
	 * SearchForm.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		$('#quicksearch-criteria').focus();

		$('#advanced-search-form').submit(function(){
			SearchForm.setAreserve();
			$('#stock').val(($('#stock-checkbox').attr('checked') ? $('#stock-checkbox').val() : 0));
		});
		
		if ($("#car-brand").val()) {
			jQuery.post(
						'/zoek/getCarModels/',
						{"brand_id": $("#car-brand").val() },
						function(data) {
							$('#car-model').html(data);
							$('#car-type option').each(
								function(){if ($(this).val() != '') $(this).remove();
							});
							$('#tyre-size option').each(
								function(){if ($(this).val() != '') $(this).remove();
							});
						});		
		};

		$('#car-brand').change(function(){
			if($(this).val() != "") {
				jQuery.post(
					'/zoek/getCarModels/',
					{"brand_id": $(this).val() },
					function(data) {
						$('#car-model').html(data);
						$('#car-type option').each(
							function(){if ($(this).val() != '') $(this).remove();
						});
						$('#tyre-size option').each(
							function(){if ($(this).val() != '') $(this).remove();
						});
	 				});
			}
		});

		$('#car-model').change(function(){
			if($(this).val() != "") {
				jQuery.post(
					'/zoek/getCarTypes/',
					{"model_id": $(this).val() },
					function(data) {
						$('#car-type').html(data);
						$('#tyre-size option').each(
							function(){if ($(this).val() != '') $(this).remove();
						});
	 				});
			}
		});

		$('#car-type').change(function(){
			if($(this).val() != "") {
				jQuery.post(
					'/zoek/getCarTyreSizes/',
					{"type_id": $(this).val() },
					function(data) {
						$('#tyre-size').html(data);
	 				});
			}
		});

		$('#car-search-form').submit(function(){
			if ($('#tyre-size').val() == "")
				return false;

			$('#car-search-tab input[name=filter_keyword]').val($('#tyre-size').val());
			return true;
		});

	};

	/**
	 * SearchForm.setQuickSearchTabActive
	 *
	 * @param void
	 * @return void
	 */
	var setQuickSearchTabActive = function()
	{
		$('#advanced-search-tab').hide();
		$('#quick-search-tab').show();
		$('#car-search-tab').hide();
		$('#quick-search-tab-link').addClass('active');
		$('#advanced-search-tab-link').removeClass('active');
		$('#car-search-tab-link').removeClass('active');
	};

	/**
	 * SearchForm.setAdvancedSearchTabActive
	 *
	 * @param void
	 * @return void
	 */
	var setAdvancedSearchTabActive = function()
	{
		$('#quick-search-tab').hide();
		$('#advanced-search-tab').show();
		$('#car-search-tab').hide();
		$('#advanced-search-tab-link').addClass('active');
		$('#quick-search-tab-link').removeClass('active');
		$('#car-search-tab-link').removeClass('active');
	};

	/**
	 * SearchForm.setCarSearchTabActive
	 *
	 * @param void
	 * @return void
	 */
	var setCarSearchTabActive = function()
	{
		$('#quick-search-tab').hide();
		$('#advanced-search-tab').hide();
		$('#car-search-tab').show();
		$('#advanced-search-tab-link').removeClass('active');
		$('#quick-search-tab-link').removeClass('active');
		$('#car-search-tab-link').addClass('active');
	};

	/**
	 * SearchForm.carSearchTabInit
	 *
	 * @param void
	 * @return void
	 */
	var carSearchTabInit = function(brand_id, model_id, type_id, tyre_size)
	{
		if (brand_id) {
			$('#car-brand').val(brand_id);
			jQuery.post(
				'/zoek/getCarModels/',
				{"brand_id": brand_id },
				function(data) {
					$('#car-model').html(data);
					if (model_id) {
						$('#car-model').val(model_id);
					}
				}
			);

			if (model_id) {
				jQuery.post(
					'/zoek/getCarTypes/',
					{"model_id": model_id },
					function(data) {
						$('#car-type').html(data);
						if (type_id) {
							$('#car-type').val(type_id);
						}
			 		}
				);

				if (type_id) {		
					jQuery.post(
						'/zoek/getCarTyreSizes/',
						{"type_id": type_id },
						function(data) {
							$('#tyre-size').html(data);
							if (tyre_size) {
								$('#tyre-size').val(tyre_size)
							}
						}
					);
				}
			}
		}
	};

	/**
	 * SearchForm.setAreserve
	 *
	 * @param void
	 * @return void
	 */
	var setAreserve = function()
	{
		var run_flat = ($('#run-flat').attr('checked') ? 1 : 0);
		var studded = ($('#studded').attr('checked') ? 2 : 0);
		var areserve = run_flat + studded;  
		$('#areserve').val(areserve);
	};

	return {
		init : function() { init(); },
		setQuickSearchTabActive : function() { setQuickSearchTabActive(); },
		setAdvancedSearchTabActive : function() { setAdvancedSearchTabActive(); },
		setCarSearchTabActive : function() { setCarSearchTabActive(); },
		carSearchTabInit : function(brand_id, model_id, type_id, tyre_size) { carSearchTabInit(brand_id, model_id, type_id, tyre_size); },
		setAreserve : function() { setAreserve(); }
	};
}();

var Minicart = function() {
	
	/**
	 * Minicart.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		jQuery("body").click(function(e){
			if (jQuery("#basketContainer").css('display') != 'none') {
				var el = jQuery("#mini-cart #cart-edit");
				if ((e.pageX < el.offset().left || e.pageX > (el.offset().left + el.width()))
					|| (e.pageY < el.offset().top || e.pageY > (el.offset().top + el.height() + 38)))
				{
					jQuery("#basketContainer").slideUp('slow');
				}
			}
		});

		jQuery("#mini-cart .openBasketLink").click(function(){
			toggleMinicart();
			return false;
		});
		
		// do ajax request on form submit and update data on result
		jQuery('#mini-cart #cart-edit').submit(function(e){
			finishQtyEdit(e);
			return false;
		});
		
		jQuery('#mini-cart .remove').click(function(e){
			remove = jQuery(e.target);
			patt = new RegExp(/remove-([0-9]+)/);
			itemId = patt.exec(remove.attr('id'))[1];

			jQuery.post(
				'/winkelwagen/removeItemWithCartResponse/',
				{"item_id": itemId },
				function(data) {
					$('#mini-cart').html(data);
					Minicart.init();
					jQuery("#basketContainer").show();
	 			});
			
			/*jQuery.getJSON('/ajax/delete.php', {"item_id": itemId }, function(json){
				alert("AJAX result: "+json.result +
						  "\ntotalprice: " + json.totalprice);
				jQuery('#mini-cart .total .price em').html(json.totalprice);
				jQuery('#mini-cart #mini-cart-'+remove.attr('id').substr(7)).remove();
			});*/
			return false;
		});

		jQuery('#floating-toolbar input').attr('readonly', 'readonly');
		jQuery('#floating-toolbar-inner .basket').remove();
		jQuery('#floating-toolbar-inner .basketBottom').remove();
		jQuery('#floating-toolbar-inner .links').remove();
		jQuery('#floating-toolbar-inner .submit').parent().parent().remove();
		jQuery('#floating-toolbar .remove').remove();
	};
	
	var toggleMinicart = function()
	{
		if(jQuery("#basketContainer").css('display') == 'none') {
			jQuery("#basketContainer").slideDown('slow');
		} else {
			jQuery("#basketContainer").slideUp('slow');
		}
	};
	
	var finishQtyEdit = function(e)
	{
		if (jQuery("#cart-edit tr").length < 3)
			return;

		form = jQuery(e.target);
		//patt = new RegExp(/option-edit-([0-9]+)/);
		//itemId = patt.exec(form.attr('id'))[1];

		jQuery.post(
			'/winkelwagen/updateItemWithCartResponse/',
			form.serialize(),
			function(data) {
				$('#mini-cart').html(data);
				Minicart.init();
				jQuery("#basketContainer").show();
 			});
	};
	
	return {
		init : function() { init(); }
	};
}();

/**
 * Catalog
 *
 */
var Catalog = function() {

	/**
	 * Catalog.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		//jQuery('.full a').colorbox();
		jQuery('#form-search .addProduct').mouseover(function(){
			jQuery(this).attr('src', '/public/layout/deldo-new/images/icons/basket-hover.png');
		});
		jQuery('#form-search .addProduct').mouseout(function(){
			jQuery(this).attr('src', '/public/layout/deldo-new/images/icons/basket.png');
		});
		jQuery('#form-search .addProduct').click(function(){
			jQuery(this).attr('src', '/public/layout/deldo-new/images/icons/basket-click.png');
		});
		jQuery('#form-search').submit(function(){
			jQuery.ajax({
				type: 'POST',
				async : false,
				url: '/winkelwagen/additemwithcartcontentresponse/',
				data: jQuery(this).serialize(),
				success: function(data, status) {
					$('#mini-cart').html(data);
					//var toolbar_data = data.replace("basketContainer", "basketContainer-toolbar");
					//toolbar_data = toolbar_data.replace("basketBg", "basketBg-toolbar");
					//toolbar_data = toolbar_data.replace("cart-edit", "cart-edit-toolbar");
					//$('#floating-toolbar-inner').html(toolbar_data);
					Minicart.init();
					//$('.quantity-check').val('0');
					//Catalog.showMiniCart();
				},
				error: function(jqXHR, textStatus, errorThrown) {
					alert('There is a communication error with the backend system please try again later.\n\nErrorcode:tradeapp');
				}
			});
			jQuery.ajax({
				type: 'POST',
				async : false,
				url: '/winkelwagen/getfloatbarwithlastaddeditems/',
				data: jQuery(this).serialize(),
				success: function(data) {
					$('#floating-toolbar-inner').html(data);
					$('.quantity-check').val('0');
					Catalog.showFloatCart();
				}});
			return false;
		});
		jQuery('#form-search .quantity-check').keydown(function(event){
			if (event.keyCode == 13 && parseInt($(this).val()))
				return true;

			// Keycode whitelist
			arr = [8,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105];
			var allowed = false;
			for(var i=0, il=arr.length; i<il; i++) {
				if (arr[i] == event.keyCode) {
					allowed = true;
				}
			}
			if (!allowed) return false;
		});
		jQuery('#form-search .quantity-check').keyup(function(event){
			max_val = $("#max-"+$(this).attr('id')).val();
			if (parseInt($(this).val()) > parseInt(max_val)) {
				$(this).val(max_val);
			}
		});
		jQuery('#form-search .quantity-check').blur(function(){
			if ($(this).val() == '')
				$(this).val('0');
		});
		jQuery('#form-search .quantity-check').focus(function(){
			if ($(this).val() == '0')
				$(this).val('');
		});
	}
		
	/**
	 * Show mini cart
	 *
	 */
	var showMiniCart = function(delay)
	{
		if(!delay) {
			delay = 3000;
		}
		//if (self.pageYOffset < 80)
			jQuery("#basketContainer").slideDown('slow').delay(delay).slideUp('slow');
		//else
		//	jQuery("#floating-toolbar").slideDown('slow').delay(delay).slideUp('slow');
	};

	/**
	 * Show float bar cart
	 *
	 */
	var showFloatCart = function(delay)
	{
		if(!delay) {
			delay = 3000;
		}
		jQuery("#floating-toolbar").slideDown('slow').delay(delay).slideUp('slow');
	};
	
	return {
		init : function() { init(); },
		showMiniCart : function() { showMiniCart(); },
		showFloatCart : function() { showFloatCart(); }
	}
}();

/**
 * Catalog
 *
 */
var Cart = function() {

	/**
	 * Catalog.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		if ($('#shoppingCartForm').length) {
			$('#shoppingCartForm .remove-product').click(function(){
				$('.quantity', $(this).parents('tr')).val(0);
				if (!$('#stay-in-cart').length) {
					$('#shoppingCartForm').append('<input id="stay-in-cart" type="hidden" name="stay_in_cart" value="1" />');
				}
				$('#shoppingCartForm').submit();
			});
		}
	}
		
	return {
		init : function() { init(); }
	}
}();

/**
 * OrderHistory
 *
 */
var OrderHistory = function() {

	/**
	 * OrderHistory.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		$('#open-orders-tab-link').click(function(){
			$('#order-history-tab').hide();
			$('#open-orders-tab').show();
			$('#open-orders-tab-link').addClass('active');
			$('#order-history-tab-link').removeClass('active');
			return false;
		});

		$('#order-history-tab-link').click(function(){
			$('#open-orders-tab').hide();
			$('#order-history-tab').show();
			$('#order-history-tab-link').addClass('active');
			$('#open-orders-tab-link').removeClass('active');
			return false;
		});

		$('#open-orders-tab-link').click();
	}
		
	return {
		init : function() { init(); }
	}
}();

/**
 * InvoiceHistory
 *
 */
var InvoiceHistory = function() {

	/**
	 * InvoiceHistory.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		$('#invoices-payed-tab-link').click(function(){
			$('#invoices-not-payed-tab').hide();
			$('#invoices-payed-tab').show();
			$('#invoices-payed-tab-link').addClass('active');
			$('#invoices-not-payed-tab-link').removeClass('active');
			return false;
		});

		$('#invoices-not-payed-tab-link').click(function(){
			$('#invoices-payed-tab').hide();
			$('#invoices-not-payed-tab').show();
			$('#invoices-not-payed-tab-link').addClass('active');
			$('#invoices-payed-tab-link').removeClass('active');
			return false;
		});

		$('#invoices-payed-tab-link').click();
	}
		
	return {
		init : function() { init(); }
	}
}();


