//START Jm.Carrera.Framework.UI.Resources.NavigationManager.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.NavigationManager = function() {
    /// <summary>
    /// Manager for navigation events and transitions.
    /// Changes the behaviour of internal links to request new pages with AJAX.
    /// </summary>
    this._prm = null;
    this._navInfo = {};
    this._target = null;
    this._editMode = false;
    this._currentStateField = null;
    this._currentPage = 0;
    this._loginPage = 0;
    this._startPage = 0;
    this._title = null;
    this._enableHistory = false;
    this._requestCompleted = false;
    this._resizeCompleted = false;
    this._delay = 0;

    // Cannot use re.compile() because of Safari bug. AFAIK.
    this._stateRegex = new RegExp("^id=(\\d+)(&.*)*$");
    this._linkRegex = new RegExp("^http://" + location.host + ".*/default\\.aspx\\?(id=(\\d+)(.*))$","i");

    this._linkClick$delegate = Function.createDelegate(this, this._linkClick);
    this._endRequest$delegate = Function.createDelegate(this,this._endRequest);
    this._appLoad$delegate = Function.createDelegate(this,this._appLoad);
    this._locationChanged$delegate = Function.createDelegate(this,this._locationChanged);
    
    $Carrera.NavigationManager.initializeBase(this);
}

