﻿
var SubmitSignIn = function() {
    if(this.clientValidation === false || this.form.isValid()){
        //Ext.Msg.wait('Signing in...');
        //Ext.MessageBox.wait('Signing in...', 'Please Wait...');
        this.el.mask('Signing in...', 'x-mask-loading');
        var SignInUsername = document.getElementById("SignInUsername");
        var SignInPassword = document.getElementById("SignInPassword");
        var SignInTransaction = Ext.Ajax.request({url: "SignIn.aspx",
        params: {username: SignInUsername.value, password: SignInPassword.value},
        callback: SignInSubmitCallback,
        scope: this});
    }
    /*
        }else if (o.clientValidation !== false){ // client validation failed
            this.failureType = Ext.form.Action.CLIENT_INVALID;
            this.form.afterAction(this, false);
        }
    */
    
}

var SingleSignOn = function(entityID, entityType, sessionID) {
    //if(this.clientValidation === false || this.form.isValid()){
        //Ext.Msg.wait('Signing in...');
        //Ext.MessageBox.wait('Signing in...', 'Please Wait...');
        //this.el.mask('Signing in...', 'x-mask-loading');
        //var SignInUsername = document.getElementById("SignInUsername");
        //var SignInPassword = document.getElementById("SignInPassword");
        var SignInTransaction = Ext.Ajax.request({url: "SingleSignOn.aspx",
        params: {EntityID: entityID, EntityType: entityType, SessionID: sessionID},
        callback: SignInSubmitCallback,
        scope: this});
    //}
}

var SignOut = function() {
    var SignInTransaction = Ext.Ajax.request({url: "SignOut.aspx",
        callback: SignOutCallback});
}

var signInForm = new Ext.FormPanel({
    labelWidth: 70, // label settings here cascade unless overridden
    //url:'save-form.php',
    frame:true,
    title: 'QReports Sign in',
    bodyStyle:'padding:5px 5px 0',
    width: 270,
    defaults: {width: 150},
    defaultType: 'textfield',
    waitMsgTarget: true,
    items: [{
            fieldLabel: 'Username',
            id: 'SignInUsername',
            allowBlank: false,
            msgTarget: "under",
            selectOnFocus: true
        },
        {
            inputType: "password",
            fieldLabel: 'Password',
            id: 'SignInPassword',
            allowBlank: false,
            msgTarget: "under",
            selectOnFocus: true
        }
    ]
});
/*var aMsg = "";
			    for(var i in a) {
				    aMsg += "\n" + i + ":" + a[i];
			    }
			    alert(aMsg);
			    var bMsg = "";
			    for(var j in b) {
				    bMsg += "\n" + j + ":" + b[j];
			    }
			    alert(bMsg);
			    alert(b.response.failureType);
*/

//var signInButton = new Ext.Button({text: 'Sign in'});
//signInButton.on('click', SubmitSignIn, signInForm);
signInForm.addButton({text: 'Sign in'}, SubmitSignIn, signInForm);

//var signInClearButton = new Ext.Button({text: 'Clear'});
//signInClearButton.on('click', signInForm.form.reset, signInForm.form);
signInForm.addButton({text: 'Clear'},  signInForm.form.reset, signInForm.form);
/*
    buttons: [{
        text: 'Sign in',
        handler: SubmitSignIn */
        //handler: function(){
            //signInForm.form.submit({
	    	//url:'SignIn.aspx',
	    	//waitMsg:'Signing In...',
	    	//success: function() {alert('success');}
	        /*
		    failure: function(a,b,c,d) {
			    alert('failure');
			    var aMsg = "";
			    for(var i in a) {
				    aMsg += "\n" + i + ":" + a[i];
			    }
			    alert(aMsg);
			    var bMsg = "";
			    for(var j in b) {
				    bMsg += "\n" + j + ":" + b[j];
			    }
			    alert(bMsg);
			    alert(b.response.failureType);
		    }*/
	    //});
        //}
        
