var originalwidth = Array();
var originalheight = Array();
var xmlhttp, alerted;

function newajax()
{
	
	xmlhttp = null;

	if (!xmlhttp && !alerted)
	{
		
		try
		{
		
			xmlhttp = new XMLHttpRequest();
			
		}
		catch (e)
		{
		
			//Internet explorer
			try
			{
			
				xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
				
			}
			catch (e)
			{		
						
				try
				{
				
					xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
					
				}
				catch (e)
				{
				
					//alert("Je browser ondersteunt geen AJaX" + e);
					
				}
								
			}
			
		}
		
	}

}

function postData(url, functie, waarden, overlay)
{
	
	if(overlay == '1')
	{
		
		setoverlaytext('<div class="center"><img src="../../../img/load.gif" alt="load" align="center" /></div>');
		
	}

	if (xmlhttp)
	{
	
		xmlhttp.onreadystatechange = functie;
		xmlhttp.open("POST", url, true);
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");       
		xmlhttp.send(waarden);
	
	}
	
}

function getUrl(url, functie)
{

	if (xmlhttp)
	{   
	
		xmlhttp.open("GET",url, true);
		xmlhttp.onreadystatechange = functie;
		xmlhttp.send(null);
	
	}
	
}

function checkusername()
{
	var blaat;
	
	if(document.getElementById('gebruikersnaamaanmelden').value != '')
	{
		
		if (xmlhttp.readyState == 4)
		{
			
			if(xmlhttp.responseText == '1')
			{
				
				document.getElementById('gebruikersnaamaanmelden').style.border = '1px solid #00B82E';
				document.getElementById('usernameoutput').style.color = '#00B82E';
				document.getElementById('usernameoutput').innerHTML = 'Correcte gebruikersnaam.';
				
			}
			else
			{
					
				document.getElementById('gebruikersnaamaanmelden').style.border = '1px solid #CC0000';
				document.getElementById('usernameoutput').style.color = '#CC0000';
				
				if(xmlhttp.responseText == '1')
					document.getElementById('usernameoutput').innerHTML = '<span style="font-size: 10px;">De gebruikersnaam moet tussen de 5 en 12 tekens hebben</span>';
				else if(xmlhttp.responseText == '2')
					document.getElementById('usernameoutput').innerHTML = '<span style="font-size: 10px;">De gebruikersnaam is al in gebruik.</span>';
				else
					document.getElementById('usernameoutput').innerHTML = '<span style="font-size: 10px;">De gebruikersnaam mag enkel 5 tot 12 letters bevatten (geen cijfers e.d.).</span>';
				
				//document.write(xmlhttp.responseText);
				
			}
			
			newajax();
			
		}
		
	}
}

function checkemail()
{
	
	if(document.getElementById('emailaanmelden').value != '')
	{
		
		if (xmlhttp.readyState==4)
		{
	
			if(xmlhttp.responseText == '1')
			{
				
				document.getElementById('emailaanmelden').style.border = '1px solid #00B82E';
				document.getElementById('emailoutput').style.color = '#00B82E';
				document.getElementById('emailoutput').innerHTML = 'Correct emailadres.';
				
			}
			else
			{
				
				document.getElementById('emailaanmelden').style.border = '1px solid #CC0000';
				document.getElementById('emailoutput').style.color = '#CC0000';
				document.getElementById('emailoutput').innerHTML = 'Dit emailadres bestaat al of is incorrect.';
				
			}
			
			newajax();
			
		}
		
	}
}


