//	alert(site_url);
window.onload = setup;

function setup() {
  if(document && document.getElementsByTagName){
    setUpRollovers();
    preLoadRollovers();
  }
}

myUserAgent = navigator.userAgent.toLowerCase();
var mac = (myUserAgent.indexOf('mac')>0);
var op = (myUserAgent.indexOf('opera')>0);
var ie = (myUserAgent.indexOf('msie')>0) && !(navigator.vendor) && !(op);
var ie5 = (ie) && (parseInt(myUserAgent.substring(myUserAgent.indexOf('msie')+5,myUserAgent.indexOf('msie')+7))>=5); // ie5 and above.
var moz = !(myUserAgent.indexOf('compatible')>0); // includes ns3, ns4, ns6, cam & mfb.
if (moz) {
  document.write('<style type="text/css">');
	document.write('<!--');
	document.write('html {  height: 100%;  }');
	document.write('-->');
	document.write('</style>');
}

///////// rollovers.
rollovers = new Array();
rollovers["aboutHomeImg"] = "../images/elements/home-about-us-o.jpg";
rollovers["contactHomeImg"] = "../images/elements/home-contact-us-o.jpg";
rollovers["ourStuffHomeImg"] = "../images/elements/home-see-our-stuff-o.gif";
rollovers["aboutImg"] = "../images/elements/about-us-o.jpg";
rollovers["contactImg"] = "../images/elements/contact-us-o.jpg";
rollovers["ourStuffImg"] = "../images/elements/see-our-stuff-o.gif";
rollovers["ecardSendImg"] = "../images/elements/send-ecard-btn-o.gif";
rollovers["goSendEcardImg"] = "../images/ecards/go-send-ecard-btn-o.gif";


function preLoadRollovers(){
  preLoads = new Array();
  for(var r in rollovers){
    preLoads[r] = new Image();
	   preLoads[r].src = r;
  }
}
function setUpRollovers(){
  var imgs = document.getElementsByTagName("img");
  for(i=0; i<imgs.length; i++){
    if(rollovers[imgs[i].id]){
	  imgs[i].onmouseover = function(){toggleImg(this)};
	  imgs[i].onmouseout = function(){toggleImg(this)};
	}
  }
}
function toggleImg(img){
  newImg = rollovers[img.id];
  rollovers[img.id] = img.src;
  img.src = newImg;
}


//////// mouse trail divs
function addMouseTailDivs() {
  if (ie5 && !mac) {
    document.write('<div id="dot0" style="position: absolute; visibility: hidden; height: 23; width: 23;"><img src="../images/elements/leaf-a.gif" height="23" width="23"></div>');
    document.write('<div id="dot1" style="position: absolute; height: 27; width: 27;"><img src="../images/elements/flower-a.gif" height="27" width="27"></div>');
    document.write('<div id="dot2" style="position: absolute; height: 23; width: 23;"><img src="../images/elements/flower-b.gif" height="23" width="23"></div>');
    document.write('<div id="dot3" style="position: absolute; height: 23; width: 23;"><img src="../images/elements/flower-c.gif" height="22" width="22"></div>');
    document.write('<div id="dot4" style="position: absolute; height: 23; width: 23;"><img src="../images/elements/flower-a.gif" height="20" width="20"></div>');
    document.write('<div id="dot5" style="position: absolute; height: 23; width: 23;"><img src="../images/elements/flower-b.gif" height="18" width="18"></div>');
    document.write('<div id="dot6" style="position: absolute; height: 23; width: 23;"><img src="../images/elements/flower-c.gif" height="16" width="16"></div>');
		}
	}
	
	/////////  mouse trail setup
	if (!document.getElementById&&document.all) {
  document.getElementById=function(id) { return document.all[id]; }
  DOM = true;
}

var nDots = 7;
var Xpos = 0;
var Ypos = 0;

  // fixed time step, no relation to real time
var DELTAT = .01;
  // size of one spring in pixels
var SEGLEN = 10;
  // spring constant, stiffness of springs
var SPRINGK = 10;
  // all the physics is bogus, just picked stuff to
  // make it look okay
var MASS = 1;
// Positive XGRAVITY pulls right, negative pulls left
// Positive YGRAVITY pulls down, negative up
var XGRAVITY = 0;
var YGRAVITY = 50;
// RESISTANCE determines a slowing force proportional to velocity
var RESISTANCE = 10;
  // stopping criterea to prevent endless jittering
  // doesn't work when sitting on bottom since floor
  // doesn't push back so acceleration always as big
  // as gravity
var STOPVEL = 0.1;
var STOPACC = 0.1;
var DOTSIZE = 23;
  // BOUNCE is percent of velocity retained when 
  // bouncing off a wall
var BOUNCE = 0.50;

var followmouse = true;
var dots = new Array();

