// ==================================================
// You can put some construction logic here.
//
Cynapps.OnTrack.DPF.Web.WebParts._baseEditorRequiredFieldMarker = function() {
    this._ids = [];
    this._pageLoaded = false;

    Cynapps.Frameworks.Web.Core.AddEvent(
        window,
        "load",
        function() {
            var webCore = Cynapps.Frameworks.Web.Core;
            var webDPF = Cynapps.OnTrack.DPF.Web.WebParts;
            var requiredFieldMarker = webDPF.BaseEditorRequiredFieldMarker;
            if (!requiredFieldMarker._pageLoaded) {
                for (var i = 0; i < requiredFieldMarker._ids.length; i++) {
                    requiredFieldMarker._setMarker(requiredFieldMarker._ids[i]);
                }
            }

            requiredFieldMarker._pageLoaded = true;
        });

    Cynapps.Frameworks.Web.Core.AddEvent(
        window,
        "resize",
        function() {
            var webDPF = Cynapps.OnTrack.DPF.Web.WebParts;
            var requiredFieldMarker = webDPF.BaseEditorRequiredFieldMarker;
            requiredFieldMarker.RepositionAll(); 
        });
}

// ==================================================
// Create a prototype.
//
Cynapps.OnTrack.DPF.Web.WebParts._baseEditorRequiredFieldMarker.prototype = {

    // ==================================================
    // Called after the element has been rendered to
    // apply client side script formatting to it.
    //
    Show: function(elementId) {
        var inputId = elementId + "_input";
        var myJoin = "~" + this._ids.join("~") + "~";
        if (myJoin.indexOf("~" + inputId + "~") == -1) {
            this._ids[this._ids.length] = inputId;
        }

        if (this._pageLoaded) {
            this._setMarker(inputId);
        }
    },

    // ==================================================
    // recalculates and repositions all markers that are
    // currently on the page.
    //
    RepositionAll: function() {
        for (var i = 0; i < this._ids.length; i++) {
            if (this._pageLoaded && $get(this._ids[i]) != null) {
                this._setMarker(this._ids[i]);
            }
        }
    },

    // ==================================================
    // Removes all required field markers.
    //
    ClearAll: function() {
        if (this._pageLoaded) {
            for (var i = 0; i < this._ids.length; i++) {
                var e = document.getElementById(this._ids[i] + "_marker");
                if (e != null) {
                    e.parentNode.removeChild(e);
                }
            }

            this._ids = [];
        }
    },

    // ==================================================
    // Create and position the marker element
    //
    _setMarker: function(inputId) {
        var input = $get(inputId);
        var marker = $get(inputId + "_marker");
        if (marker == null) {
            marker = document.createElement('div');
            marker.setAttribute("id", inputId + "_marker");
            marker.style.display = "none";
            marker.style.position = "absolute";
            marker.setAttribute("class", "requiredfieldmarker");
            document.getElementsByTagName('body')[0].appendChild(marker);
        }

        var rect = Cynapps.Frameworks.Web.Core.GetRect(input);
        Cynapps.Frameworks.Web.Core.SetRect(marker, rect.x - 10, rect.y, 10, rect.h);
        marker.style.display = "";
        return marker;
    }
}

// ==================================================
// Create an instance of the prototype.
//
Cynapps.OnTrack.DPF.Web.WebParts.BaseEditorRequiredFieldMarker = new Cynapps.OnTrack.DPF.Web.WebParts._baseEditorRequiredFieldMarker();

// ==================================================
// You can put some construction logic here.
//
Cynapps.OnTrack.DPF.Web.WebParts._baseEditorFocus = function() {
    this._editorId = null;
    Cynapps.Frameworks.Web.Core.AddEvent(
        window,
        "load",
        function() { Cynapps.OnTrack.DPF.Web.WebParts.BaseEditorFocus.Initialize(); });
}

// ==================================================
// Create a prototype.
//
Cynapps.OnTrack.DPF.Web.WebParts._baseEditorFocus.prototype = {

    // ==================================================
    // Attach a handler to the endrequest event of the
    // PageRequestManager. This fires some javascript code
    // after an updatepanel has been refreshed.
    //
    Initialize: function() {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
            Cynapps.OnTrack.DPF.Web.WebParts.BaseEditorFocus._endRequest);
    },

    // ==================================================
    // This method is called by the editor controls.
    // It stores the id of the element that should receive
    // the focus when the postback has returned.
    //
    StoreEditorWithFocus: function(element) {
        if (
            typeof (element) != "undefined" &&
            element != null &&
            typeof (element.id) != "undefined" &&
            element.id != null) {
            _editorId = element.id;
        }
        else {
            _editorId = null;
        }
    },

    // ==================================================
    // This handler is called by the AJAX PageRequestManager.
    // It fires when an updatepanel has refreshed. We use it
    // to set the focus on the control after the postback.
    //
    _endRequest: function(sender, e) {
        if (typeof (_editorId) != "undefined" && _editorId != null) {
            var element = $get(_editorId);
            if (element != null) {
                try {
                    element.focus();
                    element.select();
                }
                catch (e) {
                    // If anything happens we should ignore it because javascript
                    // errors can block page functionality and repositioning requiredfield
                    // markers is just not critical enough.
                }
            }
        }
    }
}

// ==================================================
// Create an instance of the prototype.
//
Cynapps.OnTrack.DPF.Web.WebParts.BaseEditorFocus = new Cynapps.OnTrack.DPF.Web.WebParts._baseEditorFocus();
