	//try{ if(belo) }catch(err)	{if(console) console.log("[ functions FAIL ]\n"+err.message);}

   /**
    * Global variable and configuration variables
    * @author      $Author: mclagg@beloapps.com $
    * @version     1.0.$Rev: 9168 $
    */

	/**
	 * Last Revision:
	 *	$Id: functions.js 9168 2009-03-28 04:48:46Z mclagg $
	 */

		/*********************************************
		*	GLOBALS VARIABLE DECLARATION
		*********************************************/
// START ENTERPRISE CONFIG
		SLCGMSTAGINGSWITCH = typeof(_QUERY.SLCGMSTAGINGSWITCH)!='undefined' ? _QUERY.SLCGMSTAGINGSWITCH:'';
// TO TURN CACHING OFF GLOBALLY SET MCS TO FALSE
//***********************************************/
		var MCS	= true;		// Master Cache Switch boolean
//***********************************************/
// IGNORE THE NEXT LINE IT CHANGES THE MCS TO false VIA URI FOR TROUBLESHOOTING
				MCS = (_QUERY.SLCACHE==0)? false:MCS;
// TO TURN OFF PLUCK ENTERPRISE WIDE REMOVE THE COMMENT ON THE LINE BELOW
		//SLCGMSWITCH = false;
		var BELOCACHENAME = "slcache"+SLCGMSTAGINGSWITCH;
		var SITELIFENAME	= "sitelife"+SLCGMSTAGINGSWITCH;
		var SLCGM_DEBUG 	= false;
	// END ENTERPRISE CONFIG
		var UPLOADFORMCOUNTER = 5000;
	// SITELIFE CONFIGURATION
	// PLUCK'S SITELIFE VERSION
		var SLVER = "ver1.0";
	// DYNAMICALLY DETERMINE THE SITE TLD, AND SET SITELIFE SUBDOMAIN
		var TLD = document.domain.replace(/[^\.]*\.([^\.]+\.[^\.]{2,3})/g,"$1");
		document.domain = TLD;
		try
		{
			var SLCACHING	= ((MCS && SCS)? BELOCACHENAME:SITELIFENAME);
		} catch(e){}
		var DAAPIPROCESSURL = "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/Direct/Process?sid=" + SITELIFENAME + "." + TLD;
		var DIRECTPROXYADDRESS = "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/Direct/DirectProxy?sid=" + SITELIFENAME + "." + TLD;
		var SOCIALPROXYADDRESS = "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/Direct/SocialProxy?sid=" + SITELIFENAME + "." + TLD;
		var SLAUTHPROXYADDRESS = "http://" + SLCACHING + "." + TLD + "/slauth/proxy/Index.rails";
		var PHOTOUPLOADURL = "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/Photo/Upload?sid=" + SITELIFENAME + "." + TLD;
		var VIDEOUPLOADURL = "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/Video/Upload?sid=" + SITELIFENAME + "." + TLD;
		//var AVATARUPLOADURL= "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/Persona/UploadUserAvatar";
	// CHECK TO SEE IF SLPROXY IS ALREADY LOADED IN THE CASE OF PERSONA PAGES
		try
		{
			if (typeof(SITELIFEPROXYADDRESS)=='undefined') SLPROX=false;
		}
		catch(e)
		{
			var SITELIFEPROXYADDRESS	= "http://" + SLCACHING + "." + TLD + "/" + SLVER + "/SiteLifeProxy";
		}
	// LOAD ADDITIONAL LIBRARIES
		try
		{
			if (SLPROX) document.writeln('<script type="text/javascript" src="'+SITELIFEPROXYADDRESS+'"></script>');
		} catch(e){}
		try
		{
			if (SLAUPROX) document.writeln('<script type="text/javascript" src="'+SLAUTHPROXYADDRESS+'"></script>');
		} catch(e){}
		try
		{
			if (DIRPROX)
			{
				document.writeln('<script type="text/javascript" src="'+DIRECTPROXYADDRESS+'"></script>');
				document.writeln('<script type="text/javascript" src="'+SOCIALPROXYADDRESS+'"></script>');

			}
		} catch(e){}

	// END SITELIFE CONFIGURATION
	// CONFIGURATION GRAPHIC PATHS
	// DOM CONFIGURATION VARIABLES
		var SLCGMABUSETHRESHOLD = 3;
		var SLCGMWITHDC = true;
		var SLCGMINLINE = false;
		var ARTICLEKEYMETATAGNAME = "vit_story_id";
		var SLCGMCONTENTPREFIX = "slcgmcontent__";
		var SLCGMCONTENTSEPARATOR = ":_:";
		var SLCGMCONTENTPAIR = "::";
		var SLCGMCONTENTGROUP = ":__:";
	// Omniture Configuration
		var SLCGMOMNITUREEVENT = "events6";
		var SLCGMOMNITUREVIEW = "events7";
	// SSO WEB SERVICE OUTPUTS
		var STATUS_USER_NOT_FOUND = "User Not Found";
		var STATUS_USER_FOUND = "User Found";
		var STATUS_DUPLICATE_SCREENNAME = "Duplicate DisplayName";
		var STATUS_SCREENNAME_NOT_FOUND = "DisplayName Not Found";
		var STATUS_SCREENNAME_FOUND = "DisplayName Found";
		var STATUS_UNKNOWN_ERROR = "Unknown Error";
		var STATUS_ABUSIVE_SCREENNAME = "Abusive DisplayName Found";
		var STATUS_SUCCESS = "Success";
	// SSO WEB SERVICE URLS
			// /SSO/GetUserDatabyIMG2.do?cookie_id=jaae25w67Pa22Oc7573VOCj7Uv5rCkJ9w7nnoStSI9jofani
		var SSOWEB_USERIDURL = "/SSO/GetUserDatabyIMG2.do?cookie_id=";
		var SSOWEB_SCREENNAMECHECK = "/SSO/DisplayNameExistService.do?displayname=";
			// /SSO/SaveDisplaynameService.do?userkey=39237&displayname=testSaeid
		var SSOWEB_SAVESCREENNAME = "/SSO/SaveDisplaynameService.do?userkey=";

		/* belo namespace */
		var belo = function()
		{
			var _namespace = "belo";
			return { };
		}();

		/* SiteLife CGM namespace */
		belo.slcgm = function()
		{
			var _namespace = "belo.slcgm";
			return {};
		}();

		/* SiteLife CGM common functions namespace */
		belo.slcgm.access = function()
		{
			var _namespace = "belo.slcgm.access";
			var XMLDATA = new Object();
			var SCREENNAMEINPUTVALUE = "";
			var loadingImg = new Image();
					loadingImg.src = LOADINGANIMATION;
			var saveButton = new Image();
					saveButton.src = SLCGMSFNSAVEBUTTON;
			return {
					getXMLData: function()
					{
						return XMLDATA;
					},
					setXMLData: function(xmldata)
					{
						XMLDATA = xmldata;
						if(xmldata.code!=undefined && xmldata.code!=null && xmldata.code!="")
						{
							belo.slcgm.util.setCookie("AT",xmldata.code,365,'/');
							belo.slcgm.access.manageLoginState();
						}
					},
					manageLoginState: function()
					{
						/* */
						var reglinks = $$('a.slcgm_registration');
						var newlink = "";
						var i=0;
						var linkCnt = reglinks.length;
						if(linkCnt)
						{
							do
							{
							    newlink = reglinks[i].href;
							    newlink+= "?fw="+document.location.href;
							    reglinks[i].href = newlink;
							}while(i<linkCnt && i++);
						}
						var logincontainer="slcgmlogincontainer";
						var formId = $$('form.'+SLCGMCONTENTPREFIX)[0] ? $$('form.'+SLCGMCONTENTPREFIX)[0].id:null;
						if(formId)
						{
							$('cgmloggedin','cgmloggedin_nodisplayname','cgmnotloggedin').invoke('hide');
							$(logincontainer).removeClassName('slcgm_hidden');

							try
							{
								if (belo.slcgm.util.isLoggedInForSLCGM() && belo.slcgm.util.isLoggedInForBelo())
								{
									var screenName = belo.slcgm.util.getNameFromSLCGMCookie("AT","a");
									if (screenName!=null)
									{
										$('cgmloggedin').getElementsByTagName('a')[0].innerHTML = screenName;
										$('cgmloggedin').show();
										$(formId).enable();
										$j("form#uploadMediaForm :disabled").attr("disabled","");
										$(formId).removeClassName('slcgm_hidden');
										$(formId).setOpacity(1);
									}
								}
								else if (belo.slcgm.util.isLoggedInForBelo())
								{	// getHASHFromBeloCookie("cookie name","delimeter",index)
									var beloHash = belo.slcgm.util.getHASHFromBeloCookie("img","|",0);
									if (beloHash!=null)
									{
										belo.slcgm.util.ajaxRequest(SSOWEB_USERIDURL+beloHash,belo.slcgm.access.setXMLData);
										if($('cgmloggedin_nodisplayname')) $('cgmloggedin_nodisplayname').show();
										if(formId) $(formId).setOpacity(0.7);
									}
								}
								else
								{
									if($('cgmnotloggedin')) $('cgmnotloggedin').show();
									if(formId) $(formId).setOpacity(0.7);
								}
							}
							catch(e)
							{
								belo.slcgm.util.debug("[access.manageLoginState.exception]\n"+e.message);
							}
						}
						/* * /
						$j('a.slcgm_registration').ready(function(){
							this.href+= "?fw="+document.location.href;
						});
						var logincontainer="#slcgmlogincontainer";
						$j(logincontainer)[0].removeClassName('slcgm_hidden');
						$j(logincontainer+" div").hide();
						var formId = "#"+$j('form.'+SLCGMCONTENTPREFIX)[0].id;
						try
						{
							if (belo.slcgm.util.isLoggedInForSLCGM() && belo.slcgm.util.isLoggedInForBelo())
							{
								var screenName = belo.slcgm.util.getNameFromSLCGMCookie("AT","a");
								if($j(logincontainer)[0]) $j(logincontainer).show();
								if (screenName!=null)
								{
									$j("#cgmloggedin a")[0].innerHTML = screenName;
									$j("#cgmloggedin").show();
									if(formId)
									{
										$j("form."+SLCGMCONTENTPREFIX+" :disabled").attr("disabled","");
										$j(formId).show();
										$j(formId).css("opacity",1);
									}
								}
							}
							else if (belo.slcgm.util.isLoggedInForBelo())
							{	// getHASHFromBeloCookie("cookie name","delimeter",index)
								var beloHash = belo.slcgm.util.getHASHFromBeloCookie("img","|",0);
								if (beloHash!=null)
								{
									belo.slcgm.util.ajaxRequest(SSOWEB_USERIDURL+beloHash,belo.slcgm.access.setXMLData);
									if($j('#cgmloggedin_nodisplayname')) $j('.cgmloggedin_nodisplayname').show();
									if(formId) $(formId).css("opacity","0.7");
								}
							}
							else
							{
								if($j('#cgmnotloggedin')) $('.cgmnotloggedin').show();
								if(formId) $j(formId).css("opacity","0.7");
							}
						}
						catch(e)
						{
							belo.slcgm.util.debug("[access.manageLoginState.exception]\n"+e.message);
						}
						/* */
					},
					manageLoginState2: function()
					{
						/* */

							try
							{
								var reglinks = $$('a.slcgm_registration');
								var newlink = "";
								var i=0;
								var linkCnt = reglinks.length;
								if(linkCnt)
								{
									do
									{
									    newlink = reglinks[i].href;
									    newlink+= "?fw="+escape(document.location.href);
									    reglinks[i].href = newlink;
									    i++;
									}while(i<linkCnt);
								}
								var logincontainer=".slcgmlogincontainer";
								var formId = $$('form.'+SLCGMCONTENTPREFIX)[0] ? $$('form.'+SLCGMCONTENTPREFIX)[0].id:null;

								$j('.cgmloggedin,.cgmloggedin_nodisplayname,.cgmnotloggedin').hide();
								$j(logincontainer).removeClass('slcgm_hidden');
								if (belo.slcgm.util.isLoggedInForSLCGM() && belo.slcgm.util.isLoggedInForBelo())
								{
									var screenName = belo.slcgm.util.getNameFromSLCGMCookie("AT","a");
									if (screenName!=null)
									{
										$j('.cgmloggedin a').each(function(){ if($j(this).html()=='screenname') $j(this).html(screenName)});
										$j('.cgmloggedin').show();
										if(formId)
										{
											$(formId).enable();
											$j("form#uploadMediaForm :disabled").attr("disabled","");
											$(formId).removeClassName('slcgm_hidden');
											$(formId).setOpacity(1);
										}
									}
								}
								else if (belo.slcgm.util.isLoggedInForBelo())
								{	// getHASHFromBeloCookie("cookie name","delimeter",index)
									var beloHash = belo.slcgm.util.getHASHFromBeloCookie("img","|",0);
									if (beloHash!=null)
									{
										belo.slcgm.util.ajaxRequest(SSOWEB_USERIDURL+beloHash,belo.slcgm.access.setXMLData);
										$j('.cgmloggedin_nodisplayname').show();
										if(formId) $(formId).setOpacity(0.7);
									}
								}
								else
								{
									$j('.cgmnotloggedin').show();
									if(formId) $(formId).setOpacity(0.7);
								}
							}
							catch(e)
							{
								belo.slcgm.util.debug("[access.manageLoginState2.exception]\n"+e.message);
							}
						/* * /
						$j('a.slcgm_registration').ready(function(){
							this.href+= "?fw="+document.location.href;
						});
						var logincontainer="#slcgmlogincontainer";
						$j(logincontainer)[0].removeClassName('slcgm_hidden');
						$j(logincontainer+" div").hide();
						var formId = "#"+$j('form.'+SLCGMCONTENTPREFIX)[0].id;
						try
						{
							if (belo.slcgm.util.isLoggedInForSLCGM() && belo.slcgm.util.isLoggedInForBelo())
							{
								var screenName = belo.slcgm.util.getNameFromSLCGMCookie("AT","a");
								if($j(logincontainer)[0]) $j(logincontainer).show();
								if (screenName!=null)
								{
									$j("#cgmloggedin a")[0].innerHTML = screenName;
									$j("#cgmloggedin").show();
									if(formId)
									{
										$j("form."+SLCGMCONTENTPREFIX+" :disabled").attr("disabled","");
										$j(formId).show();
										$j(formId).css("opacity",1);
									}
								}
							}
							else if (belo.slcgm.util.isLoggedInForBelo())
							{	// getHASHFromBeloCookie("cookie name","delimeter",index)
								var beloHash = belo.slcgm.util.getHASHFromBeloCookie("img","|",0);
								if (beloHash!=null)
								{
									belo.slcgm.util.ajaxRequest(SSOWEB_USERIDURL+beloHash,belo.slcgm.access.setXMLData);
									if($j('#cgmloggedin_nodisplayname')) $j('.cgmloggedin_nodisplayname').show();
									if(formId) $(formId).css("opacity","0.7");
								}
							}
							else
							{
								if($j('#cgmnotloggedin')) $('.cgmnotloggedin').show();
								if(formId) $j(formId).css("opacity","0.7");
							}
						}
						catch(e)
						{
							belo.slcgm.util.debug("[access.manageLoginState.exception]\n"+e.message);
						}
						/* */
					},
					screenNameResponse: function(xmlData)
					{
						if (xmlData!=null)
						{
							try
							{
								belo.slcgm.util.debug(xmlData.Status==STATUS_ABUSIVE_SCREENNAME);
								if (xmlData.Status.toString()==STATUS_SCREENNAME_NOT_FOUND.toString())
								{
									var scnResOut = "<span class=\"successText\">The screen name \"<em>"+SCREENNAMEINPUTVALUE+"</em>\" is available.</span>";
											scnResOut+= "<p><a href=\"javascript:void(0);\" onclick=\"javascript:belo.slcgm.access.saveDisplayNameRequest();\"><img id=\"SNFSaveButton\" src=\"http://www.dallasnews.com/sharedcontent/cgm/ver1.0/assets/img/save.gif\" alt=\"Save Screen name\" border=\"0\" /></a></p>";
									$j('#screennameResponseOut').html(scnResOut);
								}
								else if(xmlData.Status==STATUS_ABUSIVE_SCREENNAME)
								{
									var scnResOut = '<p><span class="successText">The screen name "<em>'+SCREENNAMEINPUTVALUE+'</em>" contains word(s) we find offensive.<br/>';
											scnResOut+= '<br/>For more information please refer to our <a href="/registration/terms.html?ft">Terms of Service</a> guidelines, or feel free to <a href="http://www.dallasnews.com/customerservice/HelpCenter.do?ft">contact us</a> if you feel this is an error.</span></p>';
									$j('#screennameResponseOut').html(scnResOut);
								}
								else if(xmlData.Status.toString()==STATUS_SCREENNAME_FOUND.toString())
								{
									$j('#screennameResponseOut').html('<span class="errorText">That screen name belongs to another user in our system.  Please try again.</span>');
								}
								else
								{
									$j('#screennameResponseOut').html('<span class="errorText">Oops.  There seems to be an error in our system.  Please try again, or <a href="/customerservice/HelpCenter.do?ft">contact us</a> if you have any questions.</span>');
								}
								$('screenname').focus();
							}
							catch(e)
							{
								belo.slcgm.util.debug("[access.screennameResponseOut.exception]\n"+e.message);
							}
						}
						else
						{
							belo.slcgm.util.debug("[access.screenNameRespons]\nxmlData==null");
						}
					},
					screenNameRequest: function()
					{
						SCREENNAMEINPUTVALUE = $('screenname').value;
						$('screenname').value = SCREENNAMEINPUTVALUE;
						if (SCREENNAMEINPUTVALUE)
						{
						  var regex=/^[\w\s]+$/;
						  if (regex.test(SCREENNAMEINPUTVALUE))
						  {
							  $('screennameResponseOut').innerHTML = "<div class=\"slcgmloading\"><p>Checking Screen Name...</p><p><img src=\""+LOADINGANIMATION+"\" alt=\"loading...\" /></p></div>";
							  belo.slcgm.util.ajaxRequest(SSOWEB_SCREENNAMECHECK+SCREENNAMEINPUTVALUE,belo.slcgm.access.screenNameResponse);
							}
							else
							{
							  $('screennameResponseOut').innerHTML = "<span class=\"errorText\"><p>Please use only letters and numbers.</p></span>";
							}
						}
						else
						{
							$('screennameResponseOut').innerHTML = "<span class=\"errorText\"><p>Please enter a screen name.</p></span>";
							$('screenname').focus();
						}
					},
					saveDisplayNameRequest: function()
					{
						try
						{
							if(belo.slcgm.access.getXMLData()['Userid'])
								belo.slcgm.util.ajaxRequest(SSOWEB_SAVESCREENNAME+belo.slcgm.access.getXMLData()['Userid']+"&displayname="+SCREENNAMEINPUTVALUE,belo.slcgm.access.saveDisplayNameResponse);
						}
						catch(e)
						{
							belo.slcgm.util.debug("[ access.saveDisplayNameRequest.exception ]\n"+e.message());
						}
					},
					saveDisplayNameResponse: function(xmldata)
					{
						if(xmldata.Status=="Success" && xmldata.cookieString!="")
						{
							belo.slcgm.util.setCookie("AT",xmldata.cookieString,365,'/');
							$('screennameForm').style.display='none';
							belo.slcgm.access.manageLoginState();
						}
						else
						{
							belo.slcgm.util.debug("[saveDisplayNameResponse]\nxmldata.Status="+xmldata.Status);
						}
					},
					fakeSaveDisplayNameService: function()
					{
						belo.slcgm.util.setLoginCookie(XMLDATA.Userid,SCREENNAMEINPUTVALUE,XMLDATA.Email_Address);
					}
				};
		}();

		/* SiteLife CGM common functions namespace */
		belo.slcgm.common = function()
		{
			var _namespace = "belo.slcgm.common";
			var REPORTABUSEOBJECT = new Object;
			return {
				replaceMetaId: function(key)
				{
					/* */
					var id2Parse = "";
					var metaSpans = $j("span."+SLCGMCONTENTPREFIX);
					var i=0;
					var spanCnt=metaSpans.length;
					if(spanCnt>0)
					{
						do
						{
							if(metaSpans[i].id.indexOf(SLCGMNULLCONTENTID)>0)
					    {
					      id2Parse = metaSpans[i].id;
								metaSpans[i].id = id2Parse.replace(SLCGMNULLCONTENTID,key);
					    }
							i++;
						}while(i<spanCnt);
					}
					/* */
					return (id2Parse,metaSpans,i,spanCnt,key=null);
				},
				getReportAbuseHTML: function(key,CurrentUserHasReportedAbuse,keyType)
				{
					rahtml=null;
					try
					{
						rahtml = "<div id=\""+SLCGMREPORTABUSESTATEID+SLCGMCONTENTSEPARATOR+key+"\">\n";
						if(CurrentUserHasReportedAbuse=="True")
						{
							rahtml+= "<span id=\""+SLCGMREPORTABUSEID+SLCGMCONTENTSEPARATOR+key+"\" class=\""+SLCGMCONTENTPREFIX+"\">";
							rahtml+= "<div class=\"abuse\">Abuse Reported <img src=\""+SLCGMABUSEXICON+"\" /></div></span>\n";
						}
						else
						{
							rahtml+= "<span id=\""+SLCGMREPORTABUSEID+SLCGMCONTENTSEPARATOR+key+"\" class=\""+SLCGMCONTENTPREFIX+"\">";
							rahtml+= "<div class=\"abuse\"><a href=\"javascript:void(0);\" onclick=\"belo.slcgm.util.showDivAtMouse(event,'ReportAbuse_Menu');$('ReportAbuse_Menu').removeClassName('slcgm_hidden');belo.slcgm.common.reportAbuseSetForm('"+key+"','"+keyType+"');\">Report Abuse</a> <img src=\""+SLCGMABUSEICON+"\" /></div></span>";
						}
						rahtml+= "</div>\n";
					}catch(e){ belo.slcgm.util.debug("[getReportAbuseHTML.exception]\n"+e.message); }
					return rahtml;
				},
				reportAbuseSetForm: function(key,keyType)
				{
					$('reportAbuseID').value = key;
					$('keyTypeID').value = keyType;
				},
				getRecommendHTML: function(key,NumberOfRecommendations,CurrentUserHasRecommended,keyType,recommendTextFlag)
				{
					var recommendHTML="";
					var keyTypeText = (keyType=="Article")? "Story":keyType;
					if(CurrentUserHasRecommended=="True")
					{
						recommendHTML = "<span id=\""
						recommendHTML+= SLCGMRECOMMENDID+SLCGMCONTENTSEPARATOR+key
						recommendHTML+= "\" class=\""+SLCGMCONTENTPREFIX+"\"><span id=\"";
						recommendHTML+= SLCGMRECOMMENDSTATEDIV+SLCGMCONTENTSEPARATOR+key
						recommendHTML+= "\">";
						if (keyType!="Comment") recommendHTML+= "<span class=\"bold\">"+((recommendTextFlag)? keyTypeText+" Recommended":"Recommended")+"</span> ";
						recommendHTML+= "<img src=\""+SLCGMTHUMBSUPINACTIVE+"\" /></span> ";
						recommendHTML+= "<span class=\"blue\"><span id=\""+SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+key+"\" class=\""+SLCGMCONTENTPREFIX+"\">"+NumberOfRecommendations+"</span></span></span>";
					}
					else
					{
						recommendHTML = "<span id=\""
						recommendHTML+= SLCGMRECOMMENDID+SLCGMCONTENTSEPARATOR+key
						recommendHTML+= "\" class=\""+SLCGMCONTENTPREFIX+"\"><span id=\"";
						recommendHTML+= SLCGMRECOMMENDSTATEDIV+SLCGMCONTENTSEPARATOR+key
						recommendHTML+= "\">";
						if (keyType!="Comment") recommendHTML+= "<span class=\"bold\"><a href=\"javascript:belo.slcgm.common.article.recommendAction('"+key+"','"+keyType+"',belo.slcgm.common.article.recommendCallback);\">"+((recommendTextFlag)? "Recommend this "+keyTypeText:"Recommend")+"</a></span> ";
						recommendHTML+= "<img src=\""+SLCGMTHUMBSUPACTIVE+"\" style=\"cursor:pointer;\" onclick=\"belo.slcgm.common.article.recommendAction('"+key+"','"+keyType+"',belo.slcgm.common.article.recommendCallback);\" />";
						recommendHTML+= " <span class=\"blue\"><span id=\""+SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+key+"\" class=\""+SLCGMCONTENTPREFIX+"\">"+NumberOfRecommendations+"</span></span></span></span>";
					}
					if (keyType=="Comment")
					{
						recommendHTML+= " <img src=\"http://www.dallasnews.com/sharedcontent/cgm/ver1.0/assets/img/thumb_seperator.gif\" /> ";
						recommendHTML+= "<span id=\""
						recommendHTML+= SLCGMRATINGID+SLCGMCONTENTSEPARATOR+key
						recommendHTML+= "\" class=\""+SLCGMCONTENTPREFIX+"\"><span id=\"";
						recommendHTML+= SLCGMRATINGSTATEDIV+SLCGMCONTENTSEPARATOR+key
						recommendHTML+= "\"><img src=\""+SLCGMTHUMBSDOWNACTIVE+"\" />";
						recommendHTML+= "<span class=\"blue\"><span id=\""+SLCGMRATINGCOUNTID+SLCGMCONTENTSEPARATOR+key+"\" class=\""+SLCGMCONTENTPREFIX+"\"></span></span></span></span>";
					}
					return recommendHTML;
				},
				reportAbuseAction: function(key,keyType,callback)
				{
					if (key!=null && key!=SLCGMNULLCONTENTID)
					{
						belo.slcgm.common.setReportAbuseKey(key,keyType);
						var requestBatch = new RequestBatch();
						var reportReason = $('ReportAbuse_Reason').value;
						var reportDesc = $('ReportAbuse_CommentText').value;
						var keyType = $('keyTypeID').value;
						switch(keyType)
						{
							case "Article":
								var reportThisKey = new ArticleKey(key);
							break;
							case "Comment":
								var reportThisKey = new CommentKey(key);
							break;
							case "Video":
								var reportThisKey = new VideoKey(key);
							break;
							case "Photo":
								var reportThisKey = new PhotoKey(key);
							break;
						}
						var reportabuseAction = new ReportAbuseAction(reportThisKey,reportReason,reportDesc);
						requestBatch.AddToRequest(reportabuseAction);
						requestBatch.BeginRequest(DAAPIPROCESSURL, callback);
					}
				},
				reportAbuseResponse: function(responseBatch)
				{
					$('ReportAbuse_Form').reset();
					$('ReportAbuse_Menu').hide();
					if(responseBatch.Messages[0].Message=="ok")
					{
						try
						{
							var keyObj =  belo.slcgm.common.getReportAbuseKey();
							var reportAbuseHTML = belo.slcgm.common.getReportAbuseHTML(keyObj.key,"True",keyObj.keyType);
							$(SLCGMREPORTABUSEID+SLCGMCONTENTSEPARATOR+keyObj.key).update(reportAbuseHTML);
						}catch(e){ belo.slcgm.util.debug("[reportAbuseResponse.exception]\n"+e.message); }
					}
					else
					{
						belo.slcgm.util.debug("[reportAbuseResponse.Message]\n"+responseBatch.Messages[0].Message);
					}
				},
				setReportAbuseKey:function(key,keyType)
				{
					REPORTABUSEOBJECT.key=key;
					REPORTABUSEOBJECT.keyType=keyType;
				},
				getReportAbuseKey: function()
				{
					return REPORTABUSEOBJECT;
				}
			};
		}();

		/* SiteLife CGM common.comments functions namespace */
		belo.slcgm.common.comments = function()
		{
			var _namespace = "belo.slcgm.common.comments";
			var sortOrder = (_QUERY.so!=undefined)?_QUERY.so:"TimeStampDescending";
			return {
				setSortOrder: function(formEl)
				{
					sortOrder=formEl.value;
				},
				getSortOrder: function()
				{
					return sortOrder;
				},
				postComment: function(key,keyType,callback)
			  {
			  	var requestBatch = new RequestBatch();
			  	switch(keyType)
					{
						case "Article":
							var commentKey = new ArticleKey(key);
						break;
						case "Video":
							var commentKey = new VideoKey(key);
						break;
						case "Photo":
							var commentKey = new PhotoKey(key);
						break;
					}
					// create and send request
					var commentAction = new CommentAction(commentKey, SLCGMCONFIG.Contents[0].OnPageUrl, SLCGMCONFIG.Contents[0].OnPageTitle, $(SLCGMCOMMENTBODYFORMELEMENTID).value);
			  	requestBatch.AddToRequest(commentAction);
					requestBatch.BeginRequest(DAAPIPROCESSURL, function(rb){
						if (rb.Messages[0].Message=="ok")
						{
							/* OMNITURE PRODUCT TRACKING CODE */
							if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
							{
								var productString = ";"+SLCGMOMNITUREPRODUCT+SLCGMPAGECONTENTTYPE+" ("+key+")";
								belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
								eVars = { 3 : "Comment Action: "+keyType };
								var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),SLCGMOMNITUREEVENT,productString,"","","",eVars);
							}
							/* OMNITURE PRODUCT TRACKING CODE */
						}
						callback(rb);
					});
			  },
			  renderComments: function(responseBatch)
			  {
					try
					{
						var request = new RequestBatch();
				  	if (responseBatch.Responses.length == 0)
				    {
				    		$(SLCGMCOMMENTSTITLEDIV).update("");
				        // Comments Not Found.
				    }
				    else
				    {
				    	var i=0;
				    	var commentPage = null;
				    	var responseLen = responseBatch.Responses.length;
				    	if(responseLen>0)
				    	{
				    		i=0;
				    		do
				        {
				        	if(responseBatch.Responses[i] && responseBatch.Responses[i].CommentPage)
				        	{
				        		commentPage = (responseBatch.Responses[i].CommentPage);
				        	}
				        }while(i++<responseLen);
				      }
			        if(commentPage!=null)
			        {
				        var commentBlockHtml = "";
								var commentPageLen = commentPage.Comments.length;
								i=0;
				        do
				        {
				        	if (commentPage.Comments[i])
				        	{
				        		request.AddToRequest(new ArticleKey(commentPage.Comments[i].CommentKey.Key));
										commentBlockHtml += belo.slcgm.common.comments.getCommentHtml(commentPage.Comments[i]);
									}
				        }while(i++<commentPageLen);
				        commentBlockHtml += '<br clear="all"/>';
				        if($(SLCGMCOMMENTSBLOCKDIV)) $(SLCGMCOMMENTSBLOCKDIV).removeClassName("slcgm_hidden");
				        if(parseInt(commentPage.NumberOfComments)==0)
					    	{
					    		$(SLCGMCOMMENTSTITLEDIV).innerHTML = "";
					    		$$('div.order')[0].hide();
					    	}
					    	else
					    	{
					    		$(SLCGMCOMMENTSTITLEDIV).innerHTML = SLCGMCOMMENTSTITLEHTML;
					    	}
					    	try
					    	{
					    		belo.slcgm.util.debug("[renderComments.commentPage.ArticleKey.Key]\n"+commentPage.ArticleKey.Key);
					    		if(commentPage && $(SLCGMCOMMENTCOUNTID+SLCGMCONTENTSEPARATOR+commentPage.ArticleKey.Key)) $(SLCGMCOMMENTCOUNTID+SLCGMCONTENTSEPARATOR+commentPage.ArticleKey.Key).innerHTML = commentPage.NumberOfComments;
					    	}catch(e){ belo.slcgm.util.debug("[renderComments.exception::$("+SLCGMCOMMENTCOUNTID+SLCGMCONTENTSEPARATOR+commentPage.ArticleKey.key+").innerHTML]\n"+e.message); }
				        if($(SLCGMCOMMENTSCOUNTID)) $(SLCGMCOMMENTSCOUNTID).innerHTML = commentPage.NumberOfComments;
				        if($(SLCGMCOMMENTSPAGEDIV)) $(SLCGMCOMMENTSPAGEDIV).innerHTML = commentBlockHtml;
				        if(commentPage.NumberOfComments>SLCGMITEMSPERPAGE)
									$(SLCGMCOMMENTSPAGINATION).innerHTML = belo.slcgm.util.getPaginationHTML(commentPage.NumberOfComments,commentPage.NumberPerPage,commentPage.OnPage,true,"ocp");
								request.BeginRequest(DAAPIPROCESSURL, function(response)
								{
									var re = new RegExp(/\[(CommentKey.*?)\]/);
									var responseLen = response.Responses.length;
									var messageLen = response.Messages.length;
									if (messageLen>0)
									{
										var i=0;
										do
							  		{
							  			if (response.Messages[i] && response.Messages[i].Message!="ok")
							  			{
								  			var m = re.exec(response.Messages[i].Message);
								  			var thumbsUpImg = $(SLCGMRATINGSTATEDIV+SLCGMCONTENTSEPARATOR+m[1]);
								  			if (thumbsUpImg!=null && thumbsUpImg.firstChild.tagName == "IMG")
								  			{
								  				thumbsUpImg.firstChild.src = SLCGMTHUMBSDOWNACTIVE;
								  				thumbsUpImg.firstChild.style.cursor = "pointer";
								  				$(SLCGMRATINGCOUNTID+SLCGMCONTENTSEPARATOR+m[1]).update('0');
								  				thumbsUpImg.firstChild.onclick = function() {
								  					belo.slcgm.util.debug("[ ratings::request.BeginRequest ] this="+this);

								  					belo.slcgm.common.comments.ratingsAction({'keyType':'Article','callback': belo.slcgm.common.article.ratingsCallback,'obj': this,'rating': 1,'slcgmRatingStateDiv': SLCGMRATINGSTATEDIV,'slcgmContentSeparator': SLCGMCONTENTSEPARATOR,'omnitureAction': 'Thumbs Down Action: ','slcgmOmnitureEvent': SLCGMOMNITUREEVENT});
								  				}
								  			}
											}
							  		}while(i++<messageLen);
							  	}
							  	i=0;
							  	if (responseLen>0)
							  	{
							  		do
							  		{
							  			if (response.Responses[i] && response.Responses[i].Article)
							  			{
								  			article = response.Responses[i].Article;
								  			ratingsDiv = $(SLCGMRATINGSTATEDIV+SLCGMCONTENTSEPARATOR+article.ArticleKey.Key);
								  		  if (ratingsDiv.firstChild.tagName == "IMG")
									  		{
								  				if (article.Ratings.CurrentUserRating>0)
								  				{
								  					ratingsDiv.firstChild.src = SLCGMTHUMBSDOWNINACTIVE;
								  				}
								  				else
								  				{
								  					ratingsDiv.firstChild.src = SLCGMTHUMBSDOWNACTIVE;
								  					ratingsDiv.firstChild.onclick = function(){
								  						belo.slcgm.util.debug("[ ratings::request.BeginRequest THIS.ONE ]\nthis="+this);
								  						belo.slcgm.common.comments.ratingsAction({'keyType':'Comment','callback': belo.slcgm.common.article.ratingsCallback,'obj': this,'rating': 1,'slcgmRatingStateDiv': SLCGMRATINGSTATEDIV,'slcgmContentSeparator': SLCGMCONTENTSEPARATOR,'omnitureAction': 'Thumbs Down Action: ','slcgmOmnitureEvent': SLCGMOMNITUREEVENT})
								  					};
								  					ratingsDiv.firstChild.style.cursor = "pointer";
								  				}
								  				$(SLCGMRATINGCOUNTID+SLCGMCONTENTSEPARATOR+article.ArticleKey.Key).innerHTML = article.Ratings.NumberOfRatings;
									  		}
									  	}
									  	article,ratingsDiv=null;
							  		}while(i++<responseLen);
							  	}
							  	messageLen,responseLen,response,m,i,re,thumbsUpImg=null;
								});
							}
			    	}
			    } catch(err){ belo.slcgm.util.debug("[common.comments.renderComments.exception]\ni="+i+"\n"+err.message);err=null; }
			    return false;
			  },
				reloadComments: function(responseBatch)
				{
					if(SCS && MCS && SLCGMSWITCH)
					{
						if(belo.slcgm.util.validateForm(SLCGMCOMMENTSFORMID) && responseBatch.Messages[0].Message=="ok")
						{
							var onPagePattern = '"OnPage":"'+((_QUERY.ocp!=undefined)?_QUERY.ocp:"1")+'"';
							SLCGMCONFIG.SLCS = SLCGMCONFIG.SLCS.replace(onPagePattern,'"OnPage":"1"');
							var flushScript = "/cgi-bin/bi/cgm/ver1.0/expireCache2.pl";
							var daapiPieces = DAAPIPROCESSURL.split('?');
							var expireURI = "?url="+daapiPieces[0];
									expireURI+= "?jsonRequest=";
									expireURI+= SLCGMCONFIG.SLCS;
									expireURI+= "&"+daapiPieces[1];
							var ajaxMethod = "GET";
							var parameters = "";
							if (SLCGMCONFIG.SLCS.length>15000)
							{
								ajaxMethod = "POST";
								parameters = "url="+encodeURIComponent(daapiPieces[0]+"?jsonRequest="+SLCGMCONFIG.SLCS+"&"+daapiPieces[1]);
								expireURI = "";
							}
							belo.slcgm.util.ajaxRequest(flushScript+expireURI,belo.slcgm.common.comments.reloadCommentsCallback,ajaxMethod,parameters);
						}
					}
					else
					{
						belo.slcgm.common.comments.reloadCommentsCallback(null);
					}
					return true;
				},
				reloadCommentsCallback: function(xmlData)
				{
					if(!SLCGMINLINE)
					{
						window.location.href = belo.slcgm.util.getUpdatedQueryString("ocp",1)+"#slcgm_comments_anchor";
						window.location.reload();
					}
					else
					{
						window.onload();
					}
					return true;
				},
				getCommentHtml: function(comment)
			  {
			  	var keyType = "Comment";
			  	var html = "<!--comment start -->\n";
			  	comment.timeDistance = belo.slcgm.util.getTimeDistance(comment.PostedAtTime);
			  	comment.CommentBodyFormated = belo.slcgm.util.newlinesToHTML(belo.slcgm.util.stripHTML(comment.CommentBody));
					comment.recommendHTML = belo.slcgm.common.getRecommendHTML(comment.CommentKey.Key,comment.NumberOfRecommendations,comment.CurrentUserHasRecommended,keyType,true)
					comment.reportabuseHTML = belo.slcgm.common.getReportAbuseHTML(comment.CommentKey.Key,comment.CurrentUserHasReportedAbuse,keyType);
					comment.SLCGMPROFILEPAGEURI = SLCGMPROFILEPAGEURI;
			  	if(comment.AbuseReportCount<SLCGMABUSETHRESHOLD && comment.Author.IsBlocked=="False" && comment.ContentBlockingState=="Unblocked")
			  	{
			  		var templateObj = new Template(SLCGMCOMMENTTEMPLATE);
						html+= templateObj.evaluate(comment);
					}
					else
					{
						html+= "	<!--comment removed -->\n";
					}
					html+= "<!--comment end -->\n";
					return html;
			  },
			  changeCommentSortOrder: function(formEl)
			  {
			  	this.setSortOrder(formEl);
			  	window.location.href = belo.slcgm.util.getUpdatedQueryString('so',sortOrder)+"#slcgm_comments_anchor";
			  },
			  getComments: function(key,keyType,callback)
				{
					if($(SLCGMCOMMENTSBLOCKDIV))
					{
						switch(keyType)
						{
							case "Article":
								var commentKey = new ArticleKey(key);
							break;
							case "Video":
								var commentKey = new VideoKey(key);
							break;
							case "Photo":
								var commentKey = new PhotoKey(key);
							break;
						}
						var commentPage = new CommentPage(commentKey, SLCGMCOMMENTSONPAGE, ((_QUERY.ocp!=undefined)?_QUERY.ocp:"1"), sortOrder);
						var requestBatch = new RequestBatch();
						requestBatch.AddToRequest(commentPage);
						try
						{
							SLCGMCONFIG.SLCS = YAHOO.lang.JSON.stringify(requestBatch);
						} catch(e){ belo.slcgm.util.debug("[getComments.exception]\n"+e.message); }

						this.changeSortForm();
						requestBatch.BeginRequest(DAAPIPROCESSURL, callback);
					}
					return true;
			  },
			  changeSortForm: function()
			  {
			  	var opts = $('slcgm_comments_sort') ? $('slcgm_comments_sort').options:null;
			  	if(opts!=null)
			  	{
			  		var optsLength = opts.length;
				  	var i=0;
				  	do
				  	{
				  		if(opts[i].value==sortOrder)
				  		{
				  			opts[i].selected=true;
				  		}
				  		i++
				  	}while(i<optsLength);
				  }
			  },
			  // {"keyType":,"callback": ,"obj": this,"rating": ,"slcgmRatingStateDiv": SLCGMRATINGSTATEDIV,"slcgmContentSeparator": SLCGMCONTENTSEPARATOR,"omnitureAction": "Thumbs Down Action: ","slcgmOmnitureEvent": SLCGMOMNITUREEVENT}
			  ratingsAction: function (configObj)
			  {
			  	if(!configObj.rating) configObj.rating=1;
			  	key = configObj.obj.parentNode.id.replace(configObj.slcgmRatingStateDiv+configObj.slcgmContentSeparator,'')
					var requestBatch = new RequestBatch();
					var ratingKey = new ArticleKey(key);
					var rateAction = new RateAction(ratingKey,configObj.rating);
					requestBatch.AddToRequest(rateAction);
					requestBatch.BeginRequest(DAAPIPROCESSURL, function(rb){
						if (rb.Messages[0].Message=="ok")
						{
							/* OMNITURE PRODUCT TRACKING CODE */
							if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
							{
								var productString = ";"+SLCGMOMNITUREPRODUCT+SLCGMPAGECONTENTTYPE+" ("+key+")";
								belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
								eVars = { 3 : configObj.omnitureAction+configObj.keyType };
								var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),configObj.slcgmOmnitureEvent,productString,"","","",eVars);
							}
							/* OMNITURE PRODUCT TRACKING CODE */
						}
						configObj.callback({"responseBatch": rb,"key": key,"slcgmRatingCountID": SLCGMRATINGCOUNTID,"slcgmRatingStateDiv": SLCGMRATINGSTATEDIV,"slcgmContentSeparator": SLCGMCONTENTSEPARATOR,"slcgmThumbsDownInactive": SLCGMTHUMBSDOWNINACTIVE});
					});
				},
				ratingsVoteAction: function (configObj)
			  {
					var requestBatch = new RequestBatch();
					var ratingKey = new ArticleKey(configObj.key);
					var rateAction = new RateAction(ratingKey,configObj.rating);
					requestBatch.AddToRequest(rateAction);
					requestBatch.BeginRequest(DAAPIPROCESSURL, function(rb){
						if (rb.Messages[0].Message=="ok")
						{
							/* OMNITURE PRODUCT TRACKING CODE */
							if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
							{
								var productString = ";"+configObj.SLCGMOMNITUREPRODUCT+configObj.SLCGMPAGECONTENTTYPE+" ("+configObj.key+")";
								belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
								eVars = { 3 : configObj.omnitureAction+configObj.keyType };
								var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),configObj.slcgmOmnitureEvent,productString,"","","",eVars);
							}
							/* OMNITURE PRODUCT TRACKING CODE */
						}
						//callback(rb,keyType,(keyType=="Article"),key);
					});
				}
			};
		}();

		/* SiteLife CGM common.article functions namespace */
		belo.slcgm.common.article = function()
		{
			var _namespace = "belo.slcgm.common.article";
			var RECOMMENDKEY = "";
			var SLCGMARTICLESWITHMETADATA = new Array();
			return {
			  getAllArticleMetaData: function()
				{
					var requestBatch = new RequestBatch();
					var rbCntr = 0;
					var articleKey;
					var updateAction;
					for(var i=0;i<SLCGMCONFIG.Contents.length;i++)
					{
					articleKey = new ArticleKey(SLCGMCONFIG.Contents[i].key);
					//var section = new Section(SLCGMCONFIG.Contents[i].Section);
					//updateAction = new UpdateArticleAction(articleKey,SLCGMCONFIG.Contents[i].OnPageUrl,SLCGMCONFIG.Contents[i].OnPageTitle,section);

						if (rbCntr<=20)
						{
							//requestBatch.AddToRequest(updateAction);
							SLCGMARTICLESWITHMETADATA.push(SLCGMCONFIG.Contents[i].key);
							requestBatch.AddToRequest(articleKey);
							rbCntr++;
						}
						else
						{
							requestBatch.BeginRequest(DAAPIPROCESSURL, belo.slcgm.common.article.renderMetaData);
							requestBatch = new RequestBatch();
							rbCntr=0;
						}
					}
					requestBatch.BeginRequest(DAAPIPROCESSURL, belo.slcgm.common.article.renderMetaData);
					return true;
			  },
			  getArticleWithComments: function(akey,pageTitle,callback,comments)
				{
					var requestBatch = new RequestBatch();
					if (!akey)
						var akey = belo.slcgm.util.searchDOMByTag('meta','name',ARTICLEKEYMETATAGNAME,'content');
					var articleKey = new ArticleKey(akey);
					var commentPage = new CommentPage(articleKey, SLCGMCOMMENTSONPAGE, ((_QUERY.ocp!=undefined)?_QUERY.ocp:"1"), belo.slcgm.common.comments.getSortOrder());
					// initialize article (technically update article, but initializes if it is not in the sitelife system)
					var pageUrl = document.location.href.split("#")[0];
							pageUrl = pageUrl.split("?")[0];

					var updateAction = new UpdateArticleAction(articleKey,pageUrl,pageTitle,new Section(SLCGMSECTION))
					belo.slcgm.common.comments.changeSortForm();
					requestBatch.AddToRequest(updateAction);
					requestBatch.AddToRequest(articleKey);
					if(comments) requestBatch.AddToRequest(commentPage);

					try
					{
						SLCGMCONFIG.SLCS = YAHOO.lang.JSON.stringify(requestBatch);
					} catch(e){ belo.slcgm.util.debug("[getArticleWithComments.exception]\n"+e.message); }

					requestBatch.BeginRequest(DAAPIPROCESSURL, callback);
					return true;
			  },
			  renderArticleWithComments: function(responseBatch)
			  {
			  	if(responseBatch.Messages[0].Message=="ok")
					{
						belo.slcgm.common.article.renderMetaData(responseBatch);
				  	var i=0;
				  	var responseLen = responseBatch.Responses.length
				  	if(responseLen>1)
				  	{
					  	do
					  	{
					      	if(responseBatch.Responses[i] && responseBatch.Responses[i].CommentPage)
					      	{
					      		belo.slcgm.common.comments.renderComments(responseBatch);
					      	}
					      	i++;
				      }while(i<responseLen);
				    }
			  	}
			  	return true;
			  },
				parseTitle: function ()
				{
					var pageTitleObj = document.title.split(PAGETITLEDELIMITER);
					return pageTitleObj;
				},
				renderMetaData: function (responseBatch)
				{
					if (responseBatch.Responses.length == 0)
					{
						// Article not found
					}
					else
					{
						for(var i=0;i<responseBatch.Responses.length;i++)
		        {
		        // parse DiscoverContent (Photo or Video) recommends
		        	try
		        	{
		        		if(responseBatch.Responses[i].DiscoverContentAction.DiscoveredContent[0])
		        		{
		        			var discContent = responseBatch.Responses[i].DiscoverContentAction.DiscoveredContent[0];
		        			try
		        			{
		        				var key = discContent[MEDIATYPE+"Key"].Key;
		        			}
		        			catch(e){ /* var key = discContent.PhotoKey.Key; */ }
									$(SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+key).update(discContent.NumberOfRecommendations);
									recommendHTML = belo.slcgm.common.getRecommendHTML(key,discContent.NumberOfRecommendations,discContent.CurrentUserHasRecommended,MEDIATYPE,true);
									$(SLCGMRECOMMENDID+SLCGMCONTENTSEPARATOR+key).innerHTML = recommendHTML;
		        		}
		        	}catch(e){}
		        // parse Photo or Video recomends
		        	try
							{
								if(responseBatch.Responses[i][MEDIATYPE])
			        	{
			        		var media = responseBatch.Responses[i][MEDIATYPE];
			        		var key = media[MEDIATYPE+"Key"].Key;
			        		//(MEDIATYPE=="Photo")? media.PhotoKey.Key:media.VideoKey.Key;
									$(SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+key).update(media.NumberOfRecommendations);
									recommendHTML = belo.slcgm.common.getRecommendHTML(key,media.NumberOfRecommendations,media.CurrentUserHasRecommended,MEDIATYPE,true);
									$(SLCGMRECOMMENDID+SLCGMCONTENTSEPARATOR+key).innerHTML = recommendHTML;
			        	}
							}catch(e){}
						// parse Article metadata
							try
							{
								if(responseBatch.Responses[i].Article)
			        	{
			        		var article = responseBatch.Responses[i].Article;
			        		if (SLCGMARTICLESWITHMETADATA.indexOf(article.ArticleKey.Key)>-1) SLCGMARTICLESWITHMETADATA = SLCGMARTICLESWITHMETADATA.without(article.ArticleKey.Key);
									$(SLCGMCOMMENTCOUNTID+SLCGMCONTENTSEPARATOR+article.ArticleKey.Key).update(article.Comments.NumberOfComments);
									$(SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+article.ArticleKey.Key).update(article.Recommendations.NumberOfRecommendations);
									recommendHTML = belo.slcgm.common.getRecommendHTML(article.ArticleKey.Key,article.Recommendations.NumberOfRecommendations,article.Recommendations.CurrentUserHasRecommended,'Article');
									$(SLCGMRECOMMENDID+SLCGMCONTENTSEPARATOR+article.ArticleKey.Key).innerHTML = recommendHTML;
			        	}
							}catch(e){}
						}
					}
					for(i=0;i<SLCGMARTICLESWITHMETADATA.length;i++)
					{
						$(SLCGMCOMMENTCOUNTID+SLCGMCONTENTSEPARATOR+SLCGMARTICLESWITHMETADATA[i]).update(0);
						$(SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+SLCGMARTICLESWITHMETADATA[i]).update(0);
						recommendHTML = belo.slcgm.common.getRecommendHTML(SLCGMARTICLESWITHMETADATA[i],0,"False",'Article');
						$(SLCGMRECOMMENDID+SLCGMCONTENTSEPARATOR+SLCGMARTICLESWITHMETADATA[i]).innerHTML = recommendHTML;
					}
					return true;
				},
				recommendAction: function (key,keyType,callback) {
					var requestBatch = new RequestBatch();
					var updateAction;
					switch(keyType)
					{
						case "Article":
						var unInitKey = SLCGMARTICLESWITHMETADATA.indexOf(key);
							if (unInitKey>-1)
							{
								articleKey = new ArticleKey(SLCGMARTICLESWITHMETADATA[unInitKey]);
								var i=0;
								var conLen = SLCGMCONFIG.Contents.length;
								do
								{
									if (SLCGMCONFIG.Contents[i].key == SLCGMARTICLESWITHMETADATA[unInitKey])
									{
										updateAction = new UpdateArticleAction(articleKey,SLCGMCONFIG.Contents[i].OnPageUrl,SLCGMCONFIG.Contents[i].OnPageTitle);
									}
								}while(i++<conLen);
							}
							var recommendKey = new ArticleKey(key);
						break;
						case "Comment":
							var recommendKey = new CommentKey(key);
						break;
						case "Video":
							var recommendKey = new VideoKey(key);
						break;
						case "Photo":
							var recommendKey = new PhotoKey(key);
						break;
						case "Gallery":
							var recommendKey = new GalleryKey(key);
						break;
						case "User":
							var recommendKey = new UserKey(key);
						break;
						case "Persona":
							var recommendKey = new UserKey(key);
						break;
					}
					var newcb = function(responseBatch){
						var recommendTextFlag = (keyType=="Article")? false:true;
						callback(responseBatch,keyType,recommendTextFlag,key);
					}
					var recommendaction = new RecommendAction(recommendKey);
					if(typeof(updateAction)=='object') requestBatch.AddToRequest(updateAction);
					requestBatch.AddToRequest(recommendaction);
					requestBatch.BeginRequest(DAAPIPROCESSURL, function(rb){
						if (rb.Messages[0].Message=="ok")
						{
							/* OMNITURE PRODUCT TRACKING CODE */
							if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
							{
								var productString = ";"+SLCGMOMNITUREPRODUCT+keyType+" ("+key+")";
								belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
								eVars = { 3 : "Thumbs Up Action: "+keyType };
								var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),SLCGMOMNITUREEVENT,productString,"","","",eVars);
							}
							/* OMNITURE PRODUCT TRACKING CODE */
						}
						callback(rb,keyType,(keyType=="Article"),key);
					});
				},
				recommendCallback: function(responseBatch,keyType,recommendTextFlag,key)
				{
					if(responseBatch.Messages[0].Message=="ok")
					{
						var recCnt = $(SLCGMRECOMMENDCOUNTID+SLCGMCONTENTSEPARATOR+key);
						var recSpan = $(SLCGMRECOMMENDSTATEDIV+SLCGMCONTENTSEPARATOR+key);
						if (keyType!="Comment")
						{
							var recommendHTML = "";
							recommendHTML+= "<span class=\"bold\">"+((recommendTextFlag)? ((keyType=="Article")? "Story":keyType)+" Recommended":"Recommended")+"</span> ";

							belo.slcgm.util.debug("recSpan");
							belo.slcgm.util.debug(recSpan);
							belo.slcgm.util.debug("recSpan.firstChild");
							belo.slcgm.util.debug(recSpan.firstChild);

							recSpan.firstChild.innerHTML = recommendHTML;

							recSpan.childNodes[2].disabled = "disabled";
							recSpan.childNodes[2].src = SLCGMTHUMBSUPINACTIVE;
							recSpan.childNodes[2].onclick = null;
							recSpan.childNodes[2].style.cursor = "default";
							recCnt.innerHTML = parseInt(recCnt.innerHTML)+1;
						}
						else
						{
							recSpan.firstChild.disabled = "disabled";
							recSpan.firstChild.src = SLCGMTHUMBSUPINACTIVE;
							recSpan.firstChild.onclick = null;
							recSpan.firstChild.style.cursor = "default";
							recCnt.innerHTML = parseInt(recCnt.innerHTML)+1;
						}

						//recSpan.innerHTML = recommendHTML;
						//recCnt.innerHTML = parseInt(recCnt.innerHTML)+1;

						//belo.slcgm.util.debug('[recommendCallback.recSpan]\n');
						//belo.slcgm.util.debug(recSpan.firstChild);

						recSpan,recCnt,responseBatch,keyType,recommendTextFlag,key,recommendHTML=null;
					}
					return true;
				},
				// responseBatch,ratingTextFlag,key,slcgmRatingCountID,slcgmRatingStateDiv,SLCGMCONTENTSEPARATOR,SLCGMTHUMBSDOWNINACTIVE
				ratingsCallback: function(configObj)
				{
					if(configObj.responseBatch.Messages[0].Message=="ok")
					{

						var rateCnt = $(configObj.slcgmRatingCountID+configObj.slcgmContentSeparator+configObj.key);
						var rateSpan = $(configObj.slcgmRatingStateDiv+configObj.slcgmContentSeparator+configObj.key);
						rateSpan.firstChild.disabled = "disabled";
						rateSpan.firstChild.src = configObj.slcgmThumbsDownInactive;
						rateSpan.firstChild.onclick = null;
						rateSpan.firstChild.style.cursor = "default";
						rateCnt.innerHTML = parseInt(rateCnt.innerHTML)+1;
						configObj,rateSpan,rateCnt=null;
					}
					return true;
				}
			};
		}();

		/* SiteLife CGM media functions namespace */
		belo.slcgm.media = function()
		{
			var _namespace = "belo.slcgm.media";
			return {
				renderGalleryHeader: function(plckGalleryID,callback)
				{
					if(plckGalleryID)
					{
						var requestBatch = new RequestBatch();
						requestBatch.AddToRequest(new GalleryKey(plckGalleryID));
						requestBatch.AddToRequest(new CustomItemKey("GalleryContestRules"+SLCGMCONTENTSEPARATOR+plckGalleryID));
						requestBatch.AddToRequest(new CustomItemKey("GalleryHeader"+SLCGMCONTENTSEPARATOR+plckGalleryID));
						requestBatch.AddToRequest(new CustomItemKey("ContestSchedule"+SLCGMCONTENTSEPARATOR+plckGalleryID));
						if(!callback)
						{
							callback = function(responseBatch){
								var headerHTML = "";
								var galleryContestRules = null;
								var galleryHeadHTML = null;
								var responseLength = responseBatch.Responses.length;
								var galleryHeader = $('galleryHeader');
								var gTags = $('gTags');
								var gSection = $('gSection');

								if (responseLength > 0)
								{
									var i=0;
									do
									{
										if(responseBatch.Responses[i].Gallery) var gallery = responseBatch.Responses[i].Gallery;
										if(responseBatch.Responses[i].CustomItem)
										{
											if(responseBatch.Responses[i].CustomItem.Name=='GalleryContestRules') galleryContestRules = responseBatch.Responses[i].CustomItem.Content;
											if(responseBatch.Responses[i].CustomItem.Name=='GalleryHeader') galleryHeadHTML = responseBatch.Responses[i].CustomItem.Content;
										}
										if(responseBatch.Responses[i].Gallery) var gallery = responseBatch.Responses[i].Gallery;
										i++;
									}while(i<responseLength);

									if (gTags) gTags.value=gallery.Tags;
									if (gSection) gSection=gallery.Section.Name;

									if(galleryHeadHTML==null)
									{
										if(galleryContestRules!=null) gallery.contestRulesLink = '<a href="'+galleryContestRules+'">Contest Rules</a>';
										gallery.galleryHREF = (MEDIATYPE=="Photo")? SLCGMPHOTOGALLERYURI:SLCGMVIDEOGALLERYURI;
										if(MEDIATYPE=="Photo" && SLCGMSLIDESHOWGALLERYURI && _QUERY.plckGalleryID) gallery.slideshowHREF = SLCGMSLIDESHOWGALLERYURI+"?plckGalleryID="+_QUERY.plckGalleryID;
										gallery.uploadHREF = (MEDIATYPE=="Photo")? SLCGMPHOTOUPLOADURI:SLCGMVIDEOUPLOADURI;
										gallery.recommendationHTML = belo.slcgm.common.getRecommendHTML(gallery.GalleryKey.Key,gallery.NumberOfRecommendations,gallery.CurrentUserHasRecommended,'Gallery',true);
										gallery.SLCGMCONTENTSEPARATOR = SLCGMCONTENTSEPARATOR;
										var templateObj = new Template(SLCGMGALLERYHEADERTEMPLATE);
										headerHTML=templateObj.evaluate(gallery);
									}
									else
									{
										headerHTML=galleryHeadHTML;
									}
									if(galleryHeader) galleryHeader.innerHTML = headerHTML;
									belo.slcgm.util.debug("[renderGalleryHeader.headerHTML]\n"+headerHTML);
								}
								i,gTags,gSection,gallery,galleryHeadHTML,galleryContestRules,headerHTML,templateObj,galleryContestRules,galleryHeader,responseBatch=null;
								return;
							};
						}
						return (requestBatch.BeginRequest(DAAPIPROCESSURL, callback));
					}
				},
				renderGalleries: function(responseBatch)
				{
					var html = "";
				  try
					{
						// Variable Declaration
						var galleries = responseBatch.Responses[0].PublicGalleryPage;
						var galleryIDs = new Array();
				  	if (!galleries) galleries = responseBatch.Responses[0].UserGalleryPage;
						var mediaType = galleries.MediaType.Name;
						var mediaTotal = galleries.NumberOfGalleries;
						var galleryOutput = $('slcgmgallery');
						var templateObj = new Template(SLCGMGALLERYTEMPLATE);
						var galleryDivId = 'slcgm_'+mediaType.toLowerCase()+'gallery';
						var galleryDiv = $(galleryDivId);
						var hiddenReggie = new RegExp("(hidden)","i");
						var contestReggie = new RegExp("(contest)","i");
						var galLength = galleries.Galleries.length;
						var i=0;
						do
						{
							if(galleries.Galleries[i])
							{
								var gallery = galleries.Galleries[i];
								if(gallery.Section && hiddenReggie.test(gallery.Section.Name)) continue;
								galleryIDs.push(gallery.GalleryKey.Key);
								gallery.SLCGMCONTENTSEPARATOR = SLCGMCONTENTSEPARATOR;
								gallery.galleryHREF = (mediaType=="Photo")? SLCGMPHOTOGALLERYURI:SLCGMVIDEOGALLERYURI;
								gallery.galleryHREF+= "?plckGalleryID="+gallery.GalleryKey.Key;
								gallery.slideshowHREF = SLCGMSLIDESHOWGALLERYURI;
								gallery.slideshowHREF+= "?plckGalleryID="+gallery.GalleryKey.Key;
								gallery.recommendationHTML = belo.slcgm.common.getRecommendHTML(gallery.GalleryKey.Key,gallery.NumberOfRecommendations,gallery.CurrentUserHasRecommended,'Gallery',true);
								gallery.cleanDescription = belo.slcgm.util.stripHTML(gallery.Description);
								gallery.cleanDesc = belo.slcgm.util.stripHTML(belo.slcgm.util.truncText(gallery.cleanDescription));
								gallery.uploadHREF = (mediaType=="Photo")? SLCGMPHOTOUPLOADURI:SLCGMVIDEOUPLOADURI;
		  						gallery.uploadHREF+= '?plckGalleryID='+gallery.GalleryKey.Key;
		  					//gallery.contestRules = (contestReggie.match(gallery.Section.Name) && gallery.GalleryPromo.Body.length>0)? '<a href="'+belo.slcgm.util.stripHTML(gallery.GalleryPromo.Body)+'" target="_blank">Contest Rules</a>':'';
		  					// Truncated Description property.
		  					gallery.Desc = belo.slcgm.util.truncText(gallery.Description,SLCGMTEXTTRUNCATE);
		  					gallery.DescNoHTML = belo.slcgm.util.truncText(belo.slcgm.util.stripHTML(gallery.Description),SLCGMTEXTTRUNCATE);
		  					gallery.GalleryPromo.Bod = belo.slcgm.util.truncText(gallery.GalleryPromo.Body,SLCGMTEXTTRUNCATE);

								html+= templateObj.evaluate(gallery);
							}
						}while(i++ < galLength);
						// getPaginationHTML returns HTML based on the current page variables.
						// The 5 parameters are totalCount, number per page, page your on, output page numbers (true|false), pagination query string variable)
						if(mediaTotal>SLCGMITEMSPERPAGE)
								$$(SLCGMPAGINATION).invoke('update',belo.slcgm.util.getPaginationHTML(mediaTotal,galleries.NumberPerPage,galleries.OnPage,true,"ogp"));
								//$j(SLCGMPAGINATION).html(belo.slcgm.util.getPaginationHTML(mediaTotal,galleries.NumberPerPage,galleries.OnPage,true,"ogp"))
						if(galleryOutput)
						{
							galleryOutput.innerHTML = html;
							galleryOutput.innerHTML+='<br clear="all" />';
						}
						galleryDiv.removeClassName('slcgm_hidden');
						galleryDiv.setOpacity(1);
						/* OMNITURE PRODUCT TRACKING CODE */
						if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
						{
							var productString = ";"+SLCGMOMNITUREPRODUCT+mediaType+" Gallery Splash";
							belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
							var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),SLCGMOMNITUREVIEW,productString,"","","",null);
						}
						/* OMNITURE PRODUCT TRACKING CODE */
					}
					catch(e)
					{
						belo.slcgm.util.debug("[renderGalleries.VariableDeclaration.exception]\n"+e.message);
						if(galleryDiv) galleryDiv.innerHTML = '<span class="slcgm_errors">'+e.message+'</span>';
						galleryDiv.removeClassName('slcgm_hidden');
						galleryDiv.setOpacity(1);
					}
					galleryIDs.each(function(gID){
						var requestBatch = new RequestBatch();
						var mediaPage = (mediaType=="Photo")? new PhotoPage(new GalleryKey(gID), 1, 1, "TimeStampAscending"): new VideoPage(new GalleryKey(gID), 1, 1, "TimeStampAscending");
						requestBatch.AddToRequest(mediaPage);
						requestBatch.AddToRequest(new CustomItemKey("GalleryContestRules"+SLCGMCONTENTSEPARATOR+gID));
						requestBatch.AddToRequest(new CustomItemKey("ContestSchedule"+SLCGMCONTENTSEPARATOR+plckGalleryID));
						requestBatch.BeginRequest(DAAPIPROCESSURL,function(responseBatch){
							if (responseBatch.Responses.length>0)
							{
								mediaPage = responseBatch.Responses[0][mediaType+"Page"];
								if (mediaPage["NumberOf"+mediaType+"s"]!=null)
								{
									if ($("galleryItems"+SLCGMCONTENTSEPARATOR+gID)) $("galleryItems"+SLCGMCONTENTSEPARATOR+gID).innerHTML = "("+mediaPage["NumberOf"+mediaType+"s"]+")";
								}
								if (responseBatch.Responses.length>1)
								{
									customItem = responseBatch.Responses[1].CustomItem;
									if (customItem!=null)
									{
										if ($("GalleryContestRules"+SLCGMCONTENTSEPARATOR+gID)) $("GalleryContestRules"+SLCGMCONTENTSEPARATOR+gID).innerHTML = '<a href="'+belo.slcgm.util.stripHTML(customItem.Content)+'" target="_blank">Contest Rules</a>'
									}
								}
							}
						});
					});
					//addEventsToDom();  // function located in external file - "superUserOverlay.js"
					return true;
				},
				renderGalleryFromGalleries: function(responseBatch)
				{
					var html = "";
				  try
					{
						// Variable Declaration
						var galleries = (responseBatch.Responses[0].PublicGalleryPage)?responseBatch.Responses[0].PublicGalleryPage:responseBatch.Responses[0].UserGalleryPage;
						var mediaType = galleries.MediaType.Name;
						var mediaTotal = galleries.NumberOfGalleries;

						var requestBatch = new RequestBatch();
						var mediaPage = (galleries.MediaType.Name=="Photo")? new PhotoPage(new GalleryKey(galleries.Galleries[0].GalleryKey.Key), galleries.NumberPerPage, 1, "TimeStampAscending"): new VideoPage(new GalleryKey(galleries.Galleries[0].GalleryKey.Key), galleries.NumberPerPage, 1, "TimeStampAscending");
						requestBatch.AddToRequest(mediaPage);
						requestBatch.BeginRequest(DAAPIPROCESSURL,function(responseBatch){
							if (responseBatch.Responses.length>0)
							{
								var i=0;
								var mediaType = galleries.MediaType.Name;
								mediaPage = responseBatch.Responses[0][mediaType+"Page"];
								var templateObj = new Template(SLCGMGALLERYTEMPLATE);
								var mediaPageLength = mediaPage[mediaType+"s"].length;
								do
								{
									media = mediaPage[mediaType+"s"][i];
									if(media)
									{
										media.MediaKey = media[mediaType+"Key"].Key;
										html+=templateObj.evaluate(media);
									}
								}while(i++<mediaPageLength);
								if($('slcgmgallery'))
								{
									$('slcgmgallery').innerHTML = html;
									$('slcgmgallery').innerHTML+='<br clear="all" />';
								}

							}
							return i,media,responseBatch,mediaPage,templateObj=null;
						});
					}
					catch(e)
					{
						belo.slcgm.util.debug("[renderGalleryFromGalleries.exception]\n"+e.message);
					}
				},
				renderPhotoOrVideoPage: function(responseBatch)
				{
					var html = "";
					var pageLink = "";
					if (responseBatch.Responses.length == 0)
					{
						html ="<center><span class=\"slcgm_errors\">There are no Galleries currently available.</span></center>";
					}
					else
					{
						try
						{
							// Variable Declaration
							var gallery = responseBatch.Responses[0].Gallery;
							var cgmheaderH3s = $j('h3.cgmheader');
							var mediaType = gallery.MediaType.Name;
							try
							{
								if(cgmheaderH3s.length>0)
								{
									cgmheaderH3s[0].innerHTML = gallery.Title;
									cgmheaderH3s[0].setAttribute("title",belo.slcgm.util.truncText(belo.slcgm.util.stripHTML(gallery.Description),50));
								}
								else
								{
									belo.slcgm.util.debug("[renderPhotoOrVideoPage.error]\n $j.isArray(cgmheaderH3s)=="+$j.isArray(cgmheaderH3s));
								}
							}
							catch(e)
							{
								belo.slcgm.util.debug("[renderPhotoOrVideoPage.exception]\ncgmheaderH3s are deprecated: "+e.message);
							}
							/* OMNITURE PRODUCT TRACKING CODE */
							if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
							{
								var productString = ";"+SLCGMOMNITUREPRODUCT+mediaType+"s Gallery ("+gallery.GalleryKey.Key+")";
								belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
								var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),SLCGMOMNITUREVIEW,productString,"","","",null);
							}
							/* OMNITURE PRODUCT TRACKING CODE */
							var mediaItems = responseBatch.Responses[1][mediaType+"Page"];
							if (responseBatch.Responses.length>=3)
							{
								var galleryHeaderHTML = null;
								if(typeof(responseBatch.Responses[2].CustomItem)!='undefined')
								{
									galleryHeaderHTML = responseBatch.Responses[2].CustomItem.Content;
								}
								else
								{
									belo.slcgm.util.debug("[renderPhotoOrVideoPage.CustomItem.Content]\n"+responseBatch.Responses[2].CustomItem.Content);
								}
							}
							var mediaTotal = mediaItems["NumberOf"+mediaType+"s"];
							var pageUrl = 0;
							var templateVar = (mediaType=="Photo")? ((_QUERY.slideshow!=1)? SLCGMPHOTOGALLERYTEMPLATE.toString():SLCGMSLIDESHOWTEMPLATE.toString()):SLCGMVIDEOGALLERYTEMPLATE.toString();
							var templateObj = new Template(templateVar);
							var galleryDivId = 'slcgm_'+mediaType.toLowerCase()+'gallery';
							var galleryOutput = $(galleryDivId);
							var mediaState = true;
							var mediaItemsLength = mediaItems[mediaType+"s"].length
							var i=0;
							var media;
							do
							{
								media = mediaItems[mediaType+"s"][i];
								media.Desc = belo.slcgm.util.truncText(media.Description,SLCGMTEXTTRUNCATE);
								media.profileLink = SLCGMPROFILEPAGEURI;
								if (mediaType=="Photo")
								{
									try{ if(media.Title.test(/(^\w{20})/)) belo.slcgm.util.debug(media.Title.test(/(^\w{20})/)); }catch(e){ belo.slcgm.util.debug(e.message); }
									media.MediaKey = media.PhotoKey.Key;
									media.pageLink = SLCGMPHOTOPAGEURI+"?plckPhotoID="+media.PhotoKey.Key+"&plckGalleryID="+media.GalleryKey.Key+"&omp="+((_QUERY.omp!=undefined)? _QUERY.omp:"1");
									if(_QUERY.slideshow) media.nextPage = (mediaItems.OnPage>=mediaItems.NumberOfPhotos)? belo.slcgm.util.updateQueryStringWithParam(location.toString(),'ogp',1):belo.slcgm.util.updateQueryStringWithParam(location.toString(), 'ogp', ((_QUERY.ogp!=undefined)? parseInt(_QUERY.ogp)+1:"2"));
									if(SLCGMSLIDESHOWGALLERYURI) media.slideshowHREF=SLCGMSLIDESHOWGALLERYURI;
								}
								else
								{
									media.MediaKey = media.VideoKey.Key;
									media.pageLink = SLCGMVIDEOPAGEURI+"?plckVideoID="+media.VideoKey.Key+"&plckGalleryID="+media.GalleryKey.Key+"&omp="+((_QUERY.omp!=undefined)? _QUERY.omp:"1");
									mediaState = (media.VideoState.State=="Completed")? true:false;
								}
								media.recommendationHTML = belo.slcgm.common.getRecommendHTML(media.MediaKey,media.NumberOfRecommendations,media.CurrentUserHasRecommended,mediaType,true);
								if (mediaState) html+= templateObj.evaluate(media);
								i++;
							}while(i<mediaItemsLength);
							if (galleryHeaderHTML!=undefined)
							{
								var galleryHeader = $j('#galleryHeader');
								if(galleryHeader) galleryHeader.html(galleryHeaderHTML);
								galleryHeader,galleryHeaderHTML=null;
							}
							if(mediaTotal>mediaItems.NumberPerPage)
							{
								if($j(SLCGMPAGINATION)) $j(SLCGMPAGINATION)[0].innerHTML = belo.slcgm.util.getPaginationHTML(mediaTotal,mediaItems.NumberPerPage,mediaItems.OnPage,(_QUERY.slideshow!=1),'ogp');
								if($j(".cgmpagenav_nums")[0]) $j(".cgmpagenav_nums").html(belo.slcgm.util.getPaginationHTML(mediaTotal,mediaItems.NumberPerPage,mediaItems.OnPage,true,'ogp'));
								mediaTotal=null;
							}
							if($('slcgmgallery'))
							{
								$('slcgmgallery').innerHTML = html;
								$('slcgmgallery').innerHTML+='<br clear="all" />';
							}
							if(galleryOutput)
							{
								if(mediaType=="Photo") ((_QUERY.slideshow)? $j("#viewgallery").click(function(){window.location.href=SLCGMPHOTOGALLERYURI+'?plckGalleryID='+gallery.GalleryKey.Key+'&ogp='+((_QUERY.ogp!=undefined)? Math.ceil(_QUERY.ogp/10):'1')}).show():$j("#viewslideshow").click(function(){window.location.href=SLCGMSLIDESHOWGALLERYURI+'?plckGalleryID='+gallery.GalleryKey.Key+'&ogp='+((_QUERY.ogp!=undefined)? _QUERY.ogp:'1');}).show());
								galleryOutput.removeClassName('slcgm_hidden');
								galleryOutput.setOpacity(1);
							}
							//html,pageLink,cgmheaderH3s,gallery,mediaItemsLength,mediaState,media,mediaType,mediaTotal,pageUrl,templateVar,templateObj,galleryDivId,mediaState=null;
						}
						catch(e)
						{
							belo.slcgm.util.debug("[renderPhotoOrVideoPage::Variable Declaration] EXCEPTION:\n"+e.message);
							if(galleryOutput) galleryOutput.innerHTML = '<span class="slcgm_errors">'+e.message+'</span>';
							return false;
						}
					}
					return true;
				},
				loadMediaAndPage: function(mkey,mtype,callBack,plckGalleryID,limit,onPage)
				{
					try
					{
						var requestBatch = new RequestBatch();
						var mediaKey = null;
						if (mtype=="Photo")
						{
							mediaKey = new PhotoKey(mkey);
						}
						else if(mtype=="Video")
						{
							mediaKey = new VideoKey(mkey);
						}
						var galleryKey = new GalleryKey(plckGalleryID);
						requestBatch.AddToRequest(galleryKey);
						requestBatch.AddToRequest(belo.slcgm.media.loadPage(plckGalleryID,mtype,null,limit,onPage));
						if (mediaKey!=null)
						{
							requestBatch.AddToRequest(mediaKey);
							requestBatch.BeginRequest(DAAPIPROCESSURL, callBack);
						}
					}
					catch(e)
					{
						belo.slcgm.util.debug("[belo.slcgm.media.loadMedia.exception]\n"+e.message);
						return false;
					}
					return true;
				},
				loadMedia: function(mkey,mtype,callBack)
				{
					try
					{
						var requestBatch = new RequestBatch();
						var mediaKey = null;
						if (mtype=="Photo")
						{
							mediaKey = new PhotoKey(mkey);
						}
						else if(mtype=="Video")
						{
							mediaKey = new VideoKey(mkey);
						}
						if (mediaKey!=null && typeof(callBack)=='function')
						{
							requestBatch.AddToRequest(mediaKey);
							requestBatch.BeginRequest(DAAPIPROCESSURL, callBack);
						}
						else
						{
							return mediaKey;
						}
					}
					catch(e)
					{
						belo.slcgm.util.debug("[belo.slcgm.media.loadMedia.exception]\n"+e.message);
						return false;
					}
					return true;
				},
				loadPage: function(plckGalleryID,mtype,callBack,limit,onPage)
				{
					var requestBatch = new RequestBatch();
					if (plckGalleryID!=null) var galleryKey = new GalleryKey(plckGalleryID);
					var gPage = null;
					requestBatch.AddToRequest(galleryKey);
					if (mtype=="Photo")
					{
						gPage = new PhotoPage(galleryKey,limit,onPage,"TimeStampDescending");
					}
					else if(mtype=="Video")
					{
						gPage = new VideoPage(galleryKey,limit,onPage,"TimeStampDescending");
					}
					if (gPage!=null)
					{
						if (typeof(callBack)=='function')
						{
							requestBatch.AddToRequest(gPage);
							requestBatch.AddToRequest(new CustomItemKey("GalleryHeader"+SLCGMCONTENTSEPARATOR+plckGalleryID));
							requestBatch.AddToRequest(new CustomItemKey("ContestSchedule"+SLCGMCONTENTSEPARATOR+plckGalleryID));
							requestBatch.BeginRequest(DAAPIPROCESSURL, callBack);
						}
						else
						{
							return gPage;
						}
					}
					return true;
				},
				loadAnyGallery: function(plckGalleryID,ukey,mtype,callBack,limit,op)
				{
				  var requestBatch = new RequestBatch();
				  var mediaType = new MediaType(mtype);
				  var galleryPage = null;
				  if (plckGalleryID!=null)
				  {
				  	// Specific Gallery based on plckGalleryID
				  	belo.slcgm.media.loadPage(plckGalleryID,mtype,belo.slcgm.media.renderPhotoOrVideoPage,limit,op);
				  }
				  else if(ukey!=null)
				  {
				  	// UserGalleryPage
				  	galleryPage = new UserGalleryPage(new UserKey(ukey),limit,op,mediaType);
				  }
				  else
				  {
				  	// default action gallery of galleries
				  	galleryPage = new PublicGalleryPage(limit,op,mediaType);
				  }
				  // if a galleryPage Object passed the conditionals, then send to pluck
				  if (galleryPage!=null)
				  {
				  	requestBatch.AddToRequest(galleryPage);
				  	if (typeof(callBack)=='function')
						{
							requestBatch.BeginRequest(DAAPIPROCESSURL, callBack);
						}
						else
						{
							return galleryPage;
						}
				  }
				  return true;
				},
				uploadMedia: function()
				{
					var responseHTML = '';
					var mediaProgressGif = (MEDIATYPE=="Photo")? PHOTOUPLOADANIMATION:VIDEOUPLOADANIMATION;
					$('uploadMediaForm').action = ((MEDIATYPE=="Photo")? PHOTOUPLOADURL:VIDEOUPLOADURL);
					var galleryKeyString = _QUERY.plckGalleryID;
					if (galleryKeyString)
					{
						if(belo.slcgm.util.validateForm('uploadMediaForm'))
						{
							$('overlayContainer').style.display="block";
							responseHTML+= '<div id="slcgm_uploadresponse"><h3>Uploading '+MEDIATYPE+'...</h3>';
							responseHTML+= '<center><img id="uploadProgressBar" src="'+mediaProgressGif+'" alt="Uploading '+MEDIATYPE+'..." title="Uploading '+MEDIATYPE+'..." border="0" /></center>';
							responseHTML+= '</div>';

							$j('overlayResponseOut').html(responseHTML);
							belo.slcgm.util.showDivAtMouse('center','uploadProgress');
							var form = $('uploadMediaForm');
							new iframe(form, {
								onComplete: function(request) { belo.slcgm.media.handleMediaUpload(request.responseText,galleryKeyString,MEDIATYPE); }
							}, UPLOADFORMCOUNTER)
							UPLOADFORMCOUNTER++;
						}
					}
					else
					{
						belo.slcgm.util.debug("[media.uploadMedia.error]\nNo GalleryID");
						$('overlayContainer').style.display="block";
						responseHTML+= '<div id="slcgm_uploadresponse"><h3>[media.uploadMedia.error]\nNo GalleryID</h3>';
						responseHTML+= '</div>';

						$j('overlayResponseOut').html(responseHTML);
						belo.slcgm.util.showDivAtMouse('center','uploadProgress');
					}
				},
				handleMediaUpload: function(responseText,galleryID,mediaType)
				{
					/* OMNITURE PRODUCT TRACKING CODE */
					if (typeof(trackProducts)=="function" && s && SLCGMSTAGINGSWITCH=='')
					{
						var productString = ";"+SLCGMOMNITUREPRODUCT+MEDIATYPE+" Gallery ("+galleryID+")";
						belo.slcgm.util.debug("[ omniture productString ]\n"+productString);
						eVars = { 3 : "Media Upload Action: "+mediaType+" ("+galleryID+")" };
						var s_code = trackProducts(productString,((_QUERY.campaignID!=undefined)? _QUERY.campaignID:""),SLCGMOMNITUREEVENT,productString,"","","",eVars);
					}
					/* OMNITURE PRODUCT TRACKING CODE */
					if (typeof(SLCGMCONFIG.globals.site_config)!='undefined' && typeof(SLCGMCONFIG.globals.site_config.media.gallery.updateGalleryPromo)!='undefined')
					{
						var requestBatch = new RequestBatch();
								requestBatch.AddToRequest(new GalleryKey(galleryID));
								requestBatch.BeginRequest(DAAPIPROCESSURL,function(responseBatch){
									if (responseBatch.Messages[0].Message=="ok")
									{
										belo.slcgm.media.updateMedia(responseText,responseBatch.Responses[0].Gallery);
									}
						  	});
					}
					else
					{
						this.updateMedia(responseText);
					}
				},
				updateMedia: function(mkey,gallery)
				{
					var responseHTML = null;
					var requestBatch = new RequestBatch();
					var i = 0;
					if(mkey.indexOf("Error:")<0)
					{
						var mediaTitle = $('uploadMediaForm').mediaTitle.value;
						var mediaDesc  = $('uploadMediaForm').mediaDesc.value;
						var mediaTags  = $('uploadMediaForm').mediaTags.value;
						if(MEDIATYPE=="Photo")
						{
							var mediaKey = new PhotoKey(mkey);
							var request  = new UpdatePhotoAction(mediaKey,mediaTitle,mediaDesc,mediaTags,"");
						}
						else if(MEDIATYPE=="Video")
						{
							var mediaKey = new VideoKey(mkey);
							var request  = new UpdateVideoAction(mediaKey,mediaTitle,mediaDesc,mediaTags,"");
						}
						/*
						if (typeof(SLCGMCONFIG.globals.site_config.media.gallery.updateGalleryPromo)!='undefined')
						{
							gKey = new GalleryKey(gallery.GalleryKey.Key);
	  					gType= new GalleryType(gallery.GalleryType.Name);
	  					mType= new MediaType(gallery.MediaType.Name);
	  					pKey = new PhotoKey(mkey);
	  					gPromo = new GalleryPromo(gallery.GalleryPromo.Title,gallery.GalleryPromo.Body,pKey);
	  					section= new Section(gallery.Section);
	  					var upGA = new UpdateGalleryAction(gKey,gType,mType,unescape(gallery.Title),unescape(gallery.Description),unescape(gallery.Tags),section,gPromo);
  						requestBatch.AddToRequest(upGA);
  						belo.slcgm.util.debugObj(gallery);
	  				}
	  				*/
						if(mediaKey && request)
						{
							requestBatch.AddToRequest(request);
							requestBatch.BeginRequest(DAAPIPROCESSURL, belo.slcgm.media.mediaUpdated);
						}
					}
					else
					{
						$('overlayResponseOut').innerHTML = "<center><span class=\"slcgm_errors\"><p>"+mkey+"</p><p>Please Click <a href=\"javascript:void(0);\" onclick=\"$('overlayContainer').hide();\">here</a> to try again.</p></span></center>";
					}
				},
				mediaUpdated: function(response)
				{
					var responseHTML = null;
					try
					{
						if (response.Messages[0].Message=="ok")
						{
							responseHTML = '<div id="slcgm_uploadresponse"><h3>Your file has been uploaded.</h3>';
							responseHTML+= '<p>Click <a href="'+(MEDIATYPE=='Photo' ? SLCGMPHOTOGALLERYURI:SLCGMVIDEOGALLERYURI)+'?plckGalleryID='+_QUERY.plckGalleryID+'">here</a> to return to the gallery or <a href="javascript:window.top.location.reload()">here</a> to upload another '+MEDIATYPE+'.</p>';
							responseHTML+= '<center><img id="uploadProgressBar" src="'+UPLOADANIMATIONCOMPLETE+'" alt="Upload Complete" title="Upload Complete" border="0" /></center>';
							responseHTML+= '</div>';
							$('overlayResponseOut').innerHTML = responseHTML;
						}
						else
						{
							$('overlayResponseOut').innerHTML = "<center><span class=\"slcgm_errors\">"+response.Messages[0].Message+"</span></center>";
						}
					}catch(e){ belo.slcgm.util.debug("[media.updateMedia]\n"+e.message); }
				}
			};
		}();

		/* Util namespace */
		belo.slcgm.util = function()
		{
			var _namespace = "belo.slcgm.util";
			return {
				getTimeDistance: function(date_time)
			  {
		  		var minute = 1000 * 60;
					var hour = minute * 60;
					var day = hour * 24;
					var week = day * 7;
					var month = week * 4;
					var year = day * 365;

					var pubDateParsed = parseInt(Date.parse(date_time));
					var todayParsed = parseInt(Date.parse(new Date()));

					var difParsed = todayParsed - pubDateParsed;

					var units = [["second", 1], ["minute", minute], ["hour", hour], ["day", day], ["week", week], ["month", month], ["year", year],];

					var i = 0;
					var dateDist = difParsed;

					for(i=0; i<units.length; i++)
					{
						dateDist = difParsed / units[i][1];

						if(i==0 && dateDist<59000){
							dateDist = 1;
							unit = "less than one minute";
							break;
						} else if (i==1 && dateDist<60) {
							unit = parseInt(dateDist) + " " + units[i][0];
							break;
						} else if (i==2 && dateDist<24) {
							unit = parseInt(dateDist) + " " + units[i][0];
							break;
						} else if (i==3 && dateDist<7) {
							unit = parseInt(dateDist) + " " + units[i][0];
							break;
						} else if (i==4 && dateDist<4) {
							unit = parseInt(dateDist) + " " + units[i][0];
							break;
						} else if (i==5 && dateDist<12) {
							unit = parseInt(dateDist) + " " + units[i][0];
							break;
						} else if (i==6) {
							unit = parseInt(dateDist) + " " + units[i][0];
							break;
						}
					}
					var dateUnitSuffix = (parseInt(dateDist) == 1)? "":"s";
					return (unit + dateUnitSuffix + " ago");
			  },
				truncText: function(textStr,charLength)
				{
					newStr = textStr;
					try
					{
						if(!charLength)
						{
							charLength = SLCGMTEXTTRUNCATE
						}
						if(textStr.length>charLength)
							newStr = textStr.substr(0,charLength)+"...";
					}catch(e){}
					return newStr;
				},
				stripHTML: function(htmlStr)
				{
					var str = htmlStr.replace(/(<([^>]+)>)/ig,"");
					return str;
				},
				/* * /
				validateForm: function(formId)
				{
					// MOVE INTO LIBRARY
					var statusMsg = true;
					try
					{
						// Using Prototype: $$(element.classname) returns an array of elements by class name (cross browser)
						var inputTags = $j('.requiredInput');
						var tagsLength= inputTags.length;
						var i=0;
						do
						{
							if ($j.trim(inputTags[i].value)=='')
							{
								inputTags[i].className = 'requiredInput slcgm_red';
								if (inputTags[i].name!="") $j("#"+inputTags[i].name+"_error").innerHTML = "required";
								statusMsg=false;
							}
							else
							{
								inputTags[i].className = 'requiredInput';
								$j("#"+inputTags[i].name+"_error").innerHTML = "";
							}
							i++;
						}while(i<tagsLength);
					}catch(e){ belo.slcgm.util.debug("[ validateForm.exception "+i+" ]\n"+e.message+"\ninputTags["+i+"].name="+inputTags[i].name); }
					if(statusMsg)
					{
						$j("form."+SLCGMCONTENTPREFIX+" :enabled").attr("disabled","disabled");
					}
					else
					{
						$j("form."+SLCGMCONTENTPREFIX+" :disabled").attr("disabled","");
					}
					return statusMsg;
				},
				/* */
				validateForm: function(formId)
				{
					// MOVE INTO LIBRARY
					var statusMsg = true;
					try
					{
						var inputTags = $j('#uploadMediaForm.requiredInput');
						for(var i=0;i<inputTags.length;i++)
						{
							if (inputTags[i].value=="")
							{
								inputTags[i].style.backgroundColor = "#ffdfdf";
								inputTags[i].style.border = "1px solid #7F4F4F";
								if (inputTags[i].name!="")	$(inputTags[i].name+"_error").innerHTML = "required";
								statusMsg=false;
							}
							else
							{
								inputTags[i].className = 'requiredInput';
								$(inputTags[i].name+"_error").innerHTML = "";
							}
						}
					}catch(e){ belo.slcgm.util.debug("[ validateForm.exception "+i+" ]\n"+e.message+"\ninputTags["+i+"].name="+inputTags[i].name); }
					if(!statusMsg)
					{
						$(formId).enable();
					}
					return statusMsg;
				},
				/* */
				recommendReview : function(key,callback) {
			    var requestBatch = new RequestBatch();
			    var reviewKey = new ReviewKey(key);
			    var recommendAction = new RecommendAction(reviewKey);
			    requestBatch.AddToRequest(recommendAction);
			    requestBatch.BeginRequest(DAAPIPROCESSURL, callback);
				},
				getPaginationHTML : function(total,numberPerPage,OnPage,pageNumFlag,onPageQSVar)
				{
				try
				{
					var truncMax = 5;
					var anchorTag = "";
					if(onPageQSVar=="ocp")
						anchorTag=SLCGMCOMMENTANCHOR;
					var numberOfPages = Math.ceil(total / numberPerPage);
							OnPage = (typeof(OnPage)=="number")? OnPage:parseInt(OnPage);
					var html = "";
					html = '<img src="'+SLCGMASSETBARROW+'" alt="left arrow" title="left arrow" />';
					html+= (OnPage==1)? " Prev ":" <a href=\""+belo.slcgm.util.getUpdatedQueryString(onPageQSVar,(OnPage-1))+anchorTag+"\">Prev</a> ";
					//numberOfPages = 20;
					if(pageNumFlag)
					{
						var i=1,dotsTotal=6,totalDots=0,dotCnt = 3,pageNum="",pageStart,pageEnd;
						var truncRange = (OnPage+(truncMax-1));
						if (truncRange>=numberOfPages)
						{
							truncRange = (numberOfPages-truncMax);
							pageStart = truncRange;
							pageEnd = numberOfPages;
						}
						else if(OnPage<dotCnt)
						{
							pageStart = OnPage;
							pageEnd = truncRange;
						}
						else
						{
							pageStart = (OnPage-2);
							pageEnd = (OnPage+2);
						}
						do
						{
							pageNum = "";
							if(i==1 || (i>=pageStart && i<=pageEnd) || i==numberOfPages)
							{
								pageNum = i+"";
							}
							else if(dotCnt>=0 && totalDots<dotsTotal && numberOfPages>=20)
							{
								if(dotCnt>0)
								{
									pageNum = "&nbsp;.&nbsp;";
									totalDots++;
									dotCnt--;
								}
								else if(i>OnPage)
								{
									dotCnt=3;
									pageNum = "&nbsp;.&nbsp;";
									totalDots++;
									dotCnt--;
								}
							}
							else if(numberOfPages<20)
							{
								pageNum = i+"";
							}
							html+= (pageNum!="" && i!=OnPage && pageNum.toString().indexOf("&nbsp;")<0)? " <a href=\""+belo.slcgm.util.getUpdatedQueryString(onPageQSVar,i)+anchorTag+"\">"+pageNum+"</a> ":pageNum;
							i++;
						}while(i<=numberOfPages);
					}
					html+= (numberOfPages<=OnPage)? " Next ":" <a href=\""+belo.slcgm.util.getUpdatedQueryString(onPageQSVar,(OnPage+1))+anchorTag+"\">Next</a> ";
					html+= '<img src="/images/cgm/barrow_right.gif" alt="right arrow" title="right arrow" />';
				}
				catch(e)
				{
					belo.slcgm.util.debug("[getPaginationHTML] EXCEPTION:\n"+e.message);
				}
				return html;
				},
				getUpdatedQueryString : function(pName,pValue)
				{
					var newURI  = document.location.pathname+"?";
					var fFlag = true;
					var uriSeperator = "";
					try
					{
						for(var obj in _QUERY)
						{
							if(obj)
							{
								if (!fFlag) uriSeperator = "&";
								if (obj!=pName)
								{
									newURI+= uriSeperator+obj+"="+_QUERY[obj];
								}
								else
								{
									newURI+= uriSeperator+obj+"="+pValue;
								}
								fFlag = false;
							}
						}
						if (newURI.indexOf(uriSeperator+pName+"=")<0)
						{
							if (!fFlag)
							{
								newURI+="&"+pName+"="+pValue;
							}
							else
							{
								newURI+=pName+"="+pValue;
							}
						}
					}
					catch(e)
					{
						belo.slcgm.util.debug("[getUpdatedQueryString] EXCEPTION:\n"+e);
					}
					return newURI;
				},
				getDisplayName : function()
				{
					$('displayNameFormContainer').style.display="block";
				},
				debug : function(s)
				{
					try
					{
						if (SLCGM_DEBUG)
						{
							if (this.isDefined(window, "console"))
							{
								console.log(s);
							}
							else
							{
								alert(s);
							}
						}
					}
					catch(e){}
				},
				isLoggedInForSLCGM: function ()
				{
					var displayName=this.getNameFromSLCGMCookie("AT","a");
					if (displayName!=null)
					{
						return true;
					}
					return false;
				},

				isLoggedInForBelo: function ()
				{
					var beloHash= this.getHASHFromBeloCookie("img","|",0);
					if (beloHash!=null)
					{
						return true;
					}
					return false;
				},

				// sections, categories, and contributors can be as Array objects or single values
				// belo.slcgm.util.getRecentActivity(["All"],["All"],["All"],"Recent","Article",15,10,callbackFunction)
				getRecentActivity: function (sections,categories,contributors,activity,contentType,age,discoveryCount,callback,filterBySite)
				{
					if (typeof(sections)=="object")
					{
						for(var i=0;i<sections.length;i++)
						{
							sections[i] = new Section(sections[i]);
						}
					}
					else if (typeof(sections)=="string")
					{
						sections = new Array(new Section(sections));
					}
					if (typeof(categories)=="object")
					{
						for(i=0;i<categories.length;i++)
						{
							categories[i] = new Category(categories[i]);
						}
					}
					else if (typeof(categories)=="string")
					{
						categories = new Array(new Category(categories));
					}
					if (typeof(contributors)=="object")
					{
						for(i=0;i<contributors.length;i++)
						{
							contributors[i] = new UserTier(contributors[i]);
						}
					}
					else if (typeof(contributors)=="string")
					{
						contributors = new Array(new UserTier(contributors));
					}
					contentType = new ContentType(contentType);
					activity = new Activity(activity);
					var requestBatch = new RequestBatch();
					var discoveryAction = new DiscoverContentAction(
																		sections,
																		categories,
																		contributors,
																		activity,
																		contentType,
																		age,
																		discoveryCount,filterBySite);
					requestBatch.AddToRequest(discoveryAction);
					requestBatch.BeginRequest(DAAPIPROCESSURL, callback);
				},
				// sections, categories, and contributors can be as Array objects or single values
				// belo.slcgm.util.getContentDiscovery(configObj)
				getContentDiscovery: function (cObj)
				{
					if (typeof(cObj.sections)=="object")
					{
						for(var i=0;i<cObj.sections.length;i++)
						{
							cObj.sections[i] = new Section(cObj.sections[i]);
						}
					}
					else if (typeof(cObj.sections)=="string")
					{
						cObj.sections = new Array(new Section(cObj.sections));
					}
					if (typeof(cObj.tags)=="object")
					{
						for(i=0;i<cObj.tags.length;i++)
						{
							cObj.tags[i] = new Category(cObj.tags[i]);
						}
					}
					else if (typeof(cObj.tags)=="string")
					{
						cObj.tags = new Array(new Category(cObj.tags));
					}
					if (typeof(cObj.contributors)=="object")
					{
						for(i=0;i<cObj.contributors.length;i++)
						{
							cObj.contributors[i] = new UserTier(cObj.contributors[i]);
						}
					}
					else if (typeof(cObj.contributors)=="string")
					{
						cObj.contributors = new Array(new UserTier(cObj.contributors));
					}
					cObj.contentType = new ContentType(cObj.contentType);
					cObj.activity = new Activity(cObj.activity);
					cObj.cb = function(responseBatch){
						cObj.callback(responseBatch,cObj);
					};
					var requestBatch = new RequestBatch();
					var discoveryAction = new DiscoverContentAction(
																		cObj.sections,
																		cObj.tags,
																		cObj.contributors,
																		cObj.activity,
																		cObj.contentType,
																		cObj.age,
																		cObj.count,cObj.filterBySite);
					requestBatch.AddToRequest(discoveryAction);
					requestBatch.BeginRequest(DAAPIPROCESSURL, cObj.cb);
				},
				renderContentDiscovery: function (responseBatch,configure)
				{
					var recentActivityDiv = $(configure.domTarget);
					if (recentActivityDiv)
					{
						var recentContent = new Object();
								recentContent.resultsHTML = '';
						var discoverRecentContent = responseBatch.Responses[0].DiscoverContentAction;
					  var innerTplObj = new Template(configure.inTpl);
					  var content = new Object();
					  var dcLength=discoverRecentContent.DiscoveredContent.length
						if (dcLength)
					  {
					  	var i=0;
							do
							{
								if(discoverRecentContent.DiscoveredContent[i])
								{
									content = discoverRecentContent.DiscoveredContent[i];
									if(typeof(content.UserKey)!='undefined')
									{
										contentKey = content.UserKey.Key;
									}
									else if(typeof(content.VideoKey)!='undefined')
									{
										contentKey = content.VideoKey.Key;
									}
									else if(typeof(content.ArticleKey)!='undefined')
									{
										contentKey = content.ArticleKey.Key;
									}
									else if(typeof(content.CommentKey)!='undefined')
									{
										contentKey = content.CommentKey.Key;
									}
									else if(typeof(content.PhotoKey)!='undefined')
									{
										contentKey = content.PhotoKey.Key;
									}
									content.recommendationHTML = belo.slcgm.common.getRecommendHTML(contentKey,content.NumberOfRecommendations,((content.CurrentUserHasRecommended)? content.CurrentUserHasRecommended:content.CurrentUserRecommendedProfile),configure.contentType.ContentType.Name,false);
									if(content.AvatarPhotoUrl) content.AvatarPhotoUrl = content.AvatarPhotoUrl.replace("Small","Medium");
									content.configure = configure;
									recentContent.resultsHTML+= innerTplObj.evaluate(content);
								}
								i++;
							}while(i<dcLength);
						}
					  else
						{
							recentContent.resultsHTML='<span class="slcgm_errors">'+((configure.error_text)? configure.error_text:'No Recent Photos Could Be Located')+'</span>';
						}
						try
						{
							if(configure.outTpl)
							{
								if(recentActivityDiv) recentActivityDiv.innerHTML = new Template(configure.outTpl).evaluate(recentContent);
							}
							else
							{
								if(recentActivityDiv) recentActivityDiv.innerHTML=recentContent.resultsHTML;
							}
							recentActivityDiv,recentContent,discoverRecentContent,configure,content,i=null;
						}catch(e){ belo.slcgm.util.debug("[ renderContentDiscovery.template.exception ]\n"+e.message); }
					}
					return true;
				},
				renderRecentContent: function (responseBatch)
				{
					if (responseBatch.Responses.length > 0)
					{
						var discoveryAction = responseBatch.Responses[0].DiscoverContentAction;
						var recentList = $("Most_"+discoveryAction.Activity.Name+"_"+SLCGMPAGECONTENTTYPE);
						var recentHTML = "";
						var templateObj = new Template(SLCGMDISCOVERYTEMPLATE);
						for (var i = 0; i < discoveryAction.DiscoveredContent.length; i++)
						{
							discoveryActionObj = discoveryAction.DiscoveredContent[i];
							recentHTML += templateObj.evaluate(discoveryActionObj);
						}
						if(recentList) recentList.update(recentHTML);
					}
					return true;
				},

				// To search the dom for the below tag
				// <meta name="vit_story_id" content="STORY.118eaf352b3.93.88.fa.d0.4e75e5a4" />
				// searchDOMByTag("meta","name","vit_story_id","content","name")
				// Searches all meta tags, checks the name attribute, if it matches "vit_story_id", then it returns "content" attribute value

				searchDOMByTag: function(tName,key,val,attrib)
				{
					var tagAtt = null;
					for(var i=0;i<document.getElementsByTagName(tName).length;i++)
					{
						if (document.getElementsByTagName(tName)[i].getAttribute(key)==val)
						{
							tagAtt = document.getElementsByTagName(tName)[i].getAttribute(attrib);
						}
					}
					return tagAtt;
				},

				getNameFromSLCGMCookie: function(cName,prefix)
				{

					var lc = belo.slcgm.util.getCookie(cName);
					if (lc!=null)
					{
						var begin,end,result;
						if (cName!=null && cName!="undefined")
						{
							prefix+= "=";
							begin = lc.toLowerCase().indexOf(prefix.toLowerCase());
							if (begin == -1)
							{
								begin = lc.toLowerCase().indexOf(prefix.toLowerCase());
								if (begin != 0)
								{
									return null;
								}
							}
							end = lc.indexOf("&", begin);
							if (end == -1)
							{
								end = lc.length;
							}
							result = unescape(lc.substring(begin + prefix.length, end));
						}
						else
						{
							return null;
						}
						return result;
					}
					else
					{
						return null
					}

				},

				getHASHFromBeloCookie: function(cName,delim,cIndex)
				{
					var lc = belo.slcgm.util.getCookie(cName);
					if (lc!=null)
					{
						var parts,result;
						if (cName!=null && cName!="undefined")
						{
							parts = lc.split(delim);
							if (parts.length > 0)
							{
								result = parts[cIndex];
							}
							else
							{
								return null;
							}
						}
					}
					else
					{
						return null;
					}
					return result;
				},

				setCookie: function (cName,cookieVal,cookieTtl,cookiePath)
				{
			    var ttl=new Date();
			    ttl.setDate(ttl.getDate()+cookieTtl);
			  	document.cookie = cName+"="+escape(cookieVal)
			  	+((cookieTtl==null) ? "":";expires="+ttl.toGMTString()
			  	+";path="+cookiePath+";domain="+TLD+";");
				},

				newlinesToHTML: function(text)
				{
					var result = text.replace(/\r\n/g,"\n");
					result = result.replace(/\n/g,"<br/>\n");
					return result;
				},

				/**
				 * Convert newlines in a string to something that can be displayed in a browser.
				 */
				htmlToNewlines: function(text)
				{
					var result = text.replace(/<[bB][rR][ ]*\/+>/g,""); // we are betting that a newline was put after the BR anyway
					return result;
				},
				escapeHTML: function(cmt)
				{
					var clean = "";
					if (cmt.length > 0) {
						var clean = cmt.replace(/</g,"&lt;");
						//clean=clean.replace(/>/g,"&gt;");
						clean = clean.replace(/\u2019/g,"&#8217;");
						clean = clean.replace(/\u201C/g,"&#8220;");
						clean = clean.replace(/\u201D/g,"&#8221;");
					}
					return clean;
				},

				/**
				 * Safe method for determining if a variable is available.
				 */
				isDefined: function(object, variable)
				{
					return (typeof(eval(object)[variable]) != "undefined");
				},

				/**
				 * Gets the value of a specified query parameter.
				 *
				 * name  Name of the value from the query string.
				 *
				 * Returns a string containing value of specified parameter, or null if it does not exist.
				 */
				getQueryParameter: function(parameterName)
				{
					var result = null;
					var key = parameterName + "=";
					var parameters = document.location.search.substring(1).split("&");
					for (var i = 0; i < parameters.length; i++) {
						if (parameters[i].indexOf(key) == 0) {
							result = parameters[i].substring(key.length);
							i = parameters.length;
						}
					}
					return result;
				},

				/**
				 * Get back the pathname with querystring, with the paramter we want updated to the value.
				 * Returns the whole query string with the value updated.
				 */
				updateQueryStringWithParam: function(url, param, value)
				{
					var regxp = /([^\?]+)\?{0,1}(.*)/;
					var parts = regxp.exec(url);
					var result = parts[1] + "?";
					var tqs = parts[2];
					var pvs = tqs.split("&");
					var added = false;
					var cnt = 0;
					for (var tt = 0; tt < pvs.length; tt++)
					{
						if (cnt > 0)
						{
							result += "&";
						}
						var eqL = pvs[tt].indexOf("=");
						var key = "";
						var val = null;
						if (eqL > 0)
						{
							key = pvs[tt].substring(0, eqL);
							val = pvs[tt].substring(eqL + 1, pvs[tt].length);
						} else {
							key = pvs[tt];
						}

						result += key;
						if (key == param)
						{
							result += "=";
							result += value;
							added = true;
						}
						else if (val != null)
						{
							result += "=" + val;
						}
						cnt++;
					}
					if (! added)
					{
						if (cnt > 0)
						{
							result += "&";
						}
						result += param + "=" + value;
						cnt++;
					}
					var pattern = /sl_CommentsInputAnchor/g;
					var clearAnchor = pattern.exec(result);
					if(clearAnchor != null)
					{
						result = result.replace(/#sl_CommentsInputAnchor/g,"");
					}
					return result;
				},
				setCoverforImg: function (imgId,bgc,opacity)
				{
					var coverDiv = document.createElement('div');
							var newStyle = "background-color:#"+bgc+";";
									newStyle+= "width:"+document.getElementById(imgId).width+"px;";
									newStyle+= "height:"+(document.getElementById(imgId).height-2)+"px;";
									newStyle+= "position:absolute;";
									newStyle+= "top:"+(document.getElementById(imgId).x+3)+"px;";
									newStyle+= "left:"+(document.getElementById(imgId).y-1)+"px;";
									newStyle+= "opacity: "+opacity+";-moz-opacity: "+opacity+";filter: alpha(opacity="+(opacity*100)+");";
							coverDiv.setAttribute("id",imgId+"_colorCover");
							coverDiv.setAttribute("style",newStyle);
					document.getElementById(imgId).parentNode.appendChild(coverDiv);
				},
				/**
				 *
				 */
				mouseX: function(evt)
				{
					var result = null;
					var winX = 0;
					if(evt!='center')
					{
						if (evt.x)
						{
							result = evt.x + (document.documentElement.scrollLeft ?
							document.documentElement.scrollLeft :
							document.body.scrollLeft);
						}
						else if (evt.clientX)
						{
							result = evt.clientX + (document.documentElement.scrollLeft ?
							document.documentElement.scrollLeft :
							document.body.scrollLeft);
						}
						else if (evt.layerX)
						{
							result = evt.layerX;
						}
					}
					else
					{
						winX = (window.innerWidth)? window.innerWidth:document.body.offsetWidth;
						result = parseInt(winX/2);
					}
					return result;
				},

				mouseY: function(evt)
				{
					var result = null;
					var winY = 0;
					if(evt!='center')
					{
						if (evt.y)
						{
							result = evt.y + (document.documentElement.scrollTop ?
							document.documentElement.scrollTop :
							document.body.scrollTop);
						}
						else if (evt.clientY)
						{
							result = evt.clientY + (document.documentElement.scrollTop ?
							document.documentElement.scrollTop :
							document.body.scrollTop);
						}
						else if (evt.layerY)
						{
							result = evt.layerY;
						}
					}
					else
					{
						winY = (window.innerHeight)? window.innerHeight:document.body.offsetHeight;
						result = parseInt((winY/2)-120);
					}
					return result;
				},

				hideElement: function(elementId)
				{
					var el = document.getElementById(elementId);

					if (el)
					{
						el.style.display = "none";
					}
					return el;
				},

				showDivAtMouse: function(mouseEvent, elementId)
				{
					var el = document.getElementById(elementId);
					try
					{
						var posx = this.mouseX(mouseEvent) - Math.floor(el.offsetWidth/2);
						var posy = this.mouseY(mouseEvent);

						//normalize to make sure we at least appear on the screen
						if (posx < 0) posx = 10;
						if (posy < 0) posy = 10;
						el.style.left = posx + "px";
						el.style.top = posy + 10 + "px";
						el.style.display = "block";
					}
					catch(e)
					{
						belo.slcgm.util.debug("[showDivAtMouse.exception]\n"+e.message);
					}
					return elementId;
				},

				/**
				 * Accepts input as "8/29/2007 10:06:36 AM"
				 */
				formatDateNice: function(dateString)
				{
					var months = new Array("","January","February","March","April","May","June","July","August","September","October","November","December");
				  //                       month      day        year      hour   min    sec      period
				  var prettyDateRegEx = /(\d{1,2})\/(\d{1,2})\/(\d{4})\s+(\d{1,2}):(\d\d):(\d\d)\s+([AaPp][Mm])/;
					var result = dateString;
					var doa = prettyDateRegEx.exec(dateString);
					if (doa != null && doa.length == 8)
					{
						result = "" + months[parseInt(doa[1])] + " " + parseInt(doa[2]) + ", " + doa[3] + " " + parseInt(doa[4]) + ":" + doa[5] + " " + doa[7]
					}
					return result;
				},

				/**
				 * Gets the value of the specified cookie.
				 *
				 * name  Name of the desired cookie.
				 *
				 * Returns a string containing value of specified cookie, or null if cookie does not exist.
				 */
				getCookie: function(name)
				{
					var dc = document.cookie;
					var prefix = name + "=";
					var begin = dc.toLowerCase().indexOf("; " + prefix.toLowerCase());
					if (begin == -1){
						begin = dc.toLowerCase().indexOf(prefix.toLowerCase());
						if (begin != 0) {
							return null; //begin should be at index 0 - fail if not
						}
					} else {
						begin += (name.length-1);
					}
					var end = dc.indexOf(";", begin);
					if (end == -1) {
						end = dc.length;
					}
					var result = unescape(dc.substring(begin + prefix.length, end));
					return result;
				},

				debugObj: function(obj)
				{
					if (SLCGM_DEBUG) {
						if (this.isDefined(window, "console") && navigator.userAgent.indexOf("Safari") < 0) {
							console.dir(obj);
						} else {
							alert(YAHOO.lang.JSON.stringify(obj));
						}
					}
				},
				delCookie: function (cName)
				{
					this.setCookie(cName, "",-1,"/");
				},

				ajaxRequest : function(sUrl,callback,sendmethod,parameters)
				{
					var req = belo.slcgm.util.getXmlHttpObject();
					sendmethod = (sendmethod!=undefined)?sendmethod:"GET";
					try
					{

			      req.onreadystatechange = function() { if (req.readyState==4) belo.slcgm.util.ajaxResponse(req,callback); };
			      req.open(sendmethod, sUrl, true);
			      if(sendmethod=="POST")
			      {
			      	req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				      req.setRequestHeader("Content-length", parameters.length);
				      req.setRequestHeader("Connection", "close");
      				req.send(parameters);
			      }
			      else if(sendmethod=="GET")
			      {
			      	req.send(null);
			      }
					}
					catch(e)
					{ belo.slcgm.util.debug("[util.ajaxRequest.exception]\n"+e); }
				},
				ajaxResponse : function(req,callback)
				{
					// req is the XMLHttpObject
					// check status, add error checking
					if (req.status == 200 || req.status == 304)
					{
						try
						{
							callback(belo.slcgm.util.parseXMLString(req.responseText));
						}
						catch(e)
						{
							belo.slcgm.util.debug("[ajaxResponse] EXCEPTION:\n"+e.message);
							callback(null);
						}
					}
					else
					{
						belo.slcgm.util.debug("[ajaxResponse] req.statusText="+req.statusText);
					}
				},
				parseXMLString : function(txt)
				{
					var xmlDoc = null;
					try //Internet Explorer
					{
						xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
						xmlDoc.async="false";
						xmlDoc.loadXML(txt);
					}
					catch(e)
					{
						try //Firefox, Mozilla, Opera, etc.
						{
							var parser=new DOMParser();
							xmlDoc=parser.parseFromString(txt,"text/xml");
						}
						catch(e) { belo.slcgm.util.debug("[parseXMLString] EXCEPTION:\n"+e.message)}
					}
					if (xmlDoc!=null)
					{
						var xmlData = new Object();
						var xmlNodes = xmlDoc.documentElement.childNodes;
						for (var i=0;i < xmlNodes.length;i++)
						{
							if (xmlNodes[i].firstChild!=null)
							{
								xmlData[xmlNodes[i].nodeName] = xmlNodes[i].firstChild.nodeValue;
							}
						}
						return (xmlData);
					}
					return(null);
				},
				getXmlHttpObject : function ()
				{
					var xmlHttp=null;
					try
				  { // Firefox, Opera 8.0+, Safari
					  xmlHttp=new XMLHttpRequest();
				  }
					catch (e)
					{ // Internet Explorer
						try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
					  catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
					}
					return xmlHttp;
				},
				alltrim: function(str)
				{
				    return str.replace(/^\s+|\s+$/g, '');
				},
				getQueryString : function()
				{
					var qs = unescape(window.location.search.substring(1));
					var qsParts = qs.split('&');
					var params;
					if (qsParts.length > 0)
					{
						for(var i=0;i< qsParts.length;i++)
						{
							params = qsParts[i].split("=");
							_QUERY[params[0]]=params[1];
						}
					}
				},
				//change the opacity for different browsers
				changeOpacity: function(opacity, id)
				{
			    var object = $(id).style;
			    object.opacity = (opacity / 100);
			    object.MozOpacity = (opacity / 100);
			    object.KhtmlOpacity = (opacity / 100);
			    object.filter = "alpha(opacity=" + opacity + ")";
			    return true;
				}
			}; // close return
		}();
		// QUERY STRING SWITCHES
		SLCGMSWITCH = _QUERY.PLUCKOFF==1 ? false:true;
		// Turn on SLCGM_DEBUG if DEBUG parameter is set
		SLCGM_DEBUG = _QUERY.DEBUG==1 ? true:false;
	//$j(document).ready(function(){
		try	/* PERSONA CODE */
		{
			if (typeof(PERSONASWITCH)!='undefined')
			{
				if (PERSONASWITCH)
				{
					var screenname = null;
					try
					{
						if(typeof(_QUERY.ukey)!='undefined')
						{
							screenname = _QUERY.ukey;
						}
						else if(belo.slcgm.util.isLoggedInForSLCGM() && belo.slcgm.util.isLoggedInForBelo())
						{
								screenname = belo.slcgm.util.getNameFromSLCGMCookie("AT","u");
						}
						else
						{
							document.location.href=SLCGMEMBERCENTERURI+"?fw="+document.location.href;
						}
						if (screenname!=null)
						{
						  slcgmLoadPersonaData(screenname);
						}
					}
					catch(subE) { belo.slcgm.util.debug("[Persona.exception.subE]:\n"+subE.message); }
				}
			}
		}	catch(e){} /* END PERSONA CODE */
	//});
	/**
	 * Revision History:
	 *	$Id: functions.js 9168 2009-03-28 04:48:46Z mclagg $
	 */

