var de;
var w;
var h;
var xm=0;
var ym=0;
var ay=2;
var sin=Math.sin(ay*Math.PI/180);
var cos=Math.cos(ay*Math.PI/180); 
var angle = 0;
var k=0;
var elem = [];
var camDist = 300;
var scale = .4;
var vpsi = 0;
var fontScale = .0005;
var psi = 1.0;

$(document).ready(function(){ 
	DEBUG = true;
  	de = document.documentElement;
  	w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
  	h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	psi = Math.abs(Math.sin((ym-h*.5)/h*Math.PI));
    items = $("#links a");
    polys = $(".polygon a");
    polys.build();
    items.cartesianToSphereical();
	run();
    //draw();
   // drawsvg();
});

document.onmousemove = function(e) {
	if (window.event) e = window.event;
		xm = (e.x || e.clientX);
        ym = (e.y || e.clientY);
		var de = document.documentElement;
        var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
        var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
        psi=(ym-h*.5)/h*Math.PI;
        vpsi= Math.sin((ym-h*.5)/h*Math.PI)*90;
		sin=Math.sin((-xm+w*.5)/w*Math.PI);
		cos=Math.cos((-xm+w*.5)/w*Math.PI);
}
$.fn.cartesianToSphereical = function() {
    for(i=0; i<this.length; i++) {
	      if ( !elem[i] ) elem[i] = {};
	      var curLink = this[i].href;
	      var queryString = curLink.replace(/^[^\?]+\??/,'');
	      params = parseQuery( queryString );
	      x = params['x'];
	      y = params['y'];
	      z = params['z'];
	      r = parseInt(Math.abs(Math.sqrt(x*x+y*y+z*z)));
	      rr = parseInt(Math.abs(Math.sqrt(x*x+y*y)));
	      if(x<0)
	         theta= (Math.atan(y/x)*180/Math.PI)+180;
	      else
	         theta= (Math.atan(y/x)*180/Math.PI);
	      psiElement= (Math.atan(z/rr)*180/Math.PI);
	      elem[i].theta = theta;
	      elem[i].r = r;
	      elem[i].psie = psiElement;
	      elem[i].z = z;
	      elem[i].rr = rr;
	      elem[i].html = this[i].innerHTML;
    }
}
$.fn.rotate = function () {
        for(i=0; i<this.length; i++) {
          if (!elem[i]) elem[i] = {};
          angle += sin*scale;
          elem[i].angle = (angle + elem[i].theta);
          X = elem[i].r*Math.cos(elem[i].angle*Math.PI/180)*Math.cos(elem[i].psie*Math.PI/180);
          Y = elem[i].r*Math.sin(elem[i].angle*Math.PI/180)*Math.cos(elem[i].psie*Math.PI/180)*Math.sin(psi) + elem[i].z*Math.cos(psi);
          elem[i].dist = parseInt( elem[i].r*Math.cos((vpsi + elem[i].psie)*Math.PI/180) +
          elem[i].rr*Math.sin(elem[i].angle*Math.PI/180)*Math.cos(vpsi*Math.PI/180) + camDist);
          size = (elem[i].dist - 00)/300;
		  $(this[i]).stop();
  		  $(this[i]).animate({left:  -X + "px", top:  -Y + "px",  fontSize: size + "em",opacity: (size*20)/50 -0.3 },200);
          this[i].style.zIndex  = elem[i].dist;
          //document.body.style.backgroundPosition = angle*10 + "px " + (vpsi*2) + "0px";
	}
}
$.fn.build = function() {}
var items,polys;

function run(){
        items.rotate();
		setTimeout("run()", 50);
}

function drawsvg() {
  	var h = $(window).height();
  	var w = $(window).width();
  	$('#src').height(h)
  	$('#src').width(w)
  	$('#src').svg();
  	var svg = $('#src').svg('get'); 
	var g = svg.group(); 
	var defs = svg.defs(g); 
	svg.linearGradient(defs, 'MyGradient', [['0', '#444'], ['1', 'black']]); 
	svg.rect(g, 0, 0, w, h, {fill: 'url(#MyGradient)'}); 
}

function draw() {
  var h = $(window).height();
  var w = $(window).width();
  $('#canvas').height(h)
  $('#canvas').width(w)
  var ctx = document.getElementById('canvas').getContext('2d');
  var lingrad = ctx.createLinearGradient(0,0,0,h);
  lingrad.addColorStop(0, '#444');
  lingrad.addColorStop(1, '#000');
  ctx.fillStyle = lingrad;
  ctx.fillRect(0,0,w,h);

}

function parseQuery ( query ) {
     var Params = new Object ();
     if ( ! query ) return Params;
     var Pairs = query.split(/[;&]/);
     for ( var i = 0; i < Pairs.length; i++ ) {
        var KeyVal = Pairs[i].split('=');
        if ( ! KeyVal || KeyVal.length != 2 ) continue;
        var key = unescape( KeyVal[0] );
        var val = unescape( KeyVal[1] );
        val = val.replace(/\+/g, ' ');
        Params[key] = val;
     }
     return Params;
}