$Carrera.NavigationManager.prototype = {
    //-- INIT & DISPOSE  --//
    initialize: function() {
        /// <summary>
        /// Initialize the manager.
        /// </summary>
        $Carrera.NavigationManager.callBaseMethod(this, "initialize");
        this._prm = Sys.WebForms.PageRequestManager.getInstance();
        if (this._prm && !this._editMode) {
            this._prm.add_endRequest(this._endRequest$delegate);
            Sys.Application.add_load(this._appLoad$delegate);

            if (this._enableHistory) {
                $Carrera.History.add_locationChanged(this._locationChanged$delegate);
            }
        }
    },
    
    dispose: function() {
        /// <summary>
        /// Dispose the manager.
        /// </summary>
        if (this._prm && !this._editMode) {
            this._prm.remove_endRequest(this._endRequest$delegate);
            Sys.Application.remove_load(this._appLoad$delegate);

            if (this._enableHistory) {
                $Carrera.History.remove_locationChanged(this._locationChanged$delegate);
            }
        }
        $Carrera.NavigationManager.callBaseMethod(this, "dispose");
    },
    
    //-- BEHAVIOURS --//
    _appLoad: function(s, e) {
        /// <summary>
        /// Called when the application is loaded. 
        /// </summary>
        this._initLinks();
    },
    
    _endRequest: function(s, e) {
        /// <summary>
        /// Called when an ajax request is completed.
        /// </summary>
        this._updateCurrentState(e.get_dataItems()[this._target]);
        this._requestCompleted = true;
        this._tryCompleteTransition();
    },
    
    _locationChanged: function(s, e) {
        /// <summary>
        /// Called when the document location has changed.
        /// </summary>
        
        // Check if the state has changed
        var local = this._getLocalState(e);
        var current = this.get_currentState();
        if (local && local != current) { 
            this.navigate(local.replace(this._stateRegex,'$1'), local);
        }
    },
    
    _linkClick: function (eventElement) {
        /// <summary>
        /// Called when a link is clicked. 
        /// Checks that the link is internal, prevents the default behaviour and calls navigate method.
        /// </summary>
        var link = this._findLinkElement(eventElement.target);
        if (link && link.page)
        {
            eventElement.preventDefault();
            var state = link.href.replace(this._linkRegex,'$1');
            this._navigate(link.page, state);

            eventElement.stopPropagation();
            return false;
        }
    },
    
    //-- METHODS --//
    navigate: function(id, state, discardNavInfo) {
        /// <summary>
        /// Navigates to another page. Ensures that navigation info for the page exists.
        /// </summary>
        /// <param name="id" type="String">Page id to navigate to.</param>
        /// <param name="state" type="String">State string formatted as querystring (optional).</param>
        if (typeof discardNavInfo != "undefined" && discardNavInfo) {
            this._navigate(id, state, discardNavInfo);
        } else {
            var navigate = Function.createDelegate(this, function(){this._navigate(id, state);})
            this._ensureNavInfo([id], navigate)
        }
    },
    
    setContentWidth: function(width) {
        /// <summary>
        /// Sets content width by triggering the contentWidthChanged event.
        /// </summary>
        /// <param name="width" type="Int">The content width.</param>
        this._onContentWidthChanged(width);
    },

    contentResizeCompleted: function() {
        /// <summary>
        /// Calling this states that the content resize has been completed.
        /// </summary>
        this._resizeCompleted = true;
        this._tryCompleteTransition();
    },

    _navigate: function(id, state, discardNavInfo) {
        /// <summary>
        /// Triggers the navigation to another page by AJAX.
        /// Raises the transitionStart event.
        /// </summary>
        
        // if not state is given, create from page id.
        state = state || ("id=" + id);
        
        if (typeof discardNavInfo != "undefined" && discardNavInfo) {
            window.location = "/default.aspx?" + state;
            return false;
        }        
        
        if (state == this.get_currentState()) {
            return;
        }
        // Only querystring change, no page transition
        if (id == this.get_currentPage()) { 
            __doPostBack(this._target,state);
        }
        else {
            info = this._navInfo[id];
            var roles = info.roles.split(",");  //comma separated accesslist...
            var hiddenSids = document.getElementById("EPiUserSids");
            var usersids = [1, 3];  // "1" is SID always for "everyone" group, "3" for Anonymous user
            var access = false;
            if(hiddenSids != null)
            {
                var usersids = hiddenSids.value.split(",");
            }
            for(roleIndex=0;roleIndex<roles.length; roleIndex++)
            {
                roleID = roles[roleIndex];
                for(sidIndex=0;sidIndex<usersids.length;sidIndex++)
                {
                    var userSID = usersids[sidIndex];
                    if(roleID == userSID)
                    {
                        access = true;
                        break;
                    }
                }
            }
            if(!access)
            {
                $find('LoginPopup').show(this.navigate, [id, state], this);

/*            
                if (typeof LoginPopup != "undefined") {
                    LoginPopup.show(this.navigate, [id, state], this);
                } else {
                    this.navigate(this._loginPage, state);
                }
*/                
                return;
            }
            
            // Cancel previous requests if exists
            if (this._prm.get_isInAsyncPostBack()) {
                this._prm.abortPostBack();
            }

            this._requestCompleted = false;
            this._resizeCompleted = false;
            this._onTransitionStart(info);
            //__doPostBack(this._target,state);
            window.setTimeout('__doPostBack("'+this._target+'","'+state+'");', this._delay);
        }
    },
    
    _updateCurrentState: function(state) {
        /// <summary>
        /// Updates the page state after navigation is completed.
        /// Sets document location if changed.
        /// </summary>
        if (state) {
            this.set_currentPage(state.replace(this._stateRegex,'$1'));
            this.set_currentState(state);

            if (state != this._getLocalState()) {
                if (this._enableHistory) {
                    $Carrera.History.set_location(state);
                }
            }
        }
    },
    
    _getLocalState: function(hash) {
        /// <summary>
        /// Gets the local state from the best source.
        /// </summary>
        /// <returns>State formatted as querystring.</returns>
        var state;
        if (!hash) {
            if (this._enableHistory) {
                hash = $Carrera.History.get_location();
            }
        }
        if (hash && this._stateRegex.test(hash)) {
            state = hash;
        } 
        else if (hash === "") {
            if ( this._linkRegex.test(location.href) ) {
                state = location.search;
                if (state.startsWith('?')) {
                    state = state.substr(1);
                }
            } 
            else {
                state = "id=" + this._startPage;
            }
        }
        return state;
    },
        
    _findLinkElement: function(eventTarget) {
        /// <summary>
        /// Searches for the link element after click event. 
        /// </summary>
        for (var el = eventTarget; el.parentNode; el = el.parentNode) {
            if (el.page) { 
                return el;
            }
        }
        return null;
    },
    
    _tryCompleteTransition: function() {
        /// <summary>
        /// Calls transition end if both the server request and resizing is completed. 
        /// </summary>
        if (this._requestCompleted && this._resizeCompleted) { 
            this._onTransitionEnd(this._navInfo[this.get_currentPage()]);
        }
    },
    
    _ensureNavInfo: function(pages, callback) {
        /// <summary>
        /// Ensures that the navigation information about a page exist.
        /// If not this method will call a webbservice to get the information.
        /// </summary>
        /// <param name="pages" type="Array">Array of page ids.</param>
        /// <param name="callback" type="Function">Function that is called when the info is ensured.</param>
        var missing = [];
        var current = this._navInfo;
        for (var i=0;i<pages.length;i++) {   
            if (typeof current[pages[i]] == 'undefined') {
                missing.push(pages[i]);
            }
        }
        
        if (missing.length == 0) {
            callback(); 
        } else {
            var f = Function.createDelegate(this, 
                function(result) 
                { 
                    this._ensureNavInfoCallback(result); 
                    callback(); 
                } );
            $Carrera.CarreraServices.GetNavigationInfo(missing, f);
        }
    },

    _ensureNavInfoCallback: function(result) {
        /// <summary>
        /// Handles the navigation info returned from the webservice.
        /// </summary>
        if (result)
        {
            var data = Sys.Serialization.JavaScriptSerializer.deserialize(result);
            var ni = this._navInfo;
            for (var id in data) {
                ni[id] = data[id];
            }
        }
    },
    
    _initLinks: function() {
        /// <summary>
        /// Traverses all links and initializes them.
        /// This means that navigation info exist and that the click event is hooked up.
        /// </summary>
        var links = document.getElementsByTagName('a');
        var pages = [];
        var newLinks = [];
        var link;
        var re = this._linkRegex;
        for (var i=0; i<links.length; i++) {
            link = links[i];
            if (typeof link.page === "undefined") {
                if (link.rel == "ajaxcontentlink" &&  re.test(link.href)) {
                    var id = link.href.replace(re,'$2');
                    link.page = id;
                    newLinks.push(link);
                    pages.push(id);
                }
            }
        }

        if (pages.length > 0) {
            this._ensureNavInfo(pages, Function.createDelegate(this, function(){this._addClickHandlers(newLinks);}) );
        }
        else { // All links are already initialized
            this._onLinksInitialized(null);
        }
    },
    
    _addClickHandlers: function(links) {
        /// <summary>
        /// Adds click handlers to all given links.
        /// Raises the linksInitialized event
        /// </summary>
        for (var i=0; i<links.length; i++) {
            $addHandler(links[i], 'click', this._linkClick$delegate);
        }
        this._onLinksInitialized(null);
    },
    
    //-- EVENTS --//
    add_linksInitialized: function(handler) {
        /// <summary>Adds a event handler for the linksInitialized event.</summary>
        /// <param name="handler" type="Function">The handler to add to the event.</param>
        this.get_events().addHandler("linksInit", handler);
    },
    remove_linksInitialized: function(handler) {
        /// <summary>Removes a event handler for the linksInitialized event.</summary>
        /// <param name="handler" type="Function">The handler to remove from the event.</param>
        this.get_events().removeHandler("linksInit", handler);
    },

    add_transitionStart: function(handler) {
        /// <summary>Adds a event handler for the transitionStart event.</summary>
        /// <param name="handler" type="Function">The handler to add to the event.</param>
        this.get_events().addHandler("transStart", handler);
    },
    remove_transitionStart: function(handler) {
        /// <summary>Removes a event handler for the transitionStart event.</summary>
        /// <param name="handler" type="Function">The handler to remove from the event.</param>
        this.get_events().removeHandler("transStart", handler);
    },

    add_transitionEnd: function(handler) {
        /// <summary>Adds a event handler for the transitionEnd event.</summary>
        /// <param name="handler" type="Function">The handler to add to the event.</param>
        this.get_events().addHandler("transEnd", handler);
    },
    remove_transitionEnd: function(handler) {
        /// <summary>Removes a event handler for the transitionEnd event.</summary>
        /// <param name="handler" type="Function">The handler to remove from the event.</param>
        this.get_events().removeHandler("transEnd", handler);
    },

    add_contentWidthChanged: function(handler) {
        /// <summary>Adds a event handler for the contentWidthChanged event.</summary>
        /// <param name="handler" type="Function">The handler to add to the event.</param>
        this.get_events().addHandler("width", handler);
    },
    remove_contentWidthChanged: function(handler) {
        /// <summary>Removes a event handler for the contentWidthChanged event.</summary>
        /// <param name="handler" type="Function">The handler to remove from the event.</param>
        this.get_events().removeHandler("width", handler);
    },
    
    _onLinksInitialized: function(e) {
        var handler = this.get_events().getHandler("linksInit");
        if (handler) {
            handler(this, e);
        }
    },
        
    _onTransitionStart: function(e) {
        var handler = this.get_events().getHandler("transStart");
        if (handler) {
            handler(this, e);
        }
    },

    _onContentWidthChanged: function(e) {
        var handler = this.get_events().getHandler("width");
        if (handler) {
            handler(this, e);
        }
    },

    _onTransitionEnd: function(e) {
        var handler = this.get_events().getHandler("transEnd");
        if (handler) {
            handler(this, e);
        }
    },
            
    //-- PROPERTIES --//
    get_options: function() {
        /// <value type="Object">Options object.</value>
        return null;
    },
    set_options: function(value) {
        this._target = value.target;
        this._editMode = value.editMode;
        this._currentStateField = value.currentStateField;
        this._currentPage = value.currentPage;
        this._startPage = value.startPage;
        this._loginPage = value.loginPage;
        this._delay = value.delay;
        this._title = value.title;
        this._enableHistory = value.enableHistory;
    },
    get_currentPage: function() {
        /// <value type="String">Current page id.</value>
        return this._currentPage;
    },
    set_currentPage: function(value) {
        this._currentPage = value;
    },
    get_currentState: function() {
        /// <value type="String">Current page state formatted as a querystring.</value>
        return this._currentStateField.value;
    },
    set_currentState: function(value) {
        this._currentStateField.value = value;
    },
    test_test: function(s) {
        alert(s);
    }
}

