Type.registerNamespace('MySpace');
Type.registerNamespace('MySpace.UI');

function getFirstChildByClassName(parentElement, className) {
    if(parentElement.childNodes.length == 0) {
        return null;
    }

    var classRe = new (RegExp)("(^|\\s)" + className + "(\\s|$)");

    for(var i = 0; i < parentElement.childNodes.length; i++) {
        var child =  _proxy_jslib_handle(parentElement.childNodes, (i), 0, 0);
        if(classRe.test(child.className)) 
        {
            return child;
        }
        var ret = getFirstChildByClassName(child, className);
        if(ret != null) {
            return ret;
        }
    }
    
    return null;
}

MySpace.UI.AppChrome = function(element) {
    MySpace.UI.AppChrome.initializeBase(this, [element]);
}

MySpace.UI.AppChrome.remoteRequest = function(jsonp_apps_url) {
    MySpace.Apps.JSONP.request("MySpace.UI.AppChrome.profileLoad", 
        jsonp_apps_url + "&ownerid=" + MySpace.ClientContext.DisplayFriendId, function() {}, 30000);
}

 _proxy_jslib_assign('', MySpace.UI.AppChrome, 'load', '=', ( function(template, indexElement, apps, mount) {
    indexElement.style.display = "none";
    
    var mountCleaned =  _proxy_jslib_handle(mount, 'replace', '', 1, 0)(".", "");
    
    var surfaceName = mountCleaned;
    if(surfaceName.indexOf("profile") > -1)
        surfaceName = "profile";
       
    var maxTitleWidth = MySpace.Apps.JSONP.getContext(mountCleaned + "MaxTitleWidth");

    for(var i=apps.length - 1; i >= 0; i--) {
        var app =  _proxy_jslib_handle(apps, (i), 0, 0);
        
        if (app.title.length > maxTitleWidth)
            app.title = app.title.substr(0, maxTitleWidth - 3) + "...";
        
        var appMarkup =  _proxy_jslib_handle(template, 'replace', '', 1, 0)(/\{appid\}/g,  _proxy_jslib_handle(app.id, 'toString', '', 1, 0)());
        appMarkup =  _proxy_jslib_handle(appMarkup, 'replace', '', 1, 0)(/\{title\}/g, app.title);
        appMarkup =  _proxy_jslib_handle(appMarkup, 'replace', '', 1, 0)(/\{titleurl\}/g, app.profileUrl);
    
        var holderElement = document.createElement("div");
         _proxy_jslib_assign('', holderElement, 'innerHTML', '=', ( appMarkup));
        
        var appcontent = getFirstChildByClassName(holderElement, "appcontent");
         _proxy_jslib_assign('', appcontent, 'innerHTML', '=', (  _proxy_jslib_handle(app, 'innerHTML', '', 0, 0)));
        
        for(var j = holderElement.childNodes.length - 1; j >= 0; j--) {
            indexElement.parentNode.insertBefore( _proxy_jslib_handle(holderElement.childNodes, (j), 0, 0), indexElement.nextSibling);
        }
        var appidStr =  _proxy_jslib_handle(app.id, 'toString', '', 1, 0)();
    }
    
    for(var i=0; i<apps.length; i++) {
        var app =  _proxy_jslib_handle(apps, (i), 0, 0); var appidStr =  _proxy_jslib_handle(app.id, 'toString', '', 1, 0)();
        $create(MySpace.UI.AppChrome, {appId: app.id, headerElement: $get("appchromeheader_" + appidStr), panelElement: $get("apppanel_" + appidStr + "_" + surfaceName), surfaceId: mount, osToken: app.osToken}, null, null, $get("appchrome_" + appidStr));    
    }
}))



MySpace.UI.AppChrome.loadLeft = function(apps) {
     _proxy_jslib_handle(MySpace.UI.AppChrome, 'load', '', 1, 0)(MySpace.Apps.JSONP.getContext("profileleftTemplate"), $get("profileleftApps"), apps, "profile.left");
}

MySpace.UI.AppChrome.loadRight = function(apps) {
     _proxy_jslib_handle(MySpace.UI.AppChrome, 'load', '', 1, 0)(MySpace.Apps.JSONP.getContext("profilerightTemplate"), $get("profilerightApps"), apps, "profile.right");
}

MySpace.UI.AppChrome.profileLoad = function(apps) {
    MySpace.UI.AppChrome.loadLeft(apps.left);
    MySpace.UI.AppChrome.loadRight(apps.right);
}

MySpace.UI.AppChrome._panelList = {};

