﻿$currentPageName = null;

$(document).ready(function() {

  jQuery.extend(
    jQuery.expr[":"],
    { reallyVisible: function(a) { return !(jQuery(a).is(':hidden') || jQuery(a).parents(':hidden').length); } }
  );

  if ($.trim($('.loggedInUserName').html()).length > 0)
  {
    $('.loggedInAs').show();
  }
  
  $('.ratedThanks').hide();
  
  $nrc = $('#newReviewContainer');
  
  if ($nrc != null)
  {
    $nrc.hide();
  }

  //Nav menu hover (not for IE6 or older, because it's stupid)
  //if (!$.browser.msie || eval($.browser.version.substr(0,1)) >= 7)
  //{
    $('li.dropMenuParent').hover(
        function() {
            $('ul', this).css('visibility', 'visible');
        },
        function() {
            $('ul', this).css('visibility', 'hidden');
        }
    );
  //}

  
  // Round corners on drop down menu lists
  $('.dropMenu').corners('bottom');
 

  //Nav menu submenu item click
  $('.dropMenu li').click(function() {
    window.location = $(this).find('a').attr('href');
  });


  $('a[rel=external]').click(function() {
    window.open($(this).attr('href'));
    return false;
  });



  // Registration submission
  $('.regButton').click(function() {
    clearMessages();
    
    //Validation
    $un = $('.regUserName');
    $e = $('.regEmail');
    $p = $('.regPassword');
    $pc = $('.regPassword2');

    var msg = new Array();
    $un.removeClass('invalid');
    $e.removeClass('invalid');
    $p.removeClass('invalid');
    $pc.removeClass('invalid');

    if ($.trim($un.val()).length == 0) {
      msg[msg.length] = 'Username is required.';
      $un.addClass('invalid');
    }

    if ($.trim($e.val()).length == 0) {
      msg[msg.length] = 'Email is required.';
      $e.addClass('invalid');
    }
    else if (!isValidEmail($e.val()))
    {
      msg[msg.length] = 'Email is invalid.';
      $e.addClass('invalid');
    }

    if ($.trim($p.val()).length == 0) {
      msg[msg.length] = 'Password is required.';
      $p.addClass('invalid');
    }
    else if ($.trim($pc.val()).length == 0) {
      msg[msg.length] = 'Password confirmation is required.';
      $pc.addClass('invalid');
    }
    else if ($p.val() != $pc.val()) {
      msg[msg.length] = 'Password fields do not match.';
      $p.addClass('invalid');
      $pc.addClass('invalid');
    }


    if (msg.length > 0) {
      displayMessages(msg);
      return false;
    }
  });
  
  
  // Reset password request
  $('.resetButton').click(function() {
    clearMessages();
    
    //Validation
    $e = $('.resetEmail');

    var msg = new Array();
    $e.removeClass('invalid');

    if ($.trim($e.val()).length == 0) {
      msg[msg.length] = 'Email is required.';
      $e.addClass('invalid');
    }
    else if (!isValidEmail($e.val()))
    {
      msg[msg.length] = 'Email is invalid.';
      $e.addClass('invalid');
    }

    if (msg.length > 0) {
      displayMessages(msg);
      return false;
    }
  });
  


  // Update password
  $('.updatePassButton').click(function() {
    clearMessages();
    
    //Validation
    $p = $('.resetPassword');
    $pc = $('.resetPassword2');

    var msg = new Array();
    $p.removeClass('invalid');
    $pc.removeClass('invalid');

    if ($.trim($p.val()).length == 0) {
      msg[msg.length] = 'Password is required.';
      $p.addClass('invalid');
    }
    else if ($.trim($pc.val()).length == 0) {
      msg[msg.length] = 'Password confirmation is required.';
      $pc.addClass('invalid');
    }
    else if ($p.val() != $pc.val()) {
      msg[msg.length] = 'Password fields do not match.';
      $p.addClass('invalid');
      $pc.addClass('invalid');
    }

    if (msg.length > 0) {
      displayMessages(msg);
      return false;
    }
  });
  
  
    // Review submission
  $('#revSubmit').click(function() {
    clearMessages();
    enableButton('revSubmit');

    //Validation
    $pid = $('.reviewPlaceID');
    $t = $('#revTitle');
    $r = $('#revText');
    
    var msg = new Array();
    $t.removeClass('invalid');
    $r.removeClass('invalid');
    
    if ($.trim($t.val()).length < 3)
    {
      msg[msg.length] = 'Title is required.';
      $t.addClass('invalid');
    }

    if ($.trim($r.val()).length < 3)
    {
      msg[msg.length] = 'Review text is required.';
      $r.addClass('invalid');
    }

    if (msg.length > 0)
    {
      displayMessages(msg);
      return false;
    }
    else
    {
      disableButton('revSubmit');

      $.ajax({
        type: "POST",
        url: $currentPageName + "/SubmitReview",
        data: "{ 'pid': '" + $pid.val() + "', 'pname': '" + $('.noLink').html().replace(/\'/g, "\\'") + "', 'title': '" + $t.val().replace(/\'/g, "\\'") + "', 'review': '" + $r.val().replace(/\'/g, "\\'") + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
          if (result.d.ErrorMessages && result.d.ErrorMessages.length > 0)
          {
            displayMessages(result.d.ErrorMessages);
            enableButton('revSubmit');
          }
          else
          {
            $('.revContainer').hide();
            $('.firstToReview').hide();
            
            $nrc.find('#newRevTitle').html(result.d.Value.Title);
            $nrc.find('#newRevDate').html(dateFix(result.d.Value.ReviewDate).format('mmmm d yyyy, h:MM TT'));
            $nrc.find('#newRevUserName').html(result.d.Value.ReviewedBy.UserName);
            $nrc.find('#newRevText').html(result.d.Value.Text);
            
            $nrc.show('slow');
          }
        },
        error: function(result) {
            displayMessages([result.status + ' ' + result.statusText]);
        }
      });

    }

  });
  
  // New place submission
  $('.submitButton').click(function() {
    clearMessages();
    
    //Validation
    $n = $('.subName');
    $a = $('.subAddress');
    $d = $('.subDescription');
    $f1 = $('.subPhoto1');
    $f2 = $('.subPhoto2');
    $f3 = $('.subPhoto3');
    
    
    var msg = new Array();
    $n.removeClass('invalid');
    $a.removeClass('invalid');
    $d.removeClass('invalid');
    $f1.removeClass('invalid');
    $f2.removeClass('invalid');
    $f3.removeClass('invalid');

    if ($.trim($n.val()).length == 0)
    {
      msg[msg.length] = 'Name is required.';
      $n.addClass('invalid');
    }

    if ($.trim($a.val()).length == 0)
    {
      msg[msg.length] = 'Address is required.';
      $a.addClass('invalid');
    }
    
    if ($.trim($d.val()).length < 3)
    {
      msg[msg.length] = 'A brief Description is required.';
      $d.addClass('invalid');
    }
    
    if ($.trim($f1.val()).length > 0 && !IsValidImageType($f1.val()))
    {
      msg[msg.length] = 'Invalid file type.  Only JPEG, GIF and PNG images allowed.';
      $f1.addClass('invalid');
    }

    if ($.trim($f2.val()).length > 0 && !IsValidImageType($f2.val()))
    {
      msg[msg.length] = 'Invalid file type.  Only JPEG, GIF and PNG images allowed.';
      $f2.addClass('invalid');
    }

    if ($.trim($f3.val()).length > 0 && !IsValidImageType($f3.val()))
    {
      msg[msg.length] = 'Invalid file type.  Only JPEG, GIF and PNG images allowed.';
      $f3.addClass('invalid');
    }

    if (msg.length > 0)
    {
      displayMessages(msg);
      return false;
    }
    else
    {
      disableButtonByClassName('submitButton');
    }
  });
  
  
  $('.auto-submit-star').rating( { 
    callback: function(value, link){ 
      var pid = $(link).parent().attr("id");
      var r = $.trim(value.substring(value.indexOf(':') + 1, value.indexOf('/10')));
      
      $.ajax({
        type: "POST",
        url: $currentPageName + "/SubmitRating",
        data: "{ 'pid': '" + pid + "', 'r': '" + r + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
          if (result.d.ErrorMessages && result.d.ErrorMessages.length > 0)
          {
            displayMessages(result.d.ErrorMessages);
          }
          else
          {
            $(link).parents('.ratingContainer').find('.star-rating-control').hide();
            $(link).parents('.ratingContainer').find('.ratedThanks').show('slow');
          }
        },
        error: function(result) {
            displayMessages([result.status + ' ' + result.statusText]);
        }
      });

      
    } 
  });

});