/*    },
    {
        text: 'Clear',
        handler: function(){
            alert('clear');
            signInForm.form.reset();
        }
    }]
});*/

var memberInfo = undefined;

var SignOutCallback = function(options, success, response){
    if(success){
        signInForm.form.reset();
        memberInfo = undefined;
        surveyAccess = undefined;
        entityTypeAccess = undefined;
        summaryReportMenu.removeAll();
        sentReceivedReportMenu.removeAll();
        individualReportMenu.removeAll();
        
        reportTypeRadio = undefined;
        surveyTypeRadio = undefined;
        /*
        destroySurveyGroupRadioForm();
        destroyEntityForm();
        destroyDateRangeForm();
        destroyReportTypeForm();
        destroyGenerateButtonForm();
        */
        
        for(var i = 0, len = mainPanel.items.getCount(); i < len; i++){
            mainPanel.remove(mainPanel.items.last());
        }
        
        reportGenShowFormCount = 0;
        //reportGenSurveyGroupForm.destroy();
        
        Ext.get('MainMemberTitle').update('');
        Ext.get('MainCompanyTitle').update('');
        Ext.get('sign-in-mask').fadeIn();
        Ext.get('sign-in').show();
        
        //Ext.get('sign-out-message').show();
        signInForm.show();
        signInForm.items.first().focus(true);
        
    } else {
        Ext.Msg.show(
            {icon: Ext.MessageBox.WARNING,
            title:'Sign out',
            msg: 'Unexpected error when trying to sign out.<br/><br/>\n' +
            'Try again or close your web browser to completely sign out.<br/><br/>\n' +
            'Please, contact technical support if this problem persists.',
            buttons: {ok: 'Try again'}
            }
        );
    }
}

var surveyAccess;
var surveyData;
var entityTypeAccess;

