// global variables
var short_tag = '';

var title_limit = 30;

$(document).ready(function(){   
    
  // initialize hiding/showing/disabling of stuff on index
  $(".url_form").show();
  $(".type").val('0');
  $(".message_form").hide();
  $(".contact_form").hide();  
  $("#create_results_section").hide();   
  $("#create_section").show(); 
  $("#create_tag_section").hide();  
  $("#createButton.url_form").attr('disabled', '');
  $("#createButton.contact_form").attr('disabled', '');
  $("#createButton.message_form").attr('disabled', '');

  $(".url_form#shadowBoxCreateForm").hide();

  // print button clicked, open a new tab and trigger print
  $("#printButton").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    printWindow = window.open("/print/" + short_tag);
    setTimeout(function(){printWindow.print()}, 1000);
  });

  // create url button clicked
  $("#createButton.url_form").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    createUrl(); 
  });

  // create contact button clicked
  $("#createButton.contact_form").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    createContact();
  });

  // create message button clicked
  $("#createButton.message_form").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    createMessage();
  });

  // ignore message form submits, weird that this isn't an issue for url/contact forms
  $("form.message_form#create").submit(function(e){
    if (!e) var e = window.event;
    e.preventDefault();
    createMessage();
  });

  $("#st_email_large_create").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    $( "#share_email" ).dialog('open');
  });

  $( "#share_email" ).dialog({
    autoOpen: false,
    width: 305,
    modal: true,
    resizable: false,
    buttons: {
      "Submit": function() {
        var email = $('.share_email_form#email_field').val();
        var body = $('textarea.share_email_form').val();

        // email share clicked for a create action
        if ( $('#print.tag').is(':visible') ) { 
          var short_tag = $('#print.tag').text();
          var title = $('#print_title').text();
        } 
        // email share clicked for a lookup action
        else{
          var short_tag = $.trim($(".tagSearch").val());
          var title = $('.link_title_lookup_results').text();
        }       
        
        requestShareEmail(email, body, short_tag, title);
      },
      Cancel: function() {
        $( this ).dialog( "close" );
      }
    },
    close: function() {
    }
  });

  $("#share_email_confirm").dialog({
    autoOpen:false,
    modal: true,
    resizable: false,
    width: 250,
    buttons:{
      "Ok":function(){$(this).dialog('close');}
    }
  });

  // URL chosen for create link
  $("#url_icon").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    if($("#url_icon").attr('src') != '/images/url_icon_selected.png'){
      $(".url_form").show();
      $(".url_form#shadowBoxCreateForm").hide();
      $(".message_form").hide();
      $("#message_icon").attr('src', '/images/message_icon.png');
      clearMessageFields();
      $(".contact_form").hide();
      $("#contact_icon").attr('src', '/images/contact_icon.png');
      clearContactFields();
      $("#url_icon").attr('src', '/images/url_icon_selected.png');
      toggleCreateDataFalse();
      $(".url_form#createButton").attr('disabled', '');
      editTitle($(".create_url#title"));
    }
  });

  // contact chosen for create link
  $("#contact_icon").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    if($("#contact_icon").attr('src') != '/images/contact_icon_selected.png'){
      $(".url_form").hide();
      $("#url_icon").attr('src', '/images/url_icon.png');
      clearUrlFields();
      $(".message_form").hide();
      $("#message_icon").attr('src', '/images/message_icon.png');
      clearMessageFields();
      $(".contact_form").show();
      $(".contact_form#shadowBoxCreateForm").hide();
      $("#contact_icon").attr('src', '/images/contact_icon_selected.png');
      toggleCreateDataFalse();
      $(".contact_form#createButton").attr('disabled', ''); 
      editTitle($(".create_contact#title"));
    }
  });

  // message chosen for create link
  $("#message_icon").click(function(e) {
    if (!e) var e = window.event;
    e.preventDefault();
    if($("#message_icon").attr('src') != '/images/message_icon_selected.png'){
      $(".url_form").hide();
      $("#url_icon").attr('src', '/images/url_icon.png');
      clearUrlFields();
      $(".message_form").show();
      $(".message_form#shadowBoxCreateForm").hide();
      $(".contact_form").hide();
      $("#contact_icon").attr('src', '/images/contact_icon.png');
      clearContactFields();
      $("#message_icon").attr('src', '/images/message_icon_selected.png');
      toggleCreateDataFalse();
      $(".message_form#createButton").attr('disabled', ''); 
      editTitle($(".create_message#title"));
    }
  });
});