function isValidEmail(email) {
  var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
  return pattern.test(email);
}


function displayMessages(messages)
{
  var messageList = '';

  for (var m = 0; m < messages.length; m++)
  {
    messageList += "<li>" + messages[m] + "</li>";
  }

  $('.messageContainer').html("<ul>Please correct the following items and try again: " + messageList + "</ul>");
}

function clearMessages()
{
  $('.messageContainer').html('');
}


function IsValidImageType(filename)
{
	var reg = /(gif|png|jpe?g?)$/i;
	
	if (!reg.test(filename))
	{
		return false;
	}

  return true;
}



function dateFix(obj) {
  if (obj == null) {
      return obj;
  }
  
  // ASP.NET JSON date?
  if (typeof obj === "string") {
      var match = obj.match(/^\/Date\((\d+)\)\/$/);
  
      if (!match) {
          return obj;
      }
      
      return new Date(parseInt(match[1]));
  }
  
  // string or number
  if (typeof obj !== "object") {
      return obj;
  }
  
  // array or object
  jQuery.each(obj, function(key, val) {
      obj[key] = dateFix(val);
  });
  
  return obj;
}


function disableButtonByClassName(className) 
{
  setTimeout("$('." + className + "').attr('disabled', 'disabled')", 10);
}


function disableButton(id) 
{
  setTimeout("$('#" + id + "').attr('disabled', 'disabled')", 10);
}

function enableButton(id) 
{
  $('#' + id).removeAttr('disabled');
}

function isEnabled(id)
{
  var isDisabled = $('#' + id).attr('disabled');
  
  return !isDisabled;
}

new function($) {
  $.fn.setCursorPosition = function(pos) {
    if ($(this).get(0).setSelectionRange) {
      $(this).get(0).setSelectionRange(pos, pos);
    } else if ($(this).get(0).createTextRange) {
      var range = $(this).get(0).createTextRange();
      range.collapse(true);
      range.moveEnd('character', pos);
      range.moveStart('character', pos);
      range.select();
    }
  }
}(jQuery);


function stripHTML(html)
{
  return $('<div>' + html + '</div>').text();
}
