// **[ hintTextInput ]*****************
//
// Coded by:    Tal Weinfeld (WebWise)
// Date:        January 2010
//
// ************************************
function hintTextInput(container,controlId,relativeX,relativeY,width,height){
    

    var _hintText = "";
    var _isEditing = false;
    
    this._flashContainer = container;
    this._controlIdentifier = controlId;
    this._relX = relativeX;
    this._relY = relativeY;
    
    var _internalSelector;
    
    var onTextFieldKeyPress = function(){
        if(_internalSelector.val()=="") 
            _isEditing = false;
        else {
            _isEditing = true;
        }
    }
                        
    var onTextFieldBlur = function(){
        if(_internalSelector.val()=="") {
            _isEditing = false;
            _internalSelector.val(_hintText).toggleClass("hint",true);
        }
    }
    
    var onTextFieldFocus = function(){
        if(!_isEditing) _internalSelector.val("").toggleClass("hint",false);
    }
    
    _internalSelector = $("<INPUT>")
                        .addClass("hintTextInput")
                        .addClass("hint")
                        .width(width)
                        .height(height)
                        .attr("type","text")
                        .css("position","absolute")
                        .css("visibility","hidden")
                        .blur(onTextFieldBlur)
                        .focus(onTextFieldFocus)
                        .keypress(onTextFieldKeyPress);
                        
    this._htmlControl = _internalSelector[0];
    
    this.setHintText = function(text){
        _hintText = text;
        if(_internalSelector.val()=="") _internalSelector.val(_hintText).toggleClass("hint",true);
    }
    
    this.setMaxLength = function(length){
        _internalSelector.attr("MAXLENGTH",length);
    }
    
    this.reposition = function(){
        var pos = $(this._flashContainer).offset();
        _internalSelector.css("top",pos.top + _internalSelector.scrollTop() + this._relY).css("left",(pos.left + this._relX));
    }
    
    this.reposition();
    
    this.value = function(val){
        
        if(val==""){
            _internalSelector.val(_hintText).toggleClass("hint",true);
            _isEditing = false;
        } else {
            _internalSelector.val(val).toggleClass("hint",false)
            _isEditing = true;  
        }
    }
    
    this.getValue = function(){
        return _isEditing ? _internalSelector.val() : "";
    }
    
   
    
    $("body").append(_internalSelector);
}

// **[ textInputArea ]*****************
//
// Coded by:    Tal Weinfeld (WebWise)
// Date:        March 2008
//
// ************************************

function textInputArea(container,controlId,relativeX,relativeY,width,height){
    
    this._flashContainer = container;
    this._controlIdentifier = controlId;
    this._relX = relativeX;
    this._relY = relativeY;
    
    var newElement = document.createElement("TEXTAREA");
    newElement.style.position = "absolute";
    newElement.style.width = (width-1) + "px";
    newElement.style.height = (height-1) + "px";
    newElement.style.backgroundColor = "#BBBBBB";//"#e7e7e7";
    newElement.style.overflow = "auto";
    newElement.style.overflowX = "hidden";
    newElement.style.border = "none";
    newElement.style.direction = "rtl";
    newElement.style.visibility = "hidden";
       
    
    this._htmlControl = newElement;
    document.body.appendChild(newElement);
    
    this.reposition = function() {
        var hPosition = parseInt(getElementPosition(this._flashContainer).x + this._relX + 1);
        var vPosition = parseInt(getElementPosition(this._flashContainer).y + this._relY + 1 + (navigator.userAgent.indexOf("MSIE")>-1 ? 0 : -1));
        
        this._htmlControl.style.left = hPosition + "px";
        this._htmlControl.style.top = vPosition + "px";
    }
    
    this.wireEvents = function() {
        
        var backRef = this;
              
              try {
                     //this._htmlControl.onchange = function(obj) { backRef._flashContainer.dispatchEvent(backRef._controlIdentifier,"onchange",backRef._htmlControl.value); alert("gotKeyChange event");}
                     //this._htmlControl.onkeyup = function(obj) { backRef._flashContainer.dispatchEvent(backRef._controlIdentifier,"onkeyup",backRef._htmlControl.value); alert("gotKeyUp event");}
                     this._htmlControl.addEventListener('keyup', function(obj) { backRef._flashContainer.dispatchEvent(backRef._controlIdentifier,"onkeyup",backRef._htmlControl.value); }, false);
                     this._htmlControl.addEventListener('change', function(obj) { backRef._flashContainer.dispatchEvent(backRef._controlIdentifier,"onchange",backRef._htmlControl.value); }, false);
              }
              catch(e) {
                     this._htmlControl.attachEvent('onkeyup', function() { backRef._flashContainer.dispatchEvent(backRef._controlIdentifier,"onkeyup",backRef._htmlControl.value); });
                     this._htmlControl.attachEvent('onchange', function() { backRef._flashContainer.dispatchEvent(backRef._controlIdentifier,"onchange",backRef._htmlControl.value); });
              }
    }
    
    this.wireEvents();
    this.reposition();
    
}

