﻿// // Javascript for Feedback user control.

// Defining constants for callback purposes
var FEEDBACK_SEPARATOR = 'FEEDBACK_&';
var SEND_EMAIL_ACTION = 'SEND_EMAIL';
var SHOW_ACTION = 'SHOW';
var SHOW_ANONYMOUS_ACTION = 'SHOW_ANONYMOUS';
var SHOW_AUTHENTICATED_ACTION = 'SHOW_AUTHENTICATED';
var VALIDATE_ACTION = 'VALIDATE';
var RESULT_ACTION = 'RESULT';
var NO_NAME_STRING = 'NO_NAME';
var OK_RESULT_STRING = 'OK';
var ERROR_RESULT_STRING = 'ERROR';

// Defining constant strings for user output
var PROCESSING_FEEDBACK_STRING = "Processing your feedback........!!";
var SUCCESSFUL_FEEDBACK_STRING = "Your feedback has been processed successfully!!";
var ERROR_FEEDBACK_STRING = "There was an error in processing your feedback!!";
var FEEDBACK_USER_INFO_STRING = "Your views of the NBDC Mapping System and how we can make it better for you" + 
                                " are important to us. So if you have any suggestions, spot any errors or " +
                                "experience any difficulty using the site please let us know using the form below.";

// Defining constant strings control IDs
var EMAIL_TEXTBOX_ID = "TitleBanner1_FeedBack1_tbEmail";
var COMMENTS_TEXTBOX_ID = "TitleBanner1_FeedBack1_tbComments";
var NAME_TEXTBOX_ID = "TitleBanner1_FeedBack1_tbName";
var EMAIL_REQUIRED_LABEL_ID = "Feedback_emailRequiredLabel";
var EMAIL_INVALID_LABEL_ID = "Feedback_emailInvalidLabel";
var COMMENTS_REQUIRED_LABEL_ID = "Feedback_commentsRequiredLabel";
var USER_INFO_LABEL_ID = "Feedback_userInfoLabel";
var SEND_LABEL_ID = "TitleBanner1_FeedBack1_buSend";
var CLOSE_LABEL_ID = "TitleBanner1_FeedBack1_buClose";
//var FEEDBACK_MODAL_POPUP_ID = "TitleBanner1_Feedback_ModalPopupExtender";
//var INDICATOR_IMAGE_ID = "TitleBanner1_Feedback1_Feedback_activity_image";

// Defines the amount of time (in milliseconds), that elapses between the user
// receiving the confirmation and the popup window automatically closing down.
var FEEDBACK_DELAY = 500;
var CLOSE_POPUP_AUTOMATICALLY = true;

var SUBMIT_oldOnMouseClick = null;
var CANCEL_oldOnMouseClick = null;

function FEEDBACK_Close()
{      

    // CLOSE MODAL POPUP WINDOW
    var modalPopupBehavior = $find(FEEDBACK_MODAL_POPUP_ID);
    if(modalPopupBehavior != null)
    {                
        modalPopupBehavior.hide();
    }
}

function FEEDBACK_ShowDialog()
{
     FEEDBACK_callServer(SHOW_ACTION);
}

function FEEDBACK_Show(mode)
{      
    // OPEN MODAL POPUP WINDOW
    var modalPopupBehavior = $find(FEEDBACK_MODAL_POPUP_ID);
    if(modalPopupBehavior != null)
    {
        modalPopupBehavior.show();
        
        // RESET CONTROLS
        FEEDBACK_resetControls(); 
        FEEDBACK_enableSubmitButton();
    }
     
    if(mode == SHOW_ANONYMOUS_ACTION)
    {
        // Set focus on Email text field.
        var emailTextField = document.getElementById(EMAIL_TEXTBOX_ID);
        emailTextField.focus();
    }
    else
    {       
        // Set focus on Comments text field.
        var commentsTextField = document.getElementById(COMMENTS_TEXTBOX_ID);
        commentsTextField.focus();
    }
    
}

function stopEvent(e) {
	if(!e) var e = window.event;
	
	//e.cancelBubble is supported by IE - this will kill the bubbling process.
	e.cancelBubble = true;
	e.returnValue = false;

	//e.stopPropagation works only in Firefox.
	if (e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
	}
	return false;
}

function FEEDBACK_OnKeyDown(e)
{
  if (e.keyCode == 27) 
  {
    FEEDBACK_Close();
    stopEvent(e);
  } 
  else if (e.keyCode == 13) 
  {
      FEEDBACK_callServer('VALIDATE');
      stopEvent(e);
  }
}

function FEEDBACK_enableSubmitButton()
{
    var submitLabel = document.getElementById(SEND_LABEL_ID);
    
    if(SUBMIT_oldOnMouseClick != null)
        submitLabel.onclick = SUBMIT_oldOnMouseClick;
    submitLabel.disabled = false;
}

function FEEDBACK_resetControls()
{
    var emailTextField = document.getElementById(EMAIL_TEXTBOX_ID);
    var commentsTextField = document.getElementById(COMMENTS_TEXTBOX_ID);
    var nameTextField = document.getElementById(NAME_TEXTBOX_ID);
    var emailRequiredLabel = document.getElementById(EMAIL_REQUIRED_LABEL_ID);
    var emailInvalidLabel = document.getElementById(EMAIL_INVALID_LABEL_ID);
    var commentsRequiredLabel = document.getElementById(COMMENTS_REQUIRED_LABEL_ID);
    var userInfoLabel = document.getElementById(USER_INFO_LABEL_ID);
    var closelLabel = document.getElementById(CLOSE_LABEL_ID);
       
    // ENABLE BUTTONS
    if(CANCEL_oldOnMouseClick != null)
        closelLabel.onclick = CANCEL_oldOnMouseClick;
    closelLabel.disabled = false;
    
    // CLEAR TEXTBOXES
    emailTextField.value = "";
    commentsTextField.value = "";
    nameTextField.value = "";
    
    // RESET USER INFO LABEL 
    userInfoLabel.style.color = "black";
    userInfoLabel.innerHTML = FEEDBACK_USER_INFO_STRING;
    
    // HIDE ERROR LABELS
    emailRequiredLabel.style.display = "none";
    emailInvalidLabel.style.display = "none";
    commentsRequiredLabel.style.display = "none";
}

function FEEDBACK_validateForm()
{
    var formIsValid = true;
    var emailTextField = document.getElementById(EMAIL_TEXTBOX_ID);
    var commentsTextField = document.getElementById(COMMENTS_TEXTBOX_ID);
    var emailRequiredLabel = document.getElementById(EMAIL_REQUIRED_LABEL_ID);
    var emailInvalidLabel = document.getElementById(EMAIL_INVALID_LABEL_ID);
    var commentsRequiredLabel = document.getElementById(COMMENTS_REQUIRED_LABEL_ID);
    
    // RESET LABELS' VISIBILITY
    emailRequiredLabel.style.display = "none";
    emailInvalidLabel.style.display = "none";
    commentsRequiredLabel.style.display = "none";
    
    // VALIDATE EMAIL FIELD
    if(emailTextField.value == '')
    {
        formIsValid = false;
        emailRequiredLabel.style.display = "inline";
    }
    else
    {
        var isEmailValid = STRING_echeck(emailTextField.value);
        if(!isEmailValid)  
        {
            formIsValid = false;
            emailInvalidLabel.style.display = "inline";
        }
    }
    
    // VALIDATE COMMENTS FIELD
    if(commentsTextField.value == '')
    {
        formIsValid = false;
        commentsRequiredLabel.style.display = "inline";
    }
    
    return formIsValid;
}

// *** CALLBACK FUNCTIONS *****************************************************

function FEEDBACK_callServer(message)
{   
    var action = message;
    
    switch (action) {
        case SHOW_ACTION:
            // FORMULATING CALLBACK STRING      
                var callbackMessage = SHOW_ACTION;                
                              
                // INVOKING CALLBACK
                FEEDBACK_DoCallBack(callbackMessage, "Feedback");
        break;
        case VALIDATE_ACTION:
            var submitLabel = document.getElementById(SEND_LABEL_ID);
            var closelLabel = document.getElementById(CLOSE_LABEL_ID);
            
            // DISABLE SUBMIT BUTTON
            SUBMIT_oldOnMouseClick = submitLabel.onclick;
            submitLabel.onclick = null;
            submitLabel.disabled = true;
            
            // VALIDATE FORM
            var isFormValid = FEEDBACK_validateForm();
            if(isFormValid)
            {   
                // DISABLE CANCEL BUTTON
                CANCEL_oldOnMouseClick = closelLabel.onclick;
                closelLabel.onclick = null;
                closelLabel.disabled = true;
                
                // GETTING TEXT VALUES FROM INPUT BOXES        
                var emailTextField = document.getElementById(EMAIL_TEXTBOX_ID);
                var commentsTextField = document.getElementById(COMMENTS_TEXTBOX_ID);
                var nameTextField = document.getElementById(NAME_TEXTBOX_ID);
                var userInfoLabel = document.getElementById(USER_INFO_LABEL_ID);
                var indicatorImage = document.getElementById(INDICATOR_IMAGE_ID);
                
                // GETTING TEXT VALUES FROM INPUT BOXES
                var emailText = emailTextField.value;
                var commentsText = commentsTextField.value;
                var namesText = null;

                if(nameTextField.value != '')
                    namesText = nameTextField.value;
                
                // FORMULATING CALLBACK STRING      
                var callbackMessage =   SEND_EMAIL_ACTION + FEEDBACK_SEPARATOR +
                                        emailText + FEEDBACK_SEPARATOR +
                                        namesText + FEEDBACK_SEPARATOR +
                                        commentsText;
                
                
                indicatorImage.style.display = "inline";
                userInfoLabel.innerHTML  = PROCESSING_FEEDBACK_STRING; 
                userInfoLabel.style.color = "red";
                
                // INVOKING CALLBACK
                FEEDBACK_DoCallBack(callbackMessage, "Feedback");   
                
                                           
            }
            else
            {
                // ENABLE SUBMIT LABEL
                submitLabel.onclick = SUBMIT_oldOnMouseClick;
                submitLabel.disabled = false;
            }
            
            
            break
        default:
            break
    }//end Switch
    
    
}

function FEEDBACK_processMyResult (returnMessage, context)
{
    var splittedReturnMessage = returnMessage.split(FEEDBACK_SEPARATOR);
    var action = splittedReturnMessage[0];
    
    switch (action) {
        case SHOW_ANONYMOUS_ACTION:
        
            FEEDBACK_Show(SHOW_ANONYMOUS_ACTION);
        
        break
        case SHOW_AUTHENTICATED_ACTION:
            
            FEEDBACK_Show(SHOW_AUTHENTICATED_ACTION);
            
            var fullName = splittedReturnMessage[1];
            var email = splittedReturnMessage[2];
                        
            var emailTextField = document.getElementById(EMAIL_TEXTBOX_ID);
            var nameTextField = document.getElementById(NAME_TEXTBOX_ID);
            
            emailTextField.value = email;
            nameTextField.value = fullName;
        
        break
        case RESULT_ACTION:
            
            var userInfoLabel = document.getElementById(USER_INFO_LABEL_ID);
            var result = splittedReturnMessage[1];
            
            var indicatorImage = document.getElementById(INDICATOR_IMAGE_ID);
            indicatorImage.style.display = "none";
            
            if(result == OK_RESULT_STRING)
            {                   
                FEEDBACK_Close();
                window.setTimeout("CONFIRMATIONDIALOG_ShowDialog('FEEDBACK');",FEEDBACK_DELAY);
                
            }
            else if(result == ERROR_RESULT_STRING)
            {   
                FEEDBACK_resetControls();
                FEEDBACK_enableSubmitButton();
                userInfoLabel.style.color = "red";
                userInfoLabel.innerHTML = ERROR_FEEDBACK_STRING;
            }          
            
            break
        default:
            break
    }//end Switch
}

function FEEDBACK_postMyError(returnmessage, context)
{
    alert("Callback Error: " + returnmessage + ", " + context);
}