
function console_log(l) {
	if(typeof console != 'undefined')
		console.log(l);
};


jQuery.fn.inputFocus = function() {

	this.bind('focus', function() {
		var t = $(this);
		if (t.val() == t.attr('title')) {
			t.val('');
			t.removeClass("empty");
		}

		window.inputHasFocus = true;
	}).bind('blur', function() {
		var t = $(this);
		if (t.val() == "") {
			t.val(t.attr('title'));
			t.addClass("empty");
		}

		window.inputHasFocus = false;
	});

	return this;
};


$(document).ready(function(){
    $(".forwardForm").click(function() {
		 if ($("#"+$(this).attr("id")+'-form').is(":hidden")) {
		 	$("#"+$(this).attr("id")+'-form').slideDown("slow");
      	} else {
		 	$("#"+$(this).attr("id")+'-form').slideUp("slow");
      }
      });


    $(".forward-link").click(function() {
	 if ($("#"+$(this).attr("id")+'-form').is(":hidden")) {
		 	$("#"+$(this).attr("id")+'-form').slideDown("slow");
      	} else {
		 	$("#"+$(this).attr("id")+'-form').slideUp("slow");
      }
      return false;
      });

	$('#commentform').submit(function() {
		return inputValidation();
	});

	// debug
	var debug = $('#debug');
	if(debug.length > 0) {
		var toggleDebug = $('<a href="">debug</a>').click(function() {
			debug.toggle();
			return false;
		});
		$('#signinout p:eq(0)').append(' [').append(toggleDebug).append(']');
	}

});


function attachCommentForm(commentId, rgt, depth)
{
	$('#commentID').val(commentId);
	$('#parentID').val(rgt);

	if (commentId == '0') {
		$('#cancel-reply').hide();
		$('#comments-form-title').text('Add a comment');
		//$('#comments-add .comment-preview').removeClass().addClass('comment-preview');
	} else {
		$('#cancel-reply').show();
		$('#comments-form-title').text('Reply to '+$('#n'+commentId).text());
		//if(depth > 0) $('#comments-add .comment-preview').addClass('reply'+depth);
	}
	$('#comments-add').insertAfter($('#c'+commentId));
};



function forwardValidation(id)
{
	var validEmail = 0;
	$('#meua-'+id).val(navigator.userAgent);
	var errors = false;
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test($('#ForwardEmail'+id).val())) {
		validEmail = 1;
	} else {
		$('#ForwardEmail'+id).addClass('error');
		errors = true;
	}
	if (errors == false) {
		$('#ForwardEmail'+id).removeClass('error');
		return true;
	}
	return false;
};

function inputValidation()
{
	var validName = 0;
	var validEmail = 0;
	var validComments = 0;
	var validPassword = 0;
	var errors = false;
	var userType = $('#userType').val();
	
	$('#meua').val(navigator.userAgent);
	$('#AuthorPassInput').removeClass('error');
	$('#AuthorEmailInput').removeClass('error');
	$('#AuthorNameInput').removeClass('error');
	$('#CommentsInput').removeClass('error');
	
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var passValid = /[\w\s]{3,}/;
	if((userType=='member' || userType=='Anonymous') && passValid.test($('#C_Comments').value)) {
		$('#commentform').attr('action','#'+$('#comments-add').parent().attr('id'));
		return true;
	}
	if($('#LoggedIn').val() == 0) {
		if($('#AuthorName').val() != '') {
			validName = 1;
		}
		if (filter.test($('#AuthorEmail').val())) {
			validEmail = 1;
		}
		if (passValid.test($('#AuthorPass').val())) {
			validPassword = 1;
		}
		if($('#AuthorPassInput').css('display') != 'none' && validPassword == 0) {
			$('#AuthorPassInput').addClass('error');
			errors = true;
		}
		if ($('#AuthorNameInput').css('display') != 'none' && validName == 0) {
			$('#AuthorNameInput').addClass('error');
			errors = true;
		}
		if (validEmail == 0) {
			$('#AuthorEmailInput').addClass('error');
			errors = true;
		}
	}
	if (passValid.test($('#C_Comments').val())) {
		validComments = 1;
	}
	if (validComments == 0) {
		$('#CommentsInput').addClass('error');
		errors = true;
	}

	$('#commentform').attr('action','#'+$('#comments-add').parent().attr('id'));

	if (errors == false) {
		return true;
	}
	return false;
};

