﻿/// <reference name="MicrosoftAjax.js"/>
/// <reference name="jQuery-1.3.2.js"/>

var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;

Type.registerNamespace("Controtex.AuthManager");
Controtex.Lib = {

    
    // Nicked from lightbox2
    getPageSize: function() {
        var xScroll, yScroll;

        if (window.innerHeight && window.scrollMaxY) {
            xScroll = window.innerWidth + window.scrollMaxX;
            yScroll = window.innerHeight + window.scrollMaxY;
        } else if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
            xScroll = document.body.scrollWidth;
            yScroll = document.body.scrollHeight;
        } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
            xScroll = document.body.offsetWidth;
            yScroll = document.body.offsetHeight;
        }

        var windowWidth, windowHeight;

        if (self.innerHeight) {	// all except Explorer
            if (document.documentElement.clientWidth) {
                windowWidth = document.documentElement.clientWidth;
            } else {
                windowWidth = self.innerWidth;
            }
            windowHeight = self.innerHeight;
        } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
            windowWidth = document.documentElement.clientWidth;
            windowHeight = document.documentElement.clientHeight;
        } else if (document.body) { // other Explorers
            windowWidth = document.body.clientWidth;
            windowHeight = document.body.clientHeight;
        }

        var pageWidth, pageHeight;
        
        // for small pages with total height less then height of the viewport
        if (yScroll < windowHeight) {
            pageHeight = windowHeight;
        } else {
            pageHeight = yScroll;
        }

        // for small pages with total width less then width of the viewport
        if (xScroll < windowWidth) {
            pageWidth = windowWidth;
        } else {
            pageWidth = xScroll;
        }

        return { height: pageHeight, width: pageWidth };
    },
    // Nicked from prototype
    getScrollOffsets: function() {
        var left = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
        var top = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
        return { left: left, top: top };
    },
    // Nicked from quirksmode
    getViewportDimensions: function() {
        var width = self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
        var height = self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
        return { width: width, height: height };
    },

    centerElement: function(elem) {
        var viewport = Controtex.Lib.getViewportDimensions();

        var left = (viewport.width - elem.offsetWidth) / 2;
        var top = (viewport.height - elem.offsetHeight) / 2;

        if (IE6) {
            elem.style.position = 'absolute';

            var scrollOffsets = Controtex.Lib.getScrollOffsets();
            left += scrollOffsets.left;
            top += scrollOffsets.top;
        }

        elem.style.left = left + 'px';
        elem.style.top = top + 'px';
    }
}

Type.registerNamespace("DSInfo");

Controtex.ModalManager = {
    initialized: false,

    background: null,
    dialog: null,

    Initialize: function() {
        if (Controtex.ModalManager.initialized) return;

        var background = $get('logInBackground');
        background.style.zIndex = 10000;
        background.style.position = 'absolute';
        background.style.top = 0;
        background.style.left = 0;
        background.show = function() {
            Controtex.ModalManager.Show(background);
        };
        background.hide = function() {
            Controtex.ModalManager.Hide(background);
        };

        dialog = $get('logInPanel');
        dialog.className = 'modalDialog';
        dialog.style.zIndex = 10001;
	if (IE6)
        	dialog.style.position = 'absolute';
        else
		dialog.style.position = 'fixed';
        dialog.show = function() {
            Controtex.ModalManager.Show(dialog);
        };
        dialog.hide = function() {
            Controtex.ModalManager.Hide(dialog);
        };

        background.hide();
        dialog.hide();

        Controtex.ModalManager.background = background;
        Controtex.ModalManager.dialog = dialog;

        Controtex.ModalManager.initialized = true;
    },

    Show: function(el) {
        el.style.display = '';
    },

    Hide: function(el) {
        el.style.display = 'none';
    },

    SetBackgroundSize: function() {
        Controtex.ModalManager.background.style.height = 0;
        Controtex.ModalManager.background.style.width = 0;

        var pageSize = Controtex.Lib.getPageSize();

        Controtex.ModalManager.background.style.height = pageSize.height + "px";
        Controtex.ModalManager.background.style.width = pageSize.width + "px";
    },

    ShowDialog: function() {
        Controtex.ModalManager.Initialize();

        Controtex.ModalManager.background.show();
        Controtex.ModalManager.dialog.show();

        Controtex.ModalManager.SetBackgroundSize();
        Controtex.Lib.centerElement(Controtex.ModalManager.dialog);

        window.onresize = function() {
            Controtex.ModalManager.SetBackgroundSize();
            Controtex.Lib.centerElement(Controtex.ModalManager.dialog);
        }
	if (IE6)
	        window.onscroll = function() {
	            Controtex.ModalManager.SetBackgroundSize();
	            Controtex.Lib.centerElement(Controtex.ModalManager.dialog);
	        }

        return false;
    },
    HideDialog: function() {
        Controtex.ModalManager.Initialize();

        Controtex.ModalManager.background.hide();
        Controtex.ModalManager.dialog.hide();

        window.onresize = null;
        window.onscroll = null;

        return false;
    }
}