// when something is typed into url create field
$(".url_form input").live('keyup', creating);
// when something is typed into the url title field
$(".create_url#title").live('keyup', function(){
  editTitle($(".create_url#title"));
});

// when something is typed into any contact create field
$(".contact_form input").live('keyup', creating);
// when something is typed into the contact title field
$(".create_contact#title").live('keyup', function(){
  editTitle($(".create_contact#title"));
});

// when something is typed into any message create field
$(".message_form textarea").live('keyup', creating);
$(".message_form input").live('keyup', creating);
// when something is typed into the message title field
$("#title.create_message").live('keyup', function(){
  editTitle($("#title.create_message"));
});

/******************************************** Helper functions ***********************************/

function checkLength(tipObj, o, n, min ) {
  if ( o.val().length < min ) {
    o.addClass( "ui-state-error" );
    updateTips(tipObj, "Length of " + n + " must be at least " + min + " characters." );
    return false;
  } else {
    return true;
  }
}

function checkRegexp(tipObj, o, regexp, n ) {
  if ( !( regexp.test( o.val() ) ) ) {
    o.addClass( "ui-state-error" );
    updateTips(tipObj, n );
    return false;
  } else {
    return true;
  }
}

function updateTips(tipObj, t ) {
  tipObj.text( t ).addClass( "ui-state-highlight" ).show();
  setTimeout(function() {
    tipObj.removeClass( "ui-state-highlight", 1500 );
  }, 500 );
}

function requestShareEmail(email, body, short_tag, title){
    var bValid = true;
    $('#email_field').removeClass( "ui-state-error" );

    bValid = bValid && checkLength( $( "#validateTips" ), $('#email_field'), "email", 6 );
    bValid = bValid && checkRegexp( $( "#validateTips" ), $('#email_field'), /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "Please enter a valid email." );

    if ( bValid ) {          
      $( "#share_email" ).dialog('close');
      $.ajax({
          type: "POST",
          url: "/email/share",
          data: {'email': email, 'body':body, 'short_tag': short_tag, 'title': title},
          complete: function() {
             $("#share_email_confirm").dialog('open');
          }
       });
    }  
}

// helper function tells user how many characters left for the title
function editTitle(field){
  var select = $("select.type").val();
  var length = title_limit - field.val().length;
  var message = length + " letters remaining";
  if(length == title_limit){
    message = "optional";
  }

  if(urlSelected()){
    $("span.small.title.url").text(message);
  }
  else if(contactSelected()){
    $("span.small.title.contact").text(message);
  }
  else if(messageSelected()){
    $("span.small.title.message").text(message);
  }
}

// helper function to toggle sharing options
function createLink(dataBundle){
  // this is where we hit up the create api, get the short tag back, and change up the title, short tag, etc.        
  $.post('/do/create', dataBundle, function(data, textStatus, jqXHR) {
    if(data != null && !data.error){
      short_tag = data.tag;

      // set the correct url for the share icons
      var title = $("#print_title").text();

      var message = '';
      if(title == ''){
        title = 'LookupLink';
        message = 'Check out my link! ' + ' Lookup the short tag: ' + data.tag + ' at http://www.lookuplink.com';
      }
      else{
        message = 'Check out my link: ' + title + '! ' + ' Lookup the short tag: ' + data.tag + ' at http://www.lookuplink.com';
      }
      
      var image = "https://chart.googleapis.com/chart?chs=500x500&cht=qr&chld=L|1&chl=http%3A%2F%2Fwww.lookuplink.com%2F" + data.tag + ".png";

      // twitter
      stWidget.addEntry({
             "service":"twitter",
             "element":document.getElementById('st_twitter_large_create'),
             "url":"http://www.lookuplink.com/" + data.tag,
             "title":'@LookupLink ' + message + ' or go to: ',
             "type":"large",
             "text":"Tweet this" ,
             "image":image,
             "summary":message
      });

      // facebook
      stWidget.addEntry({
             "service":"facebook",
             "element":document.getElementById('st_facebook_large_create'),
             "url":"http://www.lookuplink.com/" + data.tag,
             "title":$(".create_url#title").val(),
             "type":"large",
             "text":"Post this" ,
             "image":image,
             "summary":"Check out my link! Lookup the tag: " + data.tag
      });

      // share
      stWidget.addEntry({
             "service":"sharethis",
             "element":document.getElementById('st_sharethis_large_create'),
             "url":"http://www.lookuplink.com/" + data.tag,
             "title":title,
             "type":"large",
             "text":"Share this" ,
             "image":image,
             "summary":message
      });

      // populate tag in link preview
      $("#print.tag").text(data.tag);
      $('img.qrCode').attr('src', 'https://chart.googleapis.com/chart?chs=500x500&cht=qr&chld=L|1&chl=http%3A%2F%2Fwww.lookuplink.com%2F' + data.tag);
    }
    else{
      // there was an error creating
    }
    // show the real tag preview on the left
    toggleCreateSections();
  });
}