function checkpasswords()
{
	
	if(document.getElementById('wachtwoord_b').value != '')
	{
	
		if(document.getElementById('wachtwoord_a').value == document.getElementById('wachtwoord_b').value)
		{
			
			if(document.getElementById('wachtwoord_a').value.length < 5)
			{
				
				
				document.getElementById('wachtwoordoutput').innerHTML = 'Het wachtwoord is te kort.';
				document.getElementById('wachtwoordoutput').style.color = '#CC0000';
				document.getElementById('wachtwoord_a').style.border = '1px solid #CC0000';
				document.getElementById('wachtwoord_b').style.border = '1px solid #CC0000';
				
			}
			else if(document.getElementById('wachtwoord_a').value.length > 20)
			{
				
				document.getElementById('wachtwoordoutput').innerHTML = 'Het wachtwoord is te lang.';
				document.getElementById('wachtwoordoutput').style.color = '#CC0000';
				document.getElementById('wachtwoord_a').style.border = '1px solid #CC0000';
				document.getElementById('wachtwoord_b').style.border = '1px solid #CC0000';
				
			}
			else
			{
				
				document.getElementById('wachtwoordoutput').innerHTML = 'Het wachtwoord is correct.';
				document.getElementById('wachtwoordoutput').style.color = '#00B82E';
				document.getElementById('wachtwoord_a').style.border = '1px solid #00B82E';
				document.getElementById('wachtwoord_b').style.border = '1px solid #00B82E';
				
			}
		
		}
		else
		{
			
			document.getElementById('wachtwoordoutput').innerHTML = 'De wachtwoorden zijn niet gelijk';
			document.getElementById('wachtwoordoutput').style.color = '#CC0000';
			document.getElementById('wachtwoord_a').style.border = '1px solid #CC0000';
			document.getElementById('wachtwoord_b').style.border = '1px solid #CC0000';
			
		}
		
	}
	
}

function users_aan()
{
	
	if(document.getElementById('aan_ajax').value != '')
	{
		
		if(xmlhttp.readyState == 4)
		{
			
			document.getElementById('user_container').style.visibility = 'visible';
			document.getElementById('user_container').innerHTML = xmlhttp.responseText;
			
			newajax();
			
		}
		
	}
	
}

function kies_aan(naam)
{
	
	document.getElementById('aan_ajax').value = naam;
	document.getElementById('user_container').style.visibility = 'hidden';
	document.getElementById('user_container').innerHTML = '';
	
}

function geen()
{
	
	// Niks doen
	
}

function showsubadmin(id)
{
	
	//var obj = document.getElementById('subdinges'+id);
	
	if(document.getElementById('subdinges'+id).style.display == 'none')
	{
		
		document.getElementById('subdinges'+id).style.display = 'block';
		
	}
	else
	{
		
		document.getElementById('subdinges'+id).style.display = 'none';
		
	}
	
}

function overbelangrijk(waarde, idding)
{
	
	if(waarde == 'Nee')
	{
		
		document.getElementById(idding).innerHTML = '- Ja';
		document.getElementById(idding).style.fontWeight = 'bold';
		
	}
	else if(waarde == 'Ja')
	{
		
		document.getElementById(idding).innerHTML = '- Nee';
		document.getElementById(idding).style.fontWeight = 'bold';
		
	}
	else
	{
		
		// Niks doen
		
	}
	
}

function outbelangrijk(waarde, idding)
{
	
	if(waarde == '- Nee')
	{
		
		document.getElementById(idding).innerHTML = 'Ja';
		document.getElementById(idding).style.fontWeight = 'normal';
		
	}
	else if(waarde == '- Ja')
	{
		
		document.getElementById(idding).innerHTML = 'Nee';
		document.getElementById(idding).style.fontWeight = 'normal';
		
	}
	else
	{
		
		// Niks doen, waarschijnlijk geklikt
		
	}
	
}

function belangrijkklik()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		var idding = xmlhttp.responseText;

		if(document.getElementById(idding).innerHTML == 'Ja' || document.getElementById(idding).innerHTML == '- Nee')
		{
			
			document.getElementById(idding).innerHTML = 'Nee';
			document.getElementById(idding).style.fontWeight = 'normal';
			
		}
		else
		{
			
			document.getElementById(idding).innerHTML = 'Ja';
			document.getElementById(idding).style.fontWeight = 'normal';
			
		}
		
	}
	
}

function showdomein(domein, aantal)
{
	
	for(i = 1; i <= aantal; i++)
	{
		
		document.getElementById('domein_locked_'+i).value = domein;
		
	}
	
}

