﻿/// <reference path="~/Scripts/jquery-1.4.1-vsdoc.js" />

edu =
{
    // Browser Check
    isIE: (navigator.userAgent.indexOf('MSIE') != -1), // Assuming IE v7.0 and Up. No IE6!.
    isFirefox: (navigator.userAgent.indexOf('Firefox') != -1),
    isChrome: (navigator.userAgent.indexOf('Chrome') != -1),
    isSafari: (navigator.userAgent.indexOf('Safari') != -1),

    Permissions: { None: 0, ExamCreation: 1, OnlineTests: 2, Reporting: 4, ClassManagement: 8, Activated: 16, TrialAccount: 32, ExtendedQuestions: 64, OverwriteQuestions: 128, Feedbacks: 256, Licenses: 512, Stats: 1024, AdminPanel: 2048, AutoStateClassifier: 16384 },
    AdminTypes: { NotAdmin: 0, Department: 1, School: 2, District: 3, Super: 4 },

    init: function(name, email) {
        this.Name = name; this.Email = email;

        $('#__EVENTTARGET').val("");

        // hack to remove validation checks
        Function._validateParameterCount = function() { return null; };
        Function._validateParameter = function() { return null; };
        Function._validateParams = function() { return null; };
        Function._validateParameterType = function() { return null; };

        /* Session Timeout */
        if (window["WebForm_ExecuteCallback"] != null) {
            var callE = WebForm_ExecuteCallback;
            WebForm_ExecuteCallback = function(obj) {
                if (obj.xmlRequest.responseText == "<session end>") {
                    window.onbeforeunload = null;
                    window.location = "/Pages/SignedOutHome.aspx?mode=session";
                } else if (obj.xmlRequest.responseText == "<session kick>") {
                    window.onbeforeunload = null;
                    window.location = "/Pages/SignedOutHome.aspx?mode=kicked";
                } else { callE.apply(this, arguments); }
            }
        }
        this.timeout_check();
    },

    timeout_check: function() {
        var timeOut = 55 * 60 * 1000; // minutes * seconds * millseconds
        var timer = null;
        var reset = function() {
            if (edu.timedout) return;
            if (timer) clearTimeout(timer);
            timer = setTimeout(function() { edu.timedout = true; $.getScript("/Scripts/Timeout.js"); }, timeOut);
        };
        reset();

        if (Sys && Sys.Application.add_load) Sys.Application.add_load(reset); // If Ajax Client Library available, apply reset on postback
        if (window["WebForm_ExecuteCallback"] != null) {
            var orig = WebForm_DoCallback; /// Hijack the callback function to allow us to know when a callback is made, callbacks reset the session timer!
            WebForm_DoCallback = function() { reset(); orig.apply(this, arguments); };
        };
        $(document).ajaxStart(reset);
    },

    pageMethod: function(fn, params, successFn, errorFn, page, context, async) {
        /// <summary>Calls a Page Method using Jquery</summary>
        /// <param type="String" name="fn">Name of the Page Method Function you wish to call</param>
        /// <param type="Object" name="params">Object Literal of parameter values that matches the functions paramters</param>
        /// <param type="Function" name="successFn" optional="true">Function to call when the ajax call finishes</param>
        /// <param type="Function" name="errorFn" optional="true">Function to call when the ajax call fails</param>
        /// <param type="String" name="page" optional="true">(Optional) Page the method belongs to, by default it goes to the current page from window.location</param>
        /// <param type="Object" name="context" optional="true">Context to return on success</param>
        /// <param type="Boolean" name="async" optional="true">Whether request should be asynchronous. True by default.</param>
        if (!page) {
            page = window.location.href.split('#')[0];
            var queries = page.split('?');
            page = queries[0] + "/" + fn + ((queries.length > 1) ? "?" + queries[1] : "");
        } else { page = page + "/" + fn; }

        $.ajax({
            type: "POST",
            url: page,
            data: (params) ? (((typeof params) == "string") ? params : edu.toJSON(params)) : "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: ((successFn) ? function(val) { successFn(val.d, context); } : null),
            error: errorFn,
            async: ((typeof async) === "boolean") ? async : true
        });
    },

    callback: function(target, params, successFn, context, errorFn, page) {
        /// <summary>Calls a Callback using Jquery</summary>
        /// <param type="string" name="target">Name of the target your calling, page is __Page</param>
        /// <param type="string" name="params">Parameters to pass as arguments</param>
        /// <param type="Function" name="successFn">Function to call when the ajax call finishes</param>
        /// <param type="Object" name="context" optional="true">Context to return on success</param>
        /// <param type="Function" name="errorFn">Function to call when the ajax call fails</param>
        /// <param type="String" name="page" optional="true">(Optional)Page the target belongs to</param>

        var forms = $("form").serializeArray();
        forms.push({ name: "__CALLBACKID", value: target });
        forms.push({ name: "__CALLBACKPARAM", value: params });

        page = ((page) ? page : window.location.href.split('#')[0]);
        if (page.indexOf(".aspx") == -1) page += "Default.aspx";

        $.ajax({
            type: "POST",
            url: page,
            data: $.param(forms),
            contentType: "application/x-www-form-urlencoded; charset=utf-8",
            dataType: "html",
            success: ((successFn) ? function(val) {
                if (val == "<session end>") {
                    window.onbeforeunload = null;
                    window.location = "/Pages/SignedOutHome.aspx?mode=session";
                } else if (val == "<session kick>") {
                    window.onbeforeunload = null;
                    window.location = "/Pages/SignedOutHome.aspx?mode=kick";
                }
                else successFn(val.substring(1, val.length), context);
            } : null),
            error: errorFn
        });
    },


    toJSON: function(obj) {
        /// <summary>Serializes a javascript object into json serialized string</summary>
        /// <param name="obj" type="Object">The object to serialize</summary>
        /// <returns> String representing the JSON </summary>
        if (window["JSON"]) {
            return JSON.stringify(obj);
        }
        return Sys.Serialization.JavaScriptSerializer.serialize(obj);
    },

    LoadFeedback: function() {
        /// <summary> Display Feedback, accessible from the menu of every page </summary>
        var w = window.open("/Pages/Feedback.aspx", "feedback", 'height=250,width=420');
        if (w && w.focus) w.focus();
    },

    AjaxRequest: function(value) {
        /// <summary>DEPRECATED. DO NOT USE.</summary>
        window['ctl00_MasterAjaxManager'].AjaxRequest(value);
    },

    GotoCreateExam: function() {
        window.location = "/Pages/Exam/Edit/Default.aspx";
        return;

        var domain = window.location.hostname.toLowerCase();
        //test site uses new exam editor
        if (domain.indexOf("eduflash.com") != -1) {
            window.location = "/Pages/Exam/Edit/Default.aspx";
        }
        //real site uses old exam editor
        else {
            edu.Postback("Master", "createExam");
        }
    },


    GetQuery: function() {
        /// <summary>Returns a dictionary for all the query parameters</summary>
        /// <returns type="Dictioanary">Dictionary of query parameters</returns>
        var urlParams = {};
        var e,
        d = function(s) { return decodeURIComponent(s.replace(/\+/g, " ")); },
        q = window.location.search.substring(1),
        r = /([^&=]+)=?([^&]*)/g;
        while (e = r.exec(q))
            urlParams[d(e[1])] = d(e[2]);
        return urlParams;
    },


    PluralString: function(number, singleString, pluralString) {
        /// <summary> This should not be here. -Pavel </summary>
        if (number == 1)
            return number + " " + singleString;
        else
            return number + " " + pluralString;
    },

    Postback: function(eventTarget, eventArgument) {
        /// <summary> Executes asp.net postback using either jaspAjax or form </summary>
        /// <param name="eventTarget" type="String">The unique id of the server control making the postback</param>
        /// <param name="eventArgument" type="String">The arguments to pass back to asp.net server</param>
        if (window.jaspAjax) {
            jaspAjax.post(eventTarget, eventArgument);
        }
        else {
            $("form").serializeArray();
            theForm.__EVENTTARGET.value = eventTarget;
            theForm.__EVENTARGUMENT.value = eventArgument;
            theForm.submit();
        }
    },

    ShowAC: function() {
        /// <summary> Display Answer Chat, accessible from the menu of every page </summary>
        //var name = "Anonymous (" + window.location.hostname + ")";
        //var url = "http://www.answerchat.com/cgi-bin/answerchat.exe?account=e0008&cPage=http://localhost:8080/Pages/Home.aspx&browser=Safari&bVersion=5&action=js&backgroundID=0137&buttonFolder=0006&gmt=-4&person=" + name + "&email=" + "Anonymous";
        //var newwindow = window.open(url, 'name', 'height=350,width=600');
        var newwindow = window.open('http://chat.eduware.com/chat.php?hg=P1Byb2dyYW1tZXJz', '', 'width=590,height=610,left=0,top=0,resizable=yes,menubar=no,location=no,status=yes,scrollbars=yes');
        if (newwindow && newwindow.focus) { newwindow.focus() }
    },

    // currentSite = WTM, TW, DB, or CS    
    MainMenu: function(currentSite, isTeacher, isStudent, adminType, permissionsMask) {
        if (this.__MenuCreated) return;
        this.__MenuCreated = true;
        this.IsStudent = isStudent;
        var isAdmin = adminType != edu.AdminTypes.NotAdmin;
        var ul = $("#Tab").children();

        var addTab = function(name, menu, url) {
            url = url || "#";
            var li = $('<li><a href="' + url + '">' + name + '</a></li>');
            li.appendTo(ul);
            edu.DropDown.create(name, menu);
            edu.DropDown.attachGroup(li, name);
        };

        /* Here we actually create the Tabs based on users permission */
        addTab("Home", [], "/Pages/Home.aspx");

        var menuTabs = CreateTopMenus(currentSite, isTeacher, isStudent, adminType, permissionsMask);
        for (var i = 0; i < menuTabs.length; i++) {
            if (menuTabs[i].items.length > 0) {
                addTab(menuTabs[i].text, menuTabs[i].items);
            }
        }

        addTab("Live Help", [], "javascript:edu.ShowAC()");
    },

    __liveZillaHijack: function() {
        lz_user_name = this.Name + (this.IsStudent ? " (Student)" : "");
        lz_user_email = this.Email;
    }
};