$Carrera.NavigationManager.registerClass("Jm.Carrera.Framework.UI.NavigationManager", Sys.Component);

//END Jm.Carrera.Framework.UI.Resources.NavigationManager.js
//START Jm.Carrera.Framework.UI.Resources.CardStackNavigator.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.CardStackNavigator = function(element)
{
	this._stateControl = null;
	this._items = [];
	this._itemSettings = null;
	this._activeIndex = -1;
	this._appLoad$delegate = Function.createDelegate(this,this._appLoad);
    $Carrera.CardStackNavigator.initializeBase(this,[element]);
}

$Carrera.CardStackNavigator.prototype = 
{
    initialize: function() {
        $Carrera.CardStackNavigator.callBaseMethod(this, "initialize");
	    Sys.Application.add_load(this._appLoad$delegate);
    	this._activeIndex = this._stateControl.value;
	    if (this._itemSettings) {
    	    var s = this._itemSettings;
	        for (var i=0; i<s.length; i++) {
	            var p = { index: i, navigator: this, settings: s[i], active: i == this._activeIndex };
	            var item = $create($Carrera.CardStackNavigatorItem, p, null, null, $get(s[i].elementId));
		        Array.add(this._items, item);
            }
	    }
    },

    dispose: function() {
        Sys.Application.remove_load(this._appLoad$delegate);
        $Carrera.CardStackNavigator.callBaseMethod(this, "dispose");
    },
    
    _appLoad: function(s,e) {
        if (this._activeIndex != this._stateControl.value) {
            this.set_activeIndex(this._stateControl.value);
        }
    },
    
    _onActiveIndexChanged: function(e) {
        var handler = this.get_events().getHandler("activeIndex");
        if (handler) {
            handler(this, e);
        }
    },
    
    /// EVENTS ///
    add_activeIndexChanged: function(handler) {
        this.get_events().addHandler("activeIndex", handler);
    },
    remove_activeIndexChanged: function(handler) {
        this.get_events().removeHandler("activeIndex", handler);
    },

    /// PROPERTIES ///
    get_options: function() {
        return null;
    },
    set_options: function(value) {
    	this._stateControl = $get(value.stateControl);
    	this._itemSettings = value.itemSettings;
    },
    
    get_activeIndex: function() {
        return this._activeIndex;
    },
    set_activeIndex: function(value) {
		var current = this._activeIndex;
		if (value != current) {
	        this._items[current].set_active(false);
		    // TODO: Check bounds
	        this._items[value].set_active(true);
            this._stateControl.value = value;
            this._activeIndex = value;
            this._onActiveIndexChanged(value);
		}
    }
}

$Carrera.CardStackNavigator.registerClass("Jm.Carrera.Framework.UI.CardStackNavigator", Sys.UI.Control);


$Carrera.CardStackNavigatorItem = function(element)
{
    this._settings = null;
	this._navigator	= null;
	this._index = -1;
	this._panel = null;
	this._onClick$delegate = Function.createDelegate(this,this._onClick);
	this._onMouseOver$delegate = Function.createDelegate(this,this._onMouseOver);
	this._onMouseOut$delegate = Function.createDelegate(this,this._onMouseOut);
	
    $Carrera.CardStackNavigatorItem.initializeBase(this,[element]);
}

$Carrera.CardStackNavigatorItem.prototype = 
{
    initialize: function() {
        $Carrera.CardStackNavigatorItem.callBaseMethod(this, "initialize");
	    $addHandler(this.get_element(), "mouseover", this._onMouseOver$delegate); 
	    $addHandler(this.get_element(), "mouseout", this._onMouseOut$delegate); 
        $addHandler(this.get_element(), "click", this._onClick$delegate); 
    },

    dispose: function() {
	    $removeHandler(this.get_element(), "mouseover", this._onMouseOver$delegate); 
	    $removeHandler(this.get_element(), "mouseout", this._onMouseOut$delegate); 
        $removeHandler(this.get_element(), "click", this._onClick$delegate); 
        $Carrera.CardStackNavigatorItem.callBaseMethod(this, "dispose");
    },
    
    _onClick: function(e) {
        if(this._settings.canSwitchView == "True") {
            this._navigator.set_activeIndex(this._index);
        }
	},
	
    _onMouseOver: function(e) {
        Sys.UI.DomElement.addCssClass(this.get_element(), this._settings.hoverCss);
    },
    
    _onMouseOut: function(e) {
        Sys.UI.DomElement.removeCssClass(this.get_element(), this._settings.hoverCss);
    },
    
    /// PROPERTIES ///
    get_panel: function() {
        if (!this._panel) {
            this._panel = $get(this._settings.panelId)
        }
        return this._panel;
    },

    get_index: function() {
        return this._index;
    },
    set_index: function(value) {
        this._index = value;
    },

    get_navigator: function() {
        return this._navigator;
    },
    set_navigator: function(value) {
        this._navigator = value;
    },
    
    get_settings: function() {
        return this._settings;
    },
    set_settings: function(value) {
        this._settings = value;
    },
            
    get_active: function() {
        return this._navigator.get_activeIndex() == this._index;
    },
    set_active: function(value) {
        if (value) {
            Sys.UI.DomElement.addCssClass(this.get_element(), this._settings.activeCss);
        } 
        else {
            Sys.UI.DomElement.removeCssClass(this.get_element(), this._settings.activeCss);
        }
        var panel = this.get_panel();
		if (panel) 
        {
            panel.style.display = value ? 'block' : 'none'; 
        }
    }
}