// helper function to toggle tag print preview 2
function toggleCreateSections(){
  $("#create_tag_section").show();
  $("#create_results_section").hide();
  $("#shadowBoxCreate").hide();
  $("#create_tag_section").show();
  $("#create_another").show();
  $(".qrCode").show();
}

// helper function to toggle tag print preview 1
function toggleCreateDataTrue(){
  $("#createButton.url_form").removeAttr('disabled');
  $("#createButton.contact_form").removeAttr('disabled');
  $("#createButton.message_form").removeAttr('disabled');
  $("#lookup_section").hide();
  $("#create_results_section").show();
  $("#shadowBoxCreate").show();
}

// helper function to remove tag print preview 1
function toggleCreateDataFalse()
{
  $(".url_form#createButton").attr('disabled', 'disabled'); 
  $(".contact_form#createButton").attr('disabled', 'disabled'); 
  $(".message_form#createButton").attr('disabled', 'disabled');
  $("#lookup_section").show();
  $("#create_results_section").hide();
  $("#shadowBoxCreate").hide();
}

// helper function when user types into any create field
function creating() {   
    // user typed into url field
    if(urlSelected()){
      if($("#url").val() == ""){
          toggleCreateDataFalse();
          $(".url_form#createButton").attr('disabled', ''); 
      }
      else{        
        toggleCreateDataTrue();
        $(".url_form#createButton").removeAttr('disabled');
        $(".preview1_data").text($("#url").val());          
      }

      $(".link_title").text($(".create_url#title").val());
      $(".link_title").show();
    } 
    // user typed into a contact field
    else if(contactSelected()){
      if($(".create_contact#first_name").val() == "" &&
          $(".create_contact#last_name").val() == "" &&
          $(".create_contact#phone").val() == "" &&
          $(".create_contact#email").val() == "" &&
          $(".create_contact#postal").val() == ""){
          toggleCreateDataFalse();
          $(".contact_form#createButton").attr('disabled', ''); 
      }
      else{
        toggleCreateDataTrue();
        $(".contact_form#createButton").removeAttr('disabled');
        $(".preview1_data").text("Information");        
      }

      $(".link_title").text($(".create_contact#title").val());
      $(".link_title").show();
    }
    // user typed into quick message field
    else if(messageSelected()){
      if($("textarea.create_message").val() == ""){
        toggleCreateDataFalse();
        $(".message_form#createButton").attr('disabled', ''); 
      }
      else{        
        toggleCreateDataTrue();
        $(".message_form#createButton").removeAttr('disabled');
        $(".preview1_data").hide();
        $("span.small#remaining").text(255-$("textarea.create_message").val().length + " characters remaining");
      }

      $(".link_title").text($("#title.create_message").val());
      $(".link_title").show();
    }
}

function createUrl(){
  // hide intro banner/section
  $("#qr_background").hide();
  $("#action_section").addClass("top");
  $("#intro_section").slideUp("slow", function () {});

  if(!$("#createButton.url_form").is(":disabled")) {

    // disable fields by showing shadow box
    disableUrlFields();
    $("#createButton.url_form").attr('disabled', ''); 
    $(".url_form#shadowBoxCreateForm").show();

    var createUrl = $(".create_url#url").val();
    if(createUrl.toLowerCase().lastIndexOf("http", 0) === -1) {
       createUrl = "http://" + createUrl;
    }
    
    // bundle up all of the values in the create url fields
    var dataBundle = {"title": $(".create_url#title").val(), 
                      "url":createUrl,
                      "type":"url",
                      "password":''};

    if($(".create_url#powerCheck").length>0) {
        dataBundle.permy = $(".create_url#powerCheck").is(':checked');
    }
    else 
        dataBundle.permy = false;

    $("#print_title").text($(".create_url#title").val());
    createLink(dataBundle);
  }
}