function switch_bevestigdomein(soort)
{
	
	if(soort == 3)
	{

		document.getElementById('pakketzooi').style.display = 'none';
		document.getElementById('pakketloos').style.display = 'block';
		document.getElementById('nameserverzooi').style.display = 'none';
		
	}
	else if(soort == 2)
	{
		
		document.getElementById('pakketzooi').style.display = 'none';
		document.getElementById('pakketloos').style.display = 'none';
		document.getElementById('nameserverzooi').style.display = 'block';
		
	}
	else
	{
	
		document.getElementById('pakketzooi').style.display = 'block';
		document.getElementById('pakketloos').style.display = 'none';
		document.getElementById('nameserverzooi').style.display = 'none';
		
	}
	
}

function fullsize_overlay()
{
 
	document.getElementById('overlay').style.height = document.documentElement.scrollHeight+'px';
	
}

function showdomeingegevens()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		setoverlaytext(xmlhttp.responseText);

	}

}

function keyPressHandler(e)
{
	
	var kC  = (window.event) ? event.keyCode : e.keyCode;
	var Esc = (window.event) ? 27 : e.DOM_VK_ESCAPE;
	
	if(kC==Esc)
		document.getElementById('overlay').style.display = 'none';
	
}

var new_window = false;

function open_content (id_field)
{
	if (new_window)
	{
		new_window.close ();
	}
	data = document.getElementById (id_field).innerHTML;
	new_window = window.open ('', 'code_window', 'location=no,menubar=no,resizable=yes,scrollbars=yes,status=0,toolbar=no');
	new_window.document.write ('<html><head><title>Code weergave</title></head><body><nobr>' + data + '</nobr></body></html>');
}



function insertEmoticon(e, theSmilie, targetId)
{
	var event = e || window.event;
	//event = window.event;
	var targetElement;
	
	if ( document.getElementById && document.getElementById(targetId) != null )
	{
		
		targetElement = document.getElementById(targetId);
		
	}
	else
	{
		
		alert("Vanwege een technische fout\nkan de emoticon niet toegevoegd worden.");
		
		if (event.preventDefault) // Firefox
		{ 
		  
		  event.preventDefault();
		
		}
		else // IE
		{ 
	
			event.returnValue = false;
		
		}
		
		return;
		
	}
	
	// let erop dat er ook text geselecteerd kan zijn!
	
	if (targetElement.setSelectionRange)// W3C/Mozilla
	{ 
	
		var cursorStartPosition = targetElement.selectionStart;
		var targetValue = targetElement.value.substring(0, targetElement.selectionStart);
		
		targetValue += theSmilie;
		targetValue += targetElement.value.substring(targetElement.selectionEnd, targetElement.value.length);
		
		targetElement.value = targetValue;
		targetElement.focus();
		
		var cursorPosition = cursorStartPosition + theSmilie.length;
		targetElement.setSelectionRange(cursorPosition, cursorPosition);
		
	}
	else
	{
		
		if (document.selection && document.selection.createRange) // IE
		{
			
			targetElement.focus();
			document.selection.createRange();
			var range = document.selection.createRange();
			range.text = theSmilie;
			range.text = range.text;
			
			
		}
		else // als niets werkt
		{ 
		 
			targetElement.value += theSmilie;
		
		}
		
		targetElement.focus();
		
	}
	
	if (event.preventDefault) // FireFox
	{
		
		event.preventDefault();
	
	}
	else // IE
	{
		
		event.returnValue = false;
		
	}
	
	return;
}