var entityTypeAccessCallback = function(options, success, response){
    if(success) {
        //surveyAccess = eval("foo = " + response.responseText);
        //alert(surveyAccess);
        
        entityTypeAccess = eval(response.responseText);
        
        interfaceInit();
        
        //Ext.get('sign-in').hide();
        Ext.get('sign-in-mask').fadeOut({remove:false});
        
        //createTab('http://slashdot.org', 'Report Generator2');
        //alert('Access granted');
        createTab('RepGenMerge.aspx', 'Report Generator', true);
        //alert('Access granted2');
        
        var repEntityList = entityTypeAccess[2][0].EntityID + ':' + entityTypeAccess[2][0].EntityType;
        var repStartDate = new Date().add(Date.YEAR, -3).format("n/j/Y");
        var repEndDate = new Date().format("n/j/Y");
        
        menuInit();
        
        if(surveyData.groupCount > 1) {
            sentReceivedReportButtonProp.menu = sentReceivedReportMenu;
            individualReportButtonProp.menu = individualReportMenu;
        }
        
        if(surveyData.surveyNameCount > 1 || surveyData.surveyName[surveyData.survey[0].surveyName].length > 1){
            summaryReportButtonProp.menu = summaryReportMenu;
        }
        
        sentReceivedReportButton = new Ext.Toolbar.Button(sentReceivedReportButtonProp);
        individualReportButton = new Ext.Toolbar.Button(individualReportButtonProp);
        summaryReportButton = new Ext.Toolbar.Button(summaryReportButtonProp);
        
        toolBarItems = [' ', 'Quick Links:', ' ',
	        reportGeneratorButton, ' ',
            signOutButton, ' ',
            memberInfo["MemberStatusId"] &&
            (memberInfo["MemberStatusId"] == 1 ||
            memberInfo["MemberStatusId"] == 4 ||
            memberInfo["MemberStatusId"] == 5 ||
            memberInfo["MemberStatusId"] == 6)
            ? memberSiteButton : prefButton, ' ',
            '-', ' ', 'Reports:', ' ',
            summaryReportButton, ' ',
            sentReceivedReportButton, ' '
        ];
    
        if(entityTypeAccess && entityTypeAccess[2] && entityTypeAccess[2][0] &&
            (entityTypeAccess[2][0].ReportAccess == 'all' ||
            entityTypeAccess[2][0].ReportAccess.indexOf('ind') >= 0)) {
            toolBarItems[toolBarItems.length] = individualReportButton;
            toolBarItems[toolBarItems.length] = ' ';
        }
        toolBarItems[toolBarItems.length] = '->';
        
        for(var i = 0, len = toolBarItems.length; i < len; i++) {
            mainToolBar.add(toolBarItems[i]);
        }
        
        
        
        
        for(var groupID in surveyData.group){
            var groupName = surveyData.group[groupID];
            if(surveyData.groupCount > 1) {
                
                sentReceivedReportMenu.add(new Ext.menu.Item({
                    text: groupName,
                    handler:function(){ Ext.onReady(launchReport, this); },
                    scope:{
                        reportType: 'reportTypeSent',
                        surveyGroupID: groupID,
                        entityList: repEntityList,
                        startDate: repStartDate,
                        endDate: repEndDate}}));
                individualReportMenu.add(new Ext.menu.Item({
                    text: groupName,
                    handler:function(){ Ext.onReady(launchReport, this); },
                    scope:{
                        reportType: 'reportTypeIndividual',
                        surveyGroupID: groupID,
                        entityList: repEntityList,
                        startDate: repStartDate,
                        endDate: repEndDate}}));
            } else {
                sentReceivedReportButton.on('click',
                    function(){ Ext.onReady(launchReport, this); },
                    {reportType: 'reportTypeSent',
                    surveyGroupID: groupID,
                    entityList: repEntityList,
                    startDate: repStartDate,
                    endDate: repEndDate});
                    
                individualReportButton.on('click',
                    function(){ Ext.onReady(launchReport, this); },
                    {reportType: 'reportTypeIndividual',
                    surveyGroupID: groupID,
                    entityList: repEntityList,
                    startDate: repStartDate,
                    endDate: repEndDate});
            }
        }
        
        for(var surveyName in surveyData.surveyName){
            var s = surveyData.surveyName[surveyName];
            var len = s.length;
            
            if(surveyData.surveyNameCount > 1 || len > 1){
                for(var i = 0; i < len; i++){
                    itemText = (len > 1) ? ' - ' + s[i].groupName: '';
                    summaryReportMenu.add(new Ext.menu.Item({
                        text: surveyName + itemText,
                        handler:function(){ Ext.onReady(launchReport, this); },
                        scope:{
                            reportType: 'reportTypeSummary',
                            surveyGroupID: s[i].groupID,
                            surveyID: s[i].surveyID,
                            entityList: repEntityList,
                            startDate: repStartDate,
                            endDate: repEndDate}}));
                }
            } else {
                summaryReportButton.hideMenu();
                summaryReportButton.on('click',
                    function(){ Ext.onReady(launchReport, this); },
                    {reportType: 'reportTypeSummary',
                    surveyGroupID: s[0].groupID,
                    surveyID: s[0].surveyID,
                    entityList: repEntityList,
                    startDate: repStartDate,
                    endDate: repEndDate});
            }
        }
        
    } else {
        Ext.Msg.show(
            {icon: Ext.MessageBox.WARNING,
            title:'Entity access',
            msg: 'Unexpected error while determinig entity access.<br/><br/>\n' +
            'Refresh your web browser to continue.<br/><br/>\n' +
            'Please, contact technical support if this problem persists.',
            buttons: {ok: 'OK'}
            }
        );
    }
}