$Carrera.CardStackNavigatorItem.registerClass("Jm.Carrera.Framework.UI.CardStackNavigatorItem", Sys.UI.Control);
//END Jm.Carrera.Framework.UI.Resources.CardStackNavigator.js
//START AjaxControlToolkit.ExtenderBase.BaseScripts.js
Type.registerNamespace('AjaxControlToolkit');AjaxControlToolkit.BehaviorBase = function(element) {
AjaxControlToolkit.BehaviorBase.initializeBase(this,[element]);this._clientStateFieldID = null;this._pageRequestManager = null;this._partialUpdateBeginRequestHandler = null;this._partialUpdateEndRequestHandler = null;}
AjaxControlToolkit.BehaviorBase.prototype = {
initialize : function() {
AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'initialize');},
dispose : function() {
AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'dispose');if (this._pageRequestManager) {
if (this._partialUpdateBeginRequestHandler) {
this._pageRequestManager.remove_beginRequest(this._partialUpdateBeginRequestHandler);this._partialUpdateBeginRequestHandler = null;}
if (this._partialUpdateEndRequestHandler) {
this._pageRequestManager.remove_endRequest(this._partialUpdateEndRequestHandler);this._partialUpdateEndRequestHandler = null;}
this._pageRequestManager = null;}
},
get_ClientStateFieldID : function() {
return this._clientStateFieldID;},
set_ClientStateFieldID : function(value) {
if (this._clientStateFieldID != value) {
this._clientStateFieldID = value;this.raisePropertyChanged('ClientStateFieldID');}
},
get_ClientState : function() {
if (this._clientStateFieldID) {
var input = document.getElementById(this._clientStateFieldID);if (input) {
return input.value;}
}
return null;},
set_ClientState : function(value) {
if (this._clientStateFieldID) {
var input = document.getElementById(this._clientStateFieldID);if (input) {
input.value = value;}
}
},
registerPartialUpdateEvents : function() {
if (Sys && Sys.WebForms && Sys.WebForms.PageRequestManager){
this._pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();if (this._pageRequestManager) {
this._partialUpdateBeginRequestHandler = Function.createDelegate(this, this._partialUpdateBeginRequest);this._pageRequestManager.add_beginRequest(this._partialUpdateBeginRequestHandler);this._partialUpdateEndRequestHandler = Function.createDelegate(this, this._partialUpdateEndRequest);this._pageRequestManager.add_endRequest(this._partialUpdateEndRequestHandler);}
}
},
_partialUpdateBeginRequest : function(sender, beginRequestEventArgs) {
},
_partialUpdateEndRequest : function(sender, endRequestEventArgs) {
}
}
AjaxControlToolkit.BehaviorBase.registerClass('AjaxControlToolkit.BehaviorBase', Sys.UI.Behavior);AjaxControlToolkit.DynamicPopulateBehaviorBase = function(element) {
AjaxControlToolkit.DynamicPopulateBehaviorBase.initializeBase(this, [element]);this._DynamicControlID = null;this._DynamicContextKey = null;this._DynamicServicePath = null;this._DynamicServiceMethod = null;this._cacheDynamicResults = false;this._dynamicPopulateBehavior = null;this._populatingHandler = null;this._populatedHandler = null;}
AjaxControlToolkit.DynamicPopulateBehaviorBase.prototype = {
initialize : function() {
AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'initialize');this._populatingHandler = Function.createDelegate(this, this._onPopulating);this._populatedHandler = Function.createDelegate(this, this._onPopulated);},
dispose : function() {
if (this._populatedHandler) {
if (this._dynamicPopulateBehavior) {
this._dynamicPopulateBehavior.remove_populated(this._populatedHandler);}
this._populatedHandler = null;}
if (this._populatingHandler) {
if (this._dynamicPopulateBehavior) {
this._dynamicPopulateBehavior.remove_populating(this._populatingHandler);}
this._populatingHandler = null;}
if (this._dynamicPopulateBehavior) {
this._dynamicPopulateBehavior.dispose();this._dynamicPopulateBehavior = null;}
AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'dispose');},
populate : function(contextKeyOverride) {
if (this._dynamicPopulateBehavior && (this._dynamicPopulateBehavior.get_element() != $get(this._DynamicControlID))) {
this._dynamicPopulateBehavior.dispose();this._dynamicPopulateBehavior = null;}
if (!this._dynamicPopulateBehavior && this._DynamicControlID && this._DynamicServiceMethod) {
this._dynamicPopulateBehavior = $create(AjaxControlToolkit.DynamicPopulateBehavior,
{
"id" : this.get_id() + "_DynamicPopulateBehavior",
"ContextKey" : this._DynamicContextKey,
"ServicePath" : this._DynamicServicePath,
"ServiceMethod" : this._DynamicServiceMethod,
"cacheDynamicResults" : this._cacheDynamicResults
}, null, null, $get(this._DynamicControlID));this._dynamicPopulateBehavior.add_populating(this._populatingHandler);this._dynamicPopulateBehavior.add_populated(this._populatedHandler);}
if (this._dynamicPopulateBehavior) {
this._dynamicPopulateBehavior.populate(contextKeyOverride ? contextKeyOverride : this._DynamicContextKey);}
},
_onPopulating : function(sender, eventArgs) {
this.raisePopulating(eventArgs);},
_onPopulated : function(sender, eventArgs) {
this.raisePopulated(eventArgs);},
get_dynamicControlID : function() {
return this._DynamicControlID;},
get_DynamicControlID : this.get_dynamicControlID,
set_dynamicControlID : function(value) {
if (this._DynamicControlID != value) {
this._DynamicControlID = value;this.raisePropertyChanged('dynamicControlID');this.raisePropertyChanged('DynamicControlID');}
},
set_DynamicControlID : this.set_dynamicControlID,
get_dynamicContextKey : function() {
return this._DynamicContextKey;},
get_DynamicContextKey : this.get_dynamicContextKey,
set_dynamicContextKey : function(value) {
if (this._DynamicContextKey != value) {
this._DynamicContextKey = value;this.raisePropertyChanged('dynamicContextKey');this.raisePropertyChanged('DynamicContextKey');}
},
set_DynamicContextKey : this.set_dynamicContextKey,
get_dynamicServicePath : function() {
return this._DynamicServicePath;},
get_DynamicServicePath : this.get_dynamicServicePath,
set_dynamicServicePath : function(value) {
if (this._DynamicServicePath != value) {
this._DynamicServicePath = value;this.raisePropertyChanged('dynamicServicePath');this.raisePropertyChanged('DynamicServicePath');}
},
set_DynamicServicePath : this.set_dynamicServicePath,
get_dynamicServiceMethod : function() {
return this._DynamicServiceMethod;},
get_DynamicServiceMethod : this.get_dynamicServiceMethod,
set_dynamicServiceMethod : function(value) {
if (this._DynamicServiceMethod != value) {
this._DynamicServiceMethod = value;this.raisePropertyChanged('dynamicServiceMethod');this.raisePropertyChanged('DynamicServiceMethod');}
},
set_DynamicServiceMethod : this.set_dynamicServiceMethod,
get_cacheDynamicResults : function() {
return this._cacheDynamicResults;},
set_cacheDynamicResults : function(value) {
if (this._cacheDynamicResults != value) {
this._cacheDynamicResults = value;this.raisePropertyChanged('cacheDynamicResults');}
},
add_populated : function(handler) {
this.get_events().addHandler("populated", handler);},
remove_populated : function(handler) {
this.get_events().removeHandler("populated", handler);},
raisePopulated : function(arg) {
var handler = this.get_events().getHandler("populated");if (handler) handler(this, arg);},
add_populating : function(handler) {
this.get_events().addHandler('populating', handler);},
remove_populating : function(handler) {
this.get_events().removeHandler('populating', handler);},
raisePopulating : function(eventArgs) {
var handler = this.get_events().getHandler('populating');if (handler) {
handler(this, eventArgs);}
}
}
AjaxControlToolkit.DynamicPopulateBehaviorBase.registerClass('AjaxControlToolkit.DynamicPopulateBehaviorBase', AjaxControlToolkit.BehaviorBase);AjaxControlToolkit.ControlBase = function(element) {
AjaxControlToolkit.ControlBase.initializeBase(this, [element]);this._clientStateField = null;this._callbackTarget = null;this._onsubmit$delegate = Function.createDelegate(this, this._onsubmit);this._oncomplete$delegate = Function.createDelegate(this, this._oncomplete);this._onerror$delegate = Function.createDelegate(this, this._onerror);}
AjaxControlToolkit.ControlBase.prototype = {
initialize : function() {
AjaxControlToolkit.ControlBase.callBaseMethod(this, "initialize");if (this._clientStateField) {
this.loadClientState(this._clientStateField.value);}
if (typeof(Sys.WebForms)!=="undefined" && typeof(Sys.WebForms.PageRequestManager)!=="undefined") {
Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);} else {
$addHandler(document.forms[0], "submit", this._onsubmit$delegate);}
},
dispose : function() {
if (typeof(Sys.WebForms)!=="undefined" && typeof(Sys.WebForms.PageRequestManager)!=="undefined") {
Array.remove(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate);} else {
$removeHandler(document.forms[0], "submit", this._onsubmit$delegate);}
AjaxControlToolkit.ControlBase.callBaseMethod(this, "dispose");},
findElement : function(id) {
return $get(this.get_id() + '_' + id.split(':').join('_'));},
get_clientStateField : function() {
return this._clientStateField;},
set_clientStateField : function(value) {
if (this.get_isInitialized()) throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_CannotSetClientStateField);if (this._clientStateField != value) {
this._clientStateField = value;this.raisePropertyChanged('clientStateField');}
},
loadClientState : function(value) {
},
saveClientState : function() {
return null;},
_invoke : function(name, args, cb) {
if (!this._callbackTarget) {
throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_ControlNotRegisteredForCallbacks);}
if (typeof(WebForm_DoCallback)==="undefined") {
throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_PageNotRegisteredForCallbacks);}
var ar = [];for (var i = 0;i < args.length;i++) 
ar[i] = args[i];var clientState = this.saveClientState();if (clientState != null && !String.isInstanceOfType(clientState)) {
throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_InvalidClientStateType);}
var payload = Sys.Serialization.JavaScriptSerializer.serialize({name:name,args:ar,state:this.saveClientState()});WebForm_DoCallback(this._callbackTarget, payload, this._oncomplete$delegate, cb, this._onerror$delegate, true);},
_oncomplete : function(result, context) {
result = Sys.Serialization.JavaScriptSerializer.deserialize(result);if (result.error) {
throw Error.create(result.error);}
this.loadClientState(result.state);context(result.result);},
_onerror : function(message, context) {
throw Error.create(message);},
_onsubmit : function() {
if (this._clientStateField) {
this._clientStateField.value = this.saveClientState();}
return true;} 
}
AjaxControlToolkit.ControlBase.registerClass("AjaxControlToolkit.ControlBase", Sys.UI.Control);
AjaxControlToolkit.Resources={
"PasswordStrength_InvalidWeightingRatios":"Strength Weighting ratios must have 4 elements","Animation_ChildrenNotAllowed":"AjaxControlToolkit.Animation.createAnimation cannot add child animations to type \"{0}\" that does not derive from AjaxControlToolkit.Animation.ParentAnimation","PasswordStrength_RemainingSymbols":"{0} symbol characters","ExtenderBase_CannotSetClientStateField":"clientStateField can only be set before initialization","Animation_TargetNotFound":"AjaxControlToolkit.Animation.Animation.set_animationTarget requires the ID of a Sys.UI.DomElement or Sys.UI.Control.  No element or control could be found corresponding to \"{0}\"","Common_InvalidBorderWidthUnit":"A unit type of \"{0}\"\u0027 is invalid for parseBorderWidth","Tabs_PropertySetBeforeInitialization":"{0} cannot be changed before initialization","ReorderList_DropWatcherBehavior_NoChild":"Could not find child of list with id \"{0}\"","CascadingDropDown_MethodTimeout":"[Method timeout]","ExtenderBase_PageNotRegisteredForCallbacks":"This Page has not been registered for callbacks","Animation_NoDynamicPropertyFound":"AjaxControlToolkit.Animation.createAnimation found no property corresponding to \"{0}\" or \"{1}\"","Animation_InvalidBaseType":"AjaxControlToolkit.Animation.registerAnimation can only register types that inherit from AjaxControlToolkit.Animation.Animation","ResizableControlBehavior_InvalidHandler":"{0} handler not a function, function name, or function text","Animation_InvalidColor":"Color must be a 7-character hex representation (e.g. #246ACF), not \"{0}\"","PasswordStrength_RemainingMixedCase":"Mixed case characters","CascadingDropDown_NoParentElement":"Failed to find parent element \"{0}\"","ValidatorCallout_DefaultErrorMessage":"This control is invalid","ReorderList_DropWatcherBehavior_CallbackError":"Reorder failed, see details below.\\r\\n\\r\\n{0}","PopupControl_NoDefaultProperty":"No default property supported for control \"{0}\" of type \"{1}\"","PopupExtender_NoParentElement":"Couldn\u0027t find parent element \"{0}\"","PasswordStrength_RemainingNumbers":"{0} more numbers","ResizableControlBehavior_CannotChangeProperty":"Changes to {0} not supported","Common_InvalidPaddingUnit":"A unit type of \"{0}\" is invalid for parsePadding","ExtenderBase_ControlNotRegisteredForCallbacks":"This Control has not been registered for callbacks","Calendar_Today":"Today: {0}","Common_DateTime_InvalidFormat":"Invalid format","ListSearch_DefaultPrompt":"Type to search","CollapsiblePanel_NoControlID":"Failed to find element \"{0}\"","PasswordStrength_DefaultStrengthDescriptions":"NonExistent;Very Weak;Weak;Poor;Almost OK;Barely Acceptable;Average;Good;Strong;Excellent;Unbreakable!","Animation_UknownAnimationName":"AjaxControlToolkit.Animation.createAnimation could not find an Animation corresponding to the name \"{0}\"","ExtenderBase_InvalidClientStateType":"saveClientState must return a value of type String","Rating_CallbackError":"An unhandled exception has occurred:\\r\\n{0}","Tabs_OwnerExpected":"owner must be set before initialize","DynamicPopulate_WebServiceTimeout":"Web service call timed out","Animation_MissingAnimationName":"AjaxControlToolkit.Animation.createAnimation requires an object with an AnimationName property","Tabs_ActiveTabArgumentOutOfRange":"Argument is not a member of the tabs collection","AlwaysVisible_ElementRequired":"AjaxControlToolkit.AlwaysVisibleControlBehavior must have an element","Slider_NoSizeProvided":"Please set valid values for the height and width attributes in the slider\u0027s CSS classes","DynamicPopulate_WebServiceError":"Web Service call failed: {0}","PasswordStrength_StrengthPrompt":"Strength: ","PasswordStrength_RemainingCharacters":"{0} more characters","PasswordStrength_Satisfied":"Nothing more required","Animation_NoPropertyFound":"AjaxControlToolkit.Animation.createAnimation found no property corresponding to \"{0}\"","PasswordStrength_InvalidStrengthDescriptionStyles":"Text Strength description style classes must match the number of text descriptions.","PasswordStrength_GetHelpRequirements":"Get help on password requirements","PasswordStrength_InvalidStrengthDescriptions":"Invalid number of text strength descriptions specified","Tabs_PropertySetAfterInitialization":"{0} cannot be changed after initialization","CascadingDropDown_MethodError":"[Method error {0}]","Common_UnitHasNoDigits":"No digits","Common_DateTime_InvalidTimeSpan":"\"{0}\" is not a valid TimeSpan format","Animation_CannotNestSequence":"AjaxControlToolkit.Animation.SequenceAnimation cannot be nested inside AjaxControlToolkit.Animation.ParallelAnimation","Shared_BrowserSecurityPreventsPaste":"Your browser security settings don\u0027t permit the automatic execution of paste operations. Please use the keyboard shortcut Ctrl+V instead."};
//END AjaxControlToolkit.ExtenderBase.BaseScripts.js
//START Jm.Carrera.Framework.UI.Resources.AutoLogOutBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.AutoLogOutBehavior = function(element) 
{
   
    this._countdowntime = 15;
    this._logouturl = '';
    this._enabled = false;
    this.CountDown$delegate = Function.createDelegate(this,this._countDown);
    $Carrera.AutoLogOutBehavior.initializeBase(this, [element]);
    
}

