
var xmlHttp = null;
var previewOpened = false;
var previewObjects = Array();
var continousUpdate = true; 

var lastRequest = null;
var timerID = null;

<!-- Oletusarvoja. Voidaan korvata registerPreviewObj funktiolla (FF:n kanssa joku häikkä -->
previewObjects['title'] = "title";
previewObjects['text']  = "teksti"; 
previewObjects['ing']  = "ingressi"; 


function setContinuousUpdate( OnOff )
{
	continousUpdate = OnOff;
}

function registerPreviewObj(key, objectName)
{
	previewObjects[key] = objectName;
}

<!-- Annetaan elementti, jota pyydettiin sen ID:llä ... -->
function getElement(id){
	if(document.getElementById) return document.getElementById(id);
	if(document.all) return document.all(id);
}  

<!-- AJAX-kutsulle saatu vastaus, joten päivitetään esikatselualue -->
function updatePreviewArea() {
	getElement("previewArea").innerHTML=xmlHttp.responseText;
	getElement("previewArea").style.display = "block";
		
	previewOpened = true;
}

<!-- Esikatselu haluttu piilottaa. Piilotetaan se näkyvistä -->
function previewAreaOut() {
	getElement("previewArea").style.display = "none";
	previewOpened = false;
}

<!-- Pyydetty esikatselu. Haetaan rekisteröityjen objektien sisällöt ja annetaan palvelimelle -->
function requestPreviewContUpdate() {
 if (continousUpdate)
 	requestPreview();
}

function requestPreview()
{
	<!-- if (!continousUpdate && previewOpened) return;	-->
	
	<!-- Edellistä kutsua ei vielä käsitelty loppuun -->
	if (lastRequest && lastRequest.readyState != 4)
	{
		if (timerID)
			clearTimeout(timerID);
		timerID = self.setTimeout("requestPreview()", 2000);
		
		return;
	}
	
	xmlHttp=GetXmlHttpObject()
	lastRequest = xmlHttp;
	
	if (xmlHttp==null)
	{
		alert ("Your browser does not support AJAX!");
		return;
	} 
	
	var url = "http://www.kolkankavijat.fi/getPreview.php?";
	
	<!-- Käydään rekisteröidyt objektit läpi -->
	for (x in previewObjects)
	{
		obj = getElement(previewObjects[x]);
		
		textvalue = "";
		
		if ( obj && obj["value"] )
		{
			<!-- rekisteröity objekti (HTML-elementti) oikeasti löytyy ja sillä on property value olemas -->
			textvalue = getElement(previewObjects[x]).value;
		
			<!-- Lisätään urliin vain, jos kentässä on jokin arvo. Koodaus base64:llä, kun menee GETin yli -->
			if (textvalue.length > 0)
				url = url + x + "=" + encode64(textvalue) + "&";
		}
	}

			
	xmlHttp.onreadystatechange=updatePreviewArea;
	xmlHttp.open("GET", url ,true);
	xmlHttp.send(null);

} 

function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}

// function encode64(input)
// This code was written by Tyler Akins and has been placed in the
// public domain.  It would be nice if you left this header intact.
// Base64 code from Tyler Akins -- http://rumkin.com

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}