// **[ externalElementsController ]****
//
// Coded by:    Tal Weinfeld (WebWise)
// Date:        March 2008
//
// ************************************

function externalElementsController(){
    
    this.version = "1.01";
    this.elements = new Array();
    
    var backRef = this;
    
    window.onresize = function(){
        for(var i=0;i<backRef.elements.length;i++)
            backRef.elements[i].reposition();
    }
    
    this.getVersion = function(){
        return(this.version);
    }
    
    this.registerField = function(field){
        this.elements.push(field);
    }
    
    this.createTextInputArea = function(containerId,controlId,relativeX,relativeY,width,height){
        var flashElement = getMovie(containerId);
        this.registerField(new textInputArea(flashElement,controlId,relativeX,relativeY,width,height));
              //this.registerField(new textInputArea(flashElement,controlId,0,0,width,height));
    }
    
    this.createHintTextInput = function(containerId,controlId,relativeX,relativeY,width,height,hintText){
        var flashElement = getMovie(containerId);
        var hint = new hintTextInput(flashElement,controlId,relativeX,relativeY,width,height);
        hint.setHintText(hintText);
        this.registerField(hint);
    }
    
    this.getElementById = function(id){
         for(var i=0;i<this.elements.length;i++)
            if(this.elements[i]._controlIdentifier == id) return(this.elements[i]);
         
         return(null);
    }
    
    this.setValue = function(id,value){
        var isIE = navigator.userAgent.indexOf("MSIE") > -1;
        if(isIE) value = value.replace(/\r/g,"\n\r");
        this.getElementById(id)._htmlControl.value = value;
    }
    
    this.getValue = function(id){
        var controlValue = this.getElementById(id)._htmlControl.value;
        var isIE = navigator.userAgent.indexOf("MSIE") > -1;
        if(isIE) controlValue = controlValue.replace(/\n/g,"");
        return(controlValue);
    }
    
    this.setValueNew = function(id,value){
        this.getElementById(id).value(value);
    }
    
    this.getValueNew = function(id){
        
        var controlValue = this.getElementById(id).getValue();
        var isIE = navigator.userAgent.indexOf("MSIE") > -1;
        if(isIE) controlValue = controlValue.replace(/\n/g,"");
        return(controlValue);
    }
    
    this.setStyle = function(id,style){
        var field = this.getElementById(id);
        
        for(var i in style){
            if(i.toLowerCase()!="x" && i.toLowerCase()!="y" && i.toLowerCase()!="position")
                field._htmlControl.style[i] = style[i];
        }
    }
    
    this.getVisibility = function(id){
        return(this.getElementById(id).style.visibility == "visible" ? true : false);
    }
    
    this.setVisibility = function(id,visibility){
           //this.getElementById(id)._htmlControl.style.display = visibility ? "block" : "none";
        this.getElementById(id)._htmlControl.style.visibility = visibility ? "visible" : "hidden";
    }
    
    this.setFocus = function(id){
        this.getElementById(id)._htmlControl.focus();
    }
    
    this.setPosition = function(id,x,y){

        var targetElement = this.getElementById(id);
        
        targetElement._relX = x;
        targetElement._relY = y;
        targetElement.reposition();

    }
    
}

// Utility functions
function getElementPosition(theElement){  
    var posX = 0;  
    var posY = 0;                
    while(theElement != null)
    {    
        posX += theElement.offsetLeft;    
        posY += theElement.offsetTop;    
        theElement = theElement.offsetParent; 
    }
    
    return {x:posX,y: posY};
}

function getMovie(movieName)
{
    //if(navigator.appName.indexOf("Microsoft") != -1)
        //return window[movieName];
    //else
    //{
        //if(document[movieName].length != undefined)
            //return document[movieName][1];
//
        //return document[movieName];
    //}
       return document.getElementsByName(movieName)[0];
}

// Create a controller instance
var externalElementsControllerInstance = new externalElementsController();