function CreateTopMenus(currentSite, isTeacher, isStudent, adminType, permissionsMask) {
    var userType = "";
    if (isStudent)
        userType = "S";
    if (isTeacher)
        userType = "T";

    if (adminType == edu.AdminTypes.School)
        userType = "SA";
    else if (adminType == edu.AdminTypes.Department)
        userType = "DPTA";
    else if (adminType == edu.AdminTypes.District)
        userType = "DA";
    else if (adminType == edu.AdminTypes.Super)
        userType = "EA";

    var userData = { currentSite: currentSite, permissionsMask: permissionsMask, userType: userType };
    var tabs = [];

    var examsTab = { text: "Exam", items: [] };
    PushMenuItem(examsTab, userData, { text: "Create an Exam", href: "javascript:edu.GotoCreateExam()", requiredSite: "WTM,TW,DB", requiredPermissions: 0, requiredUserType: "T,A" });
    PushMenuItem(examsTab, userData, { text: "View / Edit Exam", href: "/Pages/Exam/ExamSel.aspx", requiredSite: "WTM,TW,DB", requiredPermissions: 0, requiredUserType: "T,A" });
    PushMenuItem(examsTab, userData, { text: "Online Assignments", href: "/Pages/Teacher/OnlineAssignment/Default.aspx", requiredSite: "TW", requiredPermissions: 0, requiredUserType: "T,A" });
    PushMenuItem(examsTab, userData, { text: "Archive Exams", href: "/Pages/Exam/ArchiveExams.aspx", requiredSite: "WTM,TW,DB", requiredPermissions: 0, requiredUserType: "T,A" });
    PushMenuItem(examsTab, userData, { text: "Give Exams to Another Teacher", href: "/Pages/Teacher/GiveExams.aspx", requiredSite: "WTM,TW,DB", requiredPermissions: 0, requiredUserType: "T,A" });
    PushNonemptyTab(tabs, examsTab);

    var activityTab = { text: "Activity", items: [] };
    PushMenuItem(activityTab, userData, { text: "Create Activity", href: "/Pages/Clicker/CreateActivity.aspx", requiredSite: "CS", requiredPermissions: 0, requiredUserType: "T,A" });
    PushMenuItem(activityTab, userData, { text: "Saved Activitites", href: "/Pages/Exam/ExamSel.aspx", requiredSite: "CS", requiredPermissions: 0, requiredUserType: "T,A" });
    PushMenuItem(activityTab, userData, { text: "Start Activity", href: "/Pages/Clicker/SelectActivity.aspx", requiredSite: "CS", requiredPermissions: 0, requiredUserType: "T,A" });
    PushNonemptyTab(tabs, activityTab);

    var reportsTab = { text: "Reports", items: [] };
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Dashboard", href: "/Pages/Dashboard.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB", requiredPermissions: edu.Permissions.Reporting, requiredUserType: "EA", text: "Batch Reporting", href: "/Pages/BatchReporting/BatchReport.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Grades By Class", href: "/Pages/Grades/ClassGrades/Default.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Grades By Exam", href: "/Pages/Grades/GradesByExam/Default.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Category Report", href: "/Pages/Grades/Category/CategoryComparison.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Individual Student", href: "/Pages/Teacher/ReviewStudentGrades.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Item Analysis", href: "/Pages/Grades/ItemAnalysis/Default.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Student Responses", href: "/Pages/Grades/StudentResponses/Default.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Thinking Skills", href: "/Pages/Grades/Category/CategoryComparison.aspx?mode=TS" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Focus Groups", href: "/Pages/Grades/FocusGroup/Default.aspx" });
    PushMenuItem(reportsTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "S", text: "Student Report", href: "/Pages/Grades/StudentReport/" });
    PushNonemptyTab(tabs, reportsTab);

    var manageTab = { text: "Manage", items: [] };
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Create / Edit Users", href: "/Pages/Admin/Users.aspx" });
    //PushMenuItem(manageTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "A", text: "Create / Edit Classes", href: "/Pages/Admin/ClassesManager.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A,EA", text: "Create / Edit Classes", href: "/Pages/Teacher/ClassesManager.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "DA,EA", text: "Create / Edit Schools", href: "/Pages/Admin/SchoolManager.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "T,A", text: "View Student Roster", href: "/Pages/Teacher/Roster/Default.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "View Teacher Roster", href: "/Pages/Teacher/Roster/TeacherRoster.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "T,A", text: "Account Settings", href: "/Pages/Settings.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "EA", text: "Manage Licenses", href: "/Pages/Admin/License/Default.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "DA", text: "Manage District Licenses", href: "/Pages/Admin/License/Default.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "SA", text: "Manage School Licenses", href: "/Pages/Admin/License/Default.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "DPTA", text: "Manage Department Licenses", href: "/Pages/Admin/License/Default.aspx" });
    //PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "DA", text: "District Usage Report", href: "/Pages/Admin/SiteUsage.aspx" });
    //PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "SA", text: "School Usage Report", href: "/Pages/Admin/SiteUsage.aspx" });
    //PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "SA,DA,T", text: "Usage Stats", href: "/Pages/Admin/UsageStats.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "EA,SA,DA", text: "View Usage Stats", href: "/Pages/SuperAdmin/LicenseStats.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "", requiredPermissions: 0, requiredUserType: "SA", text: "School Portal", href: "/Pages/SuperAdmin/SchoolPortal.aspx" });
    PushMenuItem(manageTab, userData, { requiredSite: "", requiredPermissions: 0, requiredUserType: "DA", text: "District Portal", href: "/Pages/SuperAdmin/DistrictPortal.aspx" });
    
    //PushMenuItem(manageTab, userData, { requiredSite: "WTM,TW,DB,CS", requiredPermissions: 0, requiredUserType: "T", text: "Manage Student Licenses", href: "/Pages/Admin/License/Default.aspx" });
    PushNonemptyTab(tabs, manageTab);

    var officeTab = { text: "Office", items: [] };
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "User Portal", href: "/Pages/SuperAdmin/UserPortal.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "School Portal", href: "/Pages/SuperAdmin/SchoolPortal.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "District Portal", href: "/Pages/SuperAdmin/DistrictPortal.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "Admin Panel", href: "/Pages/SuperAdmin/AdminPanel.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "Email Editor", href: "/Pages/EmailAutoSender.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.Licenses, requiredUserType: "EA", text: "License Panel", href: "/Pages/SuperAdmin/LicensePanel.aspx" });
    //PushMenuItem(officeTab,userData, { requiredSite: "", requiredPermissions:edu.Permissions.Licenses, requiredUserType:"EA", text: "License Stats", href: "/Pages/SuperAdmin/LicenseStats.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.Stats, requiredUserType: "EA", text: "Site Activity", href: "/Pages/SuperAdmin/ActivityPanel.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.Stats, requiredUserType: "EA", text: "Exam List", href: "/Pages/Admin/ExamList.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.OverwriteQuestions, requiredUserType: "EA", text: "Fix Questions", href: "/Pages/SuperAdmin/FixQuestion.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.Feedbacks, requiredUserType: "EA", text: "Feedbacks", href: "/Controls/Feedback/Default.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "Merge Schools", href: "/Pages/SuperAdmin/Merge.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "Edit Classification", href: "/Pages/SuperAdmin/EditClassification.aspx" });
    PushMenuItem(officeTab, userData, { requiredSite: "", requiredPermissions: edu.Permissions.AdminPanel, requiredUserType: "EA", text: "Find Duplicates", href: "/Pages/Diagnostic/DuplicateFinder.aspx" });
    PushNonemptyTab(tabs, officeTab);

    var toolsTab = { text: "Tools", items: [] };
    PushMenuItem(toolsTab, userData, { requiredSite: "TW,DB", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "T,A", text: "Integrate with Moodle/Engrade", href: "/Pages/ExternalServices/ExternalServices.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "TW,DB", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "T,A", text: "Scan Grades", href: "/Pages/OtherActions/ScanGrades2.aspx" });

    PushMenuItem(toolsTab, userData, { requiredSite: "DB,TW,CS", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "A", text: "Upload Roster", href: "/Pages/Teacher/UploadCSV.aspx?Eu=0" });

    PushMenuItem(toolsTab, userData, { requiredSite: "DB,TW,CS", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "T,SA,DA,DPTA", text: "Type or Paste Class", href: "/Pages/Teacher/QuickClassMaker/Default.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "DB,TW,CS", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "T", text: "Upload One Class at a Time", href: "/Pages/Teacher/UploadCSV.aspx?Eu=0&rosterType=single" });
    PushMenuItem(toolsTab, userData, { requiredSite: "DB,TW,CS", requiredPermissions: edu.Permissions.ClassManagement, requiredUserType: "T", text: "Upload Multiple Classes at Once", href: "/Pages/Teacher/UploadCSV.aspx?Eu=0&rosterType=multiple" });

    PushMenuItem(toolsTab, userData, { requiredSite: "WTM,TW,CS", requiredPermissions: edu.Permissions.ExamCreation, requiredUserType: "T,A", text: "Import from Wizard Test Maker", href: "/Pages/WizardImport/WizardImport.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "WTM,TW,CS", requiredPermissions: edu.Permissions.ExamCreation, requiredUserType: "T,A", text: "Import from EDU File", href: "/Pages/WizardImport/ImportEDU.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "WTM,TW,CS", requiredPermissions: edu.Permissions.ExamCreation, requiredUserType: "T,A", text: "Import from Document", href: "/Pages/Questions/PasteEntireDocument.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "TW,DB", requiredPermissions: 0, requiredUserType: "T,A", text: "Show/Hide Exams", href: "/Pages/Exam/ExamShowHide.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "TW,DB", requiredPermissions: 0, requiredUserType: "T,A", text: "Show/Hide Classes", href: "/Pages/Courses/ClassShowHide.aspx" });
    PushMenuItem(toolsTab, userData, { requiredSite: "WTM,TW,CS", requiredPermissions: edu.Permissions.AutoStateClassifier, requiredUserType: "T,A", text: "State Classification Utility", href: "/Pages/StateClassifier/Default.aspx" });
    PushNonemptyTab(tabs, toolsTab);


    //messaging tabs, not used...?
    // { text: "Inbox", href: "/Pages/Messages/Inbox.aspx" },
    // { text: "Compose a Message", href: "/Pages/Messages/Compose.aspx" },
    // { text: "Trash", href: "/Pages/Messages/Trash.aspx" }



    return tabs;
}

(function() {
    var token = "";
    var url = window.location.href;
    if (url.indexOf("wizardtm.com") >= 0) {
        token = "UA-11357200-1";
    }
    else if (url.indexOf("clickerschool.com") >= 0) {
        token = "UA-11357200-7";
    }
    else if (url.indexOf("testwizard.com") >= 0) {
        token = "UA-11357200-6";
    }
    else if (url.indexOf("districtbenchmark") >= 0) {
        token = "UA-11357200-8";
    }
    else {
        token = "UA-11357200-9";
    }

    var _gaq = [];
    _gaq.push(['_setAccount', token]);
    _gaq.push(['_setCustomVar', 1, "Subdomain", window.location.hostname, 2]);
    _gaq.push(['_trackPageview']);
    window._gaq = _gaq;
})();


function PushMenuItem(tab, userData, item) {
    var rSites = item.requiredSite.split(',');
    var rUserTypes = item.requiredUserType.split(',');

    //uncomment these lines once we have the site switching buttons
    if (item.requiredSite != "") {
        if ($.inArray(userData.currentSite, rSites) == -1)
            return;
    }

    if (item.requiredPermissions > 0) {
        if ((userData.permissionsMask & item.requiredPermissions) == 0)
            return;
    }

    if (item.requiredUserType) {
        if ($.inArray(userData.userType, rUserTypes) == -1) {
            var userIsAdmin = userData.userType == "SA" || userData.userType == "DPTA" || userData.userType == "DA" || userData.userType == "EA";
            if (!userIsAdmin || ($.inArray("A", rUserTypes) == -1)) {
                return;
            }
        }
    }

    tab.items.push(item);
}

function PushNonemptyTab(tabArray, tab) {
    if (tab.items.length > 0) {
        tabArray.push(tab);
    }
}

var $del = function(obj, fn) {
    /// <summary> Creates a delegate </summary>
    /// <param name="obj" type="Object"> The object to make "this" when this method is called </param>
    /// <param name="fn" type="Function"> The method to call </param>
    return function() { return fn.apply(obj, arguments); };
};

if (!window["console"]) {
    window.console = { log: function() { } };
}




String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };
