﻿// SistematicaPage provides a number of services akin to the HTTPCONTEXT object in .NET
$.page = {};

$.page.HttpContext = Class.create();

$.page.HttpContext.prototype = {
    initialize: function() {

        // <-- Configure Cookie Mechanism -->
        this.options = {
            expires: 36000, 	// seconds (1 hr)  
            path: '', 		// cookie path
            domain: '', 		// cookie domain
            secure: ''			// secure ?         		
        };

        if (this.options.expires != '') {
            var date = new Date();
            date = new Date(date.getTime() + (this.options.expires * 1000));
            this.options.expires = '; expires=' + date.toGMTString();
        }
        if (this.options.path != '') {
            this.options.path = '; path=' + escape(this.options.path);
        }
        if (this.options.domain != '') {
            this.options.domain = '; domain=' + escape(this.options.domain);
        }
        if (this.options.secure == 'secure') {
            this.options.secure = '; secure';
        } else {
            this.options.secure = '';
        }


        // <-- Configure & Process QueryString -->
        this.params = {};

        qs = location.search.substring(1, location.search.length);

        if (qs.length == 0)
            return;

        // Turn <plus> back to <space>
        // See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
        qs = qs.replace(/\+/g, ' ');

        var args = qs.split('&'); // parse out name/value pairs separated via &
        // split out each name=value pair
        for (var i = 0; i < args.length; i++) {
            var pair = args[i].split('=');
            var name = decodeURIComponent(pair[0]);

            var value = (pair.length == 2) ? decodeURIComponent(pair[1]) : name;

            this.params[name] = value;
        }

        /* End of QueryString Processing*/
    },

    isInRole: function(roleName) {
        var obj = this.getCookie('Roles');
        var boolRole = false;

        obj.each(function(role) {
            if (role.Role == roleName) {
                boolRole = true;
            }
        });

        return boolRole;
    },

    getCookieKey: function(key) {
        return this.getCookie(key);
    },

    getKeyValue: function(key, default_) {
        var value = this.params[key];
        return (value != null) ? value : default_;
    },

    containsKey: function(key) {
        var value = this.params[key];
        return (value != null);
    },

    setCookie: function(name, value) {
        name = name;
        cookie = this.options;
        var type = typeof value;
        switch (type) {
            case 'undefined':
            case 'function':
            case 'unknown': return false;
            case 'boolean':
            case 'string':
            case 'number': value = String(value.toString());
        }
        var cookie_str = name + "=" + escape(Object.toJSON(value));
        try {
            document.cookie = cookie_str + cookie.expires + cookie.path + cookie.domain + cookie.secure;
        } catch (e) {
            return false;
        }
        return true;
    },

    getCookie: function(name) {
        name = name;
        var cookies = document.cookie.match(name + '=(.*?)(;|$)');
        if (cookies) {
            return (unescape(cookies[1])).evalJSON();
        } else {
            return null;
        }
    },

    /**
    * Removes a particular cookie (name value pair) form the Cookie Jar.
    */
    removeCookie: function(name) {
        name = name;
        cookie = this.options;
        try {
            var date = new Date();
            date.setTime(date.getTime() - (3600 * 1000));
            var expires = '; expires=' + date.toGMTString();
            document.cookie = name + "=" + expires + cookie.path + cookie.domain + cookie.secure;
        } catch (e) {
            return false;
        }
        return true;
    },

    sessionID: '',

    userCredentials: { userName: '', password: '' },

    //Function which returns title for Welcome
    getTitle: function() {
        return this.getCookie("UserName");
    },

    logout: function() {
        //TODO3
        this._destroyCookie();
        location.href = this._pageConstants.loginPage;
    },

    isLogged: function() {
        if (this.getCookie("MemberID") != null) {
            return true;
        } else {
            return false;
        }
    },

    _readCookie: function() {
        var theCookie = "" + document.cookie;
        var ind = theCookie.indexOf(this.cookieName);

        if (ind == -1 || cookieName == "")
            return "";

        var ind1 = theCookie.indexOf(';', ind);

        if (ind1 == -1)
            ind1 = theCookie.length;

        return unescape(theCookie.substring(ind + cookieName.length + 1, ind1));
    },

    /**
    * Adds a name values pair.
    */
    _setCookie: function(data) {

        //        this.query.dataConnector.dto.fieldSet.each(function(fieldMap) {
        //            this.setCookie(fieldMap.inputName, data.get(fieldMap.dbName));
        //        });

        var UserName = data.get('FirstName') + " " + data.get('LastName');

        this.setCookie("UserName", UserName);
        this.setCookie("MemberID", data.get('MemberID'));

        var Roles = data.get('Roles');

        this.setCookie("Roles", Roles);

        var rUrl;
        var rRole = "";
        var len = Roles.length;

        if (Roles.length > 1) {
            Roles.each(function(role) {
                rRole = rRole + role.Role + "+";
            });
        } else if (Roles.length != 0) {
            rRole = Roles[0]["Role"] + "+";
        }

        var trimmed = rRole.replace(/^\s+|\s+$/g, '').strip();

        switch (trimmed) {
            case 'IndependentBlogger+':
                var role = data.get('Roles').find(function(roleName) {
                    if (roleName.Role == "IndependentBlogger") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;

            case 'Administrator+':
                var role = data.get('Roles').find(function(roleName) {
                    if (roleName.Role == "Administrator") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;
            case 'Ambassador+':

                var role = data.get('Roles').find(function(roleName) {
                    if (roleName.Role == "Ambassador") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;
            case 'Trip Contributor+':

                var role = data.get('Roles').find(function(roleName) {
                    if (roleName.Role == "Trip Contributor") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;
            case 'Administrator+Ambassador+':
                Roles.each(function(roleName) {
                    if (roleName.Role == "Administrator") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;
            case 'Administrator+Trip Contributor+':

                Roles.each(function(roleName) {
                    if (roleName.Role == "Administrator") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;
            case 'Administrator+Ambassador+Trip Contributor+':

                Roles.each(function(roleName) {
                    if (roleName.Role == "Administrator") {
                        rUrl = roleName.StartPageRedirect;
                    }
                });

                break;
            default:
                rUrl = '';
                break;
        }

        this._pageConstants.redirectUrl = rUrl;
    },

    /**
    * Empties the Cookie Jar. Deletes all the cookies.
    */
    _destroyCookie: function() {
        keys = this.getKeys();
        size = keys.size();
        for (i = 0; i < size; i++) {
            this.removeCookie(keys[i]);
        }
    },

    /**
    * Returns all keys.
    */
    getKeys: function() {
        keys = $A();
        keyRe = /[^=; ]+(?=\=)/g;
        str = document.cookie;
        CJRe = new RegExp("^");
        while ((match = keyRe.exec(str)) != undefined) {
            if (CJRe.test(match[0].strip())) {
                keys.push(match[0].strip().gsub("^", ""));
            }
        }
        return keys;
    },

    _pageConstants: {
        loginPage: 'login.htm',
        redirectUrl: '',
        MemberID: '',
        accessDeniedPage: 'login.htm',
        memberDetailPage: 'mng_members_detail.htm',
        valCenterDetailPage: 'mng_val_center_detail.htm',
        tripDetailPage: 'mng_trips_detail.htm',
        memberProfilePage: 'adm_member_profile.htm'

    },

    _loadScript: function(url, fileType) {

        if (fileType == "js") { //if filename is a external JavaScript file
            var fileref = document.createElement('script');
            fileref.setAttribute("type", "text/javascript");
            fileref.setAttribute("src", url);
        }
        else if (fileType == "css") { //if filename is an external CSS file
            var fileref = document.createElement("link");
            fileref.setAttribute("rel", "stylesheet");
            fileref.setAttribute("type", "text/css");
            fileref.setAttribute("href", url);
        }

        if (typeof fileref != "undefined")
            document.getElementsByTagName("head")[0].appendChild(fileref);

    },

    _showModalPopupWindow: function(url, title) {
        popupWin = window.open(url, title, 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=800,height=700,left = 124.5,top = 109')
    },

    _showPopupWindow: function(url, title) {
        popupWin = window.open(url, title, 'toolbar=1,scrollbars=1,location=1,statusbar=1,menubar=1,resizable=1')
    },

    _simulateHREFClick: function(url) {
        var hRef = document.createElement('a');
        hRef.id = 'newLink';
        hRef.href = url;
        hRef.target = '_blank';
        document.body.appendChild(hRef);
        //document.links['newLink'].fireEvent('onclick');

        var evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        var cb = document.getElementById("newLink");
        var canceled = !cb.dispatchEvent(evt);
        if (canceled) {
            // A handler called preventDefault
            alert("canceled");
        } else {
            // None of the handlers called preventDefault
            alert("not canceled");
        }

    },

    close: function() {
        window.close();
    },

    // The page needs to listen to the QuerySuccess event in this very specific case
    _handleEmptyDataSetEvent: function(message, pageToRedirect, memo, data) {
        var length;

        if (Object.isHash(data))
            length = data.size();
        else {
            if (Object.isArray(data))
                length = data.length;
            else
                if (data == null || Object.isUndefined(data))
                length = 0;
        }

        if (length == 0) {
            alert(message);

            if (pageToRedirect == null)
                location.href = page._pageConstants.accessDeniedPage;
            else
                location.href = pageToRedirect;
        }
    }
};