function createContact(){
  // hide intro banner/section
  $("#qr_background").hide();
  $("#action_section").addClass("top");
  $("#intro_section").slideUp("slow", function () {});

  if(!$("#createButton.contact_form").is(":disabled")) {

    // disable fields by showing shadow box
    disableContactFields();
    $("#createButton.contact_form").attr('disabled', ''); 
    $(".contact_form#shadowBoxCreateForm").show();
    
    // bundle up all of the values in the create contact fields
    var dataBundle = {"title": $(".create_contact#title").val(), 
                      "first_name":$(".create_contact#first_name").val(),
                      "last_name":$(".create_contact#last_name").val(),
                      "phone":$(".create_contact#phone").val(),
                      "email":$(".create_contact#email").val(),
                      "postal":$(".create_contact#postal").val(),
                      "type":"contact",
                      "password":$(".create_contact#password").val()};
    
    if($(".create_contact#powerCheck").length>0) {
        dataBundle.permy = $(".create_contact#powerCheck").is(':checked');
    }
    else 
        dataBundle.permy = false;

    $("#print_title").text($(".create_contact#title").val());
    createLink(dataBundle);
  }
}

function createMessage(){
  // hide intro banner/section
  $("#qr_background").hide();
  $("#action_section").addClass("top");
  $("#intro_section").slideUp("slow", function () {});
    
  if(!$("#createButton.message_form").is(":disabled")) {

    // disable fields by showing shadow box
    disableMessageFields();
    $("#createButton.message_form").attr('disabled', ''); 
    $(".message_form#shadowBoxCreateForm").show();
    
    // bundle up all of the values in the create message fields
    var dataBundle = {"title": $(".create_message#title").val(), 
                      "message":$(".create_message#message").val(),
                      "type":"message",
                      "password":''};
    
    if($(".create_message#powerCheck").length>0) {
        dataBundle.permy = $(".create_message#powerCheck").is(':checked');
    }
    else 
        dataBundle.permy = false;

    $("#print_title").text($(".create_message#title").val());
    createLink(dataBundle);
  }
}

function disableContactFields(){
  $("#createButton.contact_form").attr('disabled', 'disabled');
  $("select.type").attr('disabled', 'disabled');
  $(".create_contact#first_name").attr('disabled', 'disabled');
  $(".create_contact#last_name").attr('disabled', 'disabled');
  $(".create_contact#phone").attr('disabled', 'disabled');
  $(".create_contact#email").attr('disabled', 'disabled');
  $(".create_contact#postal").attr('disabled', 'disabled');
  $(".create_contact#title").attr('disabled', 'disabled');
  $(".create_contact#password").attr('disabled', 'disabled');
}

function disableUrlFields(){
  $("#createButton.url_form").attr('disabled', 'disabled');
  $("select.type").attr('disabled', 'disabled');
  $(".create_url#url").attr('disabled', 'disabled');
  $(".create_url#title").attr('disabled', 'disabled');
}

function disableMessageFields(){
  $("select.type").attr('disabled', 'disabled');
  $("#createButton.message_form").attr('disabled', 'disabled');
  $(".create_message#message").attr('disabled', 'disabled');
  $(".create_message#title").attr('disabled', 'disabled');
}

function clearContactFields(){
  $("#createButton.contact_form").attr('disabled', 'disabled');
  $("#createButton.contact_form").attr('disabled', ''); 
  $(".create_contact#first_name").val('');
  $(".create_contact#last_name").val('');
  $(".create_contact#phone").val('');
  $(".create_contact#email").val('');
  $(".create_contact#postal").val('');
  $(".create_contact#title").val('');
  $(".create_contact#password").val('');
}

function clearUrlFields(){
  $("#createButton.url_form").attr('disabled', 'disabled');
  $("#createButton.url_form").attr('disabled', ''); 
  $(".create_url#url").val('');;
  $(".create_url#title").val('');;
}

function clearMessageFields(){
  $("#createButton.message_form").attr('disabled', 'disabled');
  $("#createButton.message_form").attr('disabled', ''); 
  $(".create_message#message").val('');;
  $(".create_message#title").val('');;
}

function urlSelected(){
  if($("#url_icon").attr('src') == '/images/url_icon_selected.png')
    return true;
  else{
    return false;
  }
}

function contactSelected(){
  if($("#contact_icon").attr('src') == '/images/contact_icon_selected.png')
    return true;
  else{
    return false;
  }
}

function messageSelected(){
  if($("#message_icon").attr('src') == '/images/message_icon_selected.png')
    return true;
  else{
    return false;
  }
}
