Wafr = function()
{
	this.objArr = new Array();
}

Wafr.prototype.replace = function(str, oud, nieuw)
{
	return str.split(oud).join(nieuw);
}

Wafr.prototype.striptags = function( str )
{
	return str.replace(/<\/?[^>]+>/gi, '');
}

Wafr.prototype.trim = function( str )
{
	return str.replace(/\s+/g,' ')
}

Wafr.prototype.addGroup = function( obj )
{
	if ( !obj.upperCase ) obj.upperCase = 0;
	if ( !obj.gap ) obj.gap = 1;
	
	if ( obj.padding && obj.padding.length ) {
		
		var p = obj.padding;
		
		switch( p.length )
		{
			case 1:
				obj.padding = [ p[0], p[0], p[0], p[0] ];
				break;
			case 2:
				obj.padding = [ p[0], p[1], p[0], p[1] ];
				break;
			case 3:
				obj.padding = [ p[0], p[1], p[2], 0 ];
				break;
			case 4:
				obj.padding = [ p[0], p[1], p[2], p[3] ];
				break;
			default:
				obj.padding = [0, 0, 0, 0];
				break;			
		}
		
	} else {
		
		obj.padding = [0,0,0,0];
	}
	
	if 
	(
		obj.elements && obj.elements[0] &&
		obj.swf &&
		obj.swfWidth &&
		obj.maxCharsLine &&
		obj.lineHeight
	)
	{
		obj.swfWidth = parseInt( obj.swfWidth );
		obj.maxCharsLine = parseInt( obj.maxCharsLine );
		obj.lineHeight = parseInt( obj.lineHeight );
		
		this.objArr.push( obj );
		
	} else {
	
	
		
	}
}

Wafr.prototype.addAltText = function( obj, str )
{
	var span = document.createElement("span");
	var text = document.createTextNode( str );
	span.appendChild( text );
	obj.appendChild( span );
	
	span.style.overflow = "hidden";
	span.style.display = "block";
	span.style.width = "0";
	span.style.height = "0";
}

Wafr.prototype.addSwf = function( swf, html, id, swfWidth, swfHeight, padding )
{
	var f = new SWFObject( swf, id, swfWidth, swfHeight, "8", "#cccccc");
	f.addVariable("breed", swfWidth );
	f.addVariable("tekst", html );
	f.addVariable("padding", padding.join("*") );
	f.addParam("wmode","transparent");
	f.write(id);
}

Wafr.prototype.escapeHTML = function( str )
{
	var div = document.createElement('div');
	var text = document.createTextNode( str );
	div.appendChild(text);	
	return div.innerHTML;
}

Wafr.prototype.getHTML = function( elm, upperCase )
{
	var html = upperCase == 1 ? elm.innerHTML.toUpperCase() : elm.innerHTML;
			
	html = this.replace( html, '"',"'");
	
	html = this.escapeHTML( html );
	
	return html;
}

Wafr.prototype.calculateHeight = function( html, maxCharsLine, lineHeight, padding, gap )
{
	var brs = this.trim( html.toLowerCase() );
	var paragraphs = brs.split("<br>");
	
	var l = paragraphs.length;
	var hoogte = 0;
	
	for( var i = 0; i < l; i++)
	{
		var aantalChars = this.striptags( paragraphs[i] ).length;
			
		var paragraphHeight = Math.ceil(aantalChars / maxCharsLine) * lineHeight;
			
		hoogte += paragraphHeight;
	}	

	hoogte += ( padding[0] + padding[2] );
	hoogte -= gap;
	
	return hoogte;
}

Wafr.prototype.write = function()
{
	var i,j;
	
	var ol = this.objArr.length;
	
	for( i = 0; i < ol; i++)
	{
		var elml			= this.objArr[i].elements.length;
				
		var swf				= this.objArr[i].swf;
		var swfWidth		= this.objArr[i].swfWidth;
		var maxCharsLine	= this.objArr[i].maxCharsLine;
		var lineHeight		= this.objArr[i].lineHeight;
		var upperCase		= this.objArr[i].upperCase;
		var padding			= this.objArr[i].padding;
		var gap				= this.objArr[i].gap;
		
		for( j = 0; j < elml; j++)
		{
			var elm = this.objArr[i].elements[j];
			
			var id = "wafr" + i + j;
			
			elm.id = id;
			
			var html = this.getHTML( elm, upperCase );
			
			var stripped = this.striptags( elm.innerHTML );
			
			var swfHeight = this.calculateHeight( elm.innerHTML, maxCharsLine, lineHeight, padding, gap );
			
			elm.innerHTML = "";
			
			this.addSwf( swf, html, id, swfWidth, swfHeight, padding );
			
			this.addAltText( elm, stripped );
			
		}	
	}
}



/*
	Written by Jonathan Snook, http://www.snook.ca/jonathan
	Add-ons by Robert Nyman, http://www.robertnyman.com
*/

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}


/*
	----------------------------------------------------------------------------------------------------

	var w = new Wafr();		
	
	w.addGroup(
		{
			"elements"
				: document.getElementById( "didot" ).getElementsByTagName( "h3" ),
			"swf"
				: "didot.swf",			
			"swfWidth"
				: 500,
			"maxCharsLine"
				: 42,
			"lineHeight"
				: 32,
			"upperCase"
				: 0,
			"padding"
				: [5,10,10,10]
		});
	
	w.write();
	
	----------------------------------------------------------------------------------------------------
	
	elements:
	
		Array met dom-elementen
		als je exact 1 element wilt selecteren met document.getElementById() moet je deze tussen [] zetten
		
	swf:
	
		pad naar de swf
	
	swfWidth:
	
		De breedte van het object in de pagina
		
	maxCharsLine:
	
		aantal karakters waarna er een nieuwe regel moet komen
	
	lineHeight:
	
		het aantal regels maal de lineHeight wordt de hoogte van het object
		je stelt hiermee dus niet de interlinie in. Dat moet je in Flash doen.
	
	upperCase (optioneel : default naar false):
	
		wel of niet converteren naar kapitalen
		
	padding (optioneel : default naar [0,0,0,0] ):
	
		array om de padding in te stellen
		volgorde: top, right, bottom, left
		
		als je [10] invult wordt het [10, 10, 10, 10]
		als je [10, 0] invult wordt het [10, 0, 10, 0]
		
		top en bottom maken de swf hoger 
		left en right maken de swf niet breder maar duwen de tekst naar binnen toe
		
	gap ( optioneel : default naar 1)
		
		dit is de witruimte tussen de regels
		deze wordt van de hoogte afgetrokken om beter uit te komen met de hoogte van je swf
				
	---------------------------------------------------------------------------------------------------
	
	<doelElement> ( a strong em span ) </doelElement>
	
	wafr.css is flash-specifieke stylesheet
		
	in flash stel je de algemene tekstkleur en font-size en interlinie in
	
	vervolgens kun je 4 extra kleuren instellen via wafr.css
	
		- a
		- strong
		- em
		- .kleur
	
	.kleur in de stylesheet is een kale span (zonder class) in de htmlcode
		
	Gebruik binnen de elementen in de htmlcode (die vervangen moeten worden) GEEN classnames want
	dit geeft een bug in IE.
	
	---------------------------------------------------------------------------------------------------
	
*/
