
//globals
var wordsCalled	   = [];
var wordCollection	   = [];
var characterRoot = "/public/chars/";
var requestInProcess = false;
//
function init()
{
fadeInPlants();
LoadListeners();
}
				
function fadeInPlants()
{

	var stems = $(".stem");
	var heads = $(".head");
	for (var i =0; i < stems.length; i++)
	{
	
		setTimeout(fadeInCharacter, (i * 100), $(stems[i]));
		setTimeout(fadeInCharacter, (i * 300), $(heads[i]));
	}

}
function fadeInCharacter(stem)
{
			stem.fadeIn("slow");
}
function LoadListeners()
{
	var flowerElements = $(".flower");
	
		for(i=0; i < flowerElements.length; i++)
		{
			
			$(flowerElements[i]).click(function()
			{
				var classes = this.className.split(" ");
				taxonomize(classes[1]);
			});
		}
}
function drawWord(word)
{

	if (wordCollection.contains(word))
		return;

    wordCollection.push(word);


	var left = rand(1 , 900);

	var wordTpl = "<div class='flower "+word+"' >";
	for (i=0;i < word.length; i++)
	{
		var bottom = -100 + (30 * i);
	
		wordTpl += renderHead(word , word[i] , left);
		wordTpl += renderStem(word , word[i] , left , bottom);
		
	}
    wordTpl += "</div>";
	
	$("#nodes").prepend(wordTpl);
}
function renderStem(word, char, leftMargin, bottomMargin)
{
	var imgUrl = characterRoot+word+"-stem-"+char+".png";
	return "<div class='stem' style='display:none;position:absolute;left:"+leftMargin+"px;bottom:"+bottomMargin+"px;'><img src='"+imgUrl+"' /></div>";
}
function renderHead(word, char, leftMargin)
{
	var bottom = word.length * 20;

	var imgUrl = characterRoot+word+"-head-"+char+".png";
	return "<div class='head' style='display:none;position:absolute;bottom:"+bottom+"px;left:"+leftMargin+"px;'><img src='"+imgUrl+"' /></div>"
}
 function rand(l,u) // lower bound and upper bound
 {
     return Math.floor((Math.random() * (u-l+1))+l);
 }


function taxonomize(word)
{
	if (wordsCalled.contains(word))
		return;
	if (requestInProcess)
		return;
	
	requestInProcess = true;
  	$("#status").html("taxonomizing...");
  	$("#status").fadeIn("slow");

	wordsCalled.push(word);
	$.ajax({
	  type: "POST",
	  url: "/async/gardenword",
	  data: "word="+word,
	  success: function(msg){
	  	var words = eval(msg);
	  	var wordsToDraw = [];
	  	for (i=0; i< words.length; i++)
	  	{
	  			wordsToDraw.push(words[i][0]);
	  			wordsToDraw.push(words[i][1]);
	  		
	  	}
	  	
	  	wordsToDraw = unique(wordsToDraw);
	  	
	  	for(var j=0; j < wordsToDraw.length;j++)
	  	{
	  		drawWord(wordsToDraw[j]);
	  	}
	  	
	  	
	  	fadeInPlants();
	  	LoadListeners();

		requestInProcess = false;
	  	$("#status").html("");
	  	$("#status").fadeOut("slow");

	  }
	});

}
function unique(a) {
   var r = new Array();
   o:for(var i = 0, n = a.length; i < n; i++) {
      for(var x = 0, y = r.length; x < y; x++)
         if(r[x]==a[i]) continue o;
      r[r.length] = a[i];
   }
   return r;
}

if (!Array.prototype.contains){
    Array.prototype.contains = function(obj){
    var len = this.length;
    for (var i = 0; i < len; i++){
      if(this[i]===obj){return true;}
    }
    return false;
  };
}