function addubb(sUBB, eUBB)
{ 

	//var objTxtArea = document.forms['FORM NAAM'].elements['VELD NAAM'];
	var objTxtArea = document.getElementById('bericht');
	
	if (!eUBB)
	{
		
		eUBB = ' '+sUBB+' '; // List
		sUBB = '';
		
	}
	
	if (objTxtArea.selectionStart || objTxtArea.selectionStart == 0)
	{
		
		var ss = objTxtArea.selectionStart;
		var se = objTxtArea.selectionEnd;
		objTxtArea.value = objTxtArea.value.substring(0, ss) + sUBB + objTxtArea.value.substring(ss, se) + eUBB + objTxtArea.value.substring(se, objTxtArea.value.length);
		
		if (sUBB.length != 0)
		{
			
			objTxtArea.selectionStart = ss;
			objTxtArea.selectionEnd = se + sUBB.length + eUBB.length;
		
		}
		else
		{
			
			objTxtArea.selectionStart = se + sUBB.length + eUBB.length;
			objTxtArea.selectionEnd = objTxtArea.selectionStart;
		
		}
		
		objTxtArea.focus();
	
	}
	else if (objTxtArea.createTextRange)
	{
		
		objTxtArea.focus();    //Needs to get focus to prevent other objects to get ubb codes
		document.selection.createRange().text = sUBB + document.selection.createRange().text + eUBB;
	
	}
	else
	{
		
		txtArea.value = txtArea.value + sUBB + eUBB;
	
	}
	
} 



function topiclock()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		alert('Topic (un)locked');
		
		newajax();
		
	}
	
}

function topiclockicon(id)
{
	
	if(document.getElementById('topicicon'+id).src.indexOf('forum_locked_read') != -1)
	{

		document.getElementById('topicicon'+id).src = document.getElementById('topicicon'+id).src.substr(0, document.getElementById('topicicon'+id).src.indexOf('forum_locked_read'))+'forum_read.gif';
	
	}
	else if(document.getElementById('topicicon'+id).src.indexOf('forum_read') != -1)
	{
		
		document.getElementById('topicicon'+id).src = document.getElementById('topicicon'+id).src.substr(0, document.getElementById('topicicon'+id).src.indexOf('forum_read'))+'forum_locked_read.gif';

	}
	else if(document.getElementById('topicicon'+id).src.indexOf('forum_locked_unread') != -1)
	{
		
		document.getElementById('topicicon'+id).src = document.getElementById('topicicon'+id).src.substr(0, document.getElementById('topicicon'+id).src.indexOf('forum_locked_unread'))+'forum_unread.gif';

	}
	else if(document.getElementById('topicicon'+id).src.indexOf('forum_unread') != -1)
	{
		
		document.getElementById('topicicon'+id).src = document.getElementById('topicicon'+id).src.substr(0, document.getElementById('topicicon'+id).src.indexOf('forum_unread'))+'forum_locked_unread.gif';

	}
	
}

function userpicker()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		setoverlaytext(xmlhttp.responseText);
		
		newajax();
		
	}
	
}

function pickuser(username, field)
{
	
	document.getElementById(field).value = username;
	document.getElementById('overlay').style.display = 'none';
		
}

function setomschrijving(oms)
{
	
	if(oms == '0')
	{
		
		document.getElementById('omschrijving_over').innerHTML = '';
	
	}
	else
	{
		
		document.getElementById('omschrijving_over').innerHTML = '<strong>Omschrijving:</strong><br />&nbsp;&nbsp;&nbsp;'+oms;
	
	}
	
}

function loaddomeininfo(id)
{
	
	setoverlaytext('<div class="center"><img src="../../../img/load.gif" alt="load" align="center" /></div>');
	
	postData('../../includes/ajaxfuncties.php', showdomeingegevens, 's=6&id='+id, 0);
	
}

function saldooverzicht()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		setoverlaytext(xmlhttp.responseText);
		document.getElementById('overlay_inhoud').style.width = '1100px';
		
		newajax();
		
	}
	
}

function togglediv(id)
{
	
	if(document.getElementById(id).style.display == 'block')
	{
		
		document.getElementById(id).style.display = 'none';
		
	}
	else
	{
		
		document.getElementById(id).style.display = 'block';
		
	}
	
}

function moresmilies()
{
	
	document.getElementById('smileydiv').style.overflow = 'auto';
	//document.getElementById('smileydiv').style.padding = '0';
	//document.getElementById('smileydiv').style.width = '3005px;';
	document.getElementById('moresmilies').style.visibility = 'hidden';
	document.getElementById('smileyspacer').style.display = 'none';
	
}

function show_ns_accept(a)
{
	
	if(a == 1)
	{
		
		document.getElementById('ns_accept').style.display = 'block';
		document.getElementById('ns_decline').style.display = 'none';
		
	}
	else
	{
		
		document.getElementById('ns_accept').style.display = 'none';
		document.getElementById('ns_decline').style.display = 'block';
		
	}
	
}	

