entities_tab= new Object;
entities_tab["&amp;"]="&";
entities_tab["&quot;"]='"';
entities_tab["&lt;"]="<";
entities_tab["&gt;"]=">";
entities_tab["&nbsp;"]=" ";
entities_tab["&iexcl;"]="¡";
entities_tab["&cent;"]="¢";
entities_tab["&pound;"]="£";
entities_tab["&curren;"]="¤";
entities_tab["&yen;"]="¥";
entities_tab["&brvbar;"]="¦";
entities_tab["&sect;"]="§";
entities_tab["&uml;"]="¨";
entities_tab["&copy;"]="©";
entities_tab["&ordf;"]="ª";
entities_tab["&laquo;"]="«";
entities_tab["&not;"]="¬";
entities_tab["&shy;"]="­";
entities_tab["&reg;"]="®";
entities_tab["&macr;"]="¯";
entities_tab["&deg;"]="°";
entities_tab["&plusmn;"]="±";
entities_tab["&sup2;"]="²";
entities_tab["&sup3;"]="³";
entities_tab["&acute;"]="´";
entities_tab["&micro;"]="µ";
entities_tab["&para;"]="¶";
entities_tab["&middot;"]="·";
entities_tab["&cedil;"]="¸";
entities_tab["&sup1;"]="¹";
entities_tab["&ordm;"]="º";
entities_tab["&raquo;"]="»";
entities_tab["&frac14;"]="¼";
entities_tab["&frac12;"]="½";
entities_tab["&frac34;"]="¾";
entities_tab["&iquest;"]="¿";
entities_tab["&Agrave;"]="À";
entities_tab["&Aacute;"]="Á";
entities_tab["&Acirc;"]="Â";
entities_tab["&Atilde;"]="Ã";
entities_tab["&Auml;"]="Ä";
entities_tab["&Aring;"]="Å";
entities_tab["&AElig;"]="Æ";
entities_tab["&Ccedil;"]="Ç";
entities_tab["&Egrave;"]="È";
entities_tab["&Eacute;"]="É";
entities_tab["&Ecirc;"]="Ê";
entities_tab["&Euml;"]="Ë";
entities_tab["&Igrave;"]="Ì";
entities_tab["&Iacute;"]="Í";
entities_tab["&Icirc;"]="Î";
entities_tab["&Iuml;"]="Ï";
entities_tab["&ETH;"]="Ð";
entities_tab["&Ntilde;"]="Ñ";
entities_tab["&Ograve;"]="Ò";
entities_tab["&Oacute;"]="Ó";
entities_tab["&Ocirc;"]="Ô";
entities_tab["&Otilde;"]="Õ";
entities_tab["&Ouml;"]="Ö";
entities_tab["&times;"]="×";
entities_tab["&Oslash;"]="Ø";
entities_tab["&Ugrave;"]="Ù";
entities_tab["&Uacute;"]="Ú";
entities_tab["&Ucirc;"]="Û";
entities_tab["&Uuml;"]="Ü";
entities_tab["&Yacute;"]="Ý";
entities_tab["&THORN;"]="Þ";
entities_tab["&szlig;"]="ß";
entities_tab["&agrave;"]="à";
entities_tab["&aacute;"]="á";
entities_tab["&acirc;"]="â";
entities_tab["&atilde;"]="ã";
entities_tab["&auml;"]="ä";
entities_tab["&aring;"]="å";
entities_tab["&aelig;"]="æ";
entities_tab["&ccedil;"]="ç";
entities_tab["&egrave;"]="è";
entities_tab["&eacute;"]="é";
entities_tab["&ecirc;"]="ê";
entities_tab["&euml;"]="ë";
entities_tab["&igrave;"]="ì";
entities_tab["&iacute;"]="í";
entities_tab["&icirc;"]="î";
entities_tab["&iuml;"]="ï";
entities_tab["&eth;"]="ð";
entities_tab["&ntilde;"]="ñ";
entities_tab["&ograve;"]="ò";
entities_tab["&oacute;"]="ó";
entities_tab["&ocirc;"]="ô";
entities_tab["&otilde;"]="õ";
entities_tab["&ouml;"]="ö";
entities_tab["&divide;"]="÷";
entities_tab["&oslash;"]="ø";
entities_tab["&ugrave;"]="ù";
entities_tab["&uacute;"]="ú";
entities_tab["&ucirc;"]="û";
entities_tab["&uuml;"]="ü";
entities_tab["&yacute;"]="ý";
entities_tab["&thorn;"]="þ";

var isMacIE    = (navigator.appVersion.indexOf("Mac")!=-1 && document.all);


function fstrip_MyMatch(re)
{
	match = re.exec(this.toString());
	if(match)
	{
//		alert('Succesfully = '+ match);
		RegExp.index = this.indexOf(match[0]);
		RegExp.lastIndex = match[0].length;

	RegExp.leftContext = this.substring(0,RegExp.index);
	RegExp.rightContext = this.substring(RegExp.lastIndex);
//	alert( RegExp.leftContext + "<==>"+RegExp.rightContext);
		}
	else
	{
		RegExp.leftContext = "";
		RegExp.rightContext ="";
	}
	return match;
}
if (typeof RegExp.leftContext == 'undefined')
{
	String.prototype.oldmatch  = String.prototype.match;
	String.prototype.match = fstrip_MyMatch;
	RegExp.leftContext = "";
	RegExp.rightContext = "";

}