$Carrera.AutoLogOutBehavior.prototype = 
{
    //Properties
    get_countdowntime : function() {
        return this._countdowntime;
    },
    set_countdowntime : function(value) {
        this._countdowntime = value;
    },
    
    get_enabled : function() {
        return this._enabled;
    },
    set_enabled : function(value) {
        this._enabled = value;
    },
    
    get_logouturl : function(value) {
        return this._logouturl;
    },
    set_logouturl : function(value) {
        this._logouturl = value;
    },
    
    initialize : function()
    {
        $Carrera.AutoLogOutBehavior.callBaseMethod(this, 'initialize');
        
        //Create a countdowntimer...
        if(this._enabled)
        {
            setInterval(Function.createDelegate(this, this._countDown),60*1000);
        }
    },

    _countDown : function() {
        if(this._countdowntime-- == 0)
        {
            document.location.href = this._logouturl;
        }
        else
        {
            window.status = this._countdowntime +" minuter till utloggning p\u00E5 grund av inaktivitet";
        }
    }
}
$Carrera.AutoLogOutBehavior.registerClass('Jm.Carrera.Framework.UI.AutoLogOutBehavior', AjaxControlToolkit.BehaviorBase);

//END Jm.Carrera.Framework.UI.Resources.AutoLogOutBehavior.js
//START Jm.Carrera.Framework.UI.Resources.ScrollPositionBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.ScrollPositionBehavior = function(element) 
{
    this._setScroll$delegate = Function.createDelegate(this,this._setScroll);
    this._onScroll$delegate = Function.createDelegate(this,this._onScroll);
    $Carrera.ScrollPositionBehavior.initializeBase(this, [element]);
}

