var Inta = {};

Inta.Basket = function( config ) {
	var instance = this;
	
	this.run = false;
	
	this.activeBasket = false;

	$( document ).ready(function(){	
		instance.config = config || {};
		instance.config.id = instance.config.id || 'cart';
	
		instance.cart = $( '#cart' );
	
		$("#loadingIco")
		.ajaxStart(function(){
			$(this).show();
		})
		.ajaxComplete(function(){
			$(this).hide();
		});

		instance.auction();
		
		
		instance.setOrderList();
	});
};

Inta.Basket.prototype.attachEventScroll = function() {
	var instance = this;

	$(window).scroll(function(){
		var scrollTop = $(this).scrollTop();
		
		instance.cart.animate({
	        top: parseInt( scrollTop + 60, 10 ) + 'px'
	    }, { queue:false, duration:500 }, 'linear');
	});
};

Inta.Basket.prototype.add = function( obj, params, fly, left ) {
	if( !params ) {
		console.error( 'wrong params' );
		console.info( params );
		return;
	}
	
	$('#fastb').show();
	
	if( this.run ) {
		return false;
	}
	this.run = true;
	
	var fly = fly || 1;
	var left = left || 60;
	
	if( !this.activeBasket ) {
		this.attachEventScroll();
	}
	this.activeBasket = true;
	
	var instance = this;

	var bounds = $(obj).bounds();
	$('#pinfo').css({
		top     : parseInt( bounds.top - 10) + 'px',
		left    : parseInt( 309 ) + 'px',
		display : 'block',
		opacity : 0
	}).animate({
		opacity : 0.9
	});
	this.cart.find( '.bred' ).css({ display: 'block' });
	
	this.request({
		PRODUCTS_id : params.PRODUCTS_id,
		name		: params.name,
		amount		: params.amount,
		currency	: params.currency,
		itemsLang	: params.itemsLang,
		gameId		: params.gameId,
		min			: ( params.min ) ? 1 : 0,
		items       : 1,
		state       : 'new',
		add         : ( params.add ) ? 1 : 0,
		fly			: fly
	},obj);
	
	if( fly > 0 ) {
		this.cart.animate({
	        left: parseInt( bounds.left + left, 10 ) + 'px',
	        top: parseInt( bounds.top - 70, 10 ) + 'px',
	        opacity: 0.9
	    },{ queue:false, duration:500 });
	}

};

Inta.Basket.prototype.request = function( params, obj ) {
	
	var instance = this;
	
	var params = params || {};
	
	var cont = $('#listLayer');
	
	if( 
		!params.PRODUCTS_id ||
		!params.items ||
		!params.state
	) {
		console.error( 'wrong params' );
		console.info( params );
		return;
	}
	//console.debug($('#sel_13').getSetSSValue());
	var deleteItem = false;
	if( params.min ) {
		params.items = parseInt( $( '#elem_' + params.PRODUCTS_id ).find( 'span.items' ).text() ) - 1;
		deleteItem = ( params.items == 0 ) ? true : false;
	}
	params.add = $('#sel_'+params.PRODUCTS_id).getSetSSValue()
	$.post(
		baseUrl + 'basket/add',
		params,
		function( response ) {
			instance.run = false;
			
			if( response.success == -2 ) {
				alert( bs_MaxItems );
				return;
			}
			if( response.success == -1 ) {
				alert( ba_MaxItemsInProduct );
				return;
			}

//	    	$(obj).effect("transfer", { 
//	    		to: '#' + instance.cart.attr( 'id' ), className: 'flyProduct'
//	    	});
			
			var order = '' +					
			'<div class="l">' +
				'<a href="' + baseUrl + 'games/item/id/' + params.gameId + '">' + params.name + '</a>' +
				' <span class="am">' + params.amount + '</span>' +
				' <span class="cr">' + params.currency + '</span>' +
				' ' + params.itemsLang + ' <span class="items">1</span>' +
			'</div>' +
			'<div class="r">' +
				'<a onclick="' +
					'$BS.add(this,{ ' +
						'PRODUCTS_id : ' + params.PRODUCTS_id + ',' +
						'name        : \'' + params.name + '\',' +
						'amount      : \'' + params.amount + '\',' +
						'currency    : \'' + params.currency + '\',' +
						'itemsLang   : \'' + params.itemsLang + '\',' +
						'add		 : true' +
					'}, -1);' +
				'" addinfo="' + $(obj).attr('addinfo') + '" class="p" href="javascript:void(null);"></a>' +
				'<a onclick="' +
				'$BS.add(this,{ ' +
					'PRODUCTS_id : ' + params.PRODUCTS_id + ',' +
					'name        : \'' + params.name + '\',' +
					'amount      : \'' + params.amount + '\',' +
					'currency    : \'' + params.currency + '\',' +
					'itemsLang   : \'' + params.itemsLang + '\',' +
					'min		 : true,' +
					'add		 : false' +
				'}, -1);' +
				'" class="m" removeinfo="' + $(obj).attr('removeinfo') + '" href="javascript:void(null);""></a>' +
			'</div>';
			
			var ulCont = cont.find( 'ul' );
			if( !ulCont.length ) {
				cont.append( '' +
					'<ul><li id="elem_' + params.PRODUCTS_id + '">'+ 
						order +
					'</li></ul>' +
				'' );
				
				console.log( cont );
			} else {
				var liElem = ulCont.find( '#elem_' + params.PRODUCTS_id );
				if( !liElem.length ) {
					ulCont.append( '' +
						'<li id="elem_' + params.PRODUCTS_id + '">' + order + '</li>' +
					'' );
				} else {
					if( deleteItem ) {
						liElem.remove();
					} else {
						if( params.min ) {
							var amount = liElem.find( 'span.am' );
							amount.text( parseInt( amount.text() ) - parseInt( params.amount ) );
							var items = liElem.find( 'span.items' );
							items.text( parseInt( items.text() ) - 1 );
						} else {
							var amount = liElem.find( 'span.am' );
							amount.text( parseInt( amount.text() ) + parseInt( params.amount ) );
							var items = liElem.find( 'span.items' );
							items.text( parseInt( items.text() ) + 1 );
						}
					}
				}
			}

    		var cnt = instance.cart.find('span.b');
    		
    		if( params.min ) {
    			var val = parseInt( cnt.text() ) - 1;
    			$.jGrowl( $(obj).attr('removeinfo') );
    		} else {
    			var val = parseInt( cnt.text() ) + 1;
    			$.jGrowl( $(obj).attr('addinfo') );
    		}
    		cnt.text( val );
    		 window.location.href = 'basket';
		},
		'json'
	);
};