function get_forum_datum()
{

	var tijd_datum = new Date();
	var dag = tijd_datum.getDay(); //dag in woorden
	var dag2 = tijd_datum.getDate(); // dag in getal
	var maand = tijd_datum.getMonth(); // +1 want js begint bij 0 te tellen
	var jaar = tijd_datum.getFullYear();
	
	var uur = tijd_datum.getHours();
	var minuten = tijd_datum.getMinutes();
	var seconden = tijd_datum.getSeconds();
	
	if(minuten < 10)
		minuten = '0'+minuten;
	
	if(seconden < 10)
		seconden = '0'+seconden;
	
	var maandarray = new Array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
	var dagarray = new Array('zondag','maandag','dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');
	
	document.getElementById('forum_datum').innerHTML = dagarray[dag]+" "+dag2+" "+maandarray[maand]+" "+jaar+", "+uur+":"+minuten+":"+seconden; 

	setTimeout(get_forum_datum, 1000);
	
}

function setoverlaytext(text)
{
	
	//document.getElementById('overlay_inhoud').innerHTML = '<a href="#" style="display: block; width: 100%; text-align: center;" onclick="document.getElementById(\'overlay\').style.display = \'none\'">Sluit dit venster</a>' + text;
	document.getElementById('overlay_inhoud').innerHTML = '<a href="#" onclick="document.getElementById(\'overlay\').style.display = \'none\'; return false;"><img src="http://www.one2xs.com/img/overlay_sluiten.gif" height="16" width="16" alt="Sluiten" class="kruisje" /></a><div class="clear"></div>'+text;
	document.getElementById('overlay').style.display = 'block';
		
}

function loadledenlijst()
{
	
	document.getElementById('ledencontainer').innerHTML = '<br /><div class="center"><img src="../../../img/load.gif" alt="load" align="center" /></div>';
	
}

function verwerkledenlijst()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		document.getElementById('ledencontainer').innerHTML = xmlhttp.responseText;
		
		newajax();
		
	}
	
}
	
function berekenwallie(waarde, id)
{
	
	waarde = waarde.replace(',', '.');
		
	var blaat = Math.round((waarde * 0.65) * 100) / 100;
		
	if(isNaN(blaat))
	{
		
		document.getElementById(id).innerHTML = '0 punten';
		
	}
	else
	{
		
		document.getElementById(id).innerHTML = blaat + ' punten';
		
	}
	
}

function shownewpb_ubb()
{
	
	document.getElementById('newpb_ubb').style.display = 'block';
	
}

function closenewpb_ubb()
{
	
	document.getElementById('newpb_ubb').style.display = 'none';
	
}

function overlaycontent()
{
	
	if (xmlhttp.readyState == 4)
	{
		
		setoverlaytext(xmlhttp.responseText);
		
		
	}
	
}

function muispositie(e)
{

	if(e)
	{
	
		this.e = e;
		
	}
	else
	{
	
		this.e = window.event;
		
	}
	
	if(e.pageX)
	{
	
		this.x = e.pageX;
		
	}
	else
	{
	
		this.x = e.clientX;
		
	}
	
	if(e.pageY)
	{
		this.y = e.pageY;
	}
	else
	{
	
		this.y = e.clientY;
		
	}
	
	if(e.target)
	{
	
		this.target = e.target;
		
	}
	else
	{
	
		this.target = e.srcElement;
		
	}
	
}

function overlaypositie(e)
{

	var e = new muispositie(e);
	document.getElementById('overlay_inhoud').style.position = 'relative';
	document.getElementById('overlay_inhoud').style.top = (e.y - 100)+'px';
	
}

function hideoverlay()
{
	
	document.getElementById('overlay').style.display = 'none';
	
}

