/home/kkco/.trash/wordpress-23-related-posts-plugin/static/js/pinterest.js
(function () {
	var ZemRPResponse = [];
	if (window.jQuery) {
		jQuery(function ($) {
			window._wp_rp_request_id = window._wp_rp_request_id || ((new Date().getTime() % 60466176) / 60466176).toString(36).substr(2,5) + Math.random().toString(36).substr(2,10); // 60466176 = 36 ^ 5

			var scrollTimeout = 0,
				win = $(window),
				fetching_first_time = window._wp_rp_num_rel_posts * 1 || 5,
				fetching = fetching_first_time * 2,
				is_first_time = true,
				related = $('.wp_rp.related_post'),
				loading = false,
				stop = false,
				originalRPHeight = 2 * related.outerHeight(true),

				from = fetching_first_time,

				push_stats = function (action, extra_params) {
					var img = document.createElement('img');
					var params = {
							action: action,
							post_id: window._wp_rp_post_id,
							request_id: window._wp_rp_request_id,
							_: (+new Date())
						};
					var ajax_query = [];
					var ajax_url = window._wp_rp_static_base_url + 'stats.gif?';

					if (extra_params) {
						for (var attrname in extra_params) {
							if (extra_params.hasOwnProperty(attrname)) {
								params[attrname] = extra_params[attrname];
							}
						}
					}

					for(x in params) {
						if (params.hasOwnProperty(x)) {
							ajax_query.push(x + '=' + params[x]);
						}
					}

					ajax_url += ajax_query.join('&');

					img.src = ajax_url;
				},
				getNextSet = function () {
					if (ZemRPResponse.length <= 0) {
						$('#wp_rp_related_load_more').parent().remove();
						return [];
					}
					var i = 0, result = [], next = {};
					for (; i < (is_first_time ? fetching_first_time : fetching); i += 1) {
						next = ZemRPResponse.shift();
						if (next) {
							result.push(next);
						}
					}
					is_first_time = false;
					return result;
				},
				fillList = function (cb) {
					if (stop && ZemRPResponse.length <= 0) {
						$('#wp_rp_related_load_more').parent().remove();
					}
					if (loading || stop) {
						return;
					}

					loading = true;
					$.getJSON(window._wp_rp_wp_ajax_url + '?action=wp_rp_load_articles&post_id=' + window._wp_rp_post_id + '&from=' + from + '&count=50&size=full', function (data) {
						if (!data || !data.length || typeof(data) === 'string') {
							stop = true;
							if (ZemRPResponse.length <= 0) {
								$('#wp_rp_related_load_more').parent().remove();
							}
						} else {
							from += data.length;
							$.each(data, function (i, newOne) {
								ZemRPResponse.push(newOne);
							});
							if (cb) {
								cb();
							}
						}
						loading = false;
					});
				},
				fetchRelated = function (cb) {
					if (ZemRPResponse.length <= 0) {
						fillList(function () {
							cb(getNextSet());
						});
					} else if (ZemRPResponse.length <= (2 * fetching)) {
						cb(getNextSet());
						fillList();
					} else {
						cb(getNextSet());
					}
				},
				loadMoreRelated = function () {
					fetchRelated(function (data) {
						setTimeout(function () {
							$('#wp_rp_related_load_more')
								.find('.zloader').hide().end()
								.find('span').show();
						}, 500);

						var postContainer = $('.related_post.wp_rp'),
							nextPosition = postContainer.find('li ul li').length,
							prevImg = null,
							columns = postContainer.find('.wp_rp_related_post_column'),
							appendArticle = function (newElm, newImg) {
								var shortest = $();

								columns.each(function (i, column) {
									column = $('ul', column);

									if (shortest.height() === null || shortest.height() >= column.height()) {
										shortest = column;
									}
								});

								shortest.append(newElm);
							},
							loadArticle = function (i, newElm, prevImg, newImg) {
								setTimeout(function () {
									if (!prevImg || !prevImg.length || prevImg.data('zloaded')) {
										appendArticle(newElm, newImg);
									} else {
										prevImg
											.load(function () {appendArticle(newElm, newImg);})
											.error(function () {appendArticle(newElm, newImg);});
									}
								}, 75 * i);
							};

						$.each(data, function (i, post) {
							var newImg = $(post.img);
							newImg
								.load(function () {$(this).data('zloaded', true)})
								.error(function () {$(this).data('zloaded', true)});

							var newElm = $('<li data-position="' + nextPosition + '" data-poid="' + post.id + '"><a href="' + post.url + '" class="wp_rp_thumbnail"></a><a href="' + post.url + '" class="wp_rp_title">' + post.title + '</a></li>');
							newElm.data('position', nextPosition);
							newElm.data('poid', post.id);
							newElm.find('.wp_rp_thumbnail').append(newImg);

							nextPosition += 1;

							loadArticle(i, newElm, prevImg, newImg);

							prevImg = newImg;
						});
					});
				},
				scrollHandler = function () {
					if (scrollTimeout) {
						clearTimeout(scrollTimeout);
					}
					scrollTimeout = setTimeout(function () {
						var postContainer = $('.related_post.wp_rp'),
							fromBottom = postContainer.offset().top + postContainer.outerHeight(true) - win.scrollTop() - win.height();

						if (fromBottom + 100 < originalRPHeight) { // before the user scrolls below this threshold, load more
							loadMoreRelated();
						}
					}, 150);
				},
				initScrollHandler = function () {
					scrollHandler();
					$(window).bind('scroll.zloader', function () {
						if (is_first_time) {
							scrollHandler();
						} else {
							$(window).unbind('scroll.zloader');
						}
					});
				},
				preparseRelatedPosts = function () {
					var max_left = -1,
						columns = [],
						column_count = 0;

					related.find('li').each(function (i, column) {
						column = $(column);
						column.children().find('img').data('zloaded', true);

						var id = column.data('poid');
						var position = column.data('position');
						var post_type = column.data('post-type');
						var class_name = column.attr('class');;

						var first = $('<li class="' + class_name + '" data-post-type="' + post_type + '" data-position="' + position + '" data-poid="' + id + '"></li>');
						var left = column.offset().left;

						if (left > max_left) {
							max_left = left;
							column_count += 1;
						}

						var column_idx = i % column_count;

						first.append(column.children());

						if (columns[column_idx]) {
							columns[column_idx].find('ul').append(first);
							column.remove();
						} else {
							column.empty();
							column.attr('data-position', null);
							column.attr('data-poid', null);
							column.attr('data-post-type', null);

							column.addClass('wp_rp_related_post_column');
							column.addClass('wp_rp_special');

							column.append('<ul></ul>');
							column.find('ul').append(first);

							columns[column_idx] = column;
						}
					});

					initScrollHandler();
				};


			preparseRelatedPosts();
			fillList();

			related.append($('<li class="wp_rp_related_post_load_more wp_rp_special">' +
						'<a id="wp_rp_related_load_more" href="#">' +
							'<span>Load more posts</span>' +
							'<img src="' + window._wp_rp_static_base_url + 'img/loading.gif" class="zloader" />' +
						'</a>' +
					'</li>'));

			related.find('#wp_rp_related_load_more').click(function (ev) {
				$('span', this).hide();
				$('.zloader', this).show();

				ev.preventDefault();
				loadMoreRelated();
				push_stats('pinterest-load-more');
			});
		});
	}
}());