//
// Copyright 2005 David Betz
//
var pngImageObj;
var txtInputObj;
var txtDataObj;

function CreateXmlHttpObject( ) {
	var xmlhttp;

	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(ex) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(except) {
			xmlhttp = false;
		}
	}

	if(!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		xmlhttp = new XMLHttpRequest( );
	}

	return xmlhttp;
}

function getImageData(text) {
    try {
        var xmlhttp = CreateXmlHttpObject( );
        xmlhttp.open('GET', '/Base64PngExample/Server/?Text=' + text, true);
        xmlhttp.onreadystatechange = function( ) {
            if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                var imageData;
                eval('imageData=' + xmlhttp.responseText);
                data = imageData.data;
                pngImageObj.src = 'data:image/png;base64,' + data;
                txtDataObj.value = pngImageObj.src;
                pngImageObj.width = imageWidth;
                pngImageObj.height = imageHeight;	
            }
        };
        xmlhttp.send(null);
    }
    catch(ex) {
        alert(ex.message);
    }
};

// does not work in Insurgent Explorer
window.onload = function(evt) {
    pngImageObj = document.getElementById('pngImage');
    txtInputObj = document.getElementById('txtInput');
    txtDataObj = document.getElementById('txtData');
          
    getImageData('Impressed?        Welcome to the future.');
    
    txtInputObj.onkeypress = function(evt) {
        var text = '';

        switch (evt.keyCode) {
            case 46: //delete
                break;

            case 38: //up arrow        
            case 40: //down arrow
            case 37: //left arrow
            case 39: //right arrow
            case 33: //page up        
            case 34: //page down        
            case 36: //home        
            case 35: //end                                                                        
            case 13: //enter        
            case 9: //tab        
            case 27: //esc        
            case 16: //shift        
            case 17: //ctrl        
            case 18: //alt        
            case 20: //caps lock
            return true;
                break;

            case 8: //backspace        
                text = this.value.substring(0, this.value.length-1);
                getImageData(text);
                break;

            default:
              text = this.value + String.fromCharCode(evt.charCode);
              getImageData(text);
            break;
        }
    }
};