var flashHandler;

// Format color in hexadecimal style format ( e.g. #000000 )
function formatAsHexColor(decValue){
    
    var hexValue = decValue.toString(16);
    var tempStr = "000000"+hexValue;
    return("#"+tempStr.substring(tempStr.length-6,tempStr.length));
}

function registerFlashHandler(pFlashHandler){
    flashHandler = document.getElementsByName(pFlashHandler)[0];
}

// Create new UI element for flash interaction
function jsDiv(flashObjId,
               idP,
               targetP,
               stageWidth,
               stageHeight,
               xP,
               yP,
               widthP,
               heightP,
               elementType,
               borderSize,
               borderColor,
               content,
               showOnStart,
               dir,
               font,
               fontsize,
               color,
               backgroundColor){
    
    showOnStart = (showOnStart == true);
    // Re-attach existing elements
    var newElement = (document.getElementById(idP)) ? document.getElementById(idP) : null;

    switch(elementType){
    case "textBox":
           
            newElement = (newElement==null) ? document.createElement("DIV") : newElement;
            newElement.id = idP;
            newElement.innerHTML = (content == "null") ? "" : content;
            newElement.style.fontFamily = font;
            newElement.style.fontSize = fontsize;
            newElement.style.direction = dir;
            newElement.style.overflow = "auto";
            newElement.style.color = formatAsHexColor(color);
            newElement.style.backgroundColor = formatAsHexColor(backgroundColor);
            
            // Specific Getter
            newElement.setText = function(newText) {
                this.innerHTML = newText;
            }
            
            // Specific Setter
            newElement.getText = function(){
                return(this.innerHTML);
            }
            
            
            
        break;
        case "inputBox":
            
            newElement = (newElement==null) ? document.createElement("TEXTAREA") : newElement;
            newElement.id = idP;
            newElement.value = (content == "null") ? "" : content;
            newElement.style.fontFamily = font;
            newElement.style.fontSize = fontsize;
            newElement.style.direction = dir;
            newElement.style.overflow = "auto";
            newElement.style.color = formatAsHexColor(color);
            newElement.style.backgroundColor = formatAsHexColor(backgroundColor);
            
            // Specific Getter
            newElement.setText = function(newText) {
                this.value = newText;
            }
            
            // Specific Setter
            newElement.getText = function(){
                return(this.value);
            }
            
            newElement.setDisabled = function(mode){
                
                if(mode=="true"||mode==true) 
                    this.setAttribute("disabled",true);
                else
                    this.removeAttribute("disabled")
                
            }
            
        break;
        
        case "iFrame":
            
            newElement = (newElement==null) ? document.createElement("IFRAME") : newElement;
            newElement.frameBorder = "no";
 	    newElement.style.backgroundColor = formatAsHexColor(backgroundColor);
            newElement.id = idP;
            newElement.src = content;
 	    newElement.style.direction = dir;
            newElement.setText = function(newText) {
	
                this.src = newText
            }
        break;
        
    }
       
    // Global element positioning method
    newElement.calculatePosition = function() {
        var flashObj = document[flashObjId];
        var posObj = getAbsolutePos(flashObj);
        this.style.position = "absolute";
        this.style.left = parseInt(xP) + posObj.x;
        this.style.top = parseInt(yP) + posObj.y;
    }
    
    // Global element visibility method
    newElement.show = function() {
        this.style.visibility = "visible";
        this.style.display = "block";

    }
    
   // Global element visibility method 
    newElement.hide = function() {
        this.style.visibility = "hidden";
        this.style.display = "none";
    }
    
    newElement.style.width = widthP;
    newElement.style.height = heightP;
    newElement.style.border = "none";
    
    newElement.calculatePosition();
    if(!showOnStart) newElement.hide();
    
  // newElement.onfocus = function() { flashHandler.eventsHandler("onfocus",this.id); }
  //  newElement.onkeyup = function() { flashHandler.eventsHandler("onkeyup",this.id); }
  //  newElement.onkeydown = function() { flashHandler.eventsHandler("onkeydown",this.id); }
    
    // Add new element to document
    document.getElementById("jsDiv").appendChild(newElement);
    
         
}

window.onresize = function(){

    var allElements = document.getElementsByTagName("*");
    
    for(var c=0 ; c < allElements.length ; c++)
        if(allElements[c].calculatePosition) allElements[c].calculatePosition();

}

function getAbsolutePos(obj){
	
	var totalX=obj.offsetLeft;
	var totalY=obj.offsetTop;     
    
    while(obj!=document.body){
        obj=obj.offsetParent;
        totalX+=obj.offsetLeft;
        totalY+=obj.offsetTop;
    }
    
    return({x:totalX,y:totalY});
}
