function tog(the_element, immediate) {
    var it = $(the_element);
    if (it.style.display != 'block' && it.style.display != '') {
        new Effect.Appear(it);
    } else {
        if (immediate) {
            it.style.display='none';
        } else {
            new Effect.Fade(it);
        }
    }
}

function trace(msg) {
	//return;
	try {
		if (window.console) {
			window.console.log(msg);
		}
	} catch (e) {
	}
}

function getInnerText(which) {
    return (which.innerText || which.textContent);
}

function is_int(input){
    return typeof(input)=='number'&&parseInt(input)==input;
}
  
function toggle_categories(cdd) {
    if (cdd === undefined) {
        cat_dropdown = $('category_dropdown');
    }
	else {
		cat_dropdown = $(cdd);
        // navigatio = $('navigation');  // Not sure what this does since isn't used
	}
    
   if (cat_dropdown.style.display == 'none') {
        new Effect.SlideDown(cat_dropdown);
        $('categories_tab').className = 'selected';
        for (var i in tabs) {
        	if($(tabs[i] + '_tab')) {
                if ($(tabs[i] + '_tab').className == 'selected') {
					selected = tabs[i];
					$(selected + '_tab').className = 'none';
					break;
			    }
            }
        }
    } else {
        new Effect.SlideUp(cat_dropdown); 
        $('categories_tab').className = 'none';
        if($(selected + '_tab')) {
        	$(selected + '_tab').className = 'selected';
        }
    }
    
    return false;
}


function showOnlyExpertResearched() {
    $('regular_related').style.display = 'none';
    new Effect.Appear('expert_related');
    $('show_only_expert_related_link').style.display = 'none';
}

function swapToShow(which) {
    if (which == 'expert') {
        $('show_all_related_link').style.display='block';
        $('expert_related').style.display='block';
        $('regular_related').style.display='none';
        $('show_only_expert_related_link').style.display='none'; 
    } else {
        $('show_all_related_link').style.display='none';
        $('expert_related').style.display='none';
        $('regular_related').style.display='block';
        $('show_only_expert_related_link').style.display='block'; 
    }
}

function switchToPage(page, which) {
    for (var x=1; x<=3; x++) {
        if (x == page) {                        
            new Effect.Appear(which + page);
            $(which + 'l' + x).className="selected";
        } else {
            $(which + x).style.display = 'none';
            $(which + 'l' + x).className = 'none';
        }
    }
}

function load_subcategories(c, w) {
    new Ajax.Updater('subcategory' + w, '/ajax/subcategories.php?c=' + c + '&w=' + w);
}

function showAllItemsOfClass(which) {
    var all = $$(which); 
    for (i in all) {
        if (all[i] && all[i] != 'undefined' && typeof(all[i]) == 'object') {
            new Effect.Appear(all[i]);
        }
    }
}


function submitReport(id) {
	jQuery.noConflict()(function ($){
		$('#reportThanks').remove();
		if (undefined != $("#ans" + id).find("input[name=reason]:checked").val()) {
			var report_form = $('#report_form'); 
			var params = report_form.serialize();
			$.ajax({
				type: "POST",
				url: "/report.php?" + params,
				data: "returnedData",
				success: function() {
					var response = $("#ans" + id);
					$(response).find('.IconWarning3a').text('Reported').removeAttr("onclick");
					$(response).delay(500).css( 'position', 'relative' );
					$(response).delay(600).append('<div id="reportThanks"><span>Thanks for your report. We&#146;ll investigate!</span></div>');
					
					$('#reportThanks').fadeIn();
					$('#reportThanks').delay(2000).fadeOut(1000);
					$('#report_form').fadeOut();
				}
			});
				return false;
		}
		if (undefined != $('.question').find("input[value=duplicate]:checked").val() || undefined != $('.question').find("input[value=wrong-cat]:checked").val()) {
			$('#report_form').submit();
		} else {
			var report_form = $('#report_form'); 
			var params = report_form.serialize();
			$.ajax({
				type: "POST",
				url: "/report.php?" + params,
				data: "returnedData",
				success: function() {
					$('.question').find('.IconWarning3a').text('Reported').removeAttr("onclick");
					$('.question').delay(500).css( 'position', 'relative' );
					$('.question').delay(600).append('<div id="reportThanks"><span>Thanks for your report. We&#146;ll investigate!</span></div>');
					
					$('#reportThanks').fadeIn();
					$('#reportThanks').delay(2000).fadeOut(1000);
					$('#report_form').fadeOut();
				}
			});
				return false;
		}
	});
}

