/*
 * oursignal.com
 *
 * Copyright (c) 2008 Stateless Systems
 *
 */
 

function wordBreak(str, num) { 
	return str.replace(RegExp("(\\w{" + num + "})(\\w)", "g"), function(all,text,char){
		return text + "<wbr>" + char;
	});
}

function getDataFromList(datas) {
	var data = [];
	jQuery.each(datas, function (i, n) {
		var label = '<span><a href="' + n.url + '" title="' + n.desc + '">' + n.title + '</a></span>';
		var row = [ label, parseFloat(n.score) ];
		data.push(row);
	});
	return data;
}


function renderTree() {

	 jQuery("#treemap,.treemapView").remove();


	jQuery("#target").treemap(jQuery(window).width(), jQuery(window).height() - 32, {
			getData: function () {
					return getDataFromList(datas);
			}
	});

	//var begin = new Date();

	jQuery("div.treemapCell span").each(function (i) {
			var chars = jQuery(this).text().length;
			var fontSize = Math.round($(this).width() * 50 / chars);
			if(fontSize < 1) fontSize = 1;
			this.style.fontSize = fontSize + "px";
			
			var parentHeight = $(this).parent().height();
			var parentWidth  = $(this).parent().width();
			
			function tooBig(height, width) {
					return (
								height > parentHeight
								|| width > parentWidth
					);

			}
			
			function tooSmall(height, width) {
					return (
								height < parentHeight
								&& (width < parentWidth || width == parentWidth)
					);
			}

			function resize(el) {   
					rawEl = el;
					var thisFontSize = parseFloat(rawEl.style.fontSize.replace('px', ''));
					el = jQuery(el);
					var height = el.height();
					var width  = el.width();
					var resized = false;
					
					if (tooBig(height, width)) {
							fontSize = Math.round(thisFontSize - ((thisFontSize-floor)/2) );
							resized  = true;
							//alert('too big: ' + lastSize+' -> '+fontSize + '(floor: '+floor+', ceiling:'+ceiling+', this:'+thisFontSize+')');
							ceiling = lastSize;
					}
					
					if (tooSmall(height, width)) {
							fontSize = Math.round(thisFontSize + ((ceiling-thisFontSize)/2) );
							resized  = true;                        
							//alert('too small: ' + lastSize+' -> '+fontSize + '(floor: '+floor+', ceiling:'+ceiling+', this:'+thisFontSize+')');
							floor = thisFontSize;
					}
					
					if(fontSize < 1) fontSize = 1;
					
					if (resized && fontSize != lastSize) {
							rawEl.style.fontSize = fontSize + "px";
							lastSize = fontSize;
					} else {
							resized = false;
					}

					return resized;
			}
			
			var iterations = 0;
			var lastSize = parseFloat(this.style.fontSize.replace('px', ''));
			var ceiling = lastSize + 100;
			var floor = 1;
			
			//alert('box size: '+parentHeight+'*'+parentWidth+', text size: '+$(this).height()+'*'+$(this).width() );
			
			while (resize(this)) {
				 iterations++;
				 if (iterations > 50) return;
			}

			if($(this).width() > parentWidth || $(this).height() > parentHeight) this.style.fontSize = (lastSize-1) + "px";

			// color code velocity
			var thisTitle = this.firstChild.title;
			var velo = thisTitle.substring(thisTitle.indexOf("velocity: "));
			velo = velo.substring(velo.indexOf(" "), velo.indexOf(")"));
			
			var squareColor;
			
			squareColor = "ffffff";
			if (velo < 20)  squareColor = "FFFFFF";
			if (velo < 19)  squareColor = "FFFFFF";
			if (velo < 18)  squareColor = "fcabc6";
			if (velo < 17)  squareColor = "FFFFFF";
			if (velo < 16)  squareColor = "FFFFFF";
			if (velo < 15)  squareColor = "DF0080";
			if (velo < 14)  squareColor = "5FD6E9";
			if (velo < 13)  squareColor = "FFFFFF";
			if (velo < 12)  squareColor = "FFFFFF";
			if (velo < 11)  squareColor = "FFFFFF";
			if (velo < 10)  squareColor = "FFFFFF";
			if (velo < 9)  squareColor = "FFFFFF";
			if (velo < 8)  squareColor = "FFFFFF";
			if (velo < 7)  squareColor = "DF0080";
			if (velo < 6)  squareColor = "FFFFFF";
			if (velo < 5)  squareColor = "FFFFFF";
			if (velo < 4)  squareColor = "FFFFFF";
			if (velo < 3)  squareColor = "FFFFFF";
			if (velo < 2)  squareColor = "FFFFFF";

			if (velo < 1)  squareColor = "EABB4F";
			
			if (velo < 0)  squareColor = "FFFFFF";
			if (velo < -1)  squareColor = "7FA42F";
			if (velo < -2)  squareColor = "FFFFFF";
			if (velo < -3)  squareColor = "7FA42F";
			if (velo < -4)  squareColor = "FFFFFF";
			if (velo < -5)  squareColor = "DEDEDE";
			if (velo < -6)  squareColor = "FFFFFF";
			if (velo < -7)  squareColor = "223042";
			if (velo < -8)  squareColor = "223246";
			if (velo < -9)  squareColor = "22334A";
			if (velo < -10)  squareColor = "213551";
			if (velo < -11)  squareColor = "FFFFFF";
			if (velo < -12)  squareColor = "FFFFFF";
			if (velo < -13)  squareColor = "FFFFFF";
			if (velo < -14)  squareColor = "FFFFFF";
			if (velo < -15)  squareColor = "FFFFFF";
			if (velo < -16)  squareColor = "FFFFFF";
			if (velo < -17)  squareColor = "FFFFFF";
			if (velo < -18)  squareColor = "FFFFFF";
			if (velo < -19)  squareColor = "FFFFFF";
			
			$(this).parent().css("background-color", '#'+squareColor);
			
			
	});
	

	if($.cookie('disableTooltips') > 0) {
		$('a').attr('title', '');
	} else {
		$('a').tooltip({ 
				track: true, 
				delay: 2000, 
				showURL: true, 
				showBody: " - ", 
				extraClass: "pretty fancy", 
				opacity: 0.9 
		});
	}
	
	if($.cookie('popLinks') > 0) {
		$('#target a').attr('target', '_blank');
	}

	// hide visited
	if($.cookie('hideVisited') > 0) {
	
		$('#target a').visited(function () {
			$(this).parent().parent().hide();
		});
		
		$('#target a').click(function () {
			$(this).parent().parent().hide();
		});
		
	}
	
	
}

// document events
jQuery(document).ready(renderTree);
jQuery(window).resize(renderTree);