var fontStripTestLayer=null;

function getStripTestLayer()
{
	if (fontStripTestLayer) return fontStripTestLayer;
	
	var x=-40,y=-40,visible=true,zIndex=1;
   	var lay;
	var lay_name = "fontStripTestLayer";
	if (document.layers)
	{
		lay = new Layer(40);
		lay.left=x;
		lay.top=y;
		lay.zIndex=zIndex;
        lay.visibility  = visible?"show":"hide";
	}
	else
	{   
		if (document.getElementById)
		{
			lay = document.createElement("DIV");
			lay.id = lay_name ;
			document.body.appendChild(lay); 
			lay.style.position ="absolute";
		}
        else if (document.all)
		{
			
			document.body.insertAdjacentHTML("beforeEnd","<DIV style='position:absolute' id='" + lay_name+"'>&nbsp;</div>");
			lay = document.all[lay_name];
		}
		else return null;
		lay.style.visibility = visible?"visible":"hidden";
		//lay.style.display="block";
		lay.style.zIndex=zIndex;
		lay.style.left=""+x+"px";
		lay.style.top=""+y+"px";
		//lay.style.height=""+h+"px";
		//lay.style.width=""+w+"px";
	}
	fontStripTestLayer = lay;
    return lay;
}


function getStripLayXSize(lay)
{
	if (document.layers)
		return lay.clip.width;
	if (document.all)
		return lay.clientWidth;
	if (document.getElementById)
		return lay.offsetWidth;
	return 0;
}

function fillStripLayer(txt,lay)
{
	
	if (document.layers)
	{
		lay.document.open();
		lay.document.write(txt);
		lay.document.close();
	}
	else if (document.all)
		lay.innerHTML = txt;
	else if (document.getElementById)
		lay.innerHTML = txt;
}

function getStripSizesForStyle(style)
{
	var lay = getStripTestLayer()
		//alert (lay);
	style = style.toString();	
	table = new Array();
	hmax = 0;
	var mixer=new Array("\\","|","/","-");
	var prefix = style.match(/;/)?"<span style='"+style+"'>":("<span class='"+style+"'>");
	
	var suffix = "</span>";
		
		if (isMacIE)
	{
		prefix = "<table BORDER=0 CELLPADDING=0 CELLSPACING=0><tr><td>" + prefix;
		suffix += "</td></tr></table>";
	}

	table[0] = 0;	
	for (var i = 33; i < 255; i++)
	{
			fillStripLayer(prefix+"&#"+i+";"+suffix,lay);
			table[i-32]  = getStripLayXSize(lay);
			//window.top.status = "" + i + " " +mixer[i%4];
	}
	fillStripLayer(prefix+"&#33;&#"+i+";&#33;"+suffix,lay);
	table[0] = getStripLayXSize(lay)-2*table[33-32];


	//alert (table.length);	
	return table;
}




function htmlentities(ret)
{
	var out = ret.replace(/>/g,"&gt;");
	out = out.replace(/</g,"&lt;");
	out = out.replace(/&/g,"&amp;");
	out = out.replace(/\x9c/,"&#156;");	
	return out;
}

