﻿var isFacebookCall = false;
if (window.location.href.toLowerCase().indexOf('facebook') > -1)
  isFacebookCall = true;
/* Start up initialisation
********************************/

$(document).ready(function() {
    //replaceHeaderTags();
    //enhanceHelp();
    setupShrinkArrows();
    updateLoginLinks($(document));
    enhanceCheckboxes();
  });

/* Setup functions
********************************/

function replaceHeaderTags()
{
  $('.Replace').each(function() {
        this.style.backgroundImage = "url(/Images/Headers/" + this.id + ".jpg)";
        this.style.height = "49px";
        this.style.backgroundRepeat = "no-repeat";
        this.innerHTML = '';
      }); 
}

function enhanceHelp()
{
   $('.Help').each(function() {
      $(this).empty();
      $(this).append('<img src="/Images/Layout/Information.jpg" alt="Help">');
      $(this).find('img').click(function() {
            loadHelp($(this).parent()[0].id);
          });
      $(this).addClass('FloatHelp');
      });
}

function setupShrinkArrows()
{
  var arrowUp = '/Images/Icons/ArrowUp.jpg';
  var arrowDown = '/Images/Icons/ArrowDown.jpg';
  if ($('.ItemName').parent().find('table').length > 0)
  {
    $('.ListGroup .ItemName').prepend('<img src="' + arrowUp + '" alt="Close list" class="ToggleLists" />');
    
    $('.ListGroup .ItemName > img').click(function() {
        var tblList = $(this).parent().parent().find('table');
        // Make sure we wrap the table with a div otherwise it doesn't slide down nicely.
        if (!tblList.parent().hasClass('wrapper')) 
        {
          tblList.wrap('<div class="wrapper"></div>');
        }
        tblList = tblList.parent();
        
        if (tblList.css('display') == 'none')
        {
          tblList.slideDown();
          this.setAttribute('src', arrowUp);
        } 
        else
        {
          tblList.slideUp();
          this.setAttribute('src', arrowDown);
        }
     });
   }
}

var lastClickedTr;

function enhanceCheckboxes()
{
  $('table.advancedSelect').advancedSelect();
}

function unCheckAll(tableObj)
{
  tableObj.find(':checkbox').each(function() {
    this.checked = !this.checked;
  });
}

function updateLoginLinks(container)
{
  return;
  // Currently disabled due to popup issues.
  var links = container.find('.login')
  
  links.click(function() {
            $.get('/JSTemplates/LoginTemplate.htm?v0.75', updateLoginLinks_callback.bind(this));
          return false;
        });
}

/* Data Functions
********************************/

function updateLoginLinks_callback(data)
{
  loadModal(data, "Login / Register");

  var enhancedLogin = $('#EnhancedLogin');
  enhancedLogin.find('form').submit(function() {
      return validateLogin();
    });
  enhancedLogin.find('#txtEmail').blur(function() {
      return isEmailRegistered();
    });
    
  $('#pnlConfirmDetails').hide();
  enhancedLogin.find('.GoodInformation:last').hide();

  enhancedLogin.find('form')[0].setAttribute('action', this.getAttribute('href'));
}
  
function isEmailRegistered()
{
  var email = $('#txtEmail')[0].value;  
  
  ajaxPostRequest('/Services/UserInformation.asmx/IsEmailRegistered', '{"email": "' + email + '"}', isEmailRegistered_callback);
}

function isEmailRegistered_callback(res)
{
  if (res.error != null)
  {
    return;
  }
  if (!res.value)
  { 
    $('#pnlConfirmDetails').slideDown();
  }
  else
  {
    $('#pnlConfirmDetails').slideUp();
  }
}
  
function validateLogin()
{
  var email = $('#txtEmail').val();
  var pass = $('#txtPassword').val();
  var rememberMe = $('#chkRememberMe').val();
  
  if ($('#pnlConfirmDetails:visible').length == 0)
  {
    ajaxPostRequest('/Services/UserInformation.asmx/Login', '{"email": "' + email + '", "password": "' + pass + '", "rememberMe": "' + rememberMe + '"}', 
        validateLogin_callback);
  }
  else
  {
    var firstName = $('#txtFirstName').val();
    var lastName = $('#txtLastName').val();
    var dateOfBirth = $('#txtDateOfBirth').val();
    
    ajaxPostRequest('Services/UserInformation.asmx/Register', 
        '{"email": "' + email + '", "password": "' + pass + '", "rememberMe": "' + rememberMe + '", "firstName": "' + firstName +
        '", "lastName": "' + lastName + '", "dateOfBirth": "' + dateOfBirth + '"}', validateLogin_callback, 
        $('#EnhancedLogin > form').find('button')[0]);
  }
  //LoginStatus.Login(email, pass, false, validateLogin_callback.bind(this));
  
  return false;
}

function validateLogin_callback(res)
{
  if (res.error != null)
  {
    alert(res.error.Message);
    return;
  }
  else
  {
    if (res.value.length == 0)
    {
      var redirectURL = $('#EnhancedLogin').find('form').attr('action');
      if (redirectURL.toLowerCase() == "/login.aspx")
      {
        redirectURL = window.location.href;
        
        if (window.location.href.toLowerCase().indexOf("/login.aspx") > -1)
          redirectURL = "/";
      }
      
      $('#EnhancedLogin > form').slideUp("fast", function() 
      {
          $('#EnhancedLogin').find('.GoodInformation').slideDown("medium");
          $('#EnhancedLogin').find('.GoodInformation > a').attr('href', redirectURL);
          setInterval(function() {window.location.href = $('.GoodInformation > a').attr('href');}, 6000);
      })
    }
    else 
    {
      // The full reason why the login didn't work will be returned from the server.
      $('#EnhancedLogin').find('.HighlightInformation').html("<ul><li>" + res.value.join("</li><li>") + "</li></ul>");
    }
  }
}

function loadHelp(id)
{
  getPopup('GetHelpDetails', '{"helpName": "' + id + '"}', loadHelp_callback);
}

function loadHelp_callback(data)
{
  if (data.error != null)
  {
    alert(data.error);
  }
  else
  {
    loadModal(data.value, "Help");
  }
}

/* Generic Library Functions
********************************/

// Bind a function to a particular scope!
Function.prototype.bind = function (object)
{
 var method = this;
 return function ()
 {
 	return method.apply(object, arguments);
 };
};

//function loadModal(html)
//{
//  $('#Footer').after('<div id="ModalPopup">' + html + '</div>')
//  $('#ModalPopup').modal({onClose: function (dialog) {
//        $.modal.close(); // clean up the dialog elements
//        $('#ModalPopup').remove();
//      }});
//}

function getPopup(methodName, jsonData, callbackFunction)
{
  ajaxPostRequest("/Services/GetPopup.asmx/" + methodName, jsonData, callbackFunction);
}

function ajaxPostRequest(url, jsonData, callbackFunction, loadingAfterElement)
{
  if ($('#Loading').length == 0)
  {
      var req = $.ajax({
          url: url,
          data: jsonData,
          success: function(data) {
          $('#Loading').remove();
              // Apparently since the 3.5 framework the data is returned as an object then d then the object returned.
              callbackFunction(data.d);
          },
          type: "POST",
          beforeSend: function(xhr) {
              // IE Issue, unless this is set to nothing first it will just append the json content type!?! Annoying.
              xhr.setRequestHeader("Content-type", "");
              xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");
          },
          dataType: "json"
      });
    
    if (loadingAfterElement != undefined)
    {
      $(loadingAfterElement).after('<img src="Images/Icons/Loading.gif" id="Loading" alt="Loading..." />');
    }
  }
}