
// =======================
// Firebug Logging
// ==========================
function log(stuff){
	if(window.console){
		window.console.log(stuff);
	}
}

//=======================
// Window Resizing
//==========================
$(window).resize(function(){
	if($(window).width() <= 1230){
		$('body').addClass('narrow');
		$('body').removeClass('wide');
	}else{
		$('body').addClass('wide');
		$('body').removeClass('narrow');
	}
});


//=======================
// Account for anchor hashes in URL
//==========================

function goToHash(a){
	a = a?a:window.location.hash;

	if(a == '#login'){
		$.nyroModalManual({url:'/login'});
	}else if(a == '#register'){
		$.nyroModalManual({url:'/register'});
	}else if(a == '#recover-password'){
		$.nyroModalManual({url:'/recover_password'});
	}
}

//=======================
// Initial DOM loaded
//==========================
$(document).ready(function(){
	$('#SearchQForm, #top-search').submit(function(){
		if($(this).attr('id') == 'top-search'){
			var q = $('#SearchQ').val();
		}else{
			var q = $('#SearchQuery').val();
		}
		if(q != ''){
			window.location.href = '/search/q/'+q;
		}
		return false;
	});
	$.nyroModalSettings({
		openSelector:'.modal',
		windowResize:false,
		hideContent:function(elts, settings, callback){
			$('#nyroModalWrapper').hide();
			callback();
		}
		
	});
	
	$('a.modal').nyroModal();
	
	if($.browser.msie){
		$("#ie_browser_notice").slideDown();
	}

	$.ajaxSetup({
		type: 'POST'
	});
	
	$(document).ajaxComplete(function(e, xhr, settings){
		if(settings.dataType != 'json'){
			domLoaded(true, settings);
		}
	});

	$(document).ajaxSuccess(function(e, xhr, settings){
		if(settings.dataType === 'json'){
			var data = $.parseJSON(xhr.responseText);
			if(data.success === false){
				if(data.error_id == 1){
					goToHash('#login');
				}
			}
		}
	});
	
	domLoaded(false);
	goToHash();
	
	
	
	searchQDelay = 500;
	lastSearchQChange = 0;
	var searchQTimeout = null;
	var searchQLastString = '';
	var searchQLastLoadedString = '$';
	$('#SearchQ').focus(function(){
		$('#search-results').fadeIn('fast');
	});
	$('#SearchQ').blur(function(){
		$('#search-results').fadeOut('fast');
	});
	$('#SearchQ').keyup(function(){
		val = $(this).val().toLowerCase();
		if(val.length > 0){
			if(val.indexOf(searchQLastLoadedString) == 0){
				$('#search-results .result').show().not(':Contains("'+val+'")').hide();
			}else{
				newSearchQChange = new Date().getTime();
				clearTimeout(searchQTimeout);
				if(newSearchQChange - lastSearchQChange > searchQDelay){
					if(searchQLastString != val){
						$('#search-results').load('/autocomplete/q/'+encodeURIComponent(val), function(){
							searchQLastLoadedString = val;
						});
						searchQLastString = val;
					}
				}else{
					searchQTimeout = setTimeout("$('#SearchQ').keyup()",searchQDelay);
				}
				lastSearchQChange = newSearchQChange;
			}
		}
	});
	
	$('.like-box a').click(function(){
		if(isLoggedIn){
			if(!$(this).hasClass('myVote')){
				var likeBox = $(this).parent();
				var vote = $(this).hasClass('like-link') ? 1 : 0;
				var isNew = likeBox.find('.my-vote').size() == 0;
				var model = likeBox.attr('model');
				var foreign_key = likeBox.attr('foreign_key');
				$.ajax({
					url:'/thumbs/vote/'+model+'/'+foreign_key+'/'+vote,
					dataType:'json',
					context:this,
					success:function(data){
						if(data.success){
							if(vote){
								likeBox.find('.like-count').text(parseInt(likeBox.find('.like-count').text()) + 1);
								likeBox.find('.like-link').text('you like this');
								if(!isNew){
									likeBox.find('.dislike-count').text(parseInt(likeBox.find('.dislike-count').text()) - 1);
									likeBox.find('.dislike-link').text('dislike');
								}
							}else{
								likeBox.find('.dislike-count').text(parseInt(likeBox.find('.dislike-count').text()) + 1);
								likeBox.find('.dislike-link').text('you dislike this');
								if(!isNew){
									likeBox.find('.like-count').text(parseInt(likeBox.find('.like-count').text()) - 1);
									likeBox.find('.like-link').text('like');
								}
							}
						}
					}
				});
			}
		}else{
			goToHash('#login');
		}
	});


	$('#related-users header a').click(function(){
		$.ajax({
			url:$(this).attr('href'),
			context:$(this),
			success:function(data){
				var pieces = $(this).text().split(' ');
				var num = pieces[0];
				pieces.shift();
				var string = num + (num == 1? ' User ':' Users ') + pieces.join(' ');
				$('#related-users h2').text(string);
				$('#related-users section.sub.padded:first').html(data);
//				$(document).scrollTo($('#related-users'),{
//					duration:750,
//					offset: -40
//				});
			}
		});
		return false;
	});
});





//=======================
//Execute when DOM loads (initial AND ajax)
//==========================
function domLoaded(isAjax, ajaxSettings){
	if(isAjax){
		if(ajaxSettings.url.indexOf('autocomplete') == -1){
			formDefaults();
		}
	}else{
		formDefaults();
	}

	$('#articles .paging a').click(function(){
		$.ajax({
			url:$(this).attr('href'),
			context:$('#articles'),
			success:function(data){
				$(this).html(data);
				$(document).scrollTo($(this),{
					duration:750,
					offset: -40
				});
			}
		});
		return false;
	});
	
	$('textarea.autogrow').autogrow();
	
	$('textarea[maxwords]').bind('keyup change',function(){
		var words = $(this).val().trim().split(/[\r \n \s]/g);
		var wordcount = words.length;
		if(wordcount == 1 && words[0] ==''){
			words = [];
			wordcount = 0;
		}
		var maxwords = $(this).attr('maxwords');
		if(wordcount >= maxwords){
			words.length = maxwords;
			charcount = words.join(' ').length;
			$(this).val($(this).val().trim().substring(0,charcount));
		}
		$(this).parent().siblings('.textarea_limit_notice').text((maxwords - wordcount)+' words remaining.');
	}).each(function(){
		$(this).parent().after('<div class="textarea_limit_notice"></div>');
		$(this).change();
	});
}


jQuery.expr[':'].Contains = function(a,i,m){
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};


$.validator.addMethod('notDefault', function(value, element){
	return $(element).attr('init') != value;
},'Oops. One of the fields is empty.');

$.validator.addMethod('usernameUnique', function(value, element){
	return $.ajax({url:'/users/check/username/'+encodeURIComponent(value),async: false }).responseText == '0';
},'Sorry, that username is taken');

$.validator.addMethod('usernameExists', function(value, element){
	return $.ajax({url:'/users/check/username/'+encodeURIComponent(value),async: false }).responseText != '0';
},'That username doesn\'t exist');

$.validator.addMethod('usernameAlphaNumeric', function(value, element){
	var re = /^[-._ A-Za-z0-9]+$/;
	return re.test(value);
},'Usernames can only contain letters and numbers');

$.validator.addMethod('userEmailUnique', function(value, element){
	return $.ajax({url:'/users/check/email/'+encodeURIComponent(value),async: false }).responseText == '0';
},'An account already exists with that email address. <a href="#" onclick="goToHash(\'#recover-password\')">Recover Password?</a>');

$.validator.addMethod('userEmailExists', function(value, element){
	return $.ajax({url:'/users/check/email/'+encodeURIComponent(value),async: false }).responseText != '0';
},'No accounts found with that email address.');