$Carrera.ScrollPositionBehavior.prototype = 
{
    initialize : function() {
        $Carrera.ScrollPositionBehavior.callBaseMethod(this, 'initialize');
        Sys.Application.add_load(this._setScroll$delegate);
        $addHandler(this.get_element(), "scroll", this._onScroll$delegate);
    },

    dispose : function() {
        $removeHandler(this.get_element(), "scroll", this._onScroll$delegate);
        Sys.Application.remove_load(this._setScroll$delegate);
        $Carrera.ScrollPositionBehavior.callBaseMethod(this, 'dispose');
    },

    _setScroll : function() {

        var scrollPos = $Carrera.ScrollPositionBehavior.callBaseMethod(this, 'get_ClientState');                        
        if (scrollPos && scrollPos != "") {
            this.get_element().scrollTop = scrollPos;
        }
    },

    _onScroll : function() {
        var scrollPos = this.get_element().scrollTop;
        $Carrera.ScrollPositionBehavior.callBaseMethod(this, 'set_ClientState', [scrollPos]);                        
    }

}
$Carrera.ScrollPositionBehavior.registerClass('Jm.Carrera.Framework.UI.ScrollPositionBehavior', AjaxControlToolkit.BehaviorBase);

//END Jm.Carrera.Framework.UI.Resources.ScrollPositionBehavior.js
//START Jm.Carrera.Framework.UI.Resources.PanelBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.PanelBehavior = function(element) 
{
    $Carrera.PanelBehavior.initializeBase(this, [element]);
    this._manager = null;
    this._managerId = null;
}

$Carrera.PanelBehavior.prototype = 
{
    get_manager : function() {
        return this._manager;
    },
    
    get_managerId : function() {
        return this._managerId;
    },
    set_managerId : function(value) {
        if (this._managerId != value) {
            this._managerId = value;
            this._manager = $find(this._managerId);
        }
    }
}

$Carrera.PanelBehavior.registerClass('Jm.Carrera.Framework.UI.PanelBehavior', AjaxControlToolkit.BehaviorBase);

//END Jm.Carrera.Framework.UI.Resources.PanelBehavior.js
//START Jm.Carrera.Framework.UI.Resources.SearchPanelBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.SearchPanelBehavior = function(element) {
    $Carrera.SearchPanelBehavior.initializeBase(this, [element]);
    this._initialized = false;
    this._collapsedHeight = 25;
    this._expandedHeight = 425;
    this._expanded = false;
    this._intervalId = null;
    this._height = this._collapsedHeight;
    this._targetHeight = this._collapsedHeight;
    this._innerElement = null;
    this._expandedContent = null;
    this._resize$delegate = Function.createDelegate(this,this._resize);
    this._toggle$delegate = Function.createDelegate(this,this.toggle);
    this._onTransitionStart$delegate = Function.createDelegate(this,this._onTransitionStart);
    this._onContentWidthChanged$delegate = Function.createDelegate(this,this._onContentWidthChanged);
}

