function computetextlength(str)  {
	//alert('compute');
	var tmp = document.getElementById("hiddendivformeasure");
	tmp.innerHTML = "&nbsp;"+str;
	var len = tmp.scrollWidth;
	tmp.innerHTML = "&nbsp;";
	
	return len;
}



function justify_poem(root_obj) {
	var max_aa_width = -1;
	var max_bb_width = -1;
	var alpha = 1;
	if (BrowserDetect.browser == "Explorer") {
		alpha = 0.99;
	} else {
		alpha = 0.79;
	};


	verse_tag = "div";
        var verse_objs = root_obj.getElementsByTagName(verse_tag);

   	for (var i = 0;  i < verse_objs.length; i++) {
		verse_obj = verse_objs[i];

		var indentoffset = 0;
		if (verse_obj.getAttribute("myindent") != undefined) {
		 	if (verse_obj.getAttribute("myindentlength") == undefined) {
   				verse_obj.myindentlength = indentoffset = computetextlength(verse_obj.getAttribute("myindent"));
   			} else {
   				indentoffset = verse_obj.getAttribute("myindentlength");
   			}
		}
		
		
		if (verse_obj.className == "aa" || verse_obj.className == "bb") {
			var elms = verse_obj.getElementsByTagName('div');
			if (verse_obj.className == "aa") {
				max_aa_width = Math.max(elms[1].scrollWidth+indentoffset, max_aa_width);
			} else {
				max_bb_width = Math.max(elms[2].scrollWidth+indentoffset, max_bb_width);
			}
		}
	}


   	for (var i = 0;  i < verse_objs.length; i++) {
		verse_obj = verse_objs[i];
		if (verse_obj.className == "aa" || verse_obj.className == "bb") {
			var elms = verse_obj.getElementsByTagName('div');
			var elm0 = "";
			var indentoffset = 0;
			if (verse_obj.getAttribute("myindent") != undefined) {
			 	if (verse_obj.getAttribute("myindentlength") == undefined) {
	   				verse_obj.myindentlength = indentoffset = computetextlength(verse_obj.getAttribute("myindent"));
	   			} else {
	   				indentoffset = verse_obj.getAttribute("myindentlength");
	   			}
			}

			if (verse_obj.className == "aa") {
		    	elms[0].style.width = indentoffset+'px'; 
				elms[1].style.width = max_aa_width;
				elms[2].style.width = (alpha*root_obj.clientWidth-max_aa_width)+'px';
			} else {
		    	elms[0].style.width = indentoffset+'px'; 
				elms[1].style.width = 
					Math.min((alpha*root_obj.clientWidth-max_bb_width), max_aa_width)+'px';
				//elms[2].style.width = 
				//	Math.max((alpha*root_obj.clientWidth-max_aa_width), max_bb_width)+'px';
			};
		}
	}


}




function justify_poems(poem_class) {
	poem_tag = "table";
	root_obj = document.body;

        var poem_objs = root_obj.getElementsByTagName(poem_tag);

       	for (var i = 0;  i < poem_objs.length; i++) {
		poem_obj = poem_objs[i];
		if (poem_obj.className == poem_class) {
			justify_poem(poem_obj);
			justify_poem(poem_obj);
		}
	}
	
}









var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