//////// start mouse trail
function startMouseTrail() {
  if (ie5 && !mac) {
    var i = 0;
    for (i = 0; i < nDots; i++) {
      dots[i] = new dot(i);
    }       
    // set their positions
    for (i = 0; i < nDots; i++) {
      dots[i].obj.left = dots[i].X;
      dots[i].obj.top = dots[i].Y;
    }    
    startAnimate();
		}
}


////////////////   CALCULATE DOT   //////////////////
function dot(i) {
  this.X = Xpos;
  this.Y = Ypos;
  this.dx = 0;
  this.dy = 0;
  this.obj = eval("dot" + i + ".style");
}

////////////////   START AMIMATION   //////////////////
function startAnimate() {	
  setInterval("animate()", 20);
}

////////////////   MOUSE POS   //////////////////
// just save mouse position for animate() to use
function MoveHandlerIE() {
  if (document.documentElement && document.documentElement.scrollTop) {
	   // Explorer 6 Strict Mode
		  Xpos = window.event.x + document.documentElement.scrollLeft;
    Ypos = window.event.y + document.documentElement.scrollTop;	
  }
  else if (document.body) {
    // other Explorers
	   Xpos = window.event.x + document.body.scrollLeft;
    Ypos = window.event.y + document.body.scrollTop;	
  }
}
document.onmousemove = MoveHandlerIE;


////////////////   NEW X Y   //////////////////
function vec(X, Y) {
  this.X = X;
  this.Y = Y;
}

////////////////   FORCE   //////////////////

// adds force in X and Y to spring for dot[i] on dot[j]
function springForce(i, j, spring) {
  var dx = (dots[i].X - dots[j].X);
  var dy = (dots[i].Y - dots[j].Y);
  var len = Math.sqrt(dx*dx + dy*dy);
  if (len > SEGLEN) {
    var springF = SPRINGK * (len - SEGLEN);
    spring.X += (dx / len) * springF;
    spring.Y += (dy / len) * springF;
  }
}

////////////////   ANIMATE   //////////////////

function animate() {	
  // dots[0] follows the mouse,
  // though no dot is drawn there
  var start = 0;
  if (followmouse) {
    dots[0].X = Xpos;
    dots[0].Y = Ypos;	
    start = 1;
  }    
  for (i = start ; i < nDots; i++ ) {        
    var spring = new vec(0, 0);
    if (i > 0) {
      springForce(i-1, i, spring);
    }
    if (i < (nDots - 1)) {
      springForce(i+1, i, spring);
    }        
    // air resisitance/friction
    var resist = new vec(-dots[i].dx * RESISTANCE,
    -dots[i].dy * RESISTANCE);       
    // compute new accel, including gravity
    var accel = new vec((spring.X + resist.X)/MASS + XGRAVITY,
    (spring.Y + resist.Y)/ MASS + YGRAVITY);        
    // compute new velocity
    dots[i].dx += (DELTAT * accel.X);
    dots[i].dy += (DELTAT * accel.Y); 
		
    // stop dead so it doesn't jitter when nearly still
    if (Math.abs(dots[i].dx) < STOPVEL &&
      Math.abs(dots[i].dy) < STOPVEL &&
      Math.abs(accel.X) < STOPACC &&
      Math.abs(accel.Y) < STOPACC) {
      dots[i].dx = 0;
      dots[i].dy = 0;
    }        
    // move to new position
    dots[i].X += dots[i].dx;
    dots[i].Y += dots[i].dy;        
    // get size of window
    var height, width;
    if (document.documentElement && document.documentElement.clientHeight) {
      // Explorer 6 Strict Mode
      height = document.documentElement.clientHeight + document.documentElement.scrollTop;
      width = document.documentElement.clientWidth + document.documentElement.scrollLeft;
    }
    else if (document.body) {
      // other Explorers
      height = document.body.clientHeight + document.body.scrollTop;
      //width = document.body.clientWidth + document.body.scrollLeft; needs testing!!
      width = screen.width;
    }
    else {
      width = screen.width;
      height = screen.height;
    }
				// bounce off 3 walls (leave ceiling open)
    if (dots[i].Y >=  height - DOTSIZE - 1) {
      if (dots[i].dy > 0) {
        dots[i].dy = BOUNCE * -dots[i].dy;
      }
      dots[i].Y = height - DOTSIZE - 1;
    }
    if (dots[i].X >= width - DOTSIZE) {
      if (dots[i].dx > 0) {
        dots[i].dx = BOUNCE * -dots[i].dx;
      }
      dots[i].X = width - DOTSIZE - 1;
    }
    if (dots[i].X < 0) {
      if (dots[i].dx < 0) {
        dots[i].dx = BOUNCE * -dots[i].dx;
      }
      dots[i].X = 0;
    }       
    // move img to new position
    dots[i].obj.left = dots[i].X;			
    dots[i].obj.top =  dots[i].Y;		
  }
}	