(function($){
  $.fn.addcart = function(options){
	var preloaded 	= new Array();
	var $el   = this;
	
	var ajaxManager = $.manageAjax({manageType: 'queue', maxReq: 2, blockSameRequest: true}); 
	var arr2		= new Array();
	
	var defaults ={
		path:'/ajaxscript/updateCartBox.php',
		method:'GET',
		cart_id:'',
		dataType:'json',
		param:'',
        wrapper:'product_wrap_small',
        product_id:'',
        alterCardAni:'',
        animationStatus:false,
		animation:function(){
		},
		animate:true,
		onload:function(){
		},
		callBack:function(res,status){
		},
		onsucess:function(res,status){
		}
	},
	
	setting = $.extend({},defaults,options); 
    if(setting.alterCardAni==''){
     setting.alterCardAni=setting.cart_id;
    }
	function _ini(){
		_setup();
		_bind();
	}
	
	/***
	*@desc  setting up the ajax class
	****/
	function _setup(){
		$.ajaxSetup({
		  url: 		setting.path,
		  global: 	false,
		  type: 	setting.method,
		  dataType:	setting.dataType
		});
	}
	/***
	*@desc  sending the ajaxcall
	****/
	function _send($element){
	
		ajaxManager.add({ 
			cache:		true,	
			// The data returned from the server, formatted according to the 'dataType{res}' parameter, and a string describing the status.
			
			success: function(res, status) {
				setting.onsucess(res, status)
				_callback(res,status,$element);
			}, 
			dataType:	setting.dataType,
			url: setting.path + '?'+setting.param
		});	
	
	}
	/**
	*@desc callback function
	***/
	function _animate($element){
	
    
     var     $cart = $('#'+setting.cart_id); 
     var $cartAnim = $('#'+setting.alterCardAni); 
	 var $top = $cartAnim.offset().top,
	 
		 $left = $cartAnim.offset().left;
     if(jQuery('#'+setting.wrapper).length<1){
	    var $parentE = 	$($element).parent(); 
     } else{
        var $parentE =    jQuery('#'+setting.wrapper); 
     } 
	 var $cloneEl  =$parentE.clone(true);
	 $($parentE).css({opacity:0});
	 $cloneEl.insertAfter($parentE);
	 $cloneEl.css({'position':'absolute','display':'block'});
	 $cloneEl.animate({
	 top:$top,
	 left:$left,
	 opacity:0.2,
     width:'200px',
     height:(($cloneEl.height()/$cloneEl.width())*200)+'px' 
     
	 },
	 800, "linear", function(){$(this).remove();});  
	 $($parentE).animate({opacity:1},500);
     $cartAnim.animate({opactity:0.5},100,function(){
          $cartAnim.animate({opactity:1},100,function(){
        
     })
     }) ;
	}
	function _callback(res,status,$element){
		setting.callBack(res,status);
        if(setting.animationStatus)
		    _animate($element);
         var     $cart = $('#'+setting.cart_id); 
         $cart.html(res.cartbox_result);
	}
	function _getData($element){
		var $qty=jQuery('[name^=product_qty]').val();
		var $id=setting.product_id;
           
        var size = jQuery('#variation_'+setting.product_id+'_size').val();
        var color = jQuery('#variation_'+setting.product_id+'_color').val();     
        if(jQuery('#variation_'+setting.product_id+'_size').length && size=='NoSelected'){
        alert("Please select a size");
        return false;
        }else{
         if( color=='NoSelected'){
               var  opt = jQuery('#variation_'+setting.product_id+'_color').find('option');
                
               if(opt.length>1 && opt[0].value=='NoSelected'){
               
                alert("Please select a color");
                return false;
               }
               
         }
        }
      
                var attr = new Array();
        attr.push({
             name:'size',
            value:size

    });
        attr.push({
          name:'color',
          value:danish_specialChar(color,{display:true})
        });
        var $attr='attribute_val='+JSON.stringify(attr);
        var url=$attr+'&variation=true&size='+size+'&color='+danish_specialChar(color,{display:true})+'&new_product=true&product='+ setting.product_id+'&quantity='+$qty+'&unit_price=-1&linkToProduct=';  
		return url;
	}
	/***
	*@binding the onclick event
	**/	
	function _bind(){
	
		 $el.each(function(){
		var $e = $(this);
		$e.click(function(){
			$partUrl = _getData($e);
            if($partUrl!==false){
            
			setting.onload();
			if(setting.param!=''){
			setting.param ='&'+ $partUrl ;
			}else{
			setting.param = $partUrl ;
			}
            
			_send($e);
            }
		});
	});
	}
	_ini();
	return $el;
  }

})(jQuery);
