﻿var readId = null;
var writeId = null;
var currId = null;
var currTriggId = null;
var prevReadId = null;
var prevWriteId = null;
var prevCurrId = null;
var weemeeDivId = 'divWeeMee';
var qaDivId = 'divQA';
var hobbyDivid = 'divHobby';
var firstTime = false;
editLabelClicked = false;
collapsedWhenEditClicked = false;
editAfterAnimation = false;
var triggerOfCurrentClicked = false;
var triggers = new Array();
var fullEmptyValidators = new Array();
//don't need anymore, but references to RichEditSetup still exist in code.
function RichEditSetup(){}
function RichEditTrigger(id, readPanelId, writePanelId, collExtId){
    if(id.trim() != '')
    this.id = id; else this.id = null;    
    if(readPanelId.trim() != '')
    this.readId = readPanelId; else this.readId = null;    
    if(writePanelId.trim() != '')
    this.writeId = writePanelId; else this.writeId = null;    
    if(collExtId.trim() != '')
    this.collExtId = collExtId; else this.collExtId = null;
}
function AddEditTrigger(triggerId, readPanelId, writePanelId, collExtId){
    //alert('AddEditTrigger\ntriggerId: ' + triggerId + '\nreadPanelId: ' + readPanelId + '\nwritePanelId: ' + writePanelId + '\ncollExtId: ' + collExtId + '\ntriggers.length: ' + triggers.length)
    var index = null;
    if (triggerId.trim() != ''){
        for(var i = 0; i < triggers.length; i++)if(triggers[i].id == triggerId)index = i;
    }
    if((readPanelId.trim() != '') && (writePanelId.trim() != '')){
        for(var i = 0; i < triggers.length; i++) if((triggers[i].readId == readPanelId) && (triggers[i].readId == readPanelId))index = i;
    }    
    var trig = new RichEditTrigger(triggerId, readPanelId, writePanelId, collExtId);
    if(!index) index = triggers.length;
    triggers[index] = trig;
    document.body.onclick = RichEditPageClicked;        
    //$removeHandler(document.body, 'click', RichEditPageClicked);
    //$addHandler(document.body, 'click', RichEditPageClicked);
    if(triggers[index].id != null){
        var trigger = $get(triggers[index].id);
        if(trigger){
            trigger.onmouseover = EditAreaMouseOver;
            trigger.onmouseout = EditAreaMouseOut;
            trigger.onmousedown = TriggerMouseDown;
        }
    }
    if((triggers[index].readId != null) && (triggers[index].writeId != null)){
        var readPanel = $get(triggers[index].readId);        
        if(readPanel){
            readPanel.onmouseover = EditAreaMouseOver;
            readPanel.onmouseout = EditAreaMouseOut;   
            readPanel.onclick = ReadPanelClick;
        }
    }
}
function RichEditPageClicked(e) {
   
    e = e || window.event;
    if(currId) var a = $get(currId)        
    
    var scrollLeft;
    var scrollTop;             
    (document.all) ? scrollLeft = document.documentElement.scrollLeft : scrollLeft = window.pageXOffset;
    (document.all) ? scrollTop = document.documentElement.scrollTop : scrollTop = window.pageYOffset;         
    
    var inside1 = false;
    if(a){
        var b = Sys.UI.DomElement.getBounds(a);
        inside1 = ((b.x < (e.clientX + scrollLeft)) && ((e.clientX + scrollLeft) < (b.x + b.width)) && (b.y < (e.clientY + scrollTop)) && ((e.clientY + scrollTop) < (b.y + b.height)));
    }
    
    var clickedElement;
    var inside = false;
    e.target ? clickedElement = e.target : clickedElement = e.srcElement
    
    if(clickedElement){
        inside = IsInside(clickedElement);            
    }        
    //clicked inside editing area
    //inside - element is in DOM tree lower than editing area
    
    if(inside || inside1){
        if((firstTime))// && (prevReadId != null) && (prevWriteId = null))
        {
            if((prevReadId != null) && (prevWriteId != null)){
                _SetReadMode(prevReadId, prevWriteId)
            }                
            firstTime = false;
        }
    }
    //clicked outside editing area
    else{
        if((editLabelClicked == false) && (prevReadId != null) && (prevWriteId != null)){
            _SetReadMode(prevReadId, prevWriteId);
            prevReadId = null;
            prevWriteId = null;
        }             
        if((editLabelClicked == false) && (readId != null) && (writeId != null) && (collapsedWhenEditClicked == false)){
            _SetReadMode(readId, writeId);
            readId = null;
            writeId = null;
        }            
        //triggerOfCurrentClicked
        if((editLabelClicked == true) && (collapsedWhenEditClicked == false)){
            if(triggerOfCurrentClicked == false){
                if((readId != null) && (writeId != null)){
                    //read mode to current panel
                    _SetReadMode(readId, writeId)
                }    
                if((prevReadId != null) && (prevWriteId != null)){
                    //read mode to current panel
                    _SetReadMode(prevReadId, prevWriteId)
                }
                //all panels in read mode, set write mode of panel linked to trigger
                for (var i = 0; i < triggers.length; i++) {
                    if(triggers[i].id == currTriggId){
                        if((triggers[i].readId == weemeeDivId) && (triggers[i].writeId == weemeeDivId)){
                            WeemeeRedirect();
                        }
                        else if ((triggers[i].readId == qaDivId) && (triggers[i].writeId == qaDivId)) {
                            QARedirect(); 
                        }
                        else if ((triggers[i].readId == hobbyDivid) && (triggers[i].writeId == hobbyDivid)) {
                            InterestRedirect(); 
                        }
                        else {_SetWriteMode(triggers[i].readId, triggers[i].writeId);
                            triggerOfCurrentClicked = false;
                            collapsedWhenEditClicked = false;
                            editLabelClicked = false;
                            return false;
                        }
                    }
                }
            }
        }            
        triggerOfCurrentClicked = false;
        collapsedWhenEditClicked = false;
        editLabelClicked = false;
    }
}
function IsInside(clickedElement){
    //alert('clickedElement.tagName: ' + clickedElement.tagName + '\nclickedElement.parentNode: ' + clickedElement.parentNode + '\nclickedElement.parentNode.id: ' + clickedElement.parentNode.id + '\ncurrId: ' + currId)    
    if((clickedElement.tagName != 'HTML') && (clickedElement.parentNode != null)){    
        if(clickedElement.parentNode.id){
            if(clickedElement.parentNode.id == currId){
                //alert('clickedElement.tagName: ' + clickedElement.tagName + '\nclickedElement.parentNode: ' + clickedElement.parentNode + '\nclickedElement.parentNode.id: ' + clickedElement.parentNode.id + '\ncurrId: ' + currId + '\nreturn true')
                return true;
            }
        }
        //alert('return IsInside(clickedElement.parentNode): return ' + IsInside(clickedElement.parentNode))
        return IsInside(clickedElement.parentNode)
    }
    //alert('clickedElement.tagName: ' + clickedElement.tagName + '\nclickedElement.parentNode: ' + clickedElement.parentNode + '\nclickedElement.parentNode.id: ' + clickedElement.parentNode.id + '\ncurrId: ' + currId + '\nreturn false')
    else return false;
}
function ExpandAndEdit(event) {
    //debugger;
    var element;
    event = event || window.event;
    event.srcElement ? element = event.srcElement : element = event.target;
    
    currTriggId = element.id;
    
    var tempReadId = null;
    var tempWriteId = null;
    for(var i = 0; i < triggers.length; i++)
    {
        if(triggers[i].id == element.id)
        {
            tempReadId = triggers[i].readId;
            tempWriteId = triggers[i].writeId;
        }
        if((triggers[i].id == element.id) && (triggers[i].readId == readId) && (triggers[i].writeId == writeId))
        {
            triggerOfCurrentClicked = true;
        }
    }
    
    var extenderId;
    if (GetTriggerInfo(element.id)) extenderId = GetTriggerInfo(element.id).collExtId;
    
    editLabelClicked = true;
    collapsedWhenEditClicked = false;
    
    if(extenderId && $find(extenderId)){
        var extender = $find(extenderId);        
        extender.remove_expandComplete(EditAfterExpand);
        extender.add_expandComplete(EditAfterExpand);        
        if(extender.get_Collapsed()){
            prevReadId = readId
            prevWriteId = writeId
            prevCurrId = currId
            readId = tempReadId;
            writeId = tempWriteId;
            
            extender._doOpen();
            
            collapsedWhenEditClicked = true;
            editAfterAnimation = true;
        }
    }
    return false;
}
function EditAfterExpand(){
    //alert('EditAfterExpand\ncurrKey: ' + currKey + '\neditLabelClicked: ' + editLabelClicked + '\ncollapsedWhenEditClicked: ' + collapsedWhenEditClicked + '\nreadId: ' + readId + '\nprevReadId: ' + prevReadId + '\nwriteId: ' + writeId + '\nprevWriteId: ' + prevWriteId)
    
    if((prevReadId != null) && (prevWriteId != null)){
        //alert('EditAfterExpand\n((prevReadId != null) && (prevWriteId != null))')
        _SetReadMode(prevReadId, prevWriteId);
    }    
    if(editAfterAnimation == true){
        //SetWriteMode(currKey)
        //alert('EditAfterExpand\n(editAfterAnimation == true)')        
        if((readId == weemeeDivId) && (writeId == weemeeDivId)){
            WeemeeRedirect();
        }
        else _SetWriteMode(readId, writeId);        
    }
    editAfterAnimation = false;
}
function GetTriggerInfo(triggerId){
    for(var i = 0; i < triggers.length; i++){        
        if((triggers[i].id == triggerId) || (triggers[i].readId == triggerId)){
            return triggers[i];
        }
    }
    return null;
}
function ReadPanelClick(event){
    var id;
    if (window.event) id = this.id;
    else id = event.currentTarget.id;        
    var triggerInfo = GetTriggerInfo(id);
    //alert('event: ' + event + '\nGetTargetId(event): ' + GetTargetId(event) + '\ntriggerInfo: ' + triggerInfo)
    if (triggerInfo != null) _SetWriteMode(triggerInfo.readId, triggerInfo.writeId);
}
function EditAreaMouseOver(event){
    var id;
    if (window.event) id = this.id;
    else id = event.currentTarget.id;
    var areaId;
    if(GetTriggerInfo(id)) areaId = GetTriggerInfo(id).readId;
    if((areaId != null) && ($get(areaId) != null)){
        Sys.UI.DomElement.addCssClass($get(areaId), "RichEditHover");
    }
}
function EditAreaMouseOut(event){
    var id;
    if (window.event) id = this.id;
    else id = event.currentTarget.id;
    var areaId;
    if(GetTriggerInfo(id)) areaId = GetTriggerInfo(id).readId;
    if((areaId != null) && ($get(areaId) != null)){
        Sys.UI.DomElement.removeCssClass($get(areaId), "RichEditHover");
    }    
}
function TriggerMouseDown(e){
    e = e || window.event;
    if(window.event) e.cancelBubble=true;
    else e.stopPropagation();
    e.srcElement ? e.srcElement.onclick = ExpandAndEdit : e.target.onclick = ExpandAndEdit;
}
function HideContent(id){
    //alert('HideContent(' + id + ')')    
    if($get(id)) layeroff($get(id));
}
function ShowContent(id){
    //alert('ShowContent(' + id + ')')    
    if($get(id)) layeron($get(id));
 
}
function _SetReadMode(readPanelId, writePanelId) {
    //alert('_SetReadMode(' + readPanelId + ', ' + writePanelId + ')' + '\nreadId -' + readId + '-\n' + 'prevReadId -' + prevReadId + '-\n' + 'writeId -' + writeId + '-\n' + 'prevWriteId -' + prevWriteId + '-')   
    if(!readPanelId || !writePanelId) return;
    HideContent(writePanelId);
    ShowContent(readPanelId);    
    if((readPanelId == prevReadId) && (writePanelId == prevWriteId)){
        prevReadId = null;
        prevWriteId = null;
        prevCurrId = null;
    }
    if((readPanelId == readId) && (writePanelId == writeId)){
        readId = null;
        writeId = null;
        currId = null;
    }    
    FR.onLoad.loadAds();
}
function _SetWriteMode(readPanelId, writePanelId){
    //alert('_SetWriteMode(' + readPanelId + ', ' + writePanelId + ')' + '\nreadId -' + readId + '-\n' + 'prevReadId -' + prevReadId + '-\n' + 'writeId -' + writeId + '-\n' + 'prevWriteId -' + prevWriteId + '-')   
    if(!readPanelId || !writePanelId) return;
    HideContent(readPanelId);
    ShowContent(writePanelId);        
    if((readId != readPanelId) && (writeId != writePanelId)){
        prevReadId = readId
        prevWriteId = writeId
        prevCurrId = currId
        
        readId = readPanelId;
        writeId = writePanelId;
        if($get(writePanelId) && ($get(writePanelId).parentNode != null))
        currId = $get(writePanelId).parentNode.id;
    }      
    //alert('$get(' + writePanelId + '): ' + $get(writePanelId) + '\n$get(' + writePanelId + ').parentNode: ' + $get(writePanelId).parentNode + '\n$get(' + writePanelId + ').parentNode.id: ' + $get(writePanelId).parentNode.id)        
    firstTime = true;                     
    //alert('_SetWriteMode(' + readPanelId + ', ' + writePanelId + ')' + '\nreadId -' + readId + '-\n' + 'prevReadId -' + prevReadId + '-\n' + 'writeId -' + writeId + '-\n' + 'prevWriteId -' + prevWriteId + '-\ncurrId: ' + currId)             
}
function WeemeeRedirect() { document.location.href = '/signedin/weemeecontainer.aspx'; }
function QARedirect() { document.location.href = '/signedin/QA.aspx'; }
function InterestRedirect() { document.location.href = '/signedin/Interest.aspx?type=I1'; }

