var curSubnav = '';
var disableKeyListeners = false;
var timeSeekMode = false;

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function subnav(selector, html)
{
	if (curSubnav != selector)
	{
		curSubnav = selector;
		$("#subnavContent").html(html);
		$("#subnav").show();
	} else {
		$("#subnav").toggle();
    }
}

function url_encode (clearString) {
  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output;
}

function url_decode (encodedString) {
  var output = encodedString;
  var binVal, thisString;
  var myregexp = /(%[^%]{2})/;
  while ((match = myregexp.exec(output)) != null
             && match.length > 1
             && match[1] != '') {
    binVal = parseInt(match[1].substr(1),16);
    thisString = String.fromCharCode(binVal);
    output = output.replace(match[1], thisString);
  }
  return output;
}

$(document).ready(function () {
	// Link auto meta
	$("a.nameMe").each(function (i, element) {
		var address = $(element).attr("href");
		$.post("/ajax_utils/url_meta",{address: address, output: 'title'}, function (data) {
			$(element).html(data);
		});	
	});
	
	// Text input auto clear
	$("input").each(function (i, element){
		$(element).data('defaultText',$(element).val());
	});
	$("input:text").focus(function () {
		if($(this).hasClass('noclear'))
		{
		}
		else
		{
		if ($(this).val() == $(this).data('defaultText'))
			$(this).val('');
		}
	});
	
	$("#logo").mouseenter(function(e) {
		$("#home_tip").show();
	});
	$("#logo").mouseleave(function(e) {
		$("#home_tip").hide();
	});
	$("#logo").click(function(e) {
		$("#home_tip").hide();
	});
	$("#left_button_hider a").mouseenter(function(e) {
		$("#"+$(this).attr('id')+"_tip").show();
	});
	$("#left_button_hider a").mouseleave(function(e) {
		$("#"+$(this).attr('id')+"_tip").hide();
	});
	$("#left_button_hider a").click(function(e) {
		$("#"+$(this).attr('id')+"_tip").hide();
	});
	// Find
	$("#find_form").hide();
	$("#find").click(function (e) {
		$("#find_form").show();
		$("#find_text").focus();
		
		if ($("#find_text").val() == "")
			$("#find_instructions").show();
	});
	if ($.browser.safari)
	{
		$("#find_instructions").css('margin-top','-3px');
	}
	$("#find_text").autocomplete("/ajax_utils/find");
	$("#find_text").setOptions({
						highlight: function(value, term) {
							return value;
						},
						formatItem: function(item) {
						    return item[0];
						  },
						formatResult: function(item) {
						    return item[1];
						  }
						}).result(function(event, item) {
						  location.href = item[2];
						
	});
	
	$(".close").click(function (e) {
		$(this).parents("div:first").hide();
		$("#left_button_hider").show();
	});
	
	// Little helper to create link buttons
	$("a.submit").click(function (e) {
		if($(this).parents("form").attr('id') == 'newphoto')
		{
			if($(this).parents("form").children('#file').val() != "")
			{
				$(this).parents("form").submit();
			}
			else
			{
				alert('You have to choose a file to upload.');
				return false;
			}
		}
		if($(this).parents("form").attr('id') == 'newtext')
		{
			if($('#newtext #text').val() != 'Type caption here...' && $('#newtext #text').val() != '')
			{
				$(this).parents("form").submit();
			}
			else
			{
				alert('Please enter a message.');
				return false;
			}
		}
		$(this).parents("form").submit();
	});

	
	
	// Media feed display
	if ($('#feedHolder').size())
    {
        // Media feed is present
        $('.entryCaptionHolder, #usercardContentsHolder').hide();
        $('.postDetails').hide();
        $('#archiveLinks').hide();
		$('#topbar').addClass('fixed');
		$('#topbar_tips').addClass('fixed');
		
		var feedWidth = ($('.feedEntry').size() * 428 + $('.navTab').size() * 107 + $('#feedUsercard').size() * 443) - $('#feedHolder').outerWidth();
		
		$('#feedHolder').width(feedWidth);
		
		// pix fix
		if ($.browser.mozilla)
			$("div.feedEntry div.infoArea div.postDetails img").css("margin-top","2px");
		
		var currentPage = $('#currentPage').val();
		

        //$(document).mousemove(function (e) {
		//	mouseScrollCallback(e);
        //});

		$('.feedEntry').mouseenter(function (e) {
            $('.postName').hide();
            $(this).children('.infoArea').children('.postDetails').show();
            $(this).find('.entryCaptionHolder').show();
        });
        
        $('.feedEntry').mouseleave(function (e) {
            $('.postName').show();
            $(this).children('.infoArea').children('.postDetails').hide();
            $(this).find('.entryCaptionHolder').hide();
        });
		
		$("img.photoEntry").load(function () {
			var image = $(this).get();
			//alignFeedImage(image);
		});
		
		$('#archiveOpener').click(function (e) {
			$(this).hide();
			$("#archiveLinks").show();
			//mouseScrollCallback(e);
		});
		
		if ($('#usercardArea').size())
		{
			$('#usercardArea').mouseover(function (e) {
	            $(this).children('#usercardContentsHolder').show();
	        });
        
	        $('#usercardArea').mouseout(function (e) {
	            $(this).children('#usercardContentsHolder').hide();
	        });
	
			$('a.subscribe_to').click(function (e) {
				$('#subscriptionsArea').html('Subscribing...');
				$.post('/users/subscribe',{id: $(this).attr('id')}, function (data) {
					$('#subscriptionsArea').html(data);
				});
			});
			$('a.unsubscribe_from').click(function (e) {
				$('#subscriptionsArea').html('Unsubscribing...');
				$.post('/users/unsubscribe',{id: $(this).attr('id')}, function (data) {
					$('#subscriptionsArea').html(data);
				});
			});
			$("#admin_override").click(function (e) {
				var flickr_id = prompt("Enter a new Flickr photo ID for this place:","");
				
				if (flickr_id)
				{
					$.post('/ajax_utils/override_placecard',{
						geo: $(this).attr("title"), flickr_id: flickr_id
					}, function (data) {
						//alert(data);
						location.reload(true);
					});
				}
			});
		}
	}
	
	$(document).keydown(function (e) {
		if (!disableKeyListeners)
		{
			
			/*if ($.browser.msie || $.browser.mozilla || $.browser.opera)
			 	var scrollLeft = document.documentElement.scrollLeft;
			else if ($.broswer.safari)
				var scrollLeft = document.body.scrollLeft;*/
			
			var scrollLeft = getScrollLeft();
			
			if (e.keyCode == 37)
			{
				if ($('#feedHolder').size())
				{
					if (scrollLeft > 428)
						setScrollLeft(scrollLeft - 428);
					else if (scrollLeft <= 428 && scrollLeft > 0)
						setScrollLeft(0);
					else {
						if ($(".prevPage").size()) document.location = $(".prevPage").attr('href');
					}
				} else {
					if ($(".prevPage").size()) document.location = $(".prevPage").attr('href');
				}
			}
			else if (e.keyCode == 39)
			{
				if ($('#feedHolder').size())
				{
					if (scrollLeft < $('#feedHolder').width() - 428)
						setScrollLeft(scrollLeft + 428);
					else if (scrollLeft >= $('#feedHolder').width() - 428 && scrollLeft < $('#feedHolder').width()) {
						setScrollLeft($('#feedHolder').width());
					} else {
						if ($(".nextPage").size()) window.location = $(".nextPage").attr('href');
					}
				} else {
					if ($(".nextPage").size()) window.location = $(".nextPage").attr('href');
				}
			}
		}
	});
	function getScrollLeft()
	{
		if( typeof( window.pageYOffset ) == 'number' ) {
		    //Netscape compliant
		    var scrollLeft = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		    //DOM compliant
		    var scrollLeft = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		    //IE6 standards compliant mode
		    var scrollLeft = document.documentElement.scrollLeft;
		}
		
		return scrollLeft;
	}
	
	$("input, textarea").focus(function () {
		disableKeyListeners = true;
	});
	
	$("input, textarea").blur(function () {
		disableKeyListeners = false;
	});
	
});

function setScrollLeft(i)
{
	$('html, body').animate({
		scrollLeft: i
	},1);
}
function mouseScrollCallback(e)
{
	var scrollPad           = 107;
    var mouseXDiff          = e.pageX - scrollPad;
    var mouseXCoef          = mouseXDiff / ($(document).width() - scrollPad * 2);
	
	if (mouseXCoef < 0)
		mouseXCoef = 0;
	
	if (mouseXCoef > 1)
		mouseXCoef = 1;
	
	if (!timeSeekMode)
	{
           var contentScrollLength = ($('.feedEntry').size() * 428 + $('.navTab').size() * 107 + $('#feedUsercard').size() * 443) - $('#feedHolder').outerWidth();
           var scroll              = mouseXCoef * contentScrollLength;
   
          document.getElementById('feedHolder').scrollLeft = scroll;
	}
}