// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults


/*$$(".work .image a").each(function(item){
	
	alert('x');

});*/



/*var jQ = jQuery.noConflict();

jQ(document).ready(function(){


	jQ(".work .image").each(function(){
		
		//alert("x");
	})
	
});*/



var $j = jQuery.noConflict();


$j(document).ready(function(){
	partsys.init('particlefield1', 15);
});


var partsys = {

	///ENVIORMENT//////////////////////
	GRAVITY : .0,
	WIND : .0,
	FRICTION : .70,
	
	///PARTICAL //////////////////////
	ACCEL : 2.55,
	SPRING : .55,
	BOUNCE : .91,
	ATTRACTION : .04,
	MASS : 8.5,	
	
	/* ==== resize ==== */
	resize : function()
	{
		tdm.nw = this.scr.offsetWidth;
		tdm.nh = this.scr.offsetHeight;
		tdm.nx = 0;
		tdm.ny = 0;
		for (var o = tdm.scr; o != null; o = o.offsetParent)
		{
			tdm.nx += o.offsetLeft;
			tdm.ny += o.offsetTop;
		}
	},

	/* ==== check bounds - bounce ==== */
	bounds_bounce : function (id)
	{
		var part = partsys.parts[id];
		
		if(part['x'] > stageWidth){
			part['x'] = stageWidth;
			part['vx'] *= -1;
			part['vx'] *= partsys.BOUNCE;
		}
		else if(part['x'] < 0){
			part['x'] = 0;
			part['vx'] *= -1;
			part['vy'] *= partsys.BOUNCE;
		}
		else if(part['y'] < 0){
			part['y'] = 0;
			part['vy'] *= -1;
			part['vy'] *= partsys.BOUNCE;
		}
		else if( part['y'] > stageHeight){
			part['y'] = stageHeight;
			part['vy'] *= -1;
			part['vy'] *= partsys.BOUNCE;
		}
		part['part'].css({
			'top': part['y'], 
			'left': part['x']
		});
	},
	/* ==== check bounds - wrap ==== */
	bounds_wrap : function (id)
	{
		var part = partsys.parts[id];
		
		if(part['x'] > stageWidth){
			part['x'] = 0;
		}
		else if(part['x'] < 0){
			part['x'] = stageWidth;
		}
		else if(part['y'] < 0){
			part['y'] = stageHeight - 5;
		}
		else if( (part['y'] + 5) > stageHeight){
			part['y'] = 0;
		}
		part['part'].css({
			'top': part['y'], 
			'left': part['x']
		});
	},



	/* ==== main loop ==== */
	run : function ()
	{

//notice: this. dosent retain the object, infact it causes it to crash..
//alert(this.parts.length);
//alert(partsys.ACCEL+"::"+partsys.parts.length);

	myParts = partsys.parts;

	for (var move=0; move < partsys.parts.length; move++)
	{
	        var part = myParts[move];

		/*if(move==0){ //IF THE FIRST ITEM
			//if(!somecnt){var somecnt=1;}else{somecnt++;}
			//WIND = Math.sin(somecnt);//part['vy']
			//$j('#info').html("a:"+part['ay']+"<br />v:"+part['vy'] +"<br />w:"+WIND+"<br />mouse:"+mouse +" x:"+mouseX+" y:"+mouseY);//
		}*/

		//cycle through all particles, 	
		/*for (var check=0; check < myParts.length; check++)
		{
			var checkPart = myParts[check];
			if(check!=move)
			{
				//checkPart['x'] += (part['x'] - checkPart['x']) * ATTRACTION;
				//checkPart['y'] += (part['y'] - checkPart['y']) * ATTRACTION;
				          
				//checkPart['ax'] = (part['x'] - checkPart['x']) * part['ATTRACTION'] ;
				//checkPart['ay'] = (part['y'] - checkPart['y']) * part['ATTRACTION'] ;
				
				//checkPart['ax'] = (part['x'] - checkPart['x']) * part['ATTRACTION'] ;
				//checkPart['ay'] = (part['y'] - checkPart['y']) * part['ATTRACTION'] ;
			}
		}*/


	
		part['ax'] += ((Math.random() * 2)-1) * partsys.ACCEL;
		part['ay'] += ((Math.random() * 2)-1) * partsys.ACCEL;
		
		if(this.mouse){
			//part['ax'] += (mouseX - part['x']) * ATTRACTION;
			//part['ay'] += (mouseY - part['y']) * ATTRACTION;
			part['ax'] += (mouseX - part['x']) * partsys.ATTRACTION;
			part['ay'] += (mouseY - part['y']) * partsys.ATTRACTION;
		}
		
		part['ax'] *= partsys.SPRING;
		part['ay'] *= partsys.SPRING;
		
		part['vx'] += part['ax'];
		part['vy'] += part['ay'];
		
		part['vx'] += partsys.WIND;
		part['vy'] += partsys.GRAVITY;
		
		part['vx'] *= partsys.FRICTION;
		part['vy'] *= partsys.FRICTION;
	
		part['x'] += part['vx'];
		part['y'] += part['vy'];	
		
 	       part['part'].css({
			'top': part['y'], 
			'left': part['x']
 	       });

		//partsys.bounds_bounce(move);
		partsys.bounds_wrap(move);
	}




	/*	tdm.CX += (xm - tdm.CX) * .1;
			tdm.CY += (ym - tdm.CY) * .1;
		for (var i = 0, o; o = tdm.obj[i]; i++)
		{
			var dx = o.X - tdm.CX + tdm.nx;
			var dy = o.Y - tdm.CY + tdm.ny;
			var d  = Math.sqrt(dx * dx + dy * dy);
			var z  = (tdm.FOCAL - d) / tdm.FOCAL * (o.S * .1);
			var s  = Math.max(0, o.S + (50 - d * .1) * (o.S * tdm.ZOOM));
			var x  = o.X + dx * z - s * .5;
			var y  = o.Y + dy * z - s * .5;
			if(x > -s * .5 && x < tdm.nw && y > -s && y < tdm.nh){
				o.style.left     = Math.round(x)  + 'px';
				o.style.top      = Math.round(y)  + 'px';
				o.style.fontSize = Math.round(s) + 'px';
				o.style.zIndex   = Math.round(z);
			} else o.style.left  = '-1000px';
		}
	*/

		setTimeout(partsys.run, 16);
	},

	createparts : function (id, objects)
	{
		for (var create=0; create < objects; create++)
		{
			this.field.append("<div id='" + id + create + "' class='particle'><img src='http://www.phinity.com/images/dot.png' /></div>");
			
			//var part = this.parts[create];
			//part = [];
			//the above dosen't work for some reason. below method does.
			this.parts[create] = [];
			part = this.parts[create];

			part['part'] = $j("#" + id + create);
			
			part['x'] = Math.round( Math.random() * stageWidth );
			part['y'] = Math.round( Math.random() * stageHeight );
			
			part['vx'] = ((Math.random() * 2) - 1 ) * this.ACCEL ;
			part['vy'] = ((Math.random() * 2) - 1 ) * this.ACCEL ;
			
			part['ax'] = 0;
			part['ay'] = 0;
			
			part['w'] = part['part'].attr('width');
			part['h'] = part['part'].attr('height');
			
			part['part'].css({
				'top': part['y'], 
				'left': part['x']
			});
			
		}
		//return true;
		this.run();

	},
	
	
	/* ==== initialization ==== */
	init : function (id, parts)
	{

		this.field = $j("#"+id);
		this.parts = [];
		
	//	alert( this.field.offset() );

		
	  	//field width & height 
	 	stageWidth = parseInt( this.field.css('width').split("px") );
		stageHeight = parseInt( this.field.css('height').split("px") );
		
		//mouse listener
		this.field.mousemove(function(e){
			mouse = true;
			mouseX = e.pageX - (document.body.offsetWidth - 766) / 2;
			mouseY = e.pageY;
		});
		this.field.mouseout(function(e){
			mouse = false;
		});
		
		this.createparts(id, parts);
	}
}