$Carrera.SearchPanelBehavior.prototype = {
    /// PROPERTIES ///
    get_collapsedHeight : function() {
        return this._collapsedHeight;
    },
    set_collapsedHeight : function(value) {
        this._collapsedHeight = value;
    },
    
    get_expandedHeight : function() {
        return this._expandedHeight;
    },
    set_expandedHeight : function(value) {
        this._expandedHeight = value;
    },

    get_innerElement : function() {
        return this._innerElement;
    },
    set_innerElement : function(value) {
        this._innerElement = value;
    },

    get_expandedContent : function() {
        return this._expandedContent;
    },
    set_expandedContent : function(value) {
        this._expandedContent = value;
    },
    
    get_expanded : function() {
        return this._expanded;
    },
    set_expanded : function(value) {
        if (this._expanded != value && this._initialized) {
            if (value) { this._expand(); }
            else { this._collapse(); }
        }
        this._expanded = value;
    },

    /// METHODS ///
    initialize : function() {
        $Carrera.SearchPanelBehavior.callBaseMethod(this, 'initialize');
        var m = this.get_manager();
        m.add_transitionStart(this._onTransitionStart$delegate);
        m.add_contentWidthChanged(this._onContentWidthChanged$delegate);
        if (this.get_expanded()) {
            this._expand();
        }
        this._initialized = true;
    },
    
    dispose : function() {
        var m = this.get_manager();
        m.remove_transitionStart(this._onTransitionStart$delegate);
        m.remove_contentWidthChanged(this._onContentWidthChanged$delegate);
        $Carrera.SearchPanelBehavior.callBaseMethod(this, 'dispose');
    },

    toggle: function()
    {
        this.set_expanded(!this.get_expanded());
    },
    
    _expand: function()
    {
        this._stopResize();
	    if(this._height < this._expandedHeight)
	    {
		    this._targetHeight = this._expandedHeight;
    	    this._intervalId = setInterval(this._resize$delegate, 20);
        }
        //this._expandedContent.style.display = 'block'; 
    },
    
    _collapse: function()
    {
        this._stopResize();
	    if(this._height > this._collapsedHeight)
	    {
		    this._targetHeight = this._collapsedHeight;
    	    this._intervalId = setInterval(this._resize$delegate, 20);
        }
        this._expandedContent.style.display = 'none';

    },

    _onTransitionStart: function(sender, e) 
    {
        this.set_expanded(false);
    },
    
    _onContentWidthChanged: function(sender, e) 
    {
        this.get_element().style.width = e + 'px';
    },

    _stopResize: function()
    {
        if (this._intervalId) {
	        clearInterval(this._intervalId);
	        this._intervalId = null;
	    }
    },

    _resize: function()
    {
	    this._height = this._height + ((this._targetHeight - this._height) / 3);
	    this._innerElement.style.height = Math.round(this._height) + 'px';

        if (Math.round(this._height) == this._targetHeight) {
	        this._stopResize();
            this._height = this._targetHeight;
            if(this._expanded)
            {
                this._expandedContent.style.display = 'block';
            }
        }
    }
}

$Carrera.SearchPanelBehavior.registerClass('Jm.Carrera.Framework.UI.SearchPanelBehavior', Jm.Carrera.Framework.UI.PanelBehavior);

//END Jm.Carrera.Framework.UI.Resources.SearchPanelBehavior.js
//START Jm.Carrera.Framework.UI.Resources.FlashPanelBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.FlashPanelBehavior = function(element) {
    $Carrera.FlashPanelBehavior.initializeBase(this, [element]);
    this._objectId = null;
    this._flashObject = null;
    this._manResize$delegate = null;
    this._onTransitionStart$delegate = Function.createDelegate(this,this._onTransitionStart);
}

$Carrera.FlashPanelBehavior.prototype = {
    initialize : function() {
        $Carrera.FlashPanelBehavior.callBaseMethod(this, 'initialize');
        var m = this.get_manager();
        if (m) {
            m.add_transitionStart(this._onTransitionStart$delegate);
            this._manResize$delegate = Function.createDelegate(m,m.setContentWidth);
        
            // Setup flash interface
            $Carrera.FlashPanelBehavior.Resize = Function.createDelegate(this,this._resize);
            $Carrera.FlashPanelBehavior.ResizeCompleted = Function.createDelegate(m,m.contentResizeCompleted);
            $Carrera.FlashPanelBehavior.SetFlashSize = Function.createDelegate(this,this._setFlashSize);
            $Carrera.FlashPanelBehavior.Navigate = Function.createDelegate(m,m.navigate);
            
        }
    },

    dispose : function() {
        var m = this.get_manager();
        if (m) {
            m.remove_transitionStart(this._onTransitionStart$delegate);
        }
        $Carrera.FlashPanelBehavior.callBaseMethod(this, 'dispose');
    },
    
    _onTransitionStart: function(sender, args) {
        this._loadFlash(args.id, args.flashid, args.file, args.width, args.height, args.carousel);
    },
    
    _resize: function(width, height) {
        var e = this.get_element();
        e.style.width = width + 'px';
        e.style.height = height + 'px';
        this._manResize$delegate(width);
    },
    
    _setFlashSize: function(width, height) {
        var flash = this.get_flashObject();
        if (flash && flash.height && flash.height < height ) {
            flash.height = height;
        }
        this._resize(width, height);
    },
            
    _loadFlash: function (id, flashid, file, width, height, carousel) {
        var flash = this.get_flashObject();
        if (flash && flash.height) {
            if (flash.height < height) {
                flash.height = height;
            }
            flash.SetContentSize(width, height);
            flash.LoadContent(file, flashid, id);
            
            if (carousel == "true") {
                flash.LoadCarousel(id);
            } else {
                flash.RemoveCarousel();
            }
        }
        else {
            this._resize(width, height);
            $Carrera.FlashPanelBehavior.ResizeCompleted();
        }
    },
    
    get_flashObject: function() {
        if (this._flashObject == null) {
	        this._flashObject = document[this.get_objectId()] || window[this.get_objectId()];
        }
        return this._flashObject;
    },
    get_CarouselId: function() {
        return this.get_manager().get_currentPage();
    },
    get_objectId: function() {
        return this._objectId;
    },
    set_objectId: function(value) {
        this._objectId = value;
    }
}

$Carrera.FlashPanelBehavior.Resize = function() {};
$Carrera.FlashPanelBehavior.ResizeCompleted = function() {};
$Carrera.FlashPanelBehavior.SetFlashSize = function() {};
$Carrera.FlashPanelBehavior.Navigate = function() {};

$Carrera.FlashPanelBehavior.registerClass('Jm.Carrera.Framework.UI.FlashPanelBehavior', Jm.Carrera.Framework.UI.PanelBehavior);
//END Jm.Carrera.Framework.UI.Resources.FlashPanelBehavior.js
//START Jm.Carrera.Framework.UI.Resources.ProjectSubMenuPanelBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.ProjectSubMenuPanelBehavior = function(element) {
    $Carrera.ProjectSubMenuPanelBehavior.initializeBase(this, [element]);
    this._container = null;
    this._pendingShow = false;
    this._visibilityLimit = 850; // Default value
    this._menuElement = null;
    this._menuRoots = [];
    this._onTransitionStart$delegate = Function.createDelegate(this,this._onTransitionStart);
    this._onTransitionEnd$delegate = Function.createDelegate(this,this._onTransitionEnd);
    this._initializeTree$delegate = Function.createDelegate(this,this._initializeTree);
}

