jQuery.ajaxSetup({'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript");}});

$ = jQuery;

tl = {
  opts : {'expander' : '.expander', 'speed' : 'dev'},
  treelist : function(opts) {
    tl._setup(opts);
    tl.$tree = this;
    jQuery('li:not(.open) ul', tl.$tree).hide();
    jQuery(tl.opts.expander, tl.$tree).click(tl._expand);
  },
  _expand : function() {
    var $li = jQuery(this).closest('li');
    var $li_ul = jQuery('ul:first', $li);
		$li_ul.slideToggle(tl.opts.speed);
		$li.toggleClass('open');
    return false;
  },
  _setup : function(opts) {
		if (typeof opts == 'undefined') { return; }
		tl.opts = jQuery.merge(tl.opts, opts);
  }
};
jQuery.fn.extend(tl);

_track_ajax = function(url, status) {
	if ('success' != status) { return; }
	pageTracker._trackPageview(url);
	mistats_resend();
};

ajax_post = function(form) {
  jQuery.post(form.action, $(form).serialize(), null, "script");
  return false;
};

jQuery.fn.exclude = function() {
	$(this).live('submit', function(){
		// $this must get set to the global context to be used to by the response script
		$this = $(this);
		ajax_post(this);
		return false;
	});
	return this;
};

jQuery.fn.post_with_ajax = function() {
	$(this).live('submit', function(){
		return ajax_post(this);
	});
	return this;
};

jQuery.fn.fade_with_ajax = function(container, extra_params, callback) {
	$(this).live('click', function(){
		var $this = $(this);
		var $ajax = $('.ajax', $this);
    var $container = $(container);
		// view cleanup
		$('a', $this.closest('div')).removeClass('active');
		$this.addClass('ajaxing');
		$('.ajax').css('background', '');
		$ajax.css('background', 'url(/images/ajax-loader.gif) no-repeat right center');
		$container.fadeOut(150);
		// ajax call
		var params = typeof extra_params == 'function' ? extra_params() : extra_params;
		$.get($this.attr('href'), params, function(data, status){
      $container.html(data);
			if (typeof callback == 'function') { callback(); } // do extra callback (for binding additional js, etc)
			$ajax.css('background', '');
			$this.removeClass('ajaxing');
      $container.fadeIn(150);
			_track_ajax($this.attr('href'), status);
    });
    $this.addClass('active');
    return false;
	});
	return this;
};

jQuery.fn.more_with_ajax = function(container, extra_params, callback) {
	$(this).live('click', function(){
		var $this = $(this);
    var $container = $(container);
		$this.addClass('loading').html('Loading...').after('<br/>');
		// ajax call
		var params = typeof extra_params == 'function' ? extra_params() : extra_params;
		$.get($this.attr('href'), params, function(data, status){
			var $data = $(data).filter(' ').wrap('<div></div>').parent().hide();
      $container.append($data);
			$this.fadeOut(75, function(){ $data.slideDown(500); });
			if (typeof callback == 'function') { callback(); } // do extra callback (for binding additional js, etc)
			_track_ajax($this.attr('href'), status);
    });
    return false;
	});
	return this;
};

jQuery.fn.toggle_comments = function() {
	
	var _finish_comments = function($target) {
		$target.html('Hide Comments');
    $comments.slideDown(500);
	};
	
	var _fetch_comments = function($target, callback) {
		$target.html('Loading...');
		var $li = $target.closest('li');
		$.get($target.attr('href'), {}, function(data, status){
			$li.append(data);
			$comments = $('.comments', $li);
			if (typeof callback != 'undefined') { callback(); }
			_finish_comments($target);
		});
	};
	
	var _more_comments = function() {
		$('.more-comments').live('click', function() {
			var $this = $(this);
			_fetch_comments($this, function(){$this.remove();});
			return false;
		});
	};
	
	$(this).live('click', function(){
		var $this = $(this);
		var $comments = $('.comments', $this.closest('li'));
		var $add_comment = $('.new-comment', $this.closest('li'));
		if ($this.hasClass('open')) {
			$add_comment.slideUp(500);
			$comments.slideUp(500, function(){$this.html($this.attr('title'));});
		} else {
			$add_comment.slideDown(500);
				$this.attr('title', $this.html());
			if ($comments.length <= 0) {
				_fetch_comments($this);
			} else {
				_finish_comments($this);
			}
			_more_comments();
		}
		$this.toggleClass('open');
		return false;
	});
	

};

jQuery.fn.add_comment = function() {
	$(this).live('click', function(){
		var $this = $(this);
    var $li = $this.closest('.commentable');
		var $new_comment = $li.find('.new-comment');
    var $append_to = $this.closest('div.comment-wrap');
		$sibling = $this.closest('.actions').find('.toggle-comments');
		if (!$sibling.hasClass('open')) { $sibling.click(); }
		$new_comment.hide();
		play = $li;
    $append_to.append($new_comment);
    $new_comment.show();
		$('textarea', $new_comment).focus();
		return false;
	});
	$('.new-comment button[type=reset]').live('click', function(){
		$(this).closest('.new-comment').hide();
  });
};

// toggle_signin = function() {
//  $('#signin').click(function(){
//    $('div#login_prompt').fadeOut('fast', function(){ $('div#login').fadeIn('fast'); });
//    return false;
//  });
//  $('#bailout a').click(function(){
//    $('#login').fadeOut('fast', function(){ $('#login_prompt').fadeIn('fast'); });
//    return false;
//  });
//  $('#login input.txt').focus(function(){ $(this).attr('value', ''); });
//  $('div#login p.fields input[type=text]').blur(function(){
//    var field_txt = $(this).val();
//    if(field_txt == ''){ $(this).attr('value','Username'); }
//  });
// };

article_ajax_params = function() {
	var params = {};
	var $active_cat = $('#cat-nav a.active');
  if ($active_cat.length > 0 && $active_cat.attr('href').search('category_id') != -1) {
    var cat_id = $active_cat.attr('href').replace('/articles?category_id=', '');
    params.category_id = cat_id;
  }
  var $active_tab = $('div.tabs a.active');
  if ($active_tab.length > 0) {
    var href_bits = $active_tab.attr('href').split('/');
    if (href_bits.length > 2) {
      params.sort = href_bits.pop();
			if (params.sort == 'all') {
				delete params.sort;
			}
    }
  }
	return params;
};


save_nav = function() {
	
	save_nav_ajax = function() {
		var url = $('#cat-nav form:first').attr('action');
		if (null === url || undefined === url || url === '') { return; }
		var $open = $('#cat-nav li.open');
		var $not_open = $('#cat-nav li:not(.open)');
		if ($open.length < 1 && $not_open.length < 1) {return;}
		var params = {};
		params['user[excluded_nav_items][]'] = [];
		params['user[included_nav_items][]'] = [];
		for(var i = 0; i < $open.length; i++) {
			params['user[excluded_nav_items][]'][i] = $($open[i]).attr('id').replace('cat-', '');
		}
		for(i = 0; i < $not_open.length; i++) {
			params['user[included_nav_items][]'][i] = $($not_open[i]).attr('id').replace('cat-', '');
		}
		params.authenticity_token = $('#cat-nav input[name=authenticity_token]:first').val();
		params._method = 'put';
		$.ajax({
			'async' : false,
			'url' : url,
			'type' : 'post',
			'data' : params
		});
	};
	$(window).unload(function() {
		save_nav_ajax();
	});
};

jQuery.fn.report_abuse = function() {
	$(this).live('submit', function(){
		var $this = $(this);
		if(confirm("Are you sure you want to report this comment as abusive?")) {
			ajax_post(this);
		} 
		return false;
	});
	return this;
};

jQuery.fn.manage_categories = function() {
	var $this = $(this);
	var $form = $this.closest('form')
	$('input[type=checkbox].category', $this).click(function() {
		var $li = $(this).closest('li');
		$('ul input[type=checkbox].category', $li).attr('checked', $(this).attr('checked'));
		ajax_post($form[0]);
	});
};

jQuery.fn.socialize = function() {  
	// var speed = 400;
	// over then out
  // $('li', $this).mouseover(function(){
  //  var $big = $('a.big', $(this));
  //  $big.stop();
  //  $big.animate({opacity:1}, speed);
  // });
  // 
  // $('li', $this).mouseout(function(){
  //  var $big = $('a.big', $(this));
  //  $big.stop();
  //  $big.animate({opacity:0}, speed);
  // });
	
	$('a', this).click(function(){
		giggly.login($(this).attr('class'), null,
			function(response){
				$.post('/connect', {
						authenticity_token : $('input[name=authenticity_token]:first').val(),
						name : response.user.nickname,
						gigya_id : response.user.UID,
						avatar : response.user.photoURL
					}, null, 'script'
				);
			}, null, true
		);
		return false;
	});
};

toggle_add_my_sources = function() {
	$('#add-a-source a').click(function(){
		$('#add-my-sources').slideToggle(250);
		$(this).toggleClass('open');
		return false;
	});
};

toggle_show_my_sources = function() {
	$('.x-of-y-sources a').click(function(){
		var $div = $(this).closest('.x-of-y-sources');
		var $sources = $('.sources', $div);
		$sources.slideToggle(100);
		return false;
	});
};

jQuery.fn.charlotte_bar = function() {
	$('.show-url', this).click(function(){
		var $this = $(this);
		var $text = $('<textarea>')
			.attr('rows', 1).attr('cols', 30)
			.css('position', 'absolute').css('top', '1px').css('height', '16px').css('margin-left', '10px')
			.val($this.attr('href'));
		$this.after($text);
		$text.focus().select();
		// alert($(this).attr('href'));
		return false;
	});
};

jQuery.fn.get_satisfaction = function() {
  var feedback_widget_options = {};

  //feedback_widget_options.popular_topics = 'Suggested Source'
  
  feedback_widget_options.display = "overlay";
  feedback_widget_options.company = "observerinteractive";
  feedback_widget_options.placement = "left";
  feedback_widget_options.color = "#222";
  feedback_widget_options.style = "idea";

	this.click(function(){
        var get_satisfaction_widget = new GSFN.feedback_widget(feedback_widget_options);
		get_satisfaction_widget.show();
		return false;
	});

};

mark_as_read = function() {
	if ($('.read-asset').length > 0) {
		setTimeout('ajax_post($(".read-asset")[0])', 10000);
	}
};

jQuery(function($){
	$('body').addClass('js');
  $('#cat-nav ul').treelist({speed:'fast'});
	$('#my-cats ul').treelist({speed:'fast'});
	$('#my-cats').manage_categories();
	
	$('form.ajax-form').post_with_ajax();
	$('form.exclude').exclude();
	
	$('#articles .ajax-links a, #articles .ajax-link').fade_with_ajax('#content', article_ajax_params);

	$('.more-assets').more_with_ajax('#content', article_ajax_params);

	$('.toggle-comments').toggle_comments();
	$('.add-comment-under').add_comment();
	$('.report-abuse').report_abuse();
	
	$('#social').socialize();
		
	//toggle_signin();
	toggle_add_my_sources();
	toggle_show_my_sources();
	
	$('#iframe').charlotte_bar();
	mark_as_read();
	
	$('#announcement a.#close_announcement').live('click', function() {
			var date = new Date();
			date.setTime(date.getTime() + 14*24*60*60*1000);
			document.cookie = "closed_announcement=VIEWED; expires=" + date + "; path=/";
			$('#announcement').slideUp();
			return false;
	});
	
	$('#search-box').focus(function(){
		var value = $(this).attr("value");
		if(value == "Search"){
			$(this).attr("value", "");
		}
		$(this).css('color','#333');
	});

	$('#search-box').blur(function(){
		var value = $(this).attr("value");
		if(value == ""){
			$(this).attr('value', 'Search');
		}
		$(this).css('color','#666');
	});
	
	save_nav();
});

giggly = new Giggly(gigyaConfig);

/* jslinted */