function previewComments() {
	$('#C_Preview').html($('#C_Comments').val().replace(/\n/g,'<br />'));
};

function makeSlug(str, allow_end_space) {
  var theSlug = '';
	var decodedSlug = '';
	theSlug = str.substring(0,255);
	theSlug = theSlug.toLowerCase();
	for (var n = 0; n < theSlug.length; n++) {
		var c = theSlug.charCodeAt(n);
		if (c <= 127) {
			decodedSlug += String.fromCharCode(c);
		}
		if ((c >=224 && c <=229) || (c>=192 && c<=198) || (c>=281 && c<=286)) {
			decodedSlug += 'a';
		} else if ((c >=232 && c<=235) || (c>=200 && c<=203)) {
			decodedSlug += 'e';
		} else if ((c>=236 && c<=239) || (c>=204 && c<=207)) {
			decodedSlug += 'i';
		} else if ((c>=242 && c<=248) || (c>=210 && c<=216)) {
			decodedSlug += 'o';
		} else if ((c>=249 && c<=252) || (c>=217 && c<=220)) {
			decodedSlug += 'u';
		} else if (c==253 || c==255 || c==221 || c==376) {
			decodedSlug += 'y';
		} else if (c==230 || c==198) {
			decodedSlug += 'ae';
		} else if (c==338 || c==339) {
			decodedSlug += 'oe';
		} else if (c==199 || c==231) {
			decodedSlug += 'c';
		} else if (c==209 || c==241) {
			decodedSlug += 'n';
		} else if (c==352 || c==353) {
			decodedSlug += 's';
		} else if (c==208 || c==240) {
			decodedSlug += 'eth';
		} else if (c==223) {
			decodedSlug += 'sz';
          } else if ((c>=8219 && c<=8223) || c==8242 || c==8243 || c==8216 || c==8217 || c==168 || c==180 || c==729 || c==733) {
              //all the strange curly single and double quotes
		} else if  (c>127) {
			decodedSlug += '-';
		}
	}
	theSlug = decodedSlug;
	theSlug = theSlug.replace(/\'/gi, '');
	theSlug = theSlug.replace(/&/gi, '-and-');
	theSlug = theSlug.replace(/[^a-zA-Z0-9\-]/gi,'-');
	theSlug = theSlug.replace(/\-+/gi, '-');
	if (allow_end_space == undefined) {
  	theSlug = theSlug.replace(/\-$/gi, '');
  }
	theSlug = theSlug.replace(/^\-/gi, '');
	return theSlug;
}

function swapTab(arg) {
  $('#commenterrors').hide();
	$('#commentType').val(arg);
	$('#userType').val(arg);
	if (arg == 'Email') {
		$('#AuthorNameInput').show();
		$('#AuthorURLInput').show();
		$('#AuthorPassInput').hide();
		$('#AuthorEmailInput').show();
		$('#AuthorNotifyHeading').show();
		$('#AuthorNotifyInput').show();
		$('#tabEmail').removeClass().addClass('chosen');
		$('#tabPass').removeClass();
		$('#tabAnonymous').removeClass();
		$('#N_Preview').text(($('#AuthorName').val()==''?'Your Name':$('#AuthorName').val()));
	} else if (arg == 'Pass') {
		$('#AuthorNameInput').hide();
		$('#AuthorURLInput').show();
		$('#AuthorPassInput').show();
		$('#AuthorEmailInput').show();
		$('#AuthorNotifyHeading').show();
		$('#AuthorNotifyInput').show();
		$('#tabEmail').removeClass();
		$('#tabPass').removeClass().addClass('chosen');
		$('#tabAnonymous').removeClass();
		$('#N_Preview').text((window.userName ?'Your Name':window.userName));
	} else {
		$('#AuthorNameInput').hide();
		$('#AuthorURLInput').hide();
		$('#AuthorPassInput').hide();
		$('#AuthorEmailInput').hide();
		$('#AuthorNotifyHeading').hide();
		$('#AuthorNotifyInput').hide();
		$('#tabEmail').removeClass();
		$('#tabPass').removeClass();
		$('#tabAnonymous').removeClass().addClass('chosen');
		$('#N_Preview').text('Anonymous');
	}
};


$(document).ready(function() {
	// navigation
	var navItems = [];
	var superCategory = null;
	$('#menu li').each(function(i, n) {
			n = $(n);
			if(n.hasClass('super-selected'))
				superCategory = n;

			n.hover( function() {
					$.each(navItems,function(i, e) {
						e.removeClass('nav-active')
						clearTimeout(e.navTimeout);
					});
					navItems = [];
					$('#menu li').removeClass('super-selected');
					n.addClass('nav-active');
					$('#alphaindex').hide();
			},
			function() {
					if(n.hasClass('parent')) {
							n.navTimeout = setTimeout(function() {
								n.removeClass('nav-active');
								if(superCategory)
									superCategory.addClass('super-selected');
								$('#alphaindex').show();
							}, 1500);
							navItems[navItems.length++] = n;
					} else {
							n.removeClass('nav-active');
					}
			});
	});

	$('.tabs').tabs();

	$('#q').inputFocus();
});

var MemberToolbar = (function() {

    /* private attributes */
    var toolbar;
	var message;
	var emailPanel;
	var emailButton;
	var sharePanel;
	var shareButton;

	var forwardLink;

	/* private methods */
    var init = function() {

        toolbar = $('#member-toolbar');
		message = $('p.message',toolbar);
		emailPanel = $('#email-slide-out',toolbar);
		emailButton = $('#email-it',toolbar);
		sharePanel = $('#share-slide-out',toolbar);
		shareButton = $('#share-it',toolbar);

		//EVENTS
		emailButton.click(function(event){
			if(emailButton.hasClass('active')) {
				_hideEmail();
				_showMessage();
			} else {
				_hideMessage();
				_hideShare();
				_showEmail();
			}
			event.preventDefault();
		});

		shareButton.click(function(event){
			if(shareButton.hasClass('active')) {
				_hideShare();
				_showMessage();
			} else {
				_hideMessage();
				_hideEmail();
				_showShare();
			}
			event.preventDefault();
		});

		forwardLink = $('a.submit',emailPanel).click(function(event){
			_sendEmail();
			event.preventDefault();
		});
		$('a.cancel',emailPanel).click(function(event){
			_hideEmail();
			_showMessage();
			event.preventDefault();	
		});
		$('li > a',sharePanel).click(function(event){
			_sharePage($(event.target).parents('a')); //for some reason the target is not the anchor, but the img inside
			event.preventDefault();
		});
		$('a.cancel',sharePanel).click(function(event){
			_hideShare();
			_showMessage();
			event.preventDefault();
		});
		$('input[name=ForwardTo]',emailPanel).bind('keyup',function(event){
			if(event.keyCode == 13) {
				$('a.submit',emailPanel).click();
				event.preventDefault();
			}
		});
	};

    var _showMessage = function() {
		message.fadeIn({duration:1000});
    };

	var _hideMessage = function() {
		message.fadeOut({duration:100});
	};

	var _showEmail = function() {
		emailButton.addClass('active');
		emailPanel.css({left:emailButton.position().left+emailButton.outerWidth()+7});
		emailPanel.animate({
			width: "435px",
			opacity: 1
		},200,function(){
			$('input[name=ForwardTo]',emailPanel)[0].focus();
		});
	};

	var _hideEmail = function() {
		emailButton.removeClass('active');
		emailPanel.animate({
			width: "0",
			opacity: 0
		},200);
	};

	var _showShare = function() {
		shareButton.addClass('active');
		sharePanel.css({left:shareButton.position().left+shareButton.outerWidth()+7});
		sharePanel.animate({
			width: "400px",
			opacity: 1
		},200);
	};

	var _hideShare = function() {
		shareButton.removeClass('active');
		sharePanel.animate({
			width: "0",
			opacity: 0
		},200);
	};

	var _sendEmail = function() {

		if(!window.forwardValidation('slice'))
			return;

		forwardLink.text('Sending...');
		$.ajax({
			url:_getFormInput('FullURL'),
			type:'POST',
			dataType:'text',
			async:true,
			data:{
				ForwardTo:_getFormInput('ForwardTo'),
				emailAddress:_getFormInput('emailAddress'),
				formtype:_getFormInput('formtype'),
				meua:_getFormInput('meua'),
				FullURL:_getFormInput('FullURL'),
				id:_getFormInput('id'),
				Type:_getFormInput('Type'),
				Slug:_getFormInput('Slug'),
				Value:_getFormInput('Value'),
				action:_getFormInput('action'),
				ajax:'true'
			},
			complete:function() {
				forwardLink.text('SUCCESS!');
				setTimeout(function(){forwardLink.text('Forward');},5000);
				$('input[name=ForwardTo]',emailPanel).val('')[0].focus();
			}
		});
	};

	var _getFormInput = function(name){
		return $('input[name='+name+']',emailPanel).val();
	};

	var _sharePage = function($target) {
		var id = _getFormInput('id').replace(/emailed-/, 'shared-');
		var Slug = _getFormInput('Slug');
		var Type = _getFormInput('Type');
		var Value = $target.attr('title');

		//news isn't typeable
		//if(id == '') id = 'news';
		
		$('div',sharePanel).empty().append('<label>Just a moment while we load '+Value+'...</label>');
		_addTag(id,Slug,Type,Value,function(){
			window.location = $target.attr('href');
		});
	};

	var _displayConfirmation = function() {
		//don't know what to do for this yet...
	};

	var _addTag = function(id,Slug,Type,Value,callback) {
		$.ajax({
			url:'/members/add-tag/',
			type:'GET',
			dataType:'text',
			async:true,
			data:{
				id:id,
				Type:Type,
				Slug:Slug,
				Value:Value,
				ajax:'true'
			},
			complete:function() {
				callback();
			}
		});
	};

	/* initialize singleton */
    $(document).ready( function() {
        init();
    });


    /* public methods */
    return {
        publicFunc : function() {
        }
    };

})();


var EditProfile = (function() {

    /* private attributes */
    var personalLinks;
	var socialNetworks;

	/* private methods */
    var init = function() {

        personalLinks = $('#content .personal-links');
		socialNetworks = $('#content .social-networks');

		$('p > a',personalLinks).click(function(event){
			_addPersonalLink();
			event.preventDefault();
		});

		$('p > a',socialNetworks).click(function(event){
			_addSocialNetwork();
			event.preventDefault();
		});

		$('tbody td > a',personalLinks).click(function(event){
			_removePersonalLink($(event.target));
			event.preventDefault();
		});

		$('tbody td > a',socialNetworks).click(function(event){
			_removeSocialNetwork($(event.target));
			event.preventDefault();
		});

		$('tr',socialNetworks).each(function(i,tr){
			tr = $(tr);
			$('select',tr).click(function(event){
				var $select = $(event.target);
				var helpText = document.socialnetworks[$select.val()];
				$('p.note',tr).text(helpText);
			});
		});


		$('form').submit(function(){
			_pruneEmptyRows();
		});

		$('a.reset-avatar').click(function(event){
			var $this = $(event.target);
			$this.prev().show().prev().hide();
			$this.hide();
			$this.parents("ol").prev().text('Default Avatar:');
			$this.after($('<input type="hidden" name="ResetAvatar" value="true"/>'));
			event.preventDefault();
		});

		_addPersonalLink();
		_addSocialNetwork();
	};

	var _reorderPersonalLinks = function() {
		$('tbody > tr',personalLinks).removeClass('alt').each(function(i){
			var tr = $(this);
			$('input:eq(0)',tr).attr('name','PersonalLinks['+i+'][Title]');
			$('input:eq(1)',tr).attr('name','PersonalLinks['+i+'][ID]');
			$('input:eq(2)',tr).attr('name','PersonalLinks['+i+'][URL]');
		});

		$('tbody > tr:odd',personalLinks).addClass('alt');
	};

	var _reorderSocialNetworks = function() {
		$('tbody > tr',socialNetworks).removeClass('alt').each(function(i){
			var tr = $(this);
			$('select:eq(0)',tr).attr('name','SocialNetworks['+i+'][Network]');
			$('input:eq(0)',tr).attr('name','SocialNetworks['+i+'][ID]');
			$('input:eq(1)',tr).attr('name','SocialNetworks['+i+'][Username]');
		});

		$('tbody > tr:odd',socialNetworks).addClass('alt');
	};

	var _removePersonalLink = function($target) {

		var tr = $target.parents('tr');

		tr.fadeOut(300,function(){
			tr.remove();

			if($('tbody > tr',personalLinks).length == 0)
				_addPersonalLink();

			_reorderPersonalLinks();
		});

	};

	var _removeSocialNetwork = function($target) {

		var tr = $target.parents('tr');

		tr.fadeOut(300,function(){
			tr.remove();

			if($('tbody > tr',socialNetworks).length == 0)
				_addSocialNetwork();

			_reorderSocialNetworks();
		});

	};

	var _addPersonalLink = function() {
		var tbody = $('tbody',personalLinks);

		var tr = $('<tr>').css({display:'none'});

		tr.append($('<td><input class="textfield" type="text" name="" maxlength="254"/><input type="hidden" name="" value="0"/></td>'));
		tr.append($('<td><input class="textfield url" type="text" name="" maxlength="254"/></td>'));
		tr.append($('<td>').append($('<a href="#" title="Remove">Remove</a>').click(function(event){
			_removePersonalLink($(event.target));
			event.preventDefault();
		})));

		tbody.append(tr.fadeIn(300,function(){
			//$('input:first',tr)[0].focus();
		}));

		_reorderPersonalLinks();
	};

	var _addSocialNetwork = function() {
		var tbody = $('tbody',socialNetworks);

		var tr = $('<tr>').css({display:'none'});

		tr.append($('<td valign="top"><select name="" class="textfield"></select><input type="hidden" name="" value="0"/></td>'));
		tr.append($('<td valign="top"><input class="textfield url" type="text" name="" maxlength="254"/><p class="note"></p></td>'));
		tr.append($('<td valign="top"></td>').append($('<a href="#" title="Remove">Remove</a>').click(function(event){
			_removeSocialNetwork($(event.target));
			event.preventDefault();
		})));

		var select = $('select',tr).append('<option value="">Please Select...</option>').click(function(event){
			var $select = $(event.target);
			var helpText = document.socialnetworks[$select.val()];
			$('p.note',tr).text(helpText);
		});
		//var supported = $('#supported-social-networks dt').text().split(',');
		for(var i in document.socialnetworks) {
			select.append('<option value="'+i+'">'+i+'</option>');
		}

		tbody.append(tr.fadeIn(300,function(){
			//$('input:first',tr)[0].focus();
		}));

		_reorderSocialNetworks();
	};

	var _pruneEmptyRows = function() {
		$('tbody > tr',personalLinks).each(function(){
			var tr = $(this);
			if($.trim($('input:eq(0)',tr).val()).length == 0 && $.trim($('input:eq(2)',tr).val()).length == 0)
				tr.remove();
		});

		$('tbody > tr',socialNetworks).each(function(){
			var tr = $(this);
			if($.trim($('select:eq(0)',tr).val()).length == 0 && $.trim($('input:eq(2)',tr).val()).length == 0)
				tr.remove();
		});
	};

	/* initialize singleton */
    $(document).ready( function() {
        init();
    });


    /* public methods */
    return {
        onsubmit : function() {
			_pruneEmptyRows();
		}
    };

})();