MySpace.UI.AppChrome.createButton= function(content) {
    var xElement = document.createElement("div");
    xElement.style.display = "none";
    xElement.style.cssFloat = xElement.style.styleFloat = "right";
     _proxy_jslib_assign('', xElement.style, 'cursor', '=', ( "pointer"));
    xElement.style.paddingLeft = "3px";
    xElement.style.paddingRight = "3px";
    xElement.className = "whitetext12";
     _proxy_jslib_assign('', xElement, 'innerHTML', '=', (  _proxy_jslib_handle(null, 'content', content, 0, 0)));
    return xElement;
}

MySpace.UI.AppChrome.prototype = {   
    _minElement: null,
    _xElement: null,
    _upElement: null,
    _downElement: null,
    _reportElement: null,
    _headerElement: null,
    _panelElement: null,
    _minimized: false,
    _originalHeight: 0,
    _originalStyleHeight: 0,
    _appId: null,
    _surfaceId: null,
    _orderIndex: -1,
    _rootElement: null,
    _appName: "",
    _osToken: "",

    get_appId: function() { return this._appId; },
    set_appId: function(value) { this._appId =  _proxy_jslib_handle(null, 'value', value, 0, 0) },

    get_headerElement: function() { return this._headerElement;},
    set_headerElement: function(value) { this._headerElement =  _proxy_jslib_handle(null, 'value', value, 0, 0); },

    get_panelElement: function() { return this._panelElement; },
    set_panelElement: function(value) { this._panelElement =  _proxy_jslib_handle(null, 'value', value, 0, 0); },
    
    get_surfaceId: function () { return this._surfaceId; },
    set_surfaceId: function (value) { this._surfaceId =  _proxy_jslib_handle(null, 'value', value, 0, 0); },

    get_appName: function() { return this._appName; },
    set_appName: function(value) { this._appName =  _proxy_jslib_handle(null, 'value', value, 0, 0); },

    get_osToken: function() { return this._osToken; },
    set_osToken: function(value) { this._osToken =  _proxy_jslib_handle(null, 'value', value, 0, 0); },

    initialize: function() {
        if(this._panelElement == null || this._headerElement == null) {
            return;
        }
        
        MySpace.UI.AppChrome.callBaseMethod(this, 'initialize');    
        
        var addUpDownButtons = false;
        if(MySpace.ClientContext.IsLoggedIn) {
            if(MySpace.ClientContext.UserId == MySpace.ClientContext.DisplayFriendId)
            {
                addUpDownButtons = true;
                var xElement = MySpace.UI.AppChrome.createButton("");
                this.createAppIcon(xElement, 4, "uninstall");
                $addHandler(xElement, "click", Function.createDelegate(this, this.uninstallClick ));                
                this._headerElement.appendChild(xElement);
                this._xElement = xElement;
            }
            else {
                var reportElement = MySpace.UI.AppChrome.createButton("");
                this.createAppIcon(reportElement, 5, "report");
                $addHandler(reportElement, "click", Function.createDelegate(this, this.reportClick ));                
                this._headerElement.appendChild(reportElement);
                this._reportElement = reportElement;
            } 
        }
        
        var minElement = MySpace.UI.AppChrome.createButton("");
        this.createAppIcon(minElement, 2, "min");
        $addHandler(minElement, "click", Function.createDelegate(this, this.minimizeClick ));
        this._headerElement.appendChild(minElement);
        this._minElement = minElement;   
        
        if(addUpDownButtons) {
            var upElement = MySpace.UI.AppChrome.createButton("");
            this.createAppIcon(upElement, 0, "up");
            $addHandler(upElement, "click", Function.createDelegate(this, this.upClick));
            this._headerElement.appendChild(upElement);
            this._upElement = upElement;
            
            var downElement = MySpace.UI.AppChrome.createButton("");
            this.createAppIcon(downElement, 1, "down");
            $addHandler(downElement, "click", Function.createDelegate(this, this.downClick));
            this._headerElement.appendChild(downElement);
            this._downElement = downElement;
        }
        
        this._originalHeight = this._panelElement.height;
        this._originalStyleHeight = this._panelElement.style.height; 
        
        $addHandler(this._element, "mouseover", Function.createDelegate(this, this.mouseOver ));
        $addHandler(this._element, "mouseout", Function.createDelegate(this, this.mouseOut ));
        
        if(this._surfaceId != null) {
            if(!MySpace.UI.AppChrome._panelList.hasOwnProperty(this._surfaceId)) {
                 _proxy_jslib_assign('', MySpace.UI.AppChrome._panelList, (this._surfaceId), '=', ( new (Array)()));
            }            
            this._orderIndex =  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0).length;
             _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0).push(this);
            //TODO: Fix the rootelement finding to be less of a hack
            this._rootElement = this._headerElement.parentNode.parentNode.parentNode;
        }
    },
    
    dispose: function() {
        this._minElement = null;
        this._xElement = null;
        this._headerElement = null;
        this._panelElement = null;
        MySpace.UI.AppChrome.callBaseMethod(this, 'dispose');
    },
    
    mouseOver: function() {
        if(this._xElement != null) {
            this._xElement.style.display = "inline";        
        }
        if(this._upElement != null) {
            this._upElement.style.display = "inline";
        }
        if(this._downElement != null) {
            this._downElement.style.display = "inline";
        }
        if(this._reportElement != null) {
            this._reportElement.style.display = "inline";
        }
        this._minElement.style.display = "inline";
    },
    
    mouseOut: function() {
        if(this._xElement != null) {
            this._xElement.style.display = "none";        
        }
        if(this._upElement != null) {
            this._upElement.style.display = "none";
        }
        if(this._downElement != null) {
            this._downElement.style.display = "none";
        }
        if(this._reportElement != null) {
            this._reportElement.style.display = "none";
        }
        this._minElement.style.display = "none";
    },
    
    createAppIcon: function(parentElement, index, iconType) {
        var appIconContainer = document.createElement("div");
        appIconContainer.id = iconType +  _proxy_jslib_handle(this._appId, 'toString', '', 1, 0)();
        
        var ICON_WIDTH = 17; //101x14
       
        appIconContainer.style.overflow = "hidden";
        appIconContainer.style.width = (ICON_WIDTH - 1) + "px";
        appIconContainer.style.height = "14px";
        
        var appIcon = document.createElement("img");
        
        //TODO:Change to x.myspace.com
         _proxy_jslib_assign('', appIcon, 'src', '=', ( AppChrome_ControlBoxSrc));
        appIcon.style.marginLeft = "-" + (index * ICON_WIDTH) + "px";
        
        appIconContainer.appendChild(appIcon);
        parentElement.appendChild(appIconContainer);        
    },
    
    upClick: function() {
        if(this._orderIndex > 0 &&  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0).length > 1) {
            var previousApp =  _proxy_jslib_handle( _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0), (this._orderIndex - 1), 0, 0);
            if(this._rootElement.nextSibling.tagName.toLowerCase() == "br") {
                this._rootElement.parentNode.removeChild(this._rootElement.nextSibling);
            }
            this._rootElement.parentNode.removeChild(this._rootElement);
            previousApp._rootElement.parentNode.insertBefore(this._rootElement, previousApp._rootElement);
            previousApp._rootElement.parentNode.insertBefore(document.createElement("br"), previousApp._rootElement);
            
             _proxy_jslib_assign('',  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0), (previousApp._orderIndex), '=', ( this));
             _proxy_jslib_assign('',  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0), (this._orderIndex), '=', ( previousApp));
            
            MySpace.Web.Services.Apps.Apps.MoveAppUp(this._osToken, this.get_surfaceId(), 
                function(result, userContext) {
                    //sucessful
                    //alert("successful up " + this.get_appId());
                }, 
                function(result, userContext) {
                    //alert("error up " + this.get_appId());
                });
            
            var tempIndex = this._orderIndex;
            this._orderIndex = previousApp._orderIndex;
            previousApp._orderIndex = tempIndex;
            this.mouseOut();            
        }
    },
    
    downClick: function() {
        if(this._orderIndex <  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0).length - 1

 &&  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0).length > 1) {
            var nextApp =  _proxy_jslib_handle( _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0), (this._orderIndex + 1), 0, 0);
            if(nextApp._rootElement.nextSibling.tagName.toLowerCase() == "br") {
                nextApp._rootElement.parentNode.removeChild(nextApp._rootElement.nextSibling);
            }
            nextApp._rootElement.parentNode.removeChild(nextApp._rootElement);
            this._rootElement.parentNode.insertBefore(nextApp._rootElement, this._rootElement);
            this._rootElement.parentNode.insertBefore(document.createElement("br"), this._rootElement);
            
             _proxy_jslib_assign('',  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0), (nextApp._orderIndex), '=', ( this));
             _proxy_jslib_assign('',  _proxy_jslib_handle(MySpace.UI.AppChrome._panelList, (this._surfaceId), 0, 0), (this._orderIndex), '=', ( nextApp));
            
            MySpace.Web.Services.Apps.Apps.MoveAppDown(this._osToken, this.get_surfaceId(), 
                function(result, userContext) {
                    //sucessful
                    //alert("successful down " + this.get_appId());
                }, 
                function(result, userContext) {
                    //alert(window.status = "error down " + this.get_appId());
                });
            
            var tempIndex = this._orderIndex;
            this._orderIndex = nextApp._orderIndex;
            nextApp._orderIndex = tempIndex;
            this.mouseOut();             
        }
    },
    
    reportClick: function() {
         _proxy_jslib_assign('', window, 'location', '=', (  _proxy_jslib_handle(AppChrome_ReportAppLink, 'replace', '', 1, 0)("{0}",  _proxy_jslib_handle(this._appId, 'toString', '', 1, 0)())));
    },
    
    minimizeClick: function() {
        if(this._minimized) {
            this._panelElement.height = this._originalHeight;
            this._panelElement.style.height = this._originalStyleHeight;
            if(Sys.Browser.agent == Sys.Browser.Firefox) {                         
                this._panelElement.parentNode.style.borderWidth = "1px";
            }

            while (this._minElement.childNodes.length >= 1)
            {
                this._minElement.removeChild(this._minElement.firstChild);       
            }
            
            this.createAppIcon(this._minElement, 2, "min");
            this._minimized = false;        
        }
        else {
            this._originalHeight = this._panelElement.height;
            this._originalStyleHeight = this._panelElement.style.height;

            this._panelElement.style.height = 0;
            if(Sys.Browser.agent == Sys.Browser.Firefox) {
                this._panelElement.parentNode.style.borderWidth = "0 1px 0 1px";
            }

            while (this._minElement.childNodes.length >= 1)
            {
                this._minElement.removeChild(this._minElement.firstChild);       
            }
            
            this.createAppIcon(this._minElement, 3, "min");
            this._minimized = true;         
        }
    },
    
    uninstallClick: function() {
        var content = "You can hide this module or remove the app completely. ";
         content= _proxy_jslib_assign_rval('', 'content', '+=', ( "<a href='Modules/Applications/Pages/ReportApp.aspx?appId="), content);
         content= _proxy_jslib_assign_rval('', 'content', '+=', (  _proxy_jslib_handle(this._appId, 'toString', '', 1, 0)()), content);
         content= _proxy_jslib_assign_rval('', 'content', '+=', ( "'>"), content);
         content= _proxy_jslib_assign_rval('', 'content', '+=', ( MySpaceRes.ProfileDisplay.ReportThisApp), content);
         content= _proxy_jslib_assign_rval('', 'content', '+=', ( "</a>"), content);
        var handler = Function.createDelegate(this, this.uninstallHandler );
        
        var p = MySpace.UI.AppsPopup.create( _proxy_jslib_handle(null, 'content', content, 0, 0), MySpaceRes.AppManagement.AppChromeRemoveHeader);
         _proxy_jslib_assign('', p.add_button(MySpaceRes.AppManagement.AppChromeHideButton), 'action', '=', ( "h"));
         _proxy_jslib_assign('', p.add_button(MySpaceRes.AppManagement.AppChromeRemoveButton), 'action', '=', ( "r"));
        p.add_button('Cancel', true).isCancel = true;
        p.show(handler);
    },
    
    uninstallHandler: function(sender, args) {
        if(args.target.isCancel) {
            return;
        }
       
        switch( _proxy_jslib_handle(args.target, 'action', '', 0, 0)) {
            case "h":
                MySpace.Web.Services.Apps.Apps.UpdateApplicationSettings(this._appId,
                        null,
                        ["displayonprofile"],
                        Function.createDelegate(this,  
                            function(eS) {
                                var brElement = this._element.nextSibling;
                                brElement.parentNode.removeChild(brElement);
                                this._element.parentNode.removeChild(this._element);
                            }
                        ),
                        Function.createDelegate(this,
                            function(eF) {
                                alert("Unexpected error hiding the app.");
                            }
                        )



 );                        
          
                break;
            case "r":
                MySpace.Apps.uninstallApplication(this._osToken, 
                    Function.createDelegate(this,  
                        function() {
                            var brElement = this._element.nextSibling;
                            brElement.parentNode.removeChild(brElement);
                            this._element.parentNode.removeChild(this._element);
                        }
                    ),
                    Function.createDelegate(this,
                        function() {
                            alert("Unexpected error removing the app.");
                        }
                    ));   
                break;        
        }
    }
}

MySpace.UI.AppChrome.registerClass('MySpace.UI.AppChrome', Sys.UI.Control);

if (typeof(Sys) != 'undefined')     
{     
  Sys.Application.notifyScriptLoaded();     
}
 ;
_proxy_jslib_flush_write_buffers() ;