// jQuery Circus Plugin
//
// Version 0.1
//
// Luka Uzel
// luka.uzel@gmail.com
//
// Terms of Use
//
// This software is licensed under a Creative Commons License and is copyrighted
// (C)2009 Luka Uzel.


(function($) {  
  
  $.circus = {  
	defaults: {  
	  speed: 500,  
	  r: "100",  
	  order: [1,4,3,2,5,6,7,8],
	  linker: "a"
	}  
  };
  
  var config =  {};
  var items;
  var srcElement;

  
	$.fn.extend({  
	circus:function(config, callback) {  
			
			$.circus.config = $.extend({}, $.circus.defaults, config); 
			$.circus.items = $($.circus.config.items);
			
			var w;
			var h;
			
	
			var D= document.documentElement;
			if(D) { w = D.clientWidth; h = D.clientHeight; }
			
	
			$.circus.config.mouseX = (w-100+300)/2;
			$.circus.config.mouseY = (h-100)/2;
			$.circus.srcElement = this;
			
			_show_circus();
			
	return this;  
	}  
	});
  


	function toObject(names, values) {
		var result = {};
		for (var i = 0; i < names.length; i++)
			 result[names[i]] = values[i];
		return result;
	}

	
	function _show_items(){
		var pos;
		var k=0;
		
		$.circus.items.children().each(function(i, e){
		
		$(e).css({
				position:"absolute",
				top: "0px",
				left: "0px"
				});
		
		if($(e).css("top")=="auto" || $(e).css("top")=="0px") var top = 0;
		else
		var top = parseInt($(e).css("top"));
		
		if($(e).css("left")=="auto" || $(e).css("left")=="0px") var left = 0;
		else
		var left = parseInt($(e).css("left"));
	
		
		// this is order for strreching
		pos = $.circus.config.order[k];
		switch(pos)
		{
			/* SIMPLE */
		case 1:
		  var _top=top;
		  var _left=left - 120;
		break;
		case 2:
		  var _top=top;
		  var _left=left - 320;
		break;
		case 3:
		  var _top=top;
		  var _left=left - 520;
		break;
		case 4:
		  var _top=top;
		  var _left=left - 720
		break;
		}
		
		
		_top = _top.valueOf()+"px";
		_left = _left.valueOf()+"px";
		
		// here you can style effects
		var n = ["top", "left"];
		var v = [_top, _left];
		
		var prop = toObject(n,v);
		
		$(e).animate(prop,{queue:true, duration: $.circus.config.speed, easing:"backEaseOut"});
		
		k++;
		}) 
	  
	}
  
	function _show_circus(){ 
	$.circus.items.css({ top: $.circus.config.mouseY, left: $.circus.config.mouseX});
	$.circus.items.css("display","block");
	_show_items();
	}
  
	function _hide_circus(){
	$.circus.items.css("display","none");
	}
	
   
})(jQuery); 