function CloseCurrent(){_SetReadMode(readId, writeId);}
AddAjaxEndRequest(CloseCurrent);
///////////////////// NewsflashPrompt //////////////////
NewsflashPrompt = function(promptId, txtId, promptBehaviorId){
    this.prompt     = $get(promptId);
    this.txt        = $get(txtId);
    this.behavior   = $find(promptBehaviorId);
    this.behaviorId = promptBehaviorId;
    //alert('NewsflashPrompt\n\nthis.prompt: ' + this.prompt + '\n\nthis.txt: ' + this.txt + '\n\nthis.behavior: ' + this.behavior + '\n\npromptId: ' + promptId + '\n\ntxtId: ' + txtId + '\n\npromptBehaviorId: ' + promptBehaviorId)
    this.Initialize();
}
NewsflashPrompt.prototype.Initialize = function(){
    $addHandler(this.txt, 'keyup', this.HidePrompt.bind(this));
    for(var i = 0; i < this.prompt.childNodes.length; i++){
        //alert('this.prompt.childNodes[i].nodeType: ' + this.prompt.childNodes[i].nodeType);
        if(this.prompt.childNodes[i].nodeType == 1){
            $addHandler(this.prompt.childNodes[i], 'mousedown', this.ClearText.bind(this));
            $addHandler(this.prompt.childNodes[i], 'click',     this.SelectItem.bind(this));
            //this.prompt.childNodes[i].onmousedown = this.ClearText.bind(this);
            //this.prompt.childNodes[i].onclick = this.SelectItem.bind(this);
        }
    }
}
NewsflashPrompt.prototype.ClearText = function(){
    //alert('ClearText\nthis.txt.value: ' + this.txt.value);
    this.txt.value = ' ';
}
NewsflashPrompt.prototype.SelectItem = function(event){
    //alert('SelectItem\nevent.target.innerHTML: ' + event.target.innerHTML);
    this.txt.value = event.target.innerHTML.trim() + ' ';
    this.behavior.hidePopup();
    this.txt.focus();
    setTimeout(this.HidePrompt.bind(this), 0);
}
NewsflashPrompt.prototype.HidePrompt = function(){
    this.behavior.hidePopup();
}
function NewsflashKeyUp(event){
    //8     -   BACKSPACE
    //13    -   ENTER
    //16    -   SHIFT
    //17    -   CTRL
    //18    -   ALT
    //32    -   SPACE
    //27    -   ESC
    //37    -   ARROW LEFT
    //38    -   ARROW UP
    //39    -   ARROW RIGTH
    //40    -   ARROW DOWN
    //46    -   DELETE
    //48-90, 96-111 - 0-9, a-z, A-Z
    //186 - 222 -   ;:,.'" etc
    var key = event.keyCode;
    var target;
    event.target ? target = event.target : target = event.srcElement; 
    var counterId = target.id.replace('_txtNewsflash', '_lblCharsLeftValue');    
    if($get(counterId)){
        var counter = $get(counterId);
        var charsLeft = 140 - target.value.trim().length;    
        var ARROW = false;
        var BACK = false;
        var DEL = false;
        var SPACE = false;
        var ENTER = false;
        if((key == 37) || (key == 38) || (key == 39) || (key == 40)) ARROW = true;
        if(key == 8) BACK = true;
        if(key == 46) DEL = true;
        if(key == 32) SPACE = true;
        if(key == 13) ENTER = true;        
        if(BACK || DEL){
            counter.innerHTML = charsLeft;
            $('#maxCharMessage').empty();
            $('span.charsleft').show();
        }        
        if(((48 <= key) && (key <= 90)) ||
        ((96 <= key) && (key <= 111)) ||
        (186 <= key) && (key <= 222) ||
        SPACE || ENTER){
            if (charsLeft < 1){
                target.value = target.value.trim().substr(0, 140);
                counter.innerHTML = '0';
                $('#maxCharMessage').html("You have reached the maximum 140 characters for this newsflash");
                $('span.charsleft').hide();
            }
            else{
                counter.innerHTML = charsLeft;
                $('#maxCharMessage').empty();
                $('span.charsleft').show();
            }
        }
    }
}
function NewsflashFocus(event){
    //alert('NewsflashFocus\n-1-')    
    event = event || window.event;
    if(window.event) {
        event.cancelBubble=true;         
    } else {
        event.stopPropagation();
    }
    //event.preventDefault();    
    var target;
    event.target ? target = event.target : target = event.srcElement;
    var counterId = target.id.replace('_txtNewsflash', '_lblCharsLeftValue');    
    if($get(counterId)){
        var counter = $get(counterId);
        //alert('NewsflashFocus\ntarget.value: -' + target.value + '-\ntarget.value.length: ' + target.value.length + '\ntarget.className: ' + target.className)
        var doCount = true;
        if($find('newsflashWatermark')){
            if(target.className == $find('newsflashWatermark')._watermarkCssClass) doCount = false;
        }
        if(doCount){
            var charsLeft = 140 - target.value.trim().length;        
            counter.innerHTML = charsLeft;
        }
    }    
    //alert('NewsflashFocus\n-2-')
}
function RemovePet(elem){
    //alert('RemovePet\nelem: ' + elem + '\ndivelem: ' + divname + '\ntxtelem: ' + txtname)
    var spanelem = document.getElementById(elem);
    var divelem;
    var txtelem;
    divelem =  document.getElementById(divname); 
    txtelem =  document.getElementById(txtname); 
    divelem.removeChild(spanelem);
    var petState = txtelem.getAttribute("value") ;
    var currPetState = '';
    var temp = new Array();
    if (petState.length > 0 ){
        temp = petState.split(',');   
        var findkey =  ':' + elem.substr(0, elem.indexOf('pk'));
        for (var indx = 0 ; indx < temp.length ; indx ++){
            if (temp[indx].indexOf(findkey)  < 0 ){
                if (currPetState.length >   0){
                    currPetState = currPetState + ',' + temp[indx] ;
                }else{
                    currPetState = temp[indx] ;
                }
            }
        }
        txtelem.setAttribute("value",currPetState);
    }   
}
function ValidatePetSelection(){
    var selPetList = document.getElementById(ddpet); 
    var selCountList = document.getElementById(ddcount);    
    if((selPetList[selPetList.selectedIndex].getAttribute('value') != null) &&
    (selPetList[selPetList.selectedIndex].getAttribute('value') == 0)){
        selPetList.style.backgroundColor = '#f9f2e0';
    }    
    if((selCountList[selCountList.selectedIndex].getAttribute('value') != null) &&
    (selCountList[selCountList.selectedIndex].getAttribute('value') == 0)){
        selCountList.style.backgroundColor = '#f9f2e0';
    }
}
function AddPet(){
    var divelem;
    var txtstateelem;
    divelem =  document.getElementById(divname); 
    txtstateelem =  document.getElementById(txtname); 
    var selPetList = document.getElementById(ddpet); 
    var selPetsList = document.getElementById(ddpets);
    var selCountList = document.getElementById(ddcount);    
    //alert('selPetList.selectedIndex: ' + selPetList.selectedIndex + '\nselCountList.selectedIndex: ' + selCountList.selectedIndex)    
    selPetList.style.backgroundColor = '#ffffff';
    selCountList.style.backgroundColor = '#ffffff';
    var agreeToAddNewPet = true;
    if((selPetList[selPetList.selectedIndex].getAttribute('value') != null) &&
    (selPetList[selPetList.selectedIndex].getAttribute('value') == 0)){
        agreeToAddNewPet = false;
    }
    if((selCountList[selCountList.selectedIndex].getAttribute('value') != null) &&
    (selCountList[selCountList.selectedIndex].getAttribute('value') == 0)){
        agreeToAddNewPet = false;
    }    
    if(agreeToAddNewPet){
        var pkey = selPetList.options[selPetList.selectedIndex].value + 'pk';
        if (divelem.childNodes.length > 0 )
        {
            var nodes = divelem.getElementsByTagName("a"); 
            var indx = 0 ;
            var nodecount = nodes.length;
            while (indx <  nodecount){
            if (nodes[indx].getAttribute("id") == pkey ){
                RemovePet(pkey);
                indx = nodecount
                break;  
            }
                indx = indx + 1 ;             
            }          
        }
        var spanelem = document.createElement("a") 
        spanelem.setAttribute ('id' ,pkey)
        spanelem.className = 'selOption';
        //var brelem = document.createElement("BR")
        //spanelem.appendChild(brelem);
        var txtelem;
        var petcount = selCountList.options[selCountList.selectedIndex].value ;
        var length = 0;
        if (parseInt(selCountList.options[selCountList.selectedIndex].value) > 1 ){
             txtelem = document.createTextNode(selCountList.options[selCountList.selectedIndex].value + ' ' + selPetsList.options[selPetList.selectedIndex].text );
             length = 1 + selCountList.options[selCountList.selectedIndex].value.length + selPetsList.options[selPetList.selectedIndex].text.length;
        }
        else{
             txtelem = document.createTextNode(selCountList.options[selCountList.selectedIndex].value + ' ' + selPetList.options[selPetList.selectedIndex].text );
             length = 1 + selCountList.options[selCountList.selectedIndex].value.length + selPetList.options[selPetList.selectedIndex].text.length;
        }                   
        var elemWidth = 180;
        range = 6;
        for(var i = 0; i < range; i++){
            //-1<<5, 4<<10, 9<<15, 14<<20, etc.
            if( ((-1 + i*5) < length) && (length < (5 + i*5)) ){
                elemWidth = 45 + i*24;
            }
        }
        spanelem.style.width = elemWidth + 'px';        
        spanelem.appendChild(txtelem);         
        Sys.UI.DomEvent.addHandler(spanelem, "click", RemovePet1)
        //aelem = document.createElement("img")
        //Sys.UI.DomEvent.addHandler(aelem, "click", RemovePet1)
        //aelem.className = 'closeItem';
        //aelem.setAttribute("src", "../App_Themes/Basic/Images/Collapsible/RedCross.gif");          
        //spanelem.appendChild(aelem );          
        divelem.appendChild(spanelem );
        var petState = txtstateelem.value;
        if (petState.length > 0 ){
            petState = petState + ',' + petcount + ':' + selPetList.options[selPetList.selectedIndex].value ;
        }
        else{
            petState =  petcount + ':' + selPetList.options[selPetList.selectedIndex].value ;    
        }
        txtstateelem.value = petState ;         
        selPetList.selectedIndex = 0;
        selPetsList.selectedIndex = 0;
        selCountList.selectedIndex = 0;
    }    
}