Controtex.AuthManager.Current = {
    ReloadRoles: function(returnFunc) {
        var userContext = { scope: this, returnFunc: returnFunc };
        Sys.Services.RoleService.load(this.onLoadRolesCompleted, this.onLoadRolesFailed, userContext);
    },

    LoadRoles: function(returnFunc) {
        this.ReloadRoles(returnFunc);
    },

    onLoadRolesCompleted: function(result, userContext, methodName) {
        if (!userContext || !userContext.scope) {
            alert('Context missing' + userContext);
            return;
        }

        userContext.scope._roles = Sys.Services.RoleService.get_roles();
        if (userContext.returnFunc)
            userContext.returnFunc();
    },

    onLoadRolesFailed: function(error, userContext, methodName) {
        alert(error.get_message());
    },

    IsInRoles: function(levels) {
        var lvls = levels.split(',');
        for (var i = 0; i < lvls.length; i++) {
            for (var j = 0; j < this._roles.length; j++)
                if (this._roles[j] == lvls[i])
                return true;
        }
        return false;
    },

    CheckLevel: function(level, onSufficientLevel, onInsufficientLevel) {

        if (!level) {
            return onSufficientLevel();
        }

        if (!this._roles)
            return this.LoadRoles(function() {
                Controtex.AuthManager.Current.CheckLevel(level, onSufficientLevel, onInsufficientLevel);
            });

        var levels = "";
        switch (level.charAt(0)) {
            case 'U':
                levels = "Everyone"; break;
            case 'S':
                levels = "SilverMembers,GoldMembers,PlatinumMembers,HonoraryMembers"; break;
            case 'G':
                levels = "GoldMembers,PlatinumMembers,HonoraryMembers"; break;
            case 'P':
                levels = "PlatinumMembers,HonoraryMembers"; break;
            case 'M':
                levels = "PaidMembers,SilverMembers,GoldMembers,PlatinumMembers,HonoraryMembers"; break;
            default:
                levels = ''; break;
        }

        if (levels == '' || this.IsInRoles(levels))
            onSufficientLevel();
        else
            onInsufficientLevel();
    },

    KeyEvent: function(event) {
        if (event.keyCode == 13 || event.charCode == 13) {
            event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); if (event.preventDefault) event.preventDefault(); $get('_logButton').click(); return false;
        }
        else if (event.keyCode == 27 || event.charCode == 27) {
            event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation();
            Controtex.ModalManager.HideDialog(); return false;
        }
        else return true;
    },

    DisplayPanel: function(level, delegate) {
        Controtex.ModalManager.Initialize();

        var panel = Controtex.ModalManager.dialog;

        var recursiveHideWrongLevelDesc = function(el) {
            for (var i = 0; i < el.childNodes.length; i++) {
                var child = el.childNodes[i];
                if (child.id && (child.id.startsWith('_logDesc') || child.id.startsWith('_logReg')))
                    Controtex.ModalManager.Hide(child);
                recursiveHideWrongLevelDesc(child);
            }
        }
        recursiveHideWrongLevelDesc(panel);

        Controtex.ModalManager.Show($get('_logDesc' + level));
        if (level == 'U' || level == 'H')
            Controtex.ModalManager.Show($get('_logReg' + level));
        else
            Controtex.ModalManager.Show($get('_logRegM'));

        var e;

        e = $get('_logButton');
        e.onclick = function() { return Controtex.AuthManager.Current.LogIn(level, delegate); };

        e = $get('_logCancel');
        e.onclick = function() { return Controtex.ModalManager.HideDialog(); };

        $addHandler(panel, 'keypress', Controtex.AuthManager.Current.KeyEvent);

        Controtex.ModalManager.ShowDialog();

        $get('userName').focus();
    },

    AttemptAccess: function(level, delegate) {
        this.CheckLevel(level, delegate, function() { return Controtex.AuthManager.Current.DisplayPanel(level, delegate) });
        return false;
    },

    LogIn: function(level, delegate) {
        var userContext = { scope: this, level: level, delegate: delegate };
        Controtex.ModalManager.Show($get('_logChecking'));
        var e = Sys.Services.AuthenticationService.login($get('userName').value.trim(), $get('password').value, false, null, null,
            Controtex.AuthManager.Current.LoggedIn, Controtex.AuthManager.Current.LogFailed, userContext);
    },

    LogFailed: function(error, userContext, methodName) {
        Controtex.ModalManager.Hide($get('_logChecking'));
        alert(error.get_message());
    },

    LoggedIn: function(validCredentials, userContext, methodName) {
        Controtex.ModalManager.Hide($get('_logChecking'));
        if (!userContext || !userContext.scope) return;

        if (!validCredentials) {
            Controtex.ModalManager.Show($get('_logWrong'));
            userContext.scope._roles = null;
            Controtex.AuthManager.Current.AttemptAccess(userContext.level, userContext.delegate);
        }
        else {
            Controtex.ModalManager.Hide($get('_logWrong'));

            Controtex.ModalManager.HideDialog();
            userContext.scope._roles = null;
            Controtex.AuthManager.Current.AttemptAccess(userContext.level, userContext.delegate);
        }
    }
}

