/**
 * @author Paul
 * number display
 * 
 * textDisplay renders characters onto the screen using one screen overlay per character
 * character width is determined by bitmap width, ge window aspect ratio and digitSize;
 * 
 * example:
 * mydisplay=new(ledDisplay();
 * mydisplay.setDisplayLength(5); //capable to display a max of 5 digits
 * mydisplay.digitSize = 0.1;
 * mydisplay.setAlign(td_CENTER); //Possible values are td_LEFT, td_RIGHT, td_CENTER
 * mydisplay.setVAlign(tdv_MIDDLE); //Possible values are tdv_LEFT, tdv_RIGHT, tdv_MIDDLE
 * mydisplay.loadCharacterIcon('0','http://mydomain.com/number0.png');
 * ...
 * mydisplay.loadCharacterIcon('9','http://mydomain.com/number9.png');
 * mydisplay.loadCharacterIcon('.','http://mydomain.com/numberdot.png');
 * myValue = 1234.5;
 * mydisplay.setAspect(aspectRatio); //aspectRatio is calculated elsewhere and represents ge window width/height
 * mydisplay.render(value,0.5,0.5);
 * 
 * mydisplay.clearDisplay(); //to remove the display from the screen.
 * 
 * note: call mydisplay.setAspect(aspectRatio); every time the ge window size changes
 *       unknown characters are ignored.
 */

td_LEFT = 0;    //text left align
td_CENTER = 0.5;  //text center align
td_RIGHT = 1;   //text right align

tdv_TOP = 0;    //text top align
tdv_MIDDLE = 0.5; //text middle align
tdv_BOTTOM = 1; //text bottom align


//this object represents an icon with associated character
function characterIcon(character, url){
		this.character = character;
		this.icon = ge.createIcon('');
		this.icon.setHref(url);
}

function displayIcon(){
	this.characters = new Array();
	this.overlay = null;
	this.getCharacter = function(character){
		for (var i = 0; i < this.characters.length; i++) {
			if (this.characters[i].character == character){
				return this.characters[i];	
			}
		}
		return null;
	}	
}

function textDisplay(){
	this.drawOrder = 100;
	this.units = ge.UNITS_FRACTION;
	this.digitSize = 0.1;
	var displayLength = 0;
	var digits = new Array();
	var characters = new Array();


	this.loadCharacterIcon = function(character, url){
		for (var i = 0; i < digits.length; i++) {
			var myCharacter = digits[i].getCharacter(character);
			if (myCharacter != null) {
				myCharacter.icon.setHref(url); //redefine url if character already exists
			}
			else {
				digits[i].characters[digits[i].characters.length] = new characterIcon(character, url);
			}
		}
	}
	this.clearDisplay = function(){
		for (var i = 0; i < displayLength; i++) {
			ge.getFeatures().removeChild(digits[i].overlay);
		}
		digits = [];
		displayLength = 0;
	}
	this.setDisplayLength = function(value){
		this.clearDisplay();
		displayLength = value;
		
		digits = [];
		for (var i = 0; i < displayLength; i++) {
			digits[i] = new displayIcon();
			digits[i].overlay = ge.createScreenOverlay('');
    		digits[i].overlay.setDrawOrder(this.drawOrder + i);
    		//attach bottom left corner
    		digits[i].overlay.getScreenXY().setXUnits(this.units);
    		digits[i].overlay.getScreenXY().setYUnits(this.units);
			digits[i].overlay.getScreenXY().setX(0.5);
    		digits[i].overlay.getScreenXY().setY(0.5);
    		digits[i].overlay.getOverlayXY().setXUnits(this.units);
    		digits[i].overlay.getOverlayXY().setYUnits(this.units);
    		digits[i].overlay.getSize().setXUnits(this.units);
    		digits[i].overlay.getSize().setYUnits(this.units);  
    		digits[i].overlay.setVisibility(false);
    		ge.getFeatures().appendChild(digits[i].overlay);	
		}	
	}

	this.render = function(value,x,y, aspect){
		var digitCount = 0;
		var xCursor = x;
		
		for (var i = 0; i <= displayLength-1 ; i++) {
			var character = digits[digitCount].getCharacter(value.charAt(i));
			if (character != null) {
				//digits[digitCount].overlay.setVisibility(false);
				digits[digitCount].overlay.setIcon(character.icon);
				//Place it
    			digits[digitCount].overlay.getSize().setX(this.digitSize);
    			digits[digitCount].overlay.getSize().setY(this.digitSize*aspect);				
				digits[digitCount].overlay.getOverlayXY().setX(xCursor);
				digits[digitCount].overlay.getOverlayXY().setY(y);
				digits[digitCount].overlay.setVisibility(true);
				xCursor += digits[digitCount].overlay.getSize().getX(); 
				digitCount++;
			}
		}		
	}
 }