function isLoggedIn() {
	return AB.require_login('You must be logged in to report content.');
}

function reportContent(q, id, type,studio_flag) {
	if (isLoggedIn()) {
		var report_html = '<form id="report_form" class="ReportAbuseDropDown" action="/report/"><ul><input type="hidden" name="q" value="' + q + '" />' + 
							'<input type="hidden" name="id" value="' + id + '" />' + 
							'<input type="hidden" name="type" value="' + type + '" />' +
							'<li><label><input type="radio" name="reason" value="spam" />Spam</label></li>' +
							'<li><label><input type="radio" name="reason" value="offensive" />Offensive</label></li>' +
							'<li><label><input type="radio" name="reason" value="nonsense" />Nonsense</label></li>';

				if(studio_flag!==1) {
					 report_html += '<li><label><input type="radio" name="reason" value="duplicate" />Duplicate</label></li>';
				}                        
							
							if (type == 'question') {
								report_html = report_html +  '<li><label><input type="radio" name="reason" value="bad-tags" />Bad tag(s)</label></li>' +
											 '<li><label><input type="radio" name="reason" value="wrong-cat" />Wrong category</label></li>';
							}
							
						   report_html = report_html +  '</ul><a class="close" href="#" onclick="tog(\'report' + id + type + '\'); return false;"><img width="15" height="15" alt="Close the Report Abuse Menu" src="/ui/images/buttons/blue_close.png"/></a>' +
						   '<input type="button" class="Button1a submit" value="Submit" onclick="submitReport( '+ id +' );" /></form>';
		it = $('report' + id + type);
		it.innerHTML = report_html;
		new Effect.Appear(it);
	}
}


function togdual(the_element,the_element2, immediate) {
    var it = $(the_element);
    var it2 = $(the_element2);
    if (it.style.display != 'block' && it.style.display != '') {
        new Effect.Appear(it);
        it2.style.display='none';
    } else {
        if (immediate) {
            it2.style.display='';
        } else {
            //new Effect.Fade(it);
            new Effect.Appear(it2);
        }
        it.style.display='none';
    }
}

function toggleCategoriesDropdown() {
    var dropdown = $('categories_dropdown');
    if (dropdown.className == 'menu inactive') {
        dropdown.className = 'menu active';
    } else {
        dropdown.className = 'menu inactive';
    }

	if($('categories').value != '' )  {
		$('li_categories').className = 'dropdown last selected';
	}else{
		$('li_categories').className = 'dropdown last';
	}
}

function updateRemaining() {
    remaining = 140 - q_t.value.length;
    c_r.innerHTML = remaining;
    if (remaining >= 20) {
        c_r.style.color = '#666666';
        c_r.style.fontWeight = 'normal';
    } else if (remaining >= 10) {
        c_r.style.color = 'firebrick';
        c_r.style.fontWeight = 'normal';
    } else {
        c_r.style.color = 'firebrick';
        c_r.style.fontWeight = 'bold';
    }
    
}

function handleAnswerForm() {
    if ($('answer').style.color == 'black') {
        $('answer_form').submit();
    } else {
        new Effect.Appear($('answer_it'));
        $('answer_button').value='Submit answer';
    }
}

// [Optimost] For new cases
var likeTerm = "Like";
var unLikeTerm = "Unlike";

function like(content_id, content_type, mkey) {
	// [AL] For Optimost Test
	if (typeof(OPTMODE) != "undefined") {
		likeTerm = "Rate";
		unLikeTerm = "Unrate";
	}
	// [AL] End
	
    if (mkey <= '') {
        mkey = '';
    }

	if (!AB.require_login('You must login or register to ' + likeTerm + ' stuff.', false)) return false;

    link = $('like_link_' + content_id + '_' + content_type);
    new_link_html = '<a href="#" onclick="like(' + content_id + ",'" + content_type + "'); return false;\">";
    current_text = getInnerText(link).strip();
    if (current_text == likeTerm) {
        // Like it
        link.innerHTML = new_link_html + unLikeTerm + '</a>';
        new Ajax.Updater('liked_by_whom_' + content_id + '_' + content_type, '/ajax/like.php?id=' + content_id + '&type=' + content_type + '&which=like&mkey=' + mkey);
    } else {
        // Unlike it 
        link.innerHTML = new_link_html + likeTerm + '</a>';
        new Ajax.Updater('liked_by_whom_' + content_id + '_' + content_type, '/ajax/like.php?id=' + content_id + '&type=' + content_type + '&which=unlike&mkey=' + mkey);
    }
}

