jQuery(document).ready(function(){
	Initialize.init();
	Buttons.init();
	Minicart.init();
	Checkout.init();
	Catalog.init();
});

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
					})*/
					$.fn.colorbox({html: data.errorString, width: 500, height: 350});
				} 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;
						$.fn.colorbox.resize();						
					}
					else
					{
						$.fn.colorbox({html: data, width: 500, height: 350});
						//$.fn.colorbox.resize();
						/*$.fn.nyroModalManual({
							content: data
						})*/
					}
					//$.fn.colorbox.resize();
				} else {
					if (in_div)
					{
						document.getElementById(in_div).innerHTML = '';
						//$.fn.colorbox.resize();						
					}
					result = true;
				}
			}
		});

		jQuery.ajaxSetup({async: true});
		//never submit
		if ( result ) return true;
		return false;
	})
}

/**
 * Initialize
 *
 */
var Initialize = function() {

	/**
	 * Initialize.init
	 * Empty focus, corners and print links
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		jQuery("body").addClass('js-enabled');
		
		jQuery(".colorbox").colorbox();
		
		jQuery(".colorbox-close").live('click' ,function(){
			jQuery.fn.colorbox.close()
		});
		
		jQuery(".empty-focus").each(function(){
			el = jQuery(this);
			el.attr('prefilled', el.val());
			el.focus(function(){
				if (jQuery(this).val() == jQuery(this).attr('prefilled')) {
					jQuery(this).val('');
				}
			});
			el.blur(function(){
				if (!jQuery(this).val()) {
					jQuery(this).val(jQuery(this).attr('prefilled'));
				}
			});
		});
	};
	/*
	var miniCart = function()
	{
		jQuery("#mini-cart .summary").click(function(){
			if(jQuery(".cart-content").css('display') == 'none') {
				jQuery(".cart-content").slideDown('slow');
			} else {
				jQuery(".cart-content").slideUp('slow');
			}
		});
		
		jQuery('#mini-cart .option').click(function(e){
			view = jQuery(e.target);
			
			patt = new RegExp(/mini-cart-([0-9]+)/);
			itemId = patt.exec(view.parent('li').attr('id'))[1];
			edit = jQuery('#option-edit-'+itemId);
			
			// show form
			view.hide();
			edit.show();
		});
		
		// do ajax request on form submit and update data on result
		jQuery('.option-edit').submit(function(e){
			form = jQuery(e.target);
			patt = new RegExp(/option-edit-([0-9]+)/);
			itemId = patt.exec(form.attr('id'))[1];
			
			jQuery.getJSON('/ajax/setQty.php', form.serialize(), function(json){
				alert("AJAX result: "+json.result +
					  "\nitem-id: "+json.itemid +
					  "\nqty: " + json.qty +
					  "\nprice: " + json.price +
					  "\ntotalprice: " + json.totalprice);
				
				jQuery('#mini-cart-' +itemId+ ' .option em').html(json.qty);
				jQuery('#mini-cart-' +itemId+ ' .price em').html(json.price);
				jQuery('#mini-cart .total .price em').html(json.totalprice);
				
				jQuery('#mini-cart-' +itemId+ ' .option-edit').hide();
				jQuery('#mini-cart-' +itemId+ ' .option').show();
			});
			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.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;
		});
	};
	*/
	return {
		init : function() { init(); }
	};
}();

var Minicart = function() {
	
	/**
	 * Minicart.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		jQuery("#mini-cart .summary").click(function(){
			toggleMinicart();
			return false;
		});
		
		jQuery('#mini-cart .option').click(function(e){
			startQtyEdit(e);
			return false;
		});
		
		// do ajax request on form submit and update data on result
		jQuery('.option-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);
					Buttons.styleRCButtons();
					Minicart.init();
					jQuery(".cart-content").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;
		});
	};
	
	var toggleMinicart = function()
	{
		if(jQuery(".cart-content").css('display') == 'none') {
			jQuery(".cart-content").slideDown('slow');
		} else {
			jQuery(".cart-content").slideUp('slow');
		}
	};
	
	var startQtyEdit = function(e)
	{
		view = jQuery(e.target);
		patt = new RegExp(/mini-cart-([0-9]+)/);
		itemId = patt.exec(view.parent('li').attr('id'))[1];
		edit = jQuery('#option-edit-'+itemId);
		
		view.hide();
		edit.show();
	};
	
	var finishQtyEdit = function(e)
	{
		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);
				Buttons.styleRCButtons();
				Minicart.init();
				jQuery(".cart-content").show();
 			});
		
		/*jQuery.getJSON('/ajax/setQty.php', form.serialize(), function(json){
			alert("AJAX result: "+json.result +
				  "\nitem-id: "+json.itemid +
				  "\nqty: " + json.qty +
				  "\nprice: " + json.price +
				  "\ntotalprice: " + json.totalprice);
			
			jQuery('#mini-cart-' +itemId+ ' .option em').html(json.qty);
			jQuery('#mini-cart-' +itemId+ ' .price em').html(json.price);
			jQuery('#mini-cart .total .price em').html(json.totalprice);
			
			jQuery('#mini-cart-' +itemId+ ' .option-edit').hide();
			jQuery('#mini-cart-' +itemId+ ' .option').show();
		});*/
	};
	
	return {
		init : function() { init(); }
	};
}();

