var icon= new Array(0,0,1,1,1,1,0,
                     0,1,1,0,0,0,0,
					 0,0,1,0,0,0,0,
					 0,0,1,1,1,0,0,
					 0,1,1,1,1,1,0,
					 1,1,0,0,0,1,1,
					 1,1,0,0,0,1,1,
					 1,1,0,0,0,1,1,
					 1,1,0,0,0,1,1,
					 0,1,1,1,1,1,0);
var posx= new Array();
var posy= new Array();
var destposx= new Array();
var destposy= new Array();
var dx= new Array();
var dy= new Array();
var color= new Array();
var x= (128 - 7*9)/2;
var y= (128 - 10*9)/2;
var timer= 0;

var numblocks= 0;
for (var i= 0; i < 70; i++) {
   if (icon[i]==1) {
      destposx[numblocks]= x + (i%7)*9;
      destposy[numblocks]= y + Math.floor(i/7)*9;
	  posx[numblocks]= Math.random()*128 - 8;
	  posy[numblocks]= Math.random()*128 - 8;
	  dx[numblocks]= 0;
	  dy[numblocks]= 0;
	  color[numblocks]= "#000000";	  
	  numblocks++;
   }
}

function projectile()
{
	for (var i= 0; i < numblocks; i++) 
	if (i!=dragblock) {
		posx[i]+= dx[i];
		posy[i]+= dy[i];		
		if (posy[i] >= 128-8) {
		    posy[i]= 128-8;
			dy[i]= -Math.floor(dy[i]*.67);
			dx[i]*=.8;
		} else {
			dy[i]+=0.5;	
		}
	}
}

function easein()
{
	for (var i= 0; i < numblocks; i++) 
	if (i!=dragblock) {
		if (timer%200==0) {
		    switch(Math.floor(Math.random()*5)) {
			case 0: color[i]= "#3b6565"; break;
			case 1: color[i]= "#4a7e7d"; break;
			case 2: color[i]= "#599796"; break;
			case 3: color[i]= "#6eaaa9"; break;
			case 4: color[i]= "#87b9b8"; break;
			}
		}
		dx[i]= (destposx[i]-posx[i])/15;
		dy[i]= (destposy[i]-posy[i])/15;
		posx[i]+= dx[i];
		posy[i]+= dy[i];
		if (posx[i] > destposx[i]-0.5 && posx[i] < destposx[i]+0.5)
			posx[i]= destposx[i];
		if (posy[i] > destposy[i]-0.5 && posy[i] < destposy[i]+0.5)
			posy[i]= destposy[i];
	}
}

var inframe= false;

function drawIcon()
{   
  if (inframe) return;
  inframe= true;
  jg_doc.clear();  
  for (var i= 0; i < numblocks; i++) {    
	jg_doc.setColor(color[i]);
	jg_doc.fillRect(posx[i], posy[i], 8, 8);
	jg_doc.setColor("#ffffff");
	jg_doc.drawLine(posx[i], posy[i], posx[i]+8, posy[i]);
	jg_doc.drawLine(posx[i]+8, posy[i], posx[i]+8, posy[i]+8);
  }    
  if (timer < 15000) easein();
  else if (timer==15000) { // explode
		for (i= 0; i < numblocks; i++) {
		    dx[i]= Math.random()*7-2;
			dy[i]= Math.random()*7 - 4;
		}
   } else if (timer < 23000) projectile();
   else timer= 0;

  jg_doc.paint(); 
  timer+=100;  
  inframe= false;
}
var jg_doc = new jsGraphics("icon");
setInterval("drawIcon()", 100);


document.onmousemove = update; // update(event) implied on NS, update(null) implied on IE
getMouseXY();

var mouseX = 0;
var mouseY = 0;
var dragblock= -1;

function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{ 
  if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event)
  if (e)
  { 
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mouseX = e.pageX;
      mouseY = e.pageY;      	  
    } else if (e.clientX || e.clientY) { // works on IE6,FF,Moz,Opera7
      mouseX = e.clientX + document.body.scrollLeft - document.body.clientLeft;
      mouseY = e.clientY + document.body.scrollTop - document.body.clientTop;	  
    }  
  }  
}

function update(e) 
{
	getMouseXY(e);
	if (dragblock > -1) {
		posx[dragblock]= mouseX - 4;
		posy[dragblock]= mouseY - 4;
	}
}

function grab(context)
{
  document.onmousedown = function() { return false; } // in NS this prevents cascading of events, thus disabling text selection  
  for (var i= 0; i < numblocks; i++)
   {      
      if (mouseX >= posx[i] && mouseX <= posx[i]+8 &&
          mouseY >= posy[i] && mouseY <= posy[i]+8) {
		  dragblock= i;
		  document.onmousemove=function(ev) { // drag
									update(ev);
									return false; // in IE this prevents cascading of events, thus text selection is disabled
		                        }
		  document.onmouseup = function(ev) { // drop
									dragblock= -1;
									document.onmousemove = update;
									document.onmouseup = null;
									document.onmousedown = null;
								}		  
		  break;
      }
  }  
}
