
UIManager=function()
{

    this.CurrentDesktop;
    
    this.initialize=function()
    {
        
    }
    this.empty=function(xml)
    {
    }
    this.refreshUser=function(xml)
    {
        var user=xml.selectSingleNode("/response/user").text;
        
        $("menu_user").innerText=user;
        $("menuedit_user").innerText=user;
    }
    //------------------------------------  Desktop method -----------------------------------
    this.refreshTabs=function(xml)
    {
        var tabs=new Hashtable();
        var nodes=xml.selectNodes("/response/tabList/tab");
        for(var i=0;i<nodes.length;i++)
        {
            tabs.add(nodes[i].attributes.getNamedItem("id").nodeValue,nodes[i].text);
        }
        tablist.refresh(tabs);
    }
    this.refreshSubmenu=function(xml)
    {
        var node=xml.selectSingleNode("/response/menulist");
        tablist.refreshSubmenu(new XMLDOM(node.xml));
    }
    this.activeDesktop=function(xml)
    {
        var desktop=xml.selectSingleNode("/response/desktop").attributes.getNamedItem("name").nodeValue;
        var id=xml.selectSingleNode("/response/desktop").attributes.getNamedItem("id").nodeValue;
        
        if(!DesktopList.contains(id))
        {
            var arr=new DesktopAttribute();
            arr.BoName=desktop;
            arr.ID=id;
            
            DesktopList.add(id,new Desktop(arr));
        }
        
        
        if(this.CurrentDesktop)this.CurrentDesktop.hide();
        DesktopList.item(id).show();
        this.CurrentDesktop=DesktopList.item(id);
        
        taskbar.load(this.CurrentDesktop.Attribute.Windows);
        hoverwindow.initialize(this.CurrentDesktop.Element);
    }
    this.restoreDesktop=function(xml)
    {
        var nodes=xml.selectNodes("/response/desktop/window");
        var desktop=xml.selectSingleNode("/response/desktop").attributes.getNamedItem("name").nodeValue;
        var id=xml.selectSingleNode("/response/desktop").attributes.getNamedItem("id").nodeValue;
        var windows=new Array();
        for(var i=0;i<nodes.length;i++)
        {
            windows.push(nodes[i].text);
        }
        DesktopList.item(id).refresh(windows);
    }
    this.cancelEditDesktop=function(xml)
    {
        var desktop=xml.selectSingleNode("/response/desktop").text;
        DesktopList.item(desktop).cancelEdit();
    }
    this.createDesktop=function(xml)
    {
        
    }
    this.editDesktop=function(xml)
    {
        var desktop=xml.selectSingleNode("/response/desktop").text;
        var group=xml.selectSingleNode("/response/group");
        var type=xml.selectSingleNode("/response/type").text;
        var name=xml.selectSingleNode("/response/name").text;
        
        if(DesktopList.contains(desktop))
        {
            if(group)
            {
                DesktopList.item(desktop).Attribute.GroupName=group.text;
            }
            DesktopList.item(desktop).edit(type,name);
        }
    }
    this.editDashbroad=function(xml)
    {
        var desktop=xml.selectSingleNode("/response/desktop").text;
        if(DesktopList.contains(desktop))
        {
            DesktopList.item(desktop).edit();
        }
    }
    //--------------------- Control method -----------------------------------
    
    this.showControls=function(xml)
    {
        var arrXml=xml.selectSingleNode("/response/obxControl").xml
        var arr=new ControlAttribute();
        arr.loadXML(new XMLDOM(arrXml));
        if(!FormList.contains(arr.ID))
        {
            FormList.add(arr.ID,new Control(arr));
        }
        else
        {
            FormList.edit(arr.ID,new Control(arr));
        }
    }
    
    //--------------------- Window method -----------------------------------
    
    
    
    this.createWindow=function(xml)
    {
       
        var win=new WindowAttribute();
        win.loadXML(xml);
        
        if(WindowList.contains(win.ID))
        {
            WindowList.item(win.ID).Attribute=win;
            WindowList.item(win.ID).refresh("reload");
            return;
        }
        //alert("create window");
        switch(win.Type)
        {
            case "ModeWindow":
                WindowList.add(win.ID,new ModeWindow(win));
                //add by  liny
                Posation_login=win.ID;
                //add by liny
                break;
            case "NormalWindow":
                WindowList.add(win.ID,new NormalWindow(win));
                var owner=win.Owner;
                DesktopList.item(owner).addWindow(win.ID);
                taskbar.addWindow(win);
                break;
            case "Gadget":
                WindowList.add(win.ID,new Gadget(win));
                var owner=win.Owner;
                DesktopList.item(owner).addGadget(win.ID);
                break;
            default:
                alert("Unkown window type : " + win.Type);
        }
        //alert("create windows end");
        execjavascript(xml.selectSingleNode("response/obxWindow/properties/returnscript").text);
    }
    this.destroyWindow=function(xml)
    {
        
        var win=xml.selectSingleNode("/response/window").text;
        
        if(WindowList.contains(win))
        {
            var desktop=xml.selectSingleNode("/response/owner");
            if(desktop)
            {
                if(DesktopList.contains(desktop.text))
                {
                    DesktopList.item(desktop.text).delWindow(win);
                }
            }
            taskbar.removeWindow(WindowList.item(win).Attribute);
            WindowList.item(win).destroy();
            WindowList.remove(win);
        }
    }
    this.refreshWindow=function(xml)
    {
        var id=xml.selectSingleNode("/response/obxWindow/properties/id").text;
        WindowList.item(id).Attribute.loadXML(xml);
        WindowList.item(id).refresh();
        
        execjavascript(xml.selectSingleNode("response/obxWindow/properties/returnscript").text);
    }
    function execjavascript(strJavascript)
    {
        if((strJavascript!="")&&(strJavascript!=null))
        {
            try
            {
                eval(strJavascript);
            }
            catch(e)
            {
                alert(e.description+" ; javascript error :"+strJavascript);
            }
        }
    }
 
// Add for ticket 934 by fengz   
  function $CursorPosition(textBox){        
        var start = 0, end = 0;
        //For Firefox(1.5)
        if(typeof(textBox.selectionStart) == "number"){
            start = textBox.selectionStart;
            end = textBox.selectionEnd;
        }
        //For IE(6.0), include '\n'
        else if(document.selection) {
            var range = document.selection.createRange();
            if(range.parentElement().id == textBox.id) {
                // create a selection of the whole textarea
                var range_all = document.body.createTextRange();
                range_all.moveToElementText(textBox);
                // calculate selection start point by moving beginning of range_all to beginning of range
                for (start=0; range_all.compareEndPoints("StartToStart", range) < 0; start++)
                    range_all.moveStart('character', 1);
                // get number of line breaks from textarea start to selection start and add them to start
                for (var i = 0; i <= start; i ++)
                {
                    if (textBox.value.charAt(i) == '\n')
                        start++;
                }
                // create a selection of the whole textarea
                var range_all = document.body.createTextRange();
                range_all.moveToElementText(textBox);
                // calculate selection end point by moving beginning of range_all to end of range
                for (end = 0; range_all.compareEndPoints('StartToEnd', range) < 0; end ++) {
                    range_all.moveStart('character', 1);
                }
                // get number of line breaks from textarea start to selection end and add them to end
                for (var i = 0; i <= end; i ++) {
                    if (textBox.value.charAt(i) == '\n')
                        end ++;
                }
            }
        }
        //return [start, end]; 
        // modified to return as Object
        return {"start": start, "end": end, "item": [start, end]};
    }
   // Add for ticket 934 by fengz   

    //modify by liny
    this.evaljavascript=function(xml)
    {
        var str=xml.selectSingleNode("response/evaljavascript").text;
        var m=document.activeElement;
        if(typeof(m.type)!='undefined'&&(m.type=="text"||m.tagName=="TEXTAREA"))
        {
            if(m.type=="text")
            {
                var s=document.selection.createRange();            
                s.setEndPoint("StartToStart",m.createTextRange());
	            var pos=s.text.length;
	            m.value=s.text+"("+str+")"+DateDemo()+m.value.substr(pos,m.value.length-pos);
	        }
            else
            {
              // Add for ticket 934 by fengz   
                var cursPos = $CursorPosition(m);

                var textStart = m.value.slice(0, cursPos.start);
                var textInsert = "("+str+")"+DateDemo();
                var textEnd = m.value.slice(cursPos.end);
      
                m.value =  textStart+textInsert+textEnd;
                var re = new RegExp("[\\n]","g");
                textStart = textStart.replace(re,"");
                var r = m.createTextRange(); 
                r.collapse(true); 
                r.moveStart('character',(textStart.length+textInsert.length)); 
                r.select();
                // Add for ticket 934 by fengz   
            }
        }
    }
    //modify by liny
   
    //--------------------------------------------------------------------------
    this.refreshHoverWindow=function(xml)
    {
        var width=parseInt(xml.selectSingleNode("/response/obxHoverWindow/properties/width").text);
        var height=parseInt(xml.selectSingleNode("/response/obxHoverWindow/properties/height").text);
        var content=xml.selectSingleNode("/response/obxHoverWindow/content").text;
        
        hoverwindow.refresh(width,height,content);
    }
    //----------------------------------------------------------------------------
    this.refreshToolButtons=function(xml)
    {
        var alertInterval=parseInt(xml.selectSingleNode("/response/alertInterval").text)
        toolbtn.initialize(alertInterval);
    }
    this.hasAlert=function(xml)
    {
        toolbtn.startFlicker();
    }
    this.showLogin=function(xml)
    {
        context.request("LoginHandler.ashx?action=showLoginWin");
    }
    this.appRestart=function(xml)
    {
        if((WindowList.count()<1)||(DesktopList.count()<1))
        {
            if(xml.selectSingleNode("/response/window"))
            {
                var winid=xml.selectSingleNode("/response/window").attributes.getNamedItem("id").nodeValue;
                if(WindowList.contains(winid))
                {
                    WindowList.item(winid).destroy();
                    WindowList.remove(winid);
                }
                //*************** disable the admin tools ******************
                var disableAdminTool=xml.selectSingleNode("/response/adminTool").attributes.getNamedItem("enable").nodeValue;
                if(disableAdminTool!="True")
                {
                    $("AdminToolMenu").onclick="";
                    $("AdminToolMenuText").style.color="Gray";
                }
                //*************** disable the save as the desktop ****************
                var disableSaveAsDesktop=xml.selectSingleNode("/response/saveAsDesktop").attributes.getNamedItem("enable").nodeValue;
                if(disableSaveAsDesktop!="True")
                {
                    $("saveAsMeun").onclick="";
                    $("saveAsMeunText").style.color="Gray";
                }
                //*************** disable the save as the desktop ****************
                var disableEditDesktop=xml.selectSingleNode("/response/editDesktop").attributes.getNamedItem("enable").nodeValue;
//                if(disableEditDesktop!="True")
//                {
//                    $("editMeun").onclick="";
//                    $("editMeunText").style.color="Gray";
//                }
                
            }
            context.request("DesktopHandler.ashx?action=load");
        }
        else
        {
            logout=false;
            //alert("app restart reload");
            window.location.reload();
            
        }
    }
    this.logout=function(xml)
    {
        alert(xml.selectSingleNode("/response/info").text);
        window.close();
        //alert("logout reload");
        if(!window.closed)window.location.reload();
    }
    this.error=function(xml)
    {
        alert(xml.selectSingleNode("/response/error").text);
    }
    this.info=function(xml)
    {
        var action=xml.selectSingleNode("/response/action");
        //alert(action);
        if(action)
        {
            //alert(action.text);
            eval(action.text);
        }
        alert(xml.selectSingleNode("/response/info").text);
    }
    this.execJS=function(xml)
    {
        var js=xml.selectSingleNode("/response/javascripts").text;
        execjavascript(js);
    }
    this.download=function(xml)
    {
        var guid=xml.selectSingleNode("/response/guid").text;
        var url="DownloadHandler.ashx?guid="+guid;
        window.open(url,"_blank","directories=no,fullscreen=no,top=0,width=100,height=100,left=0,location=0,menubar=0,resizable=0,scrollbars=0,status=0,titlebar=0,toolbar=0,",false);
    }
}