Inta.Basket.prototype.auction = function() {
	var instance = this;
	var run = false;
	var searchRun = false;
	var direction = 1;
	var cont = $('#auctionCont');

	$('.paidauctions a').click(function(){
		if( run ) return;

		cont.animate(
			{
				height : ( direction == 1 ) ? '40px' : '0px'
			}, 
			400, 
			null, 
			function(){
				if( direction == 1 ) {
					direction = 0;
				} else {
					direction = 1;
				}
				run = false;
			}
		);

	});
	
	cont.find('#auction_button').click(function(){

		if( searchRun ) return;
		
		var found = false
		
		searchRun = true;

		var regex = /.*allegro\.pl.*/;		
		var value = cont.find('#auction_url' ).val();
		
		var auction = 'Allegro';

		if( regex.test( value ) ) {
			value = value.match( /item[0-9]{1,}/, '' );
			found = false
			if( value && value.length ) {
				value = value[0].replace( /item/, '' );
				found = true;
			}	

			if( !found ) {
				value = cont.find('#auction_url' ).val();
				value = value.match( /item\=[0-9]{1,}/, '' );
				
				if( value && value.length ) {
					value = value[0].replace( /item\=/, '' );
					found = true;
				}
			}
		} else {
			found = false
			value = value.match( /item[A-Z0-9]{1,}/, '' );
			if( value && value.length ) {
				value = value[0].replace( /item/, '' );
				auction = 'eBay';
				found = true;
			}	
		}
		
		if( !found ) {
			value = cont.find('#auction_url' ).val();
			if( /^[0-9]{1,}$/.test( value ) ) {
				auction = 'Allegro';
			} else {
				auction = 'eBay';
			}
		}

		if( value ) {
			cont.animate({
				height: '110px'		
			}, 600);

			var sinfo = cont.find( 'div.sinfo' );
			sinfo.html( sinfo.attr( 'sinfo' ) + ' <span></span>' );
			var textBox = sinfo.find( 'span' );
			textBox.text( auction + '...' );

			$.post(
				baseUrl + 'games/findauction',
				{ id : "" + value + "" },
				function( response ) {
					searchRun = false;
					sinfo.empty();
					if( response.success ) {
						sinfo.html( sinfo.attr( 'foundinfo' ) + '<i>' + response.list.auctionName + '</i>. <span style="color:#25FF00;">' + sinfo.attr( 'addinfo' ) + '<span>' );


						$.post(
							baseUrl + 'basket/add',
							{
								PRODUCTS_id : response.list.id,
								add : 1,
								auction : true,	
								items : 1,
								state : 'new'
							},
							function( response ) {
								window.location.href = baseUrl + 'basket';
							},
							'json'
						);
					} else {
						sinfo.html( sinfo.attr( 'failinfo' ) + '<i>' + response.list.value + '</i>' );
						window.setTimeout(function(){
							cont.toggle('slow');				
						},5000);			
					}			
				},
				'json'
			);
		}
	});
};

Inta.Basket.prototype.setOrderList = function() {
	var body = $(document.body);
	var basketList = $('#basketList');
	var listLayer = $( '#listLayer' );
	
	var inrv = false;
	
	body.append( listLayer );
	
	var unit = 20;
	var add  = 0;
	
	basketList.mouseover(function(){
		var bounds = $(this).bounds();
		
		var items = listLayer.find('ul li').length;
		if( items > 0 ) {
			add = 30;
		}

		listLayer.css({
			top : parseInt( bounds.top + 16 ) + 'px',
			left : parseInt( bounds.left - 71 ) + 'px',
			display : 'block',
			opacity : 0.9
		}).animate({
			height: parseInt( ( items * unit ) + add ) + 'px'
		});
	}).mouseout(function(){
		inrv = window.setTimeout(function(){
			listLayer.animate({
				height : '0px'
			});
		},500);
	});
	
	listLayer.hover(function(){
		if( inrv ) {
			window.clearTimeout( inrv );
		}
	},function(){
		$(this).animate({
			height : '0px'
		});
	});
};

var $BS = new Inta.Basket();