function RemovePet1(eventElement)
{
    //alert('-' + eventElement.target.parentNode.id  + '-')
    if(eventElement.target.id){
        RemovePet(eventElement.target.id)
    }   
}

function SectorPanel()
{
    var ddEmpList = document.getElementById(ddemployment);  
    var pnlsectorelem = document.getElementById(pnlsector);   
    var empvalue = ddEmpList.options[ddEmpList.selectedIndex].value ;
    if (empvalue >0  && empvalue < 4 )
    pnlsectorelem.style.display="block";
    else
    pnlsectorelem.style.display="none";
}

///////////////////////////// FullEmptyTextValidator /////////////////////////////
var singleLineMaxCount = 100;
var multiLineMaxCount = 140;
var fullEmptyClassName = 'fullEmptyText';
function FullEmptyTextValidator(submitControlId, textControlId, maxCount, invalidTextCssClass) {
    this.submitControlId     = submitControlId;
    this.textControlId       = textControlId;
    this.maxCount            = null;
    this.invalidTextCssClass = null;
    this.submitControl       = null;
    this.textControl         = null;
 
    this.InitializeVariables(submitControlId, textControlId, maxCount, invalidTextCssClass);
    this.AttachEvents();
}
FullEmptyTextValidator.prototype.InitializeVariables = function(submitControlId, textControlId, maxCount, invalidTextCssClass){
    if(!this.submitControlId || this.submitControlId == '') return;//throw "FullEmptyTextValidator: Id of submit control cannot be empty.";
    if(!this.textControlId || this.textControlId == '')     return;//throw "FullEmptyTextValidator: Id of text value control cannot be empty.";
    if(!$get(this.submitControlId))                    return;//throw "FullEmptyTextValidator: Cannot find element with id \"" + submitControlId + "\"";
    if(!$get(this.textControlId))                      return;//throw "FullEmptyTextValidator: Cannot find element with id \"" + textControlId + "\"";
    this.submitControl = $get(this.submitControlId);
    this.textControl = $get(this.textControlId);
    if(maxCount) this.maxCount = maxCount; else this.maxCount = multiLineMaxCount;
    if(invalidTextCssClass && invalidTextCssClass.trim() != '') this.invalidTextCssClass = invalidTextCssClass;
    else this.invalidTextCssClass = fullEmptyClassName;
    //alert('this.submitControlId: ' + this.submitControlId + '\n\nthis.textControlId: ' + this.textControlId)
}
FullEmptyTextValidator.prototype.AttachEvents = function(){
    if(this.submitControl != null){
        //$addHandler(this.submitControl, 'keydown', this.ApplyValidate);
        $addHandler(this.submitControl, 'mousedown', this.ApplyValidate.bind(this));
        $addHandler(this.submitControl, 'click', this.UndoValidate.bind(this));
        $addHandler(this.submitControl, 'blur', this.UndoValidate.bind(this));        
    }
}
FullEmptyTextValidator.prototype.ApplyValidate = function(event){
    //alert('ApplyValidate\nevent: ' + event + '\nthis: ' + this + '\nthis.submitControlId: ' + this.submitControlId + '\nthis.textControlId: ' + this.textControlId);
    //if($get(this.id.replace('saveComment', 'newComment')))
    if(this.textControl){        
        if(this.textControl.value.trim() == ''){
	        Sys.UI.DomElement.addCssClass(this.textControl, this.invalidTextCssClass);
        }
        //Bugfix for newsflash with watermark
        if($find('newsflashWatermark')){
            if(this.textControl.className == $find('newsflashWatermark')._watermarkCssClass){
                Sys.UI.DomElement.addCssClass(this.textControl, this.invalidTextCssClass);
            }
        }
    }
}
FullEmptyTextValidator.prototype.UndoValidate = function(event){
    //alert('UndoValidate\nevent: ' + event + '\nthis: ' + this);        
    if(this.textControl){
	        Sys.UI.DomElement.removeCssClass(this.textControl, this.invalidTextCssClass);
	        if(this.textControl.value.trim() == ''){
	            if(this.textControl.focus)this.textControl.focus();
		        event.preventDefault();		        
		        //IE bugfix
		        if(this.textControlId.indexOf('_txtNewsflash') > -1) {
	                var popId = this.textControlId.replace('_txtNewsflash','_popupNewsflash')
                    popExtId = popId;
                    setTimeout(hidePrompt, 0);
		        }
		        return false;	        
	        }
	        //Bugfix for newsflash with watermark
            if($find('newsflashWatermark')){
                if(this.textControl.className == $find('newsflashWatermark')._watermarkCssClass){
                    Sys.UI.DomElement.removeCssClass(this.textControl, this.invalidTextCssClass);
                    //this.textControl.focus();
		            event.preventDefault();
		            return false;
                }
            }
        }
}
function AddFullEmptyTextValidator(submitControlId, textControlId, maxCount, invalidTextCssClass){
    //alert('AddFullEmptyTextValidator\nsubmitControlId: ' + submitControlId + '\ntextControlId: ' + textControlId + '\nmaxCount: ' + maxCount + '\ninvalidTextCssClass: ' + invalidTextCssClass)
    //var v = new FullEmptyTextValidator(submitControlId, textControlId, maxCount, invalidTextCssClass)
    for(var i = 0; i < fullEmptyValidators.length; i++){
        //alert('AddFullEmptyTextValidator\n\nfullEmptyValidators[i].submitControlId: ' + fullEmptyValidators[i].submitControlId + '\n\nsubmitControlId: ' + submitControlId + '\n\nfullEmptyValidators[i].textControlId: ' + fullEmptyValidators[i].textControlId + '\n\ntextControlId: ' + textControlId)
        if(fullEmptyValidators[i].submitControlId == submitControlId && fullEmptyValidators[i].textControlId == textControlId){
            fullEmptyValidators[i] = new FullEmptyTextValidator(submitControlId, textControlId, maxCount, invalidTextCssClass);
            return;
        }
    }
    fullEmptyValidators.push(new FullEmptyTextValidator(submitControlId, textControlId, maxCount, invalidTextCssClass));
}