/*
 * author MUNTZ Mathias
 * 2011
 * All rights Reserved
 */
(function($){
    $.jCarousel = function(el, options){
        var base = this;
        var widthSpace;
        var numberSeparotor;
        var numberElements;
        var firstElement;
        var lastElement;
        var sizeElement = new Array();
        secure = false;
        
        
        base.$el = $(el);
        base.el = el;
        
        base.scale = function(ascaler){
        	var left;
        	var scale;
        	if((base.options.style % 2) == 1){
        		//dans le cas ou il y a un nombre impaire
        		var center = Math.floor(base.options.style/2)+1;
        		var myrel = ascaler.attr("rel")+'';
        		myrel = myrel.substring(9);
        		if(myrel<center){
        			scale = center1-myrel;
        		}else if(myrel >center){
        			scale = myrel-center2;
        		}else{
        			scale = 0;
        		}
        	}else{
        		//dans le cas ou il y a un nombre paire
        		var center1 = Math.floor(base.options.style/2);
        		var center2 = Math.floor(base.options.style/2)+1;
        		var myrel = ascaler.attr("rel")+'';
        		myrel = myrel.substring(9);
        		if(myrel<center1){
        			scale = center1-myrel;
        		}else if(myrel >center2){
        			scale = myrel-center2;
        		}else{
        			scale = 0;
        		}
        	}
        	
        	//on cherche l'id de l'élément
        	var myid = ascaler.attr("id")+'';
        	myid = myid.substring(11);

        	//on calcule la position centrale de l'élément
        	left = sizeElement[myid].left;
        	var midleX = Math.floor(left+(sizeElement[myid].width/2));
        	var midleY = Math.floor((sizeElement[myid].height/2));
        	
        	//on mesure les nouvelles dimensions
        	var newWidth = Math.floor(sizeElement[myid].width - (sizeElement[myid].width*((base.options.percentScale*scale)/100)));
        	//newWidth = sizeElement[myid].width - (15);
        	var newHeight = Math.floor(sizeElement[myid].height - (sizeElement[myid].height*((base.options.percentScale*scale)/100)));

        	//on calcule le centre une fois scaller
        	var midleXnew = Math.floor(left+(newWidth/2));
        	var midleYnew = Math.floor((newHeight/2));
        	
        	var newleft = midleX -(newWidth /2 );
        	var newtop = midleY -(newHeight /2 );
        	
        	//on créé l'objet css
        	var retour = {width:newWidth,height:newHeight,top:newtop,left:newleft};
        	
        	//on le retourn
        	//alert(retour);
        	return retour;
        	
        	
        };
        
        base.init = function(){
        	//on récupère les options par defaut
            this.options   = $.extend({},$.jCarousel.defaultOptions, options);
            numberElements = $("div.jc-element", el).size();

            //on initialise les valeurs
        	firstElement = 1;
            lastElement = base.options.style;
            
            //on ajoute les css
            $(this.el).css({"height":base.options.height,"width":base.options.width,"position": "relative","overflow":"hidden"});
            
            //on met une class différente à chaque élément
            var temp = 1;
            $("div.jc-element", el).each(function(){
            	$(this).attr("id","jc-element-"+temp);
            	$(this).attr("rel","position-"+temp);
            	sizeElement[temp] = {width: $(this).width(), height : $(this).height(),left:0};
            	temp++;
            });
            
            //calcul de l'espace entre chaque slide
            widthSpace = 0;
            for(var i=1; i<= base.options.style; i++){
            	widthSpace += $("div#jc-element-"+i, el).width();
            }
            
            //test de sécurité la totalité des bloc affiché ne dois pas etre supérieur à la largeur du conteneur
            if(widthSpace > base.options.width){
            	$(this.el).html('<p style=" color:red">Le cumule des slides est plus grand que la largeur du conteneur</p>');
            }else{
            	widthSpace = base.options.width - widthSpace;
            	numberSeparotor = base.options.style - 1;
            	widthSpace = Math.floor(widthSpace/numberSeparotor);
            	//je positionne chaque élément au bon endroit
            	for(var i=1; i<= base.options.style; i++){
            		if(i == 1){
            			$("div#jc-element-"+i, el).css({"position":"absolute","left": 0,"top":0});
            		}else{
            			var tempSpace = 0;
            			for(var y = 1; y<= base.options.style; y++){
            				if(y == i){
            					break;
            				}else{
            					tempSpace += $("div#jc-element-"+y, el).width() + widthSpace;
            				}
            			}
            			sizeElement[i].left = tempSpace;
            			$("div#jc-element-"+i, el).css({"position":"absolute","left": tempSpace,"top":0});
            		}
                }
            	//on postionne les autre élement ailleur
                for(var i=(base.options.style+1); i<= numberElements; i++){
                	$("div#jc-element-"+i, el).css({"position":"absolute","left": -10000,"top":-10000});
                }
            	
            	//je scale chaque élément
        		for(var i = 1; i <=  base.options.style; i++){
        			$('div[rel="position-'+i+'"]', el).css(base.scale($('div[rel="position-'+i+'"]', el)));
        		}
            }
            
            
            
            $("#jCMoveRight").click(function(){base.jCMoveRight();});
            $("#jCMoveLeft").click(function(){base.jCMoveLeft();});
        };
        
        //animation sur la droite
        base.jCMoveRight = function(){
        	if(secure == false){
        		//eviter les multi clique
        		secure = true;
	        	//je scale chaque élément
	        	if((base.options.style % 2) != 1){
	        		
	        		//on change les positions
					for(var i=1; i <= numberElements; i++){
						//le dernier element deviens le premier
						if($("div#jc-element-"+i, el).attr("rel") == ("position-"+numberElements)){
							$("div#jc-element-"+i, el).attr("rel","position-1");
						}
						//autre cas
						else{
							var myrel = $("div#jc-element-"+i, el).attr("rel"); + '';
							myrel = parseInt(myrel.substring(9));
							$("div#jc-element-"+i, el).attr("rel","position-"+(myrel+1));
						}
					}
					
					//on calcule le nouveau whiteSpace
					widthSpace = 0;
					for(var i=1; i<= base.options.style; i++){
						var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	        			myid = myid.substring(11);
		            	widthSpace += sizeElement[myid].width;
		            }
					widthSpace = base.options.width - widthSpace;
	            	widthSpace = Math.floor(widthSpace/numberSeparotor);
	            	
	            	//on positionne le premier élément
	            	var oneid = $('div[rel="position-1"]').attr('id');
	            	oneid = oneid.substring(11);
	            	var temp = 0 - (sizeElement[oneid].width + widthSpace);
	            	sizeElement[oneid].left = temp;
	            	$('div[rel="position-1"]').css(base.scale($('div[rel="position-1"]')));
	            	
	            	//je dacalle chaque element de ça propre largeur plus le nouveau whiteSpace, sauf le premier
	            	for(var i=1; i <= base.options.style + 1; i++){
	            		var temp;
	            		if(i ==1){
	            			var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	            			myid = myid.substring(11);
	            			temp = 0;
	            			sizeElement[myid].left = temp;
	                		$('div[rel="position-'+i+'"]').animate(base.scale($('div[rel="position-'+i+'"]')),base.options.speed,function(){base.unSecure();});
	            		}else{
	            			temp = 0;
	            			for(var y=1; y < i; y++){
	            				var myid = $('div[rel="position-'+y+'"]').attr("id")+'';
	                			myid = myid.substring(11);
	            				temp += sizeElement[myid].width + widthSpace;
	            			}
	            			var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	            			myid = myid.substring(11);
	            			sizeElement[myid].left = temp;
	            			$('div[rel="position-'+i+'"]').animate(base.scale($('div[rel="position-'+i+'"]')),base.options.speed);
	            		}
	                }
	        	}  
        	}
        };
        
        
      //animation sur la droite
        base.jCMoveLeft = function(){
        	if(secure == false){
        		secure = true;
	        	//je scale chaque élément
	        	if((base.options.style % 2) != 1){
	        		
	        		//on change les positions
					for(var i=1; i <= numberElements; i++){
						//le dernier element deviens le premier
						if($("div#jc-element-"+i, el).attr("rel") == ("position-1")){
							$("div#jc-element-"+i, el).attr("rel","position-"+numberElements);
						}
						//autre cas
						else{
							var myrel = $("div#jc-element-"+i, el).attr("rel"); + '';
							myrel = parseInt(myrel.substring(9));
							$("div#jc-element-"+i, el).attr("rel","position-"+(myrel-1));
						}
					}
					
					//on calcule le nouveau whiteSpace
					widthSpace = 0;
					for(var i=1; i<= base.options.style; i++){
						var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	        			myid = myid.substring(11);
		            	widthSpace += sizeElement[myid].width;
		            }
					widthSpace = base.options.width - widthSpace;
	            	widthSpace = Math.floor(widthSpace/numberSeparotor);
	            	
	            	//on positionne le dernier élément
	            	var oneid = $('div[rel="position-'+(base.options.style)+'"]').attr('id');
	            	oneid = oneid.substring(11);
	            	var temp = base.options.width + widthSpace;
	            	sizeElement[oneid].left = temp;
	            	$('div[rel="position-'+(base.options.style)+'"]').css(base.scale($('div[rel="position-'+(base.options.style)+'"]')));
	            	
	            	//je dacalle chaque element de ça propre largeur plus le nouveau whiteSpace, sauf le premier
	            	for(var i=1; i <= numberElements; i++){
	            		var temp;
	            		if(i == numberElements){
	            			var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	            			myid = myid.substring(11);
	            			temp = 0 - (sizeElement[myid].width + widthSpace);
	            			sizeElement[myid].left = temp;
	                		$('div[rel="position-'+i+'"]').animate(base.scale($('div[rel="position-'+i+'"]')),base.options.speed, function(){base.unSecure();});
	            		}else if(i == base.options.style){
	            			var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	            			myid = myid.substring(11);
	            			temp = base.options.width - (sizeElement[myid].width);
	            			sizeElement[myid].left = temp;
	                		$('div[rel="position-'+i+'"]').animate(base.scale($('div[rel="position-'+i+'"]')),base.options.speed);
	            		}else if(i < base.options.style){
	            			temp = 0;
	            			for(var y=base.options.style; y > i; y--){
	            				var myid = $('div[rel="position-'+y+'"]').attr("id")+'';
	                			myid = myid.substring(11);
	            				temp += sizeElement[myid].width + widthSpace;
	            			}
	            			var myid = $('div[rel="position-'+i+'"]').attr("id")+'';
	            			myid = myid.substring(11);
	            			
	            			temp = temp + sizeElement[myid].width;
	            			temp = base.options.width - temp;
	            			sizeElement[myid].left = temp;
	            			$('div[rel="position-'+i+'"]').animate(base.scale($('div[rel="position-'+i+'"]')),base.options.speed);
	            		}
	                }
	        	}
        	}
        };
        
        base.unSecure = function(){
        	//alert("unsecure");
        	secure = false;
        };
        
        // Run initializer
        base.init();
    };
    
    $.jCarousel.defaultOptions = {
        height: 400,
        width: 880,
        style: 6,
        speed: 500,
        percentScale: 8
    };
    
    $.fn.jCarousel = function(options){
        return this.each(function(){
            (new $.jCarousel(this, options));
        });
    };
    
})(jQuery);



