// Fix HTML for ReadSpeaker.
function fixHTMLForReadSpeaker(sHTML)
{
    var sReadText = '';
    
    var arStartBlocks = sHTML.split('<!-- RSPEAK_START -->');
    
    if (arStartBlocks.length > 1)
    {
        var sReadHTML = '';
        
        // Eerste start-block niet meenemen (lezen).
        for (var i = 1; i < arStartBlocks.length; i++)
        {
            var sStartBlock = arStartBlocks[i];
            var iStopPosition = sStartBlock.indexOf('<!-- RSPEAK_STOP -->');
            
            // Hele start-block en anders tot end-block meenemen (lezen).
            sReadHTML += ((iStopPosition == -1) ? sStartBlock : sStartBlock.substring(0, iStopPosition));
        }
        
        // Strip (HTML) tags.
        sReadText = sReadHTML.replace(/(<([^>]+)>)/gim, ' ');
		
		// dubbele whitespaces en enters er uit
		sReadText = sReadText.replace(/ {2,}/g,' ').replace(/[\n\r]*/g,'');

		// &nbsp; naar spaties
		sReadText = sReadText.replace(/&nbsp;/g, ' ');
		sReadText = sReadText.replace(/&amp;/g, ' en ');

		// KvB01022011 Bugfix: Readspeaker loopt vast op &ndash;
		sReadText = sReadText.replace(/\u2013/g, '-');

		// KvB14062010 Bugfix: ReadSpeaker loopt vast op &ldquo; en &rdquo;
		sReadText = sReadText.replace(/(\u201c|\u201d|\u2018|\u2019)/g, '"');

		// KvB19102010 Bugfix: Ook het euro-teken is niet makkelijk
		sReadText = sReadText.replace(/\u20ac/g, ' euro ');

		// KvB14042011 Bugfix: Ook de horizontal ellipses (hellip) is maar moeilijk
		sReadText = sReadText.replace(/\u2026/g, '...'); 
	}
    
    return sReadText;
}

function IsDebug()
{
	return (typeof(document.rs_form) != "undefined" && document.rs_form != null &&
		typeof(document.rs_form.test_area) != "undefined" && document.rs_form.test_area != null);
}

function WriteToDebugArea(text)
{
	var txtTextArea = document.getElementById("test_area");
	if (txtTextArea != null)
		txtTextArea.value = text;
}

function rsOpenAndRead()
{
	var rs_form = document.getElementById('rs_form');
	if (rs_form)
	{
		var html = fixHTMLForReadSpeaker(document.body.innerHTML);
		WriteToDebugArea(html);

		rs_form.target = 'rs';
    
		rs_form['selectedhtml_base64'].value = base64Encode(html);
		if (window.open('', 'rs', 'width=380,height=180,toolbar=0'))
			setTimeout(function () { rs_form.submit(); }, 500);
	}
}

/* Base64 utility. Copyright 2009 VoiceCorp (www.voice-corp.com) */
function base64Encode(data) {

	var base64Char = function (val) {
	  if (val<26)
	    return String.fromCharCode(val+'A'.charCodeAt(0));
	  if (val<52)
	    return String.fromCharCode(val+'a'.charCodeAt(0)-26);
	  if (val<62)
	    return String.fromCharCode(val+'0'.charCodeAt(0)-52);
	  if (val==62)
	    return '+';
	  if (val==63)
	    return '/';
	  return String.fromCharCode(0);
	}

  var size = data.length;
  var newsize=4*parseInt((size+2)/3);
  var buff=new String();
  var completetriples=parseInt(size/3);
  var ch;
  var remaining=size-3*completetriples;
  var i=0;
  for (;i<3*completetriples;i+=3) {
    ch=base64Char(data.charCodeAt(i)>>2);
    buff+=ch;
    ch=base64Char(((data.charCodeAt(i)&0x03)<<4)|(data.charCodeAt(i+1)>>4));
    buff+=ch;
    ch=base64Char(((data.charCodeAt(i+1)&0x0f)<<2)|(data.charCodeAt(i+2)>>6));
    buff+=ch;
    ch=base64Char(data.charCodeAt(i+2)&0x3f);
    buff+=ch;
  }
  if (remaining==1) {
    buff+=base64Char(data.charCodeAt(i)>>2);
    buff+=base64Char((data.charCodeAt(i)&0x03)<<4);
    buff+='=';
    buff+='=';
  }
  if (remaining==2) {
    buff+=base64Char(data.charCodeAt(i)>>2);
    buff+=base64Char(((data.charCodeAt(i)&0x03)<<4)|(data.charCodeAt(i+1)>>4));
    buff+=base64Char((data.charCodeAt(i+1)&0x0f)<<2);
    buff+='=';
  }
  return buff;
}