var SignInSubmitCallback = function(options, success, response){
    if(this.el) this.el.unmask();
    if(success){
        memberInfo = eval(response.responseText);
        if(memberInfo && memberInfo[0]) memberInfo = memberInfo[0];
        //var SignInMessage = document.getElementById("SignInMessage");
        //SignInMessage.style.display = null;
        if(memberInfo && memberInfo["MemberId"]) {
            Ext.get('MainMemberTitle').update('Welcome, ' + memberInfo["MemberFullName"] + ', ');
            Ext.get('MainCompanyTitle').update(memberInfo["CompanyName"] + '.');
            //Ext.Msg.alert('Status', 'Submit Sign In Form successful.');
            
            Ext.get('sign-in').hide();
            //Ext.get('sign-in-mask').fadeOut({remove:false});
            
            //alert(Ext.get('sign-out-button'));
            //dlg.show(Ext.get('sign-out-button'));
            
            Ext.Ajax.request({url: "SurveyAccess.aspx", callback: 
                function(options, success, response){
                    if(success) {
                        surveyAccess = eval("foo = " + response.responseText);
                        surveyData = {surveyName:{}, surveyNameCount:0,
                            group:{}, groupCount:0, survey:[]};
                        for(var i = 0, survey = surveyAccess, len = survey.length; i < len; i++){
                            var groupID = survey[i].SurveyGroupID;
                            var groupName = survey[i].SurveyGroupShortName;
                            var surveyID =  survey[i].SurveyID;
                            var surveyName = survey[i].SurveyShortName;
                            
                            surveyData.survey.push({
                                groupID: groupID,
                                groupName: groupName,
                                surveyID: surveyID,
                                surveyName: surveyName});
                            
                            if(!surveyData.group[groupID]){
                                surveyData.group[groupID] = groupName;
                                surveyData.groupCount++;
                            }
                            
                            if(!surveyData.surveyName[surveyName]){
                                surveyData.surveyName[surveyName] = [];
                                surveyData.surveyNameCount++;
                            }
                            
                            surveyData.surveyName[surveyName].push({
                                groupID: groupID,
                                groupName: groupName,
                                surveyID: surveyID});
                        }
                        
                        Ext.Ajax.request({url: "EntityTypeAccessJSON.aspx", callback: entityTypeAccessCallback});
                    } else {
                        Ext.Msg.show(
                            {icon: Ext.MessageBox.WARNING,
                            title:'Survey access',
                            msg: 'Unexpected error while determinig survey access.<br/><br/>\n' +
                            'Refresh your web browser to continue.<br/><br/>\n' +
                            'Please, contact technical support if this problem persists.',
                            buttons: {ok: 'OK'}
                            }
                        );
                    }
                }});
        } else {
            Ext.Msg.show(
                {icon: Ext.MessageBox.WARNING,
                title:'Sign in',
                msg: 'Username or password was incorrect.<br/><br/>\n' +
                'Please, try again.',
                buttons: {ok: 'Try again'},
                fn: function(){signInForm.items.last().focus(true);}
                }
            );
            //signInForm.items.last()[0].focus(true);
        }
        //SignInSubmitSuccess(options, response)
        
    } else {
        Ext.Msg.show(
            {icon: Ext.MessageBox.WARNING,
            title:'Sign in',
            msg: 'Unexpected error when trying to sign in.<br/><br/>\n' +
            'Try again or close your web browser and reopen to continue.<br/><br/>\n' +
            'Please, contact technical support if this problem persists.',
            buttons: {ok: 'Try again'}
            }
        );
    }
}



//signInForm.form.on('submit', function(){alert("onSuccess")});

Ext.onReady(function(){
    //var signInFormNear = Ext.get('signInFormNear');
    //signInFormNear.mask('Loading...', 'x-mask-loading');
    //signInFormEl.mask('Loading...', 'x-mask-loading');
    //Ext.get('signInForm').mask('Loading...', 'x-mask-loading');
    signInForm.render('signInForm');
    
    //signInForm.el.mask('Loading...', 'x-mask-loading');
    //setTimeout("signInFormEl.unmask()", 2000);
    signInForm.items.first().focus(true);
    //Ext.get('signInForm').unmask();
    
});

Ext.onReady(function(){
    if(queryParams && queryParams['EntityID'] && queryParams['EntityType'] && queryParams['SessionID']) {
        SingleSignOn(queryParams['EntityID'], queryParams['EntityType'], queryParams['SessionID']);
    }
});