var regulars = new Array();
function show_answers(which) {
    regulars = $$('div.regular');
    reg_length = regulars.length;

    if (which == 'all') {
        for(var i=0; i<reg_length; i++) {
            new Effect.Appear(regulars[i]);
        }
        
        showing_status.innerHTML = 'Showing all answers. <a href="#" onclick="show_answers(\'great\'); return false;">Show only great answers.</a>';
    } else if (which == 'great') {
        for(var i=0; i<reg_length; i++) {
            new Effect.Fade(regulars[i]);
        }
        
        showing_status.innerHTML = 'Showing only great answers. <a href="#" onclick="show_answers(\'all\'); return false;">Show all answers.</a>';
    }
}

function loadMoreAnswers(q, s) {
    $('more_answers').innerHTML = "<img src=/images/bar.gif>";
    new Ajax.Updater('more_answers', '/ajax/more_answers.php?q=' + q + '&s=' + s + '&ajax=1');
    $('show_more_answers').style.display = 'none';
}

function getCookieVal(offset) {
	var endstr = document.cookie.indexOf(";", offset);
	if (endstr == -1) endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie(name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg) return getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return null;
}

function SetCookie(name, value) {
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	document.cookie = name + "=" + escape(value) + ((expires == null) ? "" : ("; expires=" + expires.toUTCString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : "");
}

function DeleteCookie(name) {
	var exp = new Date();
	exp.setTime(exp.getTime() - 1);
	// This cookie is history
	var cval = GetCookie(name);
	document.cookie = name + "=" + cval + "; expires=" + exp.toUTCString();

}

function addFilter(which) {
    // Already selected. Disable filter.
    if ($(which).value == 1) {
        $('li_' + which).className = 'none';
        $(which).value = 0;
    } else {
        $('li_' + which).className = 'selected';
        $(which).value = 1;
    }
    
    updateQuestions();
}

function showRecentTopics(which) {
    if (which == 'today') {
        $('recent_topics_today').style.display='block';
        $('recent_topics_week').style.display='none';
        $('recent_topics_month').style.display='none';
        
        $('topics_today_link').className = 'first selected';
        $('topics_week_link').className = 'middle';
        $('topics_month_link').className = 'last';
    } else if (which == 'week') {
        $('recent_topics_week').style.display='block';
        $('recent_topics_today').style.display='none';
        $('recent_topics_month').style.display='none';
        
        $('topics_week_link').className = 'middle selected';
        $('topics_today_link').className = 'first';
        $('topics_month_link').className = 'last';    
    } else if (which == 'month') {
        $('recent_topics_month').style.display='block';
        $('recent_topics_today').style.display='none';
        $('recent_topics_week').style.display='none';
        
        $('topics_month_link').className = 'last selected';
        $('topics_today_link').className = 'first';
        $('topics_week_link').className = 'middle';    
    }
}

var simpleEncoding = 
  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

function simpleEncode(valueArray,maxValue) {
    var chartData = ['s:'];
      for (var i = 0; i < valueArray.length; i++) {
        var currentValue = valueArray[i];
        if (!isNaN(currentValue) && currentValue >= 0) {
        chartData.push(simpleEncoding.charAt(Math.round((simpleEncoding.length-1) * 
          currentValue / maxValue)));
        }
          else {
          chartData.push('_');
          }
      }
    return chartData.join('');
}

function getTopicImage(elementID,tagName) {
	new Ajax.Request('/ajax/ajax_request?type=topicimage&topic='+tagName+'&rand='+Math.random(), {
		method: 'get',
		onSuccess: function(transport) {
			var info = transport.responseText.evalJSON();
			$(elementID).src = info[tagName][0].url;
		}
	});
}

function add_recipient(id, name) {
    var recipients = $('recipients');
    if (recipients.innerHTML > '') {
        recipients.innerHTML = recipients.innerHTML + 
                               ', <a href="/profile/' + id + '">' + name + '</a>' +
                               '<input type="hidden" name="to[]" value="' + id + '" />';
    } else {
        recipients.innerHTML = '<a href="/profile/' + id + '">' + name + '</a>' +
                               '<input type="hidden" name="to[]" value="' + id + '" />';
    }
}

function hide_elements(cssSelect) {
	$$(cssSelect).each(function(name, index) {
	    name.style.display = "none";
	});
}

var addthis_config = {
  data_use_flash: false
}


var fb_login_response = null;
var fb_login_cached = function (callback, perms) {

	if (fb_login_response && fb_login_response.perms.match(new RegExp(perms))) {
		callback(fb_login_response);
	} else {
		FB.login(function(response) {
			if (response.session) {
				fb_login_response = response;
			}
			callback(response);
		}, { perms:perms });
	}
}

var delay = 700;
jQuery.noConflict()(function ($){
	if (document.getElementById('blogCountNum')){
		$('.hoverIndicator').hover(
			function(){
				$('.blogIndicator dd').text($('span.hidden').text());
				$('.blogIndicator').fadeIn(delay);
			},
			function(){
				$('.blogIndicator').fadeOut(delay);
			}
		);
	};
});

jQuery.noConflict()(function ($){
	if ($('.AnswerBuzz')){
		var openedId = null;
		$('.searchTerm .term').click( function(event) {
			if (openedId != null && openedId != $(this).attr('id')) {
				$('#'+openedId+'_ajx').slideUp(250);
				//$('#'+openedId+'_close').css('display','none');
				console.log(openedId);
			}
				event.stopPropagation();
				var target = $(this).attr('id');
				openedId = target;
				
				$('#'+target+'_ajx').slideDown(250);

				$('#'+target+'_close').show();
				
				if(document.popSearchesList==undefined) {
					document.popSearchesList = {};
				}
				if(target in document.popSearchesList) {
					$('#'+target+'_ajx').html(document.popSearchesList[target]);
				} else {
					$('#'+target+'_ajx .termQuestion').html('<div class="content"></div>');
					$.ajax({
						url: '/ajax/ajax_request.php?type=findRecentActivity&st='+this.id,
						success: function(data) {
							var jsonData = data; //jQuery.parseJSON(data);
							trace(jsonData);
							$.each(jsonData.activity, function(i,item){
								if (jsonData.activity[i].type=='q') {
									$('#'+target+'_ajx .content').append('<a href="/q_view/' + jsonData.activity[i].id + '"><p class="questionText">' + jsonData.activity[i].text + '</p></a><p class="submitter"> <img src="http://i.abimg.net/images/avatars/50/' + jsonData.activity[i].avatar + '" /> by <a href="/profile/' + jsonData.faceroll[i].id + '">' + jsonData.activity[i].display_name + '</a></p>');
								}
								if (jsonData.activity[i].type=='a') {
									$('#'+target+'_ajx .content').append('<a href="/q_view/' + jsonData.activity[i].id + '"><p class="questionText">'+jsonData.activity[i].qinfo.question_text+'</p></a><p class="latestAnswer">Latest Answer</p><p class="answerText">' + jsonData.activity[i].text + '</p><p class="submitter"><img src="http://i.abimg.net/images/avatars/50/' + jsonData.activity[i].avatar + '" /> by <a href="/profile/' + jsonData.faceroll[i].id + '">' + jsonData.activity[i].display_name + '</a></p>');
								}
								if (jsonData.activity[i].type=='c') {
									$('#'+target+'_ajx .content').append('<a href="/q_view/' + jsonData.activity[i].id + '"><p class="questionText">'+jsonData.activity[i].qinfo.question_text+'</p></a><p class="latestAnswer">Latest Comment</p><p class="answerText">' + jsonData.activity[i].text + '</p><p class="submitter"><img src="http://i.abimg.net/images/avatars/50/' + jsonData.activity[i].avatar + '" /> by <a href="/profile/' + jsonData.faceroll[i].id + '">' + jsonData.activity[i].display_name + '</a></p>');
								}
							});
							$('#'+target+'_ajx .content').append('<div class="abaggers"><p><span></span> </p></div>');
							var count = 0;
							$.each(jsonData.faceroll, function(i,item){
								if (i < 20){
									$('#'+target+'_ajx .content .abaggers').append('<a href="/profile/' + jsonData.faceroll[i].id + '"><img  class="normalTip" title="' + jsonData.faceroll[i].display_name + '" src="' + jsonData.faceroll[i].avatar_url + '" /></a>');
								}
								count++;
							});
							if (count==1) {
								$('#'+target+'_ajx .content .abaggers p').append('Answerbagger has joined the discussion');
							} else {
								$('#'+target+'_ajx .content .abaggers p').append('Answerbaggers have joined the discussion');
							}
							$('.abaggers span').html(count);
							var generatedContent = $('#'+target+'_ajx').html();
							document.popSearchesList[target] = generatedContent;
						}
					});
				}
			$('#'+target+'_ajx').slideDown(250);
			$('.AnswerBuzz .termQsWrapper .closeButton').click(function() {
			console.log('asdfasdf');
			$('.AnswerBuzz .termQsWrapper').slideUp(250);
			//$(this).css('display','none');
		});
		});
	};
});



(function($) {
	$.fn.noFollow = function() {
		return this.each(function() {
			var $this = $(this);
			$this.attr("href", $this.attr('data-lk'));
		});
	}
})(jQuery);
jQuery.noConflict()(function ($){
	$('.imageAttr').click( function () {
		$('.dialog.attribution a.close').click( function() {
			$('#' + attrId).hide();
		});
		var parId = $(this).attr('id');
		var imgId = parId.replace('topic_attribution_','');
		var attrId = 'image_attr_' + imgId;
		$('#' + attrId).show();
	});
});
var profileModalInHappNow = false;
function profileModalInfoHide() {
	jQuery('.ProfileModal').hide();
	jQuery('#modal-mask').remove();
	profileModalInHappNow = false;
}
function profileModalInfoPrep(obj) {
	var item = $(obj).attr('rel');
	var offset = $(obj).offset();
	profileModalInfo(item, offset);
}
function profileModalInfo(elemId, offset, flag) {
	profileModalInfoHide();
	if (flag) {
		profileModalInHappNow = true;
	}
	var maskHeight = jQuery(document).height();
	var maskWidth = jQuery(window).width();
	jQuery('body').prepend('<div id="modal-mask"></div>');
	jQuery('#modal-mask').css({
		'height': maskHeight,
		'width': maskWidth,
		'position': 'absolute',
		'z-index': '1'
	});
	jQuery('#modal-mask').click( function() {
		jQuery('.ProfileModal').hide();
		jQuery('#modal-mask').remove();
	});
	jQuery('.ProfileModal .content').html('<img class="loading" src="/images/bar.gif" />');
	var itemOffsetL = offset.left;
	var itemOffsetT = offset.top;
	var itemOffsetLR = itemOffsetL.round();
	var itemOffsetTR = itemOffsetT.round();
	jQuery('.ProfileModal').css({
		left: itemOffsetLR-10 + 'px',
		top: itemOffsetTR+10 + 'px'
	});
	jQuery('.ProfileModal').show();
	jQuery.get('/profile/?id='+elemId+'&ajax=1', function(data) {
		jQuery('.ProfileModal .content').html(data);
	});
}
jQuery.noConflict()(function ($){
	$('.ProfileModal a.close').click( function() {
		profileModalInfoHide();
	});
	$('.modalInfo').click( function (e) {
		profileModalInfoPrep($(this));
	});
});
jQuery.noConflict()(function ($){
	$('.hotTopics').onVisible({threshold: 100, callback: function() {
		$.get('hot_topics_3col.php', function(data) {
			$('.hotTopics').html(data);
		});
	}});
});
(function($) {
	$.fn.lazyImage = function(options) {
		var settings = {
			errorImg: false,
			callback: false
		};
		if (options) $.extend(settings, options);

		return this.each(function() {
			var self = this;
			$("<img />").bind("load", function() {
				$(self).hide().attr("src", $(self).attr("data-img")).fadeIn();
				if (settings.callback) settings.callback.call(self);
			}).bind("error", function() {
				if (settings.errorImg) $(self).attr("src", settings.errorImg);
			}).attr("src", $(self).attr("data-img"));
		});
	};
})(jQuery);
/*
	dlabs
	addLoadEvent.js
		Replaces userAction.js in delay loading scripts.  Executes scripts at window.load in order of priority with lowest number executed first.  Defaults to a priority of 3 if none passed.
	Usage:
		Enclose the function you wish to call in function(){} and add a priority (if different from 3) to call the function.
	Priorities:
		Priorities should be a value between 1-5 inclusive, the lowest being highest priority.  Examples of high prorities would be lazy image loading (1).  Low priorities would be intellitxt(4), addthis (5), facebooklike (5).  A value of 3 is considered average and loaded by default.
	Examples:
		addLoadEvent(function(){coolstuff();}, 3);
		addLoadEvent(function(){
			$('.featuredItems').onVisible({callback: function() {
				$('.featuredItemImage img',this).lazyImage();
			}});
		}, 1);
		
		onVisible() will be executed first before coolstuff()
		
		addLoadEvent also accepts $.getScript and callback functions -
		
		addLoadEvent(
			'script.js',
			function(){alert("script.js loaded!");},
			1
		);
*/
(function($){
	var queue = [];
	addLoadEvent = function(fn, priority) {
		
		if (typeof priority == "function") {
			var cb = priority;
			priority = arguments[2];
		}
		if (priority==undefined) { priority = 3; }
		queue.push({
			fn: fn,
			priority: priority,
			cb: cb
		});
	};
	fireEvents = function() {
		//dmjs.sortQueue();
		for(var i=0; i<queue.length; i++) {
			if (typeof queue[i].fn == "string") $.getScript(queue[i].fn, queue[i].cb);
			else queue[i].fn();
		}
	};
	sortQueue = function() {
		queue.sort(function(a, b) {
			return a.priority - b.priority;
		});
	};
})(jQuery);
(function($) {
	$.fn.onVisible = function(options) {
		var settings = {
			threshold: 0,
			failurelimit: 0,
			container: window,
			callback: false
		};

		if (options) $.extend(settings, options);

		/* Fire one scroll event per scroll. Not one scroll event per image. */
		var elements = this;

		var checkScroll = function(event) {
			var counter = 0;
			elements.each(function() {
				if ($.abovethetop(this, settings) || $.leftofbegin(this, settings)) {
					/* Do nothing */
				} else if (!$.belowthefold(this, settings) && !$.rightoffold(this, settings)) {
					$(this).trigger("visible");
				} else {
					if (counter++>settings.failurelimit) return false;
				}
				return true;
			});
		};

		this.each(function() {
			if (settings.callback) {
				var t = $(this);
				t.one("visible", function() {
					settings.callback.call(t);
				});
			}
		});;

		$(settings.container).bind("scroll", checkScroll);

		/* Force initial check if images should appear. */
		$(settings.container).trigger("scroll");

		return this;
	};

	/* Convenience methods in jQuery namespace.           */
	/* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
	$.belowthefold = function(element, settings) {
		if (settings.container === undefined || settings.container === window) {
			var fold = $(window).height() + $(window).scrollTop();
		} else {
			var fold = $(settings.container).offset().top + $(settings.container).height();
		}
		return fold <= $(element).offset().top - settings.threshold;
	};

	$.rightoffold = function(element, settings) {
		if (settings.container === undefined || settings.container === window) {
			var fold = $(window).width() + $(window).scrollLeft();
		} else {
			var fold = $(settings.container).offset().left + $(settings.container).width();
		}
		return fold <= $(element).offset().left - settings.threshold;
	};

	$.abovethetop = function(element, settings) {
		if (settings.container === undefined || settings.container === window) {
			var fold = $(window).scrollTop();
		} else {
			var fold = $(settings.container).offset().top;
		}
		return fold >= $(element).offset().top + settings.threshold + $(element).height();
	};

	$.leftofbegin = function(element, settings) {
		if (settings.container === undefined || settings.container === window) {
			var fold = $(window).scrollLeft();
		} else {
			var fold = $(settings.container).offset().left;
		}
		return fold >= $(element).offset().left + settings.threshold + $(element).width();
	};

	/* Custom selectors for your convenience.   */
	/* Use as $("img:below-the-fold").something() */
	$.extend($.expr[':'], {
		"below-the-fold": "$.belowthefold(a, {threshold: 0, container: window})",
		"above-the-fold": "!$.belowthefold(a, {threshold: 0, container: window})",
		"right-of-fold": "$.rightoffold(a, {threshold: 0, container: window})",
		"left-of-fold": "!$.rightoffold(a, {threshold: 0, container: window})"
	});
})(jQuery);

