 // JS for tapology.com

var valid_email_regex = /[a-zA-Z0-9,!#\$%&'\*\+\/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+\/=\?\^_`\{\|}~-]+)*@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/;

$(function () {

  // Cache Modal

  //$.ajax({ url:"/overlay-box.html", cache:true, dataType:"html" });

  // TODO don't validate all forms with ids
  $('form.autovalidate').submit(function () {

  });

  // Close div.transContent

  $('.closeHelp a').bind('click', function () {

    $(this).parents('.transContent').remove();

  });

  // Bind Modal Content

  $('.modal').bind('click', function () { modal($(this).attr('rel')); });

  // Set Up Rank Builder

  if ($('#rankingList').length) rankingBuilder();

  // Forum User Slide

  $('.postUser').bind('mouseenter', function () {

    $('.postUserInfo', this).animate({ width: '188px', left: '-208px' }, 150);

  }).bind('mouseleave', function () {

    $('.postUserInfo', this).stop().css({ width: '0', left: '-10px' });

  });

  // Textarea Grow

  $('textarea').css('overflow', 'hidden').bind('keyup', function() {
     if (getNoLines(this) > parseInt(this.rows)) this.rows = 2 + parseInt(this.rows);
  });

  // Tooltips

  $( '.tooltip' ).tooltip({
    track: true,
    delay: 0,
    showURL: false,
    opacity: 1,
    fixPNG: true,
    showBody: " - ",
    left: -20,
    top: 20
  });

  // General Opening and Closing

  openClose();

  // Form Textarea and Input Clearing

  fieldClear();

  // Belt Rank Animation

  beltRank();

});

fieldClear = function () {

  // Search Field Filters

  $('.mainSearchCat label, .modalSearchCat label').bind('click', function () {

    $(this).parents('ul').find('label').removeClass('searchSelected');
    $(this).addClass('searchSelected');

  });

  $('form input, form textarea').bind('focus', function () {

    //if ($(this).val() == $(this).attr('title')) $(this).val('');

  }).bind('blur', function () {

    if( $(this).val() == '' ) $(this).val( $(this).attr('title') );

  });

  $('textarea.rankingComments').bind('focus', function () {

    $('label.rankingComments').hide();

  })
  .bind('blur', function () { 
    if ($(this).val() == '') $('label.rankingComments').show();
  });

}

// General Validation

valid = function (fm, f) {

  if (f) {

    if(validcheck(f)) return true;

  }
  else {

    var fields = $(fm + ' input, ' + fm + ' textarea').not('.submit').not('#invite');
    v = 0;

    $(fields).each( function () {

      validcheck(this);
      if (v == $(fields).length) return true;

    });

    if (v == $(fields).length) return true;
    else $(fields).bind('keyup', function () { valid(false, this); });

  }

}

validcheck = function (f) {

  c = false;

  $(f).parent().removeClass('error');

  var tval = $(f).val();
  var ttitle = $(f).attr('title');

  if ($(f).parents('#formReg').length) {

    if (tval != '') {

      if (f.id == 'email') {
        if (valid_email_regex.test(tval)) {
          c = true;
          $(f).parent().attr('class', '').addClass('okay').find('p').html('OK');
        }
        else $(f).parent().attr('class', '').addClass('error caution').find('p').html('Invalid');
      }
      else if (f.id == 'regpassword' || f.id == 'regusername') {
        if (tval.length < 4 ) $(f).parent().attr('class', '').addClass('error caution').find('p').html('Too Short');
        else if ( f.id == 'regusername' && tval.length > 18 ) $(f).parent().attr('class', '').addClass('error caution').find('p').html('Too Long');
        else {
          c = true;
          $(f).parent().attr('class', '').addClass('okay').find('p').html('OK');
        }
      }
      else if (f.id == 'confirm') {
        if ($('#regpassword').val() != $(f).val() ) $(f).parent().attr('class', '').addClass('error mistake').find('p').html('Does Not Match');
        else {
          if ($('#regpassword').val().length < 5)
            $(f).parent().attr('class', '').addClass('error caution').find('p').html('Too Short');
          else {
            c = true;
            $(f).parent().attr('class', '').addClass('okay').find('p').html('Match!');
          }
        }
      }
      else if (f.id == 'check') {
        if (!$(f).attr('checked')) $(f).parent().parent().attr('class', '').addClass('error mistake').find('p').html('Required');
        else {
          c = true;
          $(f).parent().parent().attr('class', '').addClass('okay').find('p').html('OK');
        }
      }
      else {
        c = true;
        $(f).parent().attr('class', '').addClass('okay').find('p').html('OK');
      }

    }
    else $(f).parent().attr('class', '').addClass('error mistake').find('p').html('Required');

  }
  else if (f.id == 'email') {
    if (valid_email_regex.test(tval) && tval != '') {
      c = true;
      $(f).parent().attr('class', '').addClass('okay').find('p').html('OK');
    }
    else $(f).parent().attr('class', '').addClass('error mistake').find('p').html('Required');
  }
  else {
    if ( tval != '' && (ttitle != '' && tval != ttitle)) {
      c = true;
      $(f).parent().attr('class', '').addClass('okay').find('p').html('OK');
    } else if ($(f).parents('#formLogin').length) {
      c = true;
      //$(f).parent().attr('class', '').addClass('error mistake').find('p').html('No Match');
    } else $(f).parent().attr('class', '').addClass('error mistake').find('p').html('Required');
  }

  if (c) {
    v++;
    return true;
  }

}

// Open and Close

popOpen = function(el) {
    $(el).not('p').removeClass('open').addClass('close').next().slideDown('fast');
}

popClose = function(el) {
    $(el).removeClass('close').addClass('open').next().slideUp('fast', function () { $(this).css('display', 'none'); });
}

openClose = function () {

  $('.pop').removeClass('close').addClass('open').bind('click', function () { 

    if( $(this).attr('class').match('close') ) $(this).removeClass('close').addClass('open').next().slideUp('fast', function () { $(this).css('display', 'none'); });
    else $(this).removeClass('open').addClass('close').next().slideDown('fast');

  })
  .next().css('display', 'none').slideUp();

  $('.openAll').bind('click', function () {

    $('.pop').not('p').removeClass('open').addClass('close').next().slideDown('fast');

  });

  $('.closeAll').bind('click', function () {

    $('.pop').removeClass('close').addClass('open').next().slideUp('fast', function () { $(this).css('display', 'none'); });

  });

}

// Belt Rank Drawer

beltRank = function () {

  var h = $('#myRankInfo').height();

  $('#beltRank').bind('mouseenter', function() {

    $('#myRankInfo').css({ height: '0', display: 'block' }).animate({ height: h }, 150);

  }).bind('mouseleave', function () {

    $('#myRankInfo').stop().css({ height: 'auto', display: 'none' });

  });

}

// Modal

modal = function (rel) {

  var content, linkTxt;

  if (rel == 'login') {
    content = '<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam malesuada erat ut turpis. Suspendisse urna nibh, viverra non, semper suscipit, posuere a, pede.</p>'; 

    modalCreate(content, false);

  }
  else if (rel == 'link') {

    var linkTxt = 'Text Link Text',
    div = $('<div/>');

    div.load('overlay-box.html', function () {

      content = $(div).html();
      modalCreate(content, linkTxt);

    });
  }

}

modalCreate = function (content, linkTxt) {

  var scroll = (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;

  if(!$.browser.msie) {

    $('body').append('<div id="modalwrap"><div id="modal" class="overlayBox clearfix">'+content+'</div></div><div id="overlay"></div>');

    $('#overlay').css({ opacity: 0, visibility: 'visible' }).height( $('body').height() ).fadeTo('300', 0.5, function () { 

      if (scroll > 100) {
        var s = parseInt($('#modal').css('top')) + scroll;
        $('#modal').css( 'top', s );
      }

      var h = $('#modal').height(),
      w = $('#modal').width();

      $('#modal *').css('opacity', '0');

      $('#modal').height(h * 0.9).width(w * 0.9);

      $('#modalwrap').css('visibility', 'visible').height($('body').height());

      $('#modal').animate({ height: h, width: w }, 350, 'easeInQuint', function () {

        $('#modal *').fadeTo('fast', 1.0);

      });

      $('#modalwrap').bind('click', function (e) {

        if (!$(e.target).parents('#modal').length && $(e.target).attr('id') != 'modal') closer();

      });

      //$('#close').bind('click', closer); 

    });
  }
  else {

    $('body').append('<div id="modalwrap"><div id="modal" class="overlayBox clearfix">'+content+'</div></div><div id="overlay"></div>');

    var h = $('#modal').height(),
    w = $('#modal').width();

    if (scroll > 100) {
      var s = parseInt($('#modal').css('top')) + scroll;
      $('#modal').css( 'top', s );
    }

    $('#modal').height(h * 0.9).width(w * 0.9);

    $('#modalwrap').css('visibility', 'visible').height($('body').height());

    $('#modal').animate({ height: h, width: w }, 350, 'easeInQuint');

    $('#modalwrap').bind('click', function (e) {

      if (!$(e.target).parents('#modal').length && $(e.target).attr('id') != 'modal') closer();

    });

    //$('#close').bind('click', closer);

    $('#overlay').css({ display: 'block', opacity: '0.5', visibility: 'visible' }).height( $('body').height() );

  }

  if (linkTxt) $('#suggestSearch').val(linkTxt);

  fieldClear();

}

closer = function () {

  $('#overlay, #modalwrap').remove();

}


// Textarea Grow

getNoLines = function (ele) {

   var hardlines = ele.value.split('\n');
   var total = hardlines.length;

   for (var i=0, len=hardlines.length; i<len; i++) {
      total += Math.max(Math.round(hardlines[i].length / ele.cols), 1) - 1;
   }

   return total;

}

// Timeago Stamps

jQuery(document).ready(function() {
  jQuery.timeago.settings.allowFuture = true;
  jQuery("abbr.timefrom").timeago();
});