$Carrera.ProjectSubMenuPanelBehavior.prototype = {
    initialize: function() {
        $Carrera.ProjectSubMenuPanelBehavior.callBaseMethod(this, 'initialize');
        var m = this.get_manager();
        if (m) {
            m.add_transitionStart(this._onTransitionStart$delegate);
            m.add_transitionEnd(this._onTransitionEnd$delegate);
            m.add_linksInitialized(this._initializeTree$delegate);
        }
    },

    dispose: function() {
        var m = this.get_manager();
        if (m) {
            m.remove_transitionStart(this._onTransitionStart$delegate);
            m.remove_transitionEnd(this._onTransitionEnd$delegate);
            m.remove_linksInitialized(this._initializeTree$delegate);
        }
        $Carrera.ProjectSubMenuPanelBehavior.callBaseMethod(this, 'dispose');
    },

    _onTransitionStart: function(sender, e) {
        if (e.width > this.get_visibilityLimit()) {
            this.get_container().style.display = 'none';
        } 
        else {
            this._pendingShow = true;
        }
    },
    
    _onTransitionEnd: function(sender, e) {
        if (this._pendingShow) {
            this.get_container().style.display = 'block';
            this._pendingShow = false;
        }
        //Minimize and expand panels...
        this.select(e.id);
    },
    
    _initializeTree: function() {
        var menuElement;
        var ulArr = this.get_element().getElementsByTagName("ul");
        for (var i=0;i<ulArr.length;i++) {
            menuElement = ulArr[i];
            // Create tree root on all top level roots (not nested ul)
            if (!menuElement.menu && menuElement.parentNode && menuElement.parentNode.tagName != "LI") {
                menuElement.menu = new $Carrera.MenuTree(menuElement);
                Array.add(this._menuRoots, menuElement);
            }
        }
        this.select(this.get_manager().get_currentPage());
    },
    
    select: function(pageId) {
        for (var i=0;i<this._menuRoots.length;i++) {
            if (this._menuRoots[i].menu) {
                this._menuRoots[i].menu.select(pageId);
            }
        }
    },
    
    //-- PROPERTIES --//
    get_container: function() {
        return this._container;
    },
    set_container: function(value) {
        this._container = value;
    },
    get_visibilityLimit: function() {
        return this._visibilityLimit;
    },
    set_visibilityLimit: function(value) {
        this._visibilityLimit = value;
    }
}

$Carrera.ProjectSubMenuPanelBehavior.registerClass('Jm.Carrera.Framework.UI.ProjectSubMenuPanelBehavior', Jm.Carrera.Framework.UI.PanelBehavior);

$Carrera.MenuTree = function(element, parent) {
    if (!element) {
        throw Error.argumentNull('element');
    }
    this._element = element;
    this._parent = parent;
    this._children = [];
    this.initialize();
}

$Carrera.MenuTree.prototype = {
    initialize: function() {
        var childNodes = this._element.childNodes;
        for (var i=0; i < childNodes.length; i++) {
            if (childNodes[i].tagName == "LI") {
                Array.add(this._children, new $Carrera.MenuNode(childNodes[i], this));
            }
        }
    },
    
    select: function(page) {
        Array.forEach(this._children, function(e,i,a) {e.select(page);}, this);
    },
    
    expandAncestors: function() {
        if (this._parent) {
            this._parent.expand();
        }
    }
    
}

$Carrera.MenuNode = function(element, parentTree) {
    if (!element) {
        throw Error.argumentNull('element');
    }
    this._element = element;
    this._parentTree = parentTree;
    this._link = null;
    this._childTree = null;
    this._selected = false;
    this.initialize();
}

$Carrera.MenuNode.prototype = {
    initialize: function() {
        var childNodes = this._element.childNodes;
        var node;
        for (var i=0; i < childNodes.length; i++) {
            node = childNodes[i];
            if (node.tagName == "A") {
                this._link = node;
            }
            else if (node.tagName == "UL") {
                this._childTree = new $Carrera.MenuTree(node, this);
                break;
            }
        }
        this.collapse();
    },

    select: function(page) {
        var isMatch = this.get_page() == page;

        if (isMatch) {
            Sys.UI.DomElement.addCssClass(this._element, 'sel');
            this.expand();
        } else {
            Sys.UI.DomElement.removeCssClass(this._element, 'sel');
            this.collapse();
        }
        if (this._childTree) {
            this._childTree.select(page);
        }
        return isMatch;
    },
    
    expand: function() {
        if (this._childTree) { 
            Sys.UI.DomElement.addCssClass(this._element, 'exp');
        }
        this._parentTree.expandAncestors();
    },
    
    collapse: function() {
        Sys.UI.DomElement.removeCssClass(this._element, 'exp');
    },

    get_page: function() {
        if (this._link && this._link.page) {
            return this._link.page;
        }
        return 0;
    },
    
    get_selected: function() {
        return this._selected;
    },
    set_selected: function(value) {
        this._selected = value;
    }
}
//END Jm.Carrera.Framework.UI.Resources.ProjectSubMenuPanelBehavior.js
//START Jm.Carrera.Framework.UI.Resources.ContentPanelBehavior.js
Type.registerNamespace('Jm.Carrera.Framework.UI');
if (typeof $Carrera == "undefined") { var $Carrera = Jm.Carrera.Framework.UI; }

$Carrera.ContentPanelBehavior = function(element) 
{
    $Carrera.ContentPanelBehavior.initializeBase(this, [element]);
    this._container = null;
    this._onTransitionStart$delegate = Function.createDelegate(this,this._onTransitionStart);
    this._onTransitionEnd$delegate = Function.createDelegate(this,this._onTransitionEnd);
}

$Carrera.ContentPanelBehavior.prototype = 
{
    initialize : function() {
        $Carrera.ContentPanelBehavior.callBaseMethod(this, 'initialize');
        var m = this.get_manager();
        m.add_transitionStart(this._onTransitionStart$delegate);
        m.add_transitionEnd(this._onTransitionEnd$delegate);
    },

    dispose : function() {
        $Carrera.ContentPanelBehavior.callBaseMethod(this, 'dispose');
    },

    _onTransitionStart: function(sender, e) {
        this._hide();
        this._resize(e.width);
    },
    
    _onTransitionEnd: function(sender, e) {
        this._show();
    },
    
    _hide: function() {
        var c = this.get_container();
        c.style.visibility = 'hidden';
        c.style.height = c.offsetHeight;
    },

    _show: function() {
        var c = this.get_container();
        c.style.visibility = 'visible';
        c.style.height = 'auto';
    },
        
    _resize: function(width) {
        this.get_container().style.width = width + 'px';
    },
    
    get_container: function() {
        return this._container;
    },
    set_container: function(value) {
        this._container = value;
    }
}

$Carrera.ContentPanelBehavior.registerClass('Jm.Carrera.Framework.UI.ContentPanelBehavior', Jm.Carrera.Framework.UI.PanelBehavior);
//END Jm.Carrera.Framework.UI.Resources.ContentPanelBehavior.js
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();
(function() {var fn = function() {$get('scriptManager_HiddenField').value += ';;Jm.Carrera.Framework.UI:nb-NO:c3df51a1-d234-496f-a12c-6c080919ccc8:c3323e0b:3fddac32;AjaxControlToolkit, Version=1.0.10618.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e:nb-NO:bc82895f-eb24-48f8-a8ba-a354eb9c74da:1df13a87;Jm.Carrera.Framework.UI, Version=1.0.0.27703, Culture=neutral, PublicKeyToken=null:nb-NO:c3df51a1-d234-496f-a12c-6c080919ccc8:4ccb8f16:c2cfcb87:efd4ffaa:7573173d:1195da22:d3831611:e00fb3db';Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);})();