function unhtmlentities(ret)
{
	//alert('x');
	var str = ret;
	var str1 = "";
	while (typeof(str)=='string' && str.length>0)
	{
		if (str.match(/&#x([0-9]+);/))
		{
			str1 += RegExp.leftContext;
			str1 += String.fromCharCode(parseInt(RegExp.$1,16));
			str = RegExp.rightContext;
		}
		else if (str.match(/&#([0-9]+);/))
		{
			str1 += RegExp.leftContext ;
			str1 += String.fromCharCode(parseInt(RegExp.$1,10));
			//alert(String.fromCharCode(parseInt(RegExp.$1,10)));
			str = RegExp.rightContext;
			//alert(parseInt(RegExp.$1,10));	
			//alert (str1);
		}
		else 
		{
			str1 += str;
			str = "";
		}
	}
	str = str1;
	str1="";
	while (typeof(str)=='string' && str.length>0)
	{
		if (str.match(/(&[a-zA-Z]+;)/))
		{
			str1 += RegExp.leftContext ;
			//alert(RegExp.leftContext);
			//alert(RegExp.$1);
			//alert(entities_tab[RegExp.$1]);
			str1 += entities_tab[RegExp.$1];
			str = RegExp.rightContext;
		}
		else 
		{
			str1 += str;
			str = "";
		}
	}
    return str1;
}

function getRenderWidth(istr,lenArray)
{
	var str = istr;
	str = unhtmlentities(str);
	str = str.replace(/\&nbsp;/g," ");
	str = str.replace(/<br>/ig," ");
	str = str.replace(/[ \t\r\n\x0b]+/g," ");
	var len = 0 ; 
	for (var i = 0 ; i< str.length; i++)
		len += lenArray[str.charCodeAt(i)-32];
	return len;
}
//str.charCodeAt(i)-32

function stripToPixels(istr,maxlen,lenArray)
{
	var str = istr;
//	alert(istr);	
	if ( !lenArray || (lenArray.length < 255-32))
	{
		alert('text stripping error!')
		return str;
	}
	
	str = str.replace(/<br>/ig," ");
	str = str.replace(/<\/?[^>].*>/ig," ");
	
	str = unhtmlentities(str);
	str = str.replace(/[ \t\r\n]+/ig," ");
			
	len = 0;
    i=0;
	while ( i<str.length)
	{
		var ch=str.charCodeAt(i);
		if ( ch <32 ) ch=32;
 	  	len += lenArray[ch-32];
		if (len >= maxlen)
		{
			maxlen -= 3 * lenArray[46-32]; //3 dots
			while (i>=0 && len > maxlen )
			{
				var ch=str.charCodeAt(i);
				if ( ch <32 ) ch=32;
				len -= lenArray[ch-32];	
				i--;
			}
			return htmlentities(str.substring(0,i)+"...");
		} 
		i++;
	}
	return htmlentities (str);
}

function stripToLines(str_in,maxlen,maxlines,lenArray,stripped,out_lines,first_line_padding)
{
	var str = str_in;
	if (!first_line_padding)
		first_line_padding = 0 ; 
	var strip1="";
	if (!lenArray && lenArray.length<(255-32))
		 return false;
	org = str;
	res = false;
	str = str.replace(/\&nbsp;/g," ");
    str = str.replace(/[\x01-\x20]+/g," ");//\t\r\n
	str = str.replace(/<br>/ig,"\n");
	str = str.replace(/<[^>]*>/ig," ");
	var NL = ("\n").charCodeAt(0);
	var len = first_line_padding;
    var i=0;
	var lastspace =-1;
	line = 0;
	line_start=i;
	out = "";
	while ( i<str.length )
	{
 	  	var ch =  str.charCodeAt(i);
		if (ch==32) lastspace = i;
		if (ch>=32)
			len += lenArray[ ch-32 ];
		i++;
		if (len > maxlen || ch == NL)
		{
            if (ch != NL &&  lastspace>0)
				i = lastspace;
			else if (ch == NL ) 
			    i--;
			else res = true;
				  
			if ( out !="") out += "<br>";
			out += htmlentities (str.substring(line_start,i)) ;
			line++;
			if (line >= maxlines)
			{
				stripped.val = out;
				out_lines.val = line;         
				return str.length>i;
			}
			if (str.charAt(i)==" " || str.charAt(i)=="\n")
				i++;
			line_start = i; 
			lastspace = -1;
			len = 0;
		}
	}
    if ( out !="") out += "<br>";
    out += htmlentities (str.slice(line_start));
	stripped.val = out;
	out_lines.val = line+1;
    return false;
}

function stripToLinesEx(str,str1,maxlen,maxlines,lenArray,lenArray1,stripped,stripped1,first_line_padding)
{
	if (!first_line_padding)
		first_line_padding=0;
	var out_lines=new Object;
	out_lines.val =	0;
	var res= 0;
	res= stripToLines(str,maxlen,maxlines,lenArray,stripped,out_lines,first_line_padding);
	
	if (!res && out_lines.val < maxlines)
	{
		res =stripToLines(str1,maxlen,maxlines-out_lines.val,lenArray1,stripped1,out_lines,0);
	}
	else 
	{
		stripped1.val="";
		return true;
	}
    return res;
}

function GetStyleWidths(style,win)
{
	if (!win.style_widths)
		win.style_widths = new Object;
	if (!win.style_widths[style]) 
	{
		win.style_widths[style]=getStripSizesForStyle(style);
	}

	return win.style_widths[style];
	
}

function stripToPixelsAuto(str,maxlen,style,win)
{
	return stripToPixels(str,maxlen,GetStyleWidths(style,win));
}

function stripToLinesAuto(str_in,maxlen,maxlines,style,win,stripped,out_lines,first_line_padding)
{
	return stripToLines(str_in,maxlen,maxlines,GetStyleWidths(style,win),stripped,out_lines,first_line_padding);
}

function stripToLinesExAuto(str,str1,maxlen,maxlines,style1,style2,win,stripped,stripped1,first_line_padding)
{
	return stripToLinesEx(str,str1,maxlen,maxlines,GetStyleWidths(style1,win),GetStyleWidths(style2,win),stripped,stripped1,first_line_padding);
}


function getRenderWidthAuto(str,style,win)
{
	return getRenderWidth(str,GetStyleWidths(style,win));
	
}

function InitFontStripLib(maintop)
{
	getStripTestLayer(); //creates font strip layer - specially added for ns4 copability
	for (i=1;i<arguments.length;i++)
			GetStyleWidths(arguments[i],maintop)		
	
}