/* Tooltip */
var tooltip=function(){
 var id = 'tt';
 var top = 3;
 var left = 3;
 var maxw = 300;
 var speed = 10;
 var timer = 20;
 var endalpha = 95;
 var alpha = 0;
 var tt,t,c,b,h;
 var ie = document.all ? true : false;
 return{
  show:function(v,w){
   if(tt == null){
    tt = document.createElement('div');
    tt.setAttribute('id',id);
    t = document.createElement('div');
    t.setAttribute('id',id + 'top');
    c = document.createElement('div');
    c.setAttribute('id',id + 'cont');
    b = document.createElement('div');
    b.setAttribute('id',id + 'bot');
    tt.appendChild(t);
    tt.appendChild(c);
    tt.appendChild(b);
    document.body.appendChild(tt);
    tt.style.opacity = 0;
    tt.style.filter = 'alpha(opacity=0)';
    document.onmousemove = this.pos;
   }
   tt.style.display = 'block';
   c.innerHTML = v;
   tt.style.width = w ? w + 'px' : 'auto';
   if(!w && ie){
    t.style.display = 'none';
    b.style.display = 'none';
    tt.style.width = tt.offsetWidth;
    t.style.display = 'block';
    b.style.display = 'block';
   }
  if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'}
  h = parseInt(tt.offsetHeight) + top;
  clearInterval(tt.timer);
  tt.timer = setInterval(function(){tooltip.fade(1)},timer);
  },
  pos:function(e){
   var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
   var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
   tt.style.top = (u - h) + 'px';
   tt.style.left = (l + left) + 'px';
  },
  fade:function(d){
   var a = alpha;
   if((a != endalpha && d == 1) || (a != 0 && d == -1)){
    var i = speed;
   if(endalpha - a < speed && d == 1){
    i = endalpha - a;
   }else if(alpha < speed && d == -1){
     i = a;
   }
   alpha = a + (i * d);
   tt.style.opacity = alpha * .01;
   tt.style.filter = 'alpha(opacity=' + alpha + ')';
  }else{
    clearInterval(tt.timer);
     if(d == -1){tt.style.display = 'none'}
  }
 },
 hide:function(){
  clearInterval(tt.timer);
   tt.timer = setInterval(function(){tooltip.fade(-1)},timer);
  }
 };
}();
/* /tooltip */

function initalles()
{
	
	fullsize_overlay();
	newajax();
	
}

function SelectItems(value)
{
	var forumlijst = document.getElementById("forumlijst");
	
	len = forumlijst.length;

	var i = 0;

	for(i = 0; i < len; i++) 
	{
		
		if(forumlijst.options[i].disabled == false)
			forumlijst.options[i].selected = value;	
			
	}
}

function omzetophalen(verwerk)
{

	postData('../../includes/ajaxfuncties.php', verwerkomzet, 's=14');
	
	document.getElementById('omzetophaler').innerHTML = '<div class="center"><img src="../../../img/load.gif" alt="load" align="center" /><br /><br /><em>Bezig met ophalen</em></div>'
		
}

function verwerkomzet()
{

	if (xmlhttp.readyState == 4)
	{
		
		document.getElementById('omzetophaler').innerHTML = xmlhttp.responseText;
		newajax();
		
	}
		
}

var bericht_id;

function editpost1(id)
{
		
	postData('../includes/ajaxfuncties.php', editpost2, 's=16&id='+id);
	document.getElementById('bericht_'+id).innerHTML = '<div class="center"><img src="../img/load.gif" onclick="postData(\'../includes/ajaxfuncties.php\', editpost2, \'s=16&id='+id+'\');" style="cursor: pointer;" /><br /><br /><em>Klik op het laadicoon als het te lang duurt</em></a>';
	
	bericht_id = id;
		
}

function editpost2(id)
{

	
	if (xmlhttp.readyState == 4)
	{
		
		//alert(bericht_id);
		document.getElementById('bericht_'+bericht_id).innerHTML = xmlhttp.responseText;
		newajax();
		
	}

}

function base64_encode( data ) {
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = ac = 0, enc="", tmp_arr = [];
 
    if (!data) {
        return data;
    }
 
    data = utf8_encode(data+'');
    
    do {
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
 
        bits = o1<<16 | o2<<8 | o3;
 
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
 
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
 
    return enc;
}

function utf8_encode ( string ) {
 
    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}