/**
 * Buttons
 */
var Buttons = function() {
	
	/**
	 * Buttons.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		styleRCButtons();
	};
	
	/**
	 * Apply round corners to all not alredy styled rc-buttons
	 *
	 * @param void
	 * @return void
	 */
	var styleRCButtons = function()
	{
		jQuery(".rc-button .rc-wrap:not(.ico), .rc-button .rc-wrap .cart").each(function(){
			if(!jQuery(this).parent('.rc-button').hasClass('rounded')) {
				
				jQuery(this).append('<span class="rc-tl"></span>');
				jQuery(this).append('<span class="rc-tr"></span>');
				jQuery(this).append('<span class="rc-bl"></span>');
				jQuery(this).append('<span class="rc-br"></span>');
				jQuery(this).parent('.rc-button').addClass('rounded');
			}
		});
	};
	
	return {
		init : function() { init(); },
		styleRCButtons : function() { styleRCButtons(); }
	};
}();

/**
 * Checkout
 *
 */
var Checkout = function() {

	/**
	 * Checkout.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		jQuery('.add-address').live('click',function(){
			jQuery('#address-form').toggleClass('structural');
			jQuery('.add-address a').toggleClass('open');
			$.fn.colorbox.resize();
		});
	};

	return {
		init : function() { init(); }
	};
}();

/**
 * Catalog
 *
 */
var Catalog = function() {

	/**
	 * Catalog.init
	 *
	 * @param void
	 * @return void
	 */
	var init = function()
	{
		//jQuery('.full a').colorbox();
		
		jQuery('.thumbs').click(function(e){
			target = jQuery(e.target);
			fullLi =  '#full_' + target.parents('li').attr('id').substr(6);
			showImage(fullLi);
			
			return false;
		});
		
		
		jQuery('#product-list tr').mouseover(function(e){
			target = jQuery(e.target);
			tr = target.parents('tr');
			parentClass = '.'+tr.attr('class').replace('hovered', '').replace('odd', '');
			jQuery(parentClass).toggleClass('hovered');
		});
		
		jQuery('#product-list tr').mouseout(function(e){
			target = jQuery(e.target);
			tr = target.parents('tr');
			parentClass = '.'+tr.attr('class').replace('hovered', '').replace('odd', '');
			jQuery(parentClass).toggleClass('hovered');
		});
		
		/*jQuery('#order-data a').click(function(){
			Catalog.showMiniCart();
			return false;
		});*/
		/*jQuery('.order-form').submit(function(){
			jQuery.post(
				jQuery('.order-form').attr('action'),
				jQuery('.order-form').serialize(),
				function(data) {
					$('#mini-cart').html(data);
					Buttons.styleRCButtons();
					Minicart.init();
					Catalog.showMiniCart();
				});

			return false;
		});*/

		jQuery('.order-form').each(function(index) {
			jQuery(this).submit(function(){
				jQuery.post(
					jQuery(this).attr('action'),
					jQuery(this).serialize(),
					function(data) {
						$('#mini-cart').html(data);
						Buttons.styleRCButtons();
						Minicart.init();
						Catalog.showMiniCart();
					});
				return false;
			});
		});

		jQuery('#packed').change(function(){
			jQuery('.price').fadeOut('slow').delay(800);
			jQuery("dd[quantity='" + jQuery('#packed').val() + "']").fadeIn('slow');
			jQuery("#qty").val(jQuery('#packed').val());
		});
	};
	/**
	 * Show image with given id
	 *
	 */
	var showImage = function(id)
	{
		jQuery('.full li.active').fadeOut('slow').removeClass('active');
		jQuery(fullLi).fadeIn('slow').addClass('active');
	};
	/**
	 * Show mini cart
	 *
	 */
	var showMiniCart = function(delay)
	{
		if(!delay) {
			delay = 3000;
		}
		jQuery(".cart-content").slideDown('slow').delay(delay).slideUp('slow');
	};
	
	return {
		init : function() { init(); },
		showMiniCart : function() { showMiniCart(); }
	}
}();