var Images = [];

function imageListLoad(t, ImageList, Domain, Delay, StartInd) {
    if (!t.ImgList) {
        t = jQuery(t).wrap('<div style="position: relative"></div>').parent();

        t.Domain = Domain;
        t.Delay = Delay;
        if (!ImageList || ImageList == '') {
            t.ImgList = 'no';
            return;
        }
        t.ImgNameList = decodeHTML(unescape(ImageList)).split(';');
        t.ImgList = [];
        t.maxHeight = 0;
        for (var i = 0; i < t.ImgNameList.length; i++) {
            t.ImgList[i] = new Image();
            t.ImgList[i].src = t.Domain + t.ImgNameList[i];
            t.maxHeight = Math.max(t.maxHeight, $(t.ImgList[i]).height());
            jQuery(t.ImgList[i]).css({position: "absolute", top:"0", left:"0"});
        }
        t.height(t.maxHeight);
        t.ImgIdx = StartInd;
        ind = Images.length;
        Images[ind] = t;
        setInterval("switchImage(" + ind + ");", t.Delay);
    }
}

function switchImage(i) {
    var t = Images[i];
    if (t.ImgIdx >= t.ImgNameList.length) t.ImgIdx = 0;

    var parent = t;
    var curImg = jQuery("img", t);
    var targetImg = jQuery(t.ImgList[t.ImgIdx]).css("opacity", 0);
    parent.append(targetImg);

    parent.maxHeight = Math.max(t.maxHeight, targetImg.width());

    curImg.stop().animate({ opacity: 0 }, 2000, function() { curImg.remove(); });
    targetImg.stop().animate({ opacity: 1 }, 2000);
    parent.stop().animate({ width: targetImg.width(), height: parent.maxHeight }, 2000);

    t.ImgIdx++;
}
function urlencode(str) {
    return escape(str).replace(/\+/g, '%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}
function decodeHTML(str) {
    return str.replace(/&amp;/g, '&').replace(/&quot;/g, '"').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
}

/**
* Cheat Code: a jQuery Plugin
* @author: Trevor Morris (trovster)
* @url: http://www.trovster.com/lab/code/plugins/jquery.cheat-code.js
* @documentation: http://www.trovster.com/lab/plugins/cheat-code/
* @published: 10/05/2009
* @updated: 10/05/2009
*/
function enableCheats() {
    if (typeof jQuery != 'undefined') {
        jQuery(function($) {
            $.fn.extend({
                cheatCode: function(options) {
                    var $$ = $(this),
					s = $.extend({}, $.fn.cheatCode.defaults, options),
					o = $.metadata ? $.extend({}, s, $$.metadata()) : s,
					k = [];

                    return this.each(
					function() {
					    $$.bind('keydown.cheatCode' + o.code.toString(), function(e) {
					        k.push(e.keyCode);
					        if (k.toString().indexOf(o.code) >= 0) {
					            k = [];
					            o.activated.call(this, o);
					            unbind.call(this, o);
					        }
					    });
					}
				);
                }
            });

            complete = function(o) {
                var $overlay = $('<div class="overlay"></div>')
                $message = $('<div class="modal"></div>');

                $message.text(o.message).appendTo('body');
                $overlay.appendTo('body');
                setTimeout(function() {
                    $message.fadeOut(500, function() {
                        $(this).remove();
                        $overlay.fadeOut(500, function() {
                            $(this).remove();
                        });
                    });
                }, 1000);
            };

            unbind = function(o) {
                if (o.unbind === true) {
                    $(this).unbind('keydown.cheatCode' + o.code.toString());
                }
            };

            $.fn.cheatCode.defaults = {
                'code': '38,38,40,40,37,39,37,39,66,65',
                'unbind': true,
                'activated': complete,
                'message': 'Cheat Code Activated'
            };
        });
    }
}