//form_controller.js

//registration functions - begin//

//controller - process and responds to events, usually user actions
function submitRegistrationForm(){
  validationResult = validateRegistrationForm($('email').value, $('password').value, $('confirm').value, $('terms').checked);
  if (validationResult != "true"){
    updateErrorBox(validationResult);
  }else{
    registerUser($('email').value, $('password').value);
  }
}

function registerUser(email, password){
  new Ajax.Request('./resources/registration.php',
    {
      method:'post', 
      parameters: {email: email, password: password},
      onSuccess: function(transport){
        var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
        if (response.errors != "none"){
          updateErrorBox(response.errors);
        }else{
//          replaceWithSuccessBox('registration','You have successfully registered your account.');
          clearElement("registration");
          loginAndRedirect(email, password, "main.html");
        }
      },
      onFailure: function(){ updateErrorBox('Could not register your account.'); }
    }
  );
}
//registration functions - end//


function loginAndRedirect(userName, password, page){
  new Ajax.Request('./resources/login.php',
    {
      method:'post', 
      parameters: {userName: userName, password: password},
      onSuccess: function(transport){
        var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
        if (response.errors != "none"){
          updateErrorBox(response.errors);
        }else{
          writeCookie("userName", userName, 48);
          writeCookie("sessionCode", response.sessionCode, 48);
          if (redirectPage){
            redirect(page);
          }else{
            loadContent();
          }
        }
      },
      onFailure: function(){ updateErrorBox('Could not register your account.'); }
    }
  );
}

//login functions - begin//

function submitLoginForm(){
  validationResult = validateLoginForm($('userName').value, $('password').value);
  if (validationResult != "true"){
    updateErrorBox(validationResult);
  }else{
    login($('userName').value, $('password').value);
  }
}

function login(userName, password){
  new Ajax.Request('./resources/login.php',
    {
      method:'post', 
      parameters: {userName: userName, password: password},
      onSuccess: function(transport){
        var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
        if (response.errors != "none"){
          updateErrorBox(response.errors);
        }else{
          writeCookie("userName", userName, 48);
          writeCookie("sessionCode", response.sessionCode, 48);          
          loadContent();
        }
      },
      onFailure: function(){ updateErrorBox('Could not register your account.'); }
    }
  );
}

function insertMainInstruction(){
  //if not logged in show the loggin form
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getSessionStatus.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode")},
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.status == "sessionActive"){
            clearElement('mainInstruction');
          }else{
            insertSnippet('mainInstruction');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
       insertSnippet('mainInstruction');
  }
}

function insertImportInstruction(){
  //if not logged in show the loggin form
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getSessionStatus.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode")},
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.status == "sessionActive"){
            clearElement('importInstruction');
          }else{
            insertSnippet('importInstruction');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
       insertSnippet('importInstruction');
  }
}

function insertLoginForm(){
  //if not logged in show the loggin form
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getSessionStatus.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode")},
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.status == "sessionActive"){
            clearElement('login');
          }else{
            insertSnippet('login');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
       insertSnippet('login');
  }
}

//login functions - end//

function insertTestTable(sortBy, sortDir){
  //if logged in show the testTable
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getTests.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"),  sortBy: sortBy, sortDir: sortDir },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.errors != "Session Expired."){
            if (response.errors != "none")
              errors = response.errors;
            displayTestTable(response);
            errors = "";
            
          }else{
            clearElement('testTableContainer');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
    clearElement('testTableContainer');
  }
}

function insertImportTable(sortBy, sortDir){
  //if logged in show the testTable
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getTests.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"),  sortBy: sortBy, sortDir: sortDir },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.errors != "Session Expired."){
            if (response.errors != "none")
              errors = response.errors;
            displayImportTable(response);
            errors = "";
            
          }else{
            clearElement('importContainer');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
    clearElement('importContainer');
  }
}

function importCreate(testTextBoxID){
  //if logged in show the testTable
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 

changes = '{"inserts":{"1":{"TestName":"' + jsonSanitize(document.getElementById(testTextBoxID).value) + '"}}, "updates":{}, "deletes":[]}';
//alert(changes);


    new Ajax.Request('./resources/makeTestChanges.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), changes: changes },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.success == "true"){
            if (response.errors != "")
              errors = response.errors;
            importProblems(response.latestTestID);
          }else{
//            clearElement('testTableContainer');
          }
        },
        onFailure: function(){ alert('No response from server'); }
      }
    );

  }else{
//    clearElement('testTableContainer');
  }
}

function commitTestChanges(){
  //if logged in show the testTable
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 

changes = testTable.getChanges(); 
//alert(changes);


    new Ajax.Request('./resources/makeTestChanges.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), changes: changes },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.success == "true"){
            if (response.errors != "")
              errors = response.errors;
            loadContent();
          }else{
            clearElement('testTableContainer');
          }
        },
        onFailure: function(){ alert('No response from server'); }
      }
    );

  }else{
    clearElement('testTableContainer');
  }
}

function saveFCTestResults(groupID){
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 

  grades = problemCard.getGrades(); 
//alert(changes);


    new Ajax.Request('./resources/saveTestResults.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), groupID: groupID, grades: grades },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.success == "true"){
            if (response.errors != ""){
              errors = response.errors;
              alert(response.errors);
            }
            displayMessage("testContainer","Test results saved. Be sure to return to Memory Planter tomorrow and take a new test for more problems from this problem group!");
          }else{
            alert(response.errors);
            clearElement('testContainer');
          }
        },
        onFailure: function(){ alert('No response from server'); }
      }
    );

  }else{
    clearElement('testContainer');
  }
}


function importProblems(groupID){
  //if logged in show the testTable
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 

    changes = '{"inserts":{';
      for(a = 1; a <= nop; a++){
        changes += '"'+a+'":{"Problem":"'+jsonSanitize(problems[a].problem)+'", "Pronunciation":"'+jsonSanitize(problems[a].pronunciation)+'", "Solution":"'+jsonSanitize(problems[a].solution)+'"}';
        if (a != nop)
          changes += ', ';
      }
    changes += '}, "updates":{}, "deletes":[]}'; 

//alert(changes);


    new Ajax.Request('./resources/makeProblemChanges.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), groupID: groupID, changes: changes },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.success == "true"){
            if (response.errors != "")
              errors = response.errors;
              redirect("fctest.html?groupID=" + groupID);
          }else{
//            clearElement('problemTableContainer');
          }
        },
        onFailure: function(){ alert('No response from server'); }
      }
    );

  }else{
//    clearElement('problemTableContainer');
  }
}

function commitProblemChanges(groupID){
  //if logged in show the testTable
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 

changes = problemTable.getChanges(); 
//alert(changes);


    new Ajax.Request('./resources/makeProblemChanges.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), groupID: groupID, changes: changes },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.success == "true"){
            if (response.errors != "")
              errors = response.errors;
            loadContent();
          }else{
            clearElement('problemTableContainer');
          }
        },
        onFailure: function(){ alert('No response from server'); }
      }
    );

  }else{
    clearElement('problemTableContainer');
  }
}

function togglePronunciation(){
  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 

    new Ajax.Request('./resources/togglePronunciation.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), groupID: groupID },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.errors == "none"){
            loadContent();
          }else{
            clearElement('problemTableContainer');
          }
        },
        onFailure: function(){ alert('No response from server'); }
      }
    );

  }else{
    clearElement('problemTableContainer');
  }
}

function insertProblemTable(groupIDPar, orderByPar, orderDirPar, lowerLimitPar, resultLimitPar){
  //if logged in show the testTable

  groupID = groupIDPar;
  orderBy = orderByPar;
  orderDir = orderDirPar;
  lowerLimit = lowerLimitPar;
  resultLimit = resultLimitPar;

  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getProblems.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), groupID: groupID, orderBy: orderBy, orderDir: orderDir, lowerLimit: lowerLimit, resultLimit: resultLimit },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.errors != "Session Expired."){
            if (response.errors != "none")
              errors = response.errors;
            displayProblemTable(response);
            errors = "";
//            loadContent();
          }else{
            clearElement('problemTableContainer');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
    clearElement('problemTableContainer');
  }
}

function insertFlashCardTest(groupIDPar){
  //if logged in show the testTable

  groupID = groupIDPar;

  if (readCookie("userName") != "" && readCookie("sessionCode") != ""){ 
    new Ajax.Request('./resources/getTestProblems.php',
      {
        method:'post', 
        parameters: {userName: readCookie("userName"), sessionCode: readCookie("sessionCode"), groupID: groupID },
        onSuccess: function(transport){
          var response = transport.responseText.evalJSON() || {errors: 'No response from server'};
          if (response.errors == "none"){
            if (response.numProblems == 0){
              displayMessage("testContainer","No problems scheduled for today.");;
            }else{
              displayFlashCardTest(response);
              errors = "";
//            loadContent();
            }
          }else{
            clearElement('testContainer');
          }
        },
        onFailure: function(){ response = {errors: 'No response from server'}; }
      }
    );

  }else{
    clearElement('testContainer');
  }
}

function signOut(){
  writeCookie("userName", "", 1);
  writeCookie("sessionCode", "", 1);          
  loadContent();
}