(function($){

	function sendError(url, call, status, error, browser) {
		$.ajax({
			type:	'post',
			url:	'/admin/sendError',
			data:
			{
			  'url'			: url,
			  'call'		: call,
			  'status'		: status,
			  'error'		: error,
			  'browser'		: browser
			},
			error: function(xhr){
				var msg = '<div id="loginBox"><div class="inner">Sorry but there was an error:<br />' + status + " " + error;
				msg += '<p>Please contact the administrator <a href="mailto: admin@mummade.co.nz">admin@mummade.co.nz</a>.';
				msg += '<br /><br />Please copy the details below and paste them into your email:';
				msg += '<br /><code>- url : ' + url;
				msg += '<br />- call : ' + call;
				msg += '<br />- status : '	+ status;
				msg += '<br />- error : ' + error;
				msg += '<br />- browser : ' + browser;
				msg += '<br />- email failure : ' + xhr.status + ' - ' +xhr.statusText;
				msg += '</code>';
				msg += '</div></div>';
				$("#lightbox").html(msg);

			},
			success: function(data){
				var msg = '<div id="loginBox"><div class="inner">Sorry but there was an error:<br />' + xhr.status + " " + xhr.statusText;
				msg += '<p>The administrator has been informed of the problem, please retry later or contact <a href="mailto: admin@mummade.co.nz">admin@mummade.co.nz</a>.</p></div></div>'
				msg += '</div></div>';
				$("#lightbox").html(msg);

			}
		});
	}

/* Delete product in basket */
	$.fn.deleteProduct = function() {
		return this.each(function(){
		//	$(this).click(function(){
				var $obj = $(this);
				var $obj_id = $obj.parents('tr').find('.qtt input').attr('id').replace('id','');

				$.post('/cart/updateQuantity',
				  {
					'id'  : $obj_id,
					'qty' : 0
				  },
				  function(data){
					if(data && !data.error) {
					  $('.nbItems').load('/cart/getCartQuantity', function(){
							if($('.nbItems').html()==0) {
								$('.main').load('/cart/emptyCart', function(){
									$('.main').removeClass('pTop60').addClass('pTop70')
									Cufon.refresh();
								});
					   			
							} else {
								$obj.parents('table').find('#subtotal').html('$'+data.subtotal);
								$obj.parents('table').find('#shippingtotal').html('$'+data.shipping_total)
								$obj.parents('table').find('#total').html('$'+data.total);
								$obj.parents('tr').fadeOut(800, function() { $(this).remove(); });
							}
					  });
					}
				  },
				  'json'
				);


				return false;
		//	});
		});
	};

	$.fn.resetCartBox = function() {
		return this.each(function(){
			$(this).css({'opacity':0});
			$('div.cartBox').remove();

			$('.archer', this).removeAttr('cufid').html('your<br />cart');
			$('canvas', this).remove();
			$('cufontext', this).contents().unwrap().unwrap();
			var left = $(this).offset().left;
			$('body').append($('<div />')
										.addClass('cartBox')
										.html($(this).html())
										.css({'position': 'fixed', 'left' : left, 'top': 0,'z-index' : '1000' })
							);
			$('div.cartBox').eq(1).remove(); /* chrome bug */
			Cufon.refresh();
		});
	};

/* Transform str price in Int */
	$.fn.price = function() {
		return parseInt($(this).html().replace('$', '')).toFixed(2);
	};

/* Show and display */
	$.fn.display = function() {
		return this.each(function(){
			var rulesParsing = $(this).attr('class');
			var pattern = / /;
			var result = rulesParsing.split(pattern);
			for(i = 0; i < result.length; i++) {
				var rulesRegExp = /display\[(.*)\]/;
				if(rulesRegExp.test(result[i])) {
					var rulesRegExp = /\[(.*)\]/;
					var id = rulesRegExp.exec(result[i])[1];
					if ($(this).is(':checked'))
					{
	  					$('#'+id).hide();
					}
					$(this).change(function(){
						$('#'+id).toggle();
					});				
				}
			}		
			
		});
	};

/* Lightbox */
	$.fn.lightbox = function() {
		return this.each(function(){
			$(this).hide();
			$('body').append($('<div />')
							.attr('id', 'overlay')
							.height($('#page').height())
							.click(function(){
								$('#lightbox').fadeOut(400, function(){ $(this).remove(); });
								$('#overlay').fadeOut(400, function(){ $(this).remove(); });
							})
							.hide()
						)
				 .append($('<div />')
				 			.attr('id', 'lightbox')
							.hide()
							.append($('<div />')
										.attr('id', 'loginBox')
										.append($('<div />')
													.addClass('inner')
													.html($(this).html())
										)
							)
							.append($('<a />')
								.attr('href', '#')
								.addClass('close')
								.click(function(){;
									$('#lightbox').fadeOut(400, function(){ $(this).remove(); });
									$('#overlay').fadeOut(400, function(){ $(this).remove(); });
									return false;
								})
							)
				 		);
					$('#overlay').fadeIn(500)
					$('#lightbox').fadeIn(700)
					if (!$.browser.msie) {
						Cufon.refresh('.entitled');
					}
		});
	};

/* Update address on checkout */
	$.fn.updAdd = function() {
		return this.each(function(){
			$(this).click(function(){
		//		$content = $(this).
				var id = $(this).attr('id');
				$('body').append($('<div />')
							.attr('id', 'overlay')
							.height($('#page').height())
							.click(function(){
								$('#lightbox').fadeOut(400, function(){ $(this).remove(); });
								$('#overlay').fadeOut(400, function(){ $(this).remove(); });
							})
							.hide()
						)
				 .append($('<div />')
				 			.attr('id', 'lightbox')
							.width(450)
							.hide()
							.append($('<form action="/checkout/changeAddress" method="post" />')
										.addClass('letterPattern')
										.load($(this).attr('href')+' #' + id, function() {
											$(this).parents('#lightbox').append($('<a />')
																					.attr('href', '#')
																					.addClass('close')
																					.click(function(){;
																						$('#lightbox').fadeOut(400, function(){ $(this).remove(); });
																						$('#overlay').fadeOut(400, function(){ $(this).remove(); });
																						return false;
																					})
																				)
											if(id == 'billingAdd') {
												$('h4', this)
													.after($('<ul />')
														.css({ 'margin' : '10px 0'})
														.append($('<li />')
															.append($('<input type="checkbox" name="same_billing_address" id="delivery-address-billing" value="1" />')
																.change(function(){
																	if ($(this).is(':checked')) {
																		$url = '/checkout/getAddress';
																		$.ajax({
																			type	: "POST",
																			cache   : false,
																			url     : $url,
																			data	: {'type':'delivery'},
																			dataType: 'json',
																			error: function(xhr){
																				sendError(document.location.href, $url, xhr.status, xhr.statusText, navigator.userAgent + ' ('+$('body').width()+'x'+$('body').height()+')');

																			},
																			success: function(data) {
																				$('input[name="address[id]"]').val(data.address.id);
																				$('input[name="address[user_id]"]').val(data.address.user_id);
																				$('input[name="address[name]"]').val(data.address.name);
																				$('input[name="address[address1]"]').val(data.address.address1);
																				$('input[name="address[address2]"]').val(data.address.address2);
																				$('input[name="address[suburb]"]').val(data.address.suburb);
																				$('input[name="address[city]"]').val(data.address.city);
																				$('input[name="address[postcode]"]').val(data.address.postcode);
																				$('input[name="address[phonenumber]"]').val(data.address.phonenumber);

																				$select = $('select[name="address[region_id]"]');
																				$('option:selected', $select).removeAttr('selected');
																				$option = $('option[value='+data.address.region_id+']', $select);
																				$option.attr('selected', 'selected');

																				if ($select.parents('.jqTransformSelectWrapper').length) {
																					var index		= $('select').index($select);
																					var indexOpt	= $('option', $select).index($option);
																					$select.parents('.jqTransformSelectWrapper').find('span').html($option.html());
																					$ul = $('.jqTransformSelectUl').eq(index);
																					$('li a', $ul).removeClass('selected');
																					$('li', $ul).eq(indexOpt).find('a').addClass('selected');
																				}
																			}

																		});
																	}
																})
															)
															.append($('<label for="delivery-address-billing">Same as delivery address</label>'))
														)
													)
												$('input[type=text]', this).keydown(function(){
													$(this).parents('fieldset').find('input[name=same_billing_address]').removeAttr('checked');
													$(this).parents('fieldset').find('.jqTransformCheckbox').removeClass('jqTransformChecked');
												})
												$('select', this).change(function(){
													$(this).parents('fieldset').find('input[name=same_billing_address]').removeAttr('checked');
													$(this).parents('fieldset').find('.jqTransformCheckbox').removeClass('jqTransformChecked');
												})
											}
											$('.inner-2', this).append($('<button type="submit"><span>Update</span></button>'));
											Cufon.refresh();
											$(this).jqTransform();
											$(this).validationEngine({
												promptPosition: 'topRight',
												unbindEngine : false,
												success : function() {
													$this	= $("#lightbox form");
													$.ajax({
														type	: "POST",
														cache   : false,
														url     : $this.attr('action'),
														data	: $this.serializeArray(),
														dataType: 'json',
														error: function(xhr){
															sendError(document.location.href, $this.attr('action'), xhr.status, xhr.statusText, navigator.userAgent + ' ('+$('body').width()+'x'+$('body').height()+')');

														},
														success: function(data) {
															if(data.success) {
																$('#'+id).parents('.container').find('.envelopePattern .inner p').html(data.address);
																if(id == 'deliveryAdd') {
																	if(data.same_address) {
																		$('#billingAdd').parents('.container').find('.envelopePattern .inner p').html(data.address);
																	}
																}
																Cufon.refresh();
																$('#lightbox').fadeOut(400, function(){ $(this).remove(); });
																$('#overlay').fadeOut(400, function(){ $(this).remove(); });
															} else {
																sendError(document.location.href, $this.attr('action'), 'Ajax call', 'Error on data callback', navigator.userAgent + ' ('+$('body').width()+'x'+$('body').height()+')');
															}
														}

													});

													//stay on the page
													return false;
													
													
												}
											})
										})
										
							)
				 		);
					
					$('#overlay').fadeIn(500);
					$('#lightbox').fadeIn(700);
					
				return false;
			});

		});
	};

/* Slideshow */
	$.fn.slideshow = function(options) {
		var o = $.extend({}, $.fn.slideshow.defaults, options);
		return this.each(function(){
		
			var $this 			= $(this);
			var $s 				= $('.slide', $this);
			var nb 				= $('.slide', $this).length;
			var swidth 			= $s.outerWidth(true);
			var iwidth 			= nb * (swidth);
			var iposition	 	= '-'+o.position * swidth+'px';
			var pwidth 			= o.pwidth * nb;
			
			$('.inner', $this).css({'width':iwidth+1+'px', 'margin-left' : iposition });
			
			$this.append($('<ul />')
							.addClass('pages')
							.css({'width':pwidth+'px' })
						  );
			for (i=0; i < nb; i++) {
				if($(this).attr('id') == 'mainPanel') {
					var altText = $('.slide:eq('+i+') img').attr('alt');
				} else {
					var altText = 'See set '+ (i+1);
				}
				$('.pages', $this).append($('<li />')
											.append($('<a />')
													.attr('href', '#')
													.attr('title', altText)
													.html(i+1)
											)
										);
			}
			$('.pages li', $this).eq(o.position).addClass('active');
			
			$('.pages li', $this).click(function(){
				$('.inner', $this).stop('true','true');
				clearInterval(autoSlide);
				slidding($('.pages li', $this).index($(this)));
				/*
				setTimeout( function() { 
						autoSlide = setInterval( function() { slidding(); }, 4000);
			 		}, o.pause);
				*/
				return false;
			});
			
			var slidding = function(next) {
				current = $('.pages li', $this).index($('.pages li.active', $this));	
				
				if(!(next)&&(next != 0)) {								
					if (current < (nb-1)) { next = current + 1; } else { next = 0; } 	
				} else {
					next = next;
				}	
				
				$('.pages li', $this).removeClass('active');				
				speed = o.speed * Math.abs(current - next);				
				$('.inner', $this).animate({
					marginLeft :  - (next * swidth)
				}, speed);
				$('.pages li', $this).eq(next).addClass('active');
			}
			
				if(o.autoSlide) {
					var autoSlide = '';
					setTimeout( function() { 
						autoSlide = setInterval( function() { slidding(); }, 7500);
			 		}, o.delay);
				}
		});

	};	
	$.fn.slideshow.defaults = {
	  position: 0,				// 0
	  pwidth: 23,
	  speed: 500,
	  delay: 0,
	  pause: 3000,
	  autoSlide: true
	};
})(jQuery);
