
// PUBSUB: 
// on load, use the stored value to connect and read a list
// of subscriptions.  note that in practice, this would be 
// stored in a cookie; for now, it's coded in the page.

// in this instance, we're also overriding a method for rendering 
// events; that lets us better control how they're displayed on 
// the page...

var queryParameters = Array();
ps_parseQueryParameters( queryParameters );

// important: dev or release
var trackitRoot = "/trackit";
if( document.location.href.match( /manager/ )) trackitRoot = "trackit";

// fields for generating links

var ps_gMaxLinks = 6;
var ps_gLinksCount = 0;
var ps_arrLinks = Array();
var ps_fResetCookieOnNewSub = false;

function ps_trackitClipClick( element, title, query, fType ) 
{
	var a, m, n, i, s;
	var xpos = getRealLeft(element);
	var ypos = getRealTop(element);
	var clipType = "trackit";

	clipElement = document.getElementById("fly");
	if( null != clipElement )
	{
		clipElement.style.left = xpos + "px";
		clipElement.style.top = ypos + "px";
		clipElement.style.visibility = "visible";
	}
	
	// we want to set the local array first, so that it
	// will be consistent when we recreate it.

	ps_localSubscriptions = Array();
	if( trackedNews != "" )
	{
		a = trackedNews.split("|");
		//for( i = 0; i< a.length; i++ )
		for( i = a.length - 1; i>= 0; i-- )
		{
			m = a[i].split(";");
			s = new Object();
			s.title = m[0];
			s.code = m[1];
			if( n = s.code.match( /view=(.+)/ )) s.code = n[1];
			ps_localSubscriptions[s.code] = s;
		}
	}

	// add to the cookie;
	{
		if (trackedNews != "") trackedNews = "|" + trackedNews;
		trackedNews =  title + ";" + trackitRoot + "?view=about" + trackedNews;
		
		d = new Date();
		d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);

		ps_setCookie("trackednews", trackedNews, d, "/", ps_getRootDomain());
	}
	
	// create the subscription asynchronously
	ps_fResetCookieOnNewSub = true;
	if( fType == 1 )
	{
		// alert( "Calling copy: " + query );
		ps_page_copySubscription( query );
	}
	else ps_useTranslatedQueryString( query );
	
	// run the animation, toggle the image (here only)
	element.innerHTML = '<img src="http://static.viacomlocalnetworks.com/img/icon_plus_off.gif" width="10" height="10" />';
	moveToElement("fly", clipType);

}

/**
 * generate links from a passed string: for now, comma-delimited.
 */
function ps_generate_keyword_links_direct( kw )
{
	if( ps_gLinksCount > ps_gMaxLinks ) return "";
	var fMatch = false;
	var fAlready = false;
	var q, k, j, h, str, tmp, html = "";
	
	var clipType = "trackit";
	var onover = " onmouseover='showInstructions(this, \"" + clipType + "\");' " +
		" onmouseout='hideInstructions(this, \"" + clipType + "\");' ";
	

	if( kw.match( /^\s*$/ )) return "";
	k = kw.split( "," );
	for( j = 0; j< k.length; j++ )
	{
		k[j] = k[j].replace( /^\s+/, "" ).replace( /\s+$/, "" );

		// allow sets of 2 words or more, not less...
		
		// update 5/02: allow single keywords
		
		//if( k[j].match( /^(\S+\s+)+\S+$/ ))
		{
			str = k[j].replace( /'/g, "%27" );
			str = str.replace( /\s+/g, "+" );
			
			fAlready = false;
			tmp = str.replace( /\+/g, " " ) + ";";
			if( trackedNews.match( new RegExp( tmp ))) fAlready = true;
			// else alert( trackedNews + ": " + str );
			
			
			fMatch = false;
			for( q = 0; q< ps_arrLinks.length; q++ ) 
			{
				if( k[j].match( new RegExp( ps_arrLinks[q], "i" ))) fMatch = true;
			}
			if( !fMatch )
			{
				ps_arrLinks.push( k[j] );
				if( ps_gLinksCount++ < ps_gMaxLinks )
				{
					h = trackitRoot + "?kwquery=" + str;
					if( fAlready )
					{
						html += "<li class='trackling'><span class='clipicon'>" +
							"<img src='http://static.viacomlocalnetworks.com/img/icon_plus_off.gif' " +
							"width='10' height='10'/>" + 
							"</span> <a href='/media/coverage/12-5-05%20CBS%205%20Green%20Bay%20Manure%20Slinging%20Erupts%20in%20Manitowoc%20County_files/%22%20+%20h%20+%20%22' " +
							">" + k[j] + "</a></li>\n";
					}
					else
					{
						html += "<li class='trackling'><span class='clipicon' " + onover + 
							" onclick='ps_trackitClipClick(this,\"" + k[j].replace("'","") + "\",\"" + str + "\",0);'>" +
							"<img src='http://static.viacomlocalnetworks.com/img/icon_plus_on.gif' " +
							"width='10' height='10'/>" + 
							"</span> <a href='/media/coverage/12-5-05%20CBS%205%20Green%20Bay%20Manure%20Slinging%20Erupts%20in%20Manitowoc%20County_files/%22%20+%20h%20+%20%22' " +
							">" + k[j] + "</a></li>\n";
					}
				}
			}
		}
	}
	return html;
}


//////////////////

/**
 * this is a version of the JS method for use with safari browsers.
 */
function ps_callRemoteFunctionJSSafari( callback, functionname, parameters )
{
	//alert( "Safari: please wait" );
	//return; 

	var d = new Date();
	var eltID = "ps_script_" + (ps_currentEltIdx++);
	var elt = document.getElementById( eltID );
	//var uri = ps_baseRPCURI + "?safari=1";
	var parms = "";
	var k, v, m;
	
	var idx = document.location.href.indexOf('?');
	//var uri = document.location.href.substring( 0, idx ) + "?callthrough=1";
	var uri = trackitRoot + "?callthrough=1";

	// clean up; but in this case, cycle IDs.  delete older ones.
	if( ps_currentEltIdx >= ps_lastEltIdx ) 
	{
		var tmpID = "ps_script_" + (ps_currentEltIdx - ps_lastEltIdx);
		elt = document.getElementById( tmpID );
		if( null != elt ) document.body.removeChild( elt );
	}
	elt = document.createElement( "iframe" );
	elt.id = eltID;

	v = callback.toString();
	if( m = v.match( /function\s+([^\)]+)\(/ )) uri += "&c=" + m[1];
	uri += "&e=" + eltID;
	
	for( k in parameters )
	{
		v = parameters[k].toString();
		v = v.replace( /&/, "%26" );
		v = v.replace( /=/, "%3d" );
		uri += "&" + k + "=" + v;
	}
	
	uri += "&f=" + functionname;
	uri += "&r=" + Math.random() + "," + d;
	elt.src = uri; 
	document.body.appendChild( elt );
	document.close();
}

if( navigator.userAgent.match( /safari/i ))
{
	g_psRemoteFunction = ps_callRemoteFunctionJSSafari;
}

g_mthRenderMessage = function ( link, title, time, source, sourcelink, summary )
{
	if( null == sourcelink || sourcelink == "" ) sourcelink = link;
	return 	"<BR/>\n" +
			"<div style='font-size: 1.1em;'>\n" +
			"		<a style='font-weight: bold; color: #666;' href=\"" + link + "\">" + title + "</a><br/>\n" +
			summary + 
			"<BR/>\n" +
	//			"		<a target=\"_blank\" style='font-weight: normal;' href=\"" + link + "\" title=\"" + source + "\">" + sourcelink + "</a>\n" +
			"		<a target=\"_blank\" style='font-weight: normal;' href=\"" + sourcelink + "\" title=\"\">Source: " + source+ "</a>\n" +
			"</div>\n";
}

g_mthRenderNoResults = function ()
{
	return 	"<dl class=\"clipping\">\n" +
			"	<dd class=\"featured_desc\">\n" +
			"		<span style='font-weight: bold; color: #666;'>There are no results for this topic (yet).</span><br/>\n" +
			"TrackIt topics look for your topic in new stories that appear after your topic is created. " +
			"Please check back again soon." +
			"<BR/>\n" +
			"<BR/>\n" +
			"<BR/>\n" +
			"	</dd>\n" +
			"</dl>\n";
	
}

g_strSubscriptionsListHeader = "<table style='font-size: 1.1em;' cellspacing='0' width='100%'>\n";
g_strSubscriptionsListFooter = "</table>\n";

g_mthRenderSubscriptionEntry = function ( subcode, subid, substr, idx )
{	
	var style = "background-color: #ECF2FE;";
	if( idx % 2 == 1 ) style = "background-color: #DBE3F6;";
	var title = substr; 
	if( title.length > 32 ) title = title.substring( 0, 31 ) + "..." ;

	return "" + 
		"<tr style=\"" + style + "\"><td style=\"text-align: left; padding-left: 5px; \">" +
				"<a title=\"" + substr + "\" href=\"#\" onclick=\"ps_page_loadSubscription('" + subid + 
					"');\">" + title + "</a>" +
		"</td><td style=\"text-align: right; vertical-align: middle;\">" +
				"<span class=\"button\"><a href=\"javascript:ps_page_cancelSubscription('" + subcode + 
					"');\" title='Click to cancel " + substr + "' style=\"padding-right: 7px;\">X</a></span>\n" +
		"</td></tr>\n";
}

// local function for handling query from a field
function ps_useQuery( elt )
{
	var o = document.getElementById( elt );
	if( null != o ) ps_useQueryString( o.value );
}

// internal query string function, can be called from form element
function ps_useQueryString( str )
{
	// always translate
	return ps_useTranslatedQueryString( str );
}

// internal query string function, translate the query before 
// using it - for now, add proximity operators
function ps_useTranslatedQueryString( str )
{
    if( str == "" ) return;
    var title = "";
    
    str = str.replace( /\+/g, " " );
    str = str.replace( /%20/g, " " );
    
    title = str;
    
    str = str.replace( /"/g, "" );
	str = str.replace( /^\s+|\s+$/g, "" );
	str = str.replace( /\s+/g, " /near " );
	str = '"' + str + '"';

	//alert( "str: " + str );

        lastsub = ps_getCookie('trackitlast');
        if (lastsub != str) {
	  ps_createSubscription( userdata["token"], str, title, null );
          var d = new Date()
          d.setTime(d.getTime() +  1 * 24 * 60 * 60 * 1000);

          ps_setCookie('trackitlast',str,d,'/',ps_getRootDomain());
        }

	if( null == userdata["token"] || userdata["token"] == "" )
	{
		o = document.getElementById( "subs-list" );
		if( null != o ) o.innerHTML = "";
	}


}

// local function for specific subscription handling
function ps_page_loadSubscription( id )
{
	var o = document.getElementById( "ps_trackit_title" );
	
	// set the session cookie
	ps_setCookie( "defaultsub", id );

	// set some pending text in the title.  do this first, avoid conflicts
	if( null != o ) o.innerHTML = "Retrieving TrackIt Results...";

	// call the normal method
	if( null != document.getElementById( g_eltMessagesArea )) ps_loadSubscription( id );

}

function ps_page_copySubscription( id )
{
	var o;
	
	// call the copy method
	ps_copySubscription( userdata["token"], id );
	if( null == userdata["token"] || userdata["token"] == "" )
	{
		o = document.getElementById( g_eltSubscriptionList );
		if( null != o ) o.innerHTML = "";
	}
}

/** 
 * store all subscriptions in a cookie, which we
 * can use from the flyout on other pages.
 */
function ps_page_updateTrackedLinksCookie()
{
	var i, o, tmp;
	trackedNews = "";
	for( i in ps_localSubscriptions )
	{
		o = ps_localSubscriptions[i];
		if( o )
		{
			tmp = o.title.replace( /;/g, "%3b" );
			tmp += ";";
			tmp += trackitRoot + "?view=" + i;
			if( trackedNews != "" ) tmp += "|";
			tmp += trackedNews;
			
			trackedNews = tmp ;
		}
	}
	
	// use the existing site setcookie function (delete first?)
	
	//setCookie("trackednews", trackedNews, 365, "/", ps_getRootDomain());


	// BL: 2005-11-15: no, don't use the existing function because there's no guarantee it'll work as expected. Use the local function instead since it is guaranteed to work.

	d = new Date();
        d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);
	
        exactDomain = ps_getRootDomain().substring(1);
        ps_deleteCookie("trackednews","/");
        ps_deleteCookie("trackednews","/", 'www.' + exactDomain)
        ps_setCookie("trackednews", trackedNews, d, "/", ps_getRootDomain())


	
	// update the local variable, because that's what it uses.
	// use their mechanism, mirror the original call.
	//trackedNews = getCookie("trackednews");
	
	// some site-specific calls for updating the screen
	o = document.getElementById( "trackedItems" );
	if( null != o ) o.innerHTML = trackedClippingsHTML();
	
}

function mthOnSubscriptions()
{
	var i, o, id = null;
	var d = new Date();
	var fromView = 0;

	// it's possible there was a query or a copy parameter
	// passed to this page via GET; if that's true, then
	// handle it here.

	if( null != queryParameters['query'] )
	{
		ps_useQueryString( queryParameters['query'] );
	}
	else if( null != queryParameters['kwquery'] )
	{
		ps_useTranslatedQueryString( queryParameters['kwquery'] );
	}
	else if( null != queryParameters['copy'] )
	{
		ps_page_copySubscription( queryParameters['copy'] );
	}

	// is there a subscription request in the query string?
	if( null != queryParameters['view'] )
	{
		id = queryParameters['view'];
		fromView = id;
	}
	// otherwise, from a last-viewed cookie?
	else id = ps_getCookie( "defaultsub" );

	ps_page_updateTrackedLinksCookie();

	if( fromView ) return; // should already be loaded/loading

	if( null != id && id != "" && null != ps_localSubscriptions[id] )
	{
		ps_page_loadSubscription( id );
		return;
	}

	// ok, use first in the list
	if( ps_localSubscriptions )
	{
		for( i in ps_localSubscriptions )
		{
			ps_page_loadSubscription( i );
			return;
		}
	}
	
	// still here?  set alt content.
	ps_page_setAltContent();
}

function ps_page_setAltContent()
{
	var html = "";
	var o = document.getElementById( "trackit_alternate_content" );
	if( null != o ) html = o.innerHTML;
	
	// set title
	o = document.getElementById( "ps_trackit_title" );
	if( null != o )
	{
		o.innerHTML = "What is TrackIt?";
	}
	
	// set subcap
	o = document.getElementById( "ps_trackit_header" );
	if( null != o )
	{
		o.innerHTML = "";
	}	
	
	// set body
	o = document.getElementById( g_eltMessagesArea );
	if( null != o ) o.innerHTML = html;
	
}

function page_onNewSubscription(data)
{
	var m, d = new Date();
	if( m = data.match( /<token>(.+?)<\/token>/ ))
	{
		if( m[1] != cookieToken )
		{	
			d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);		
			cookieToken = m[1];
			userdata["token"] = cookieToken;
			
			// set a cookie for the non-account
			ps_setCookie( "pubsub-token", cookieToken, d );
			
		}
	}
	
	ps_page_updateTrackedLinksCookie();

}

function ps_page_cancelSubscription(id)
{
	if( confirm( "Are you sure you want to cancel this topic?" ))
	{
		ps_cancelSubscription(id);
		ps_page_updateTrackedLinksCookie();
	}
}

function page_onMessagesLoaded(data)
{
	var s, m, t, o = document.getElementById( "ps_trackit_title" );
	if( null != o )
	{
		t = "TrackIt Results";
		if( m = data.match( /<subscription-title>(.+?)<\/subscription-title>/ ))
		{
			if( m[1] != "Untitled Subscription" )
			{
				s = m[1];
				if( m = s.match( /PubSub: (.+)/i )) s = m[1];
				t = "TrackIt Results for “" + s + "”";
			}
		}
		o.innerHTML = t;
	}
	o = document.getElementById( "ps_trackit_header" );
	if( null != o )
	{
		t = ""; // TrackIt Results";
		if( m = data.match( /<subscription-id>(.+?)<\/subscription-id>/ ))
		{
			s = m[1];
			//t = "<a href='http://atom.pubsub.com/" + s + ".xml&ss=off'>RSS feed for this topic</a> <a href='#'>(What's this?)</a>\n";
			//t = "<a href='http://atom.pubsub.com/" + s + ".xml&ss=off'><img src='http://static.viacomlocalnetworks.com/img/xml.gif' border='0'/></a>\n" + 
			//	"<a href='http://atom.pubsub.com/" + s + ".xml&ss=off'>RSS feed for this topic</a>\n";
			t = "<a href='http://atom.pubsub.com/" + s + ".xml&ss=off'>RSS feed for this topic</a>\n";
		}
		o.innerHTML = t;
	}
	
}

// use a custom uri
ps_baseRPCURI = "http://partners.pubsub.com/vtsg/ps-rpc/";

g_fnNewSubscriptionCallback = page_onNewSubscription;
g_fnNewMessagesCallback = page_onMessagesLoaded;
g_fnSubscriptionListCallback = "mthOnSubscriptions";
g_displaySubscriptionWait = false;
g_strNoAccountSubscriptions = "<div style='text-align: center;'>You haven't set up any subscriptions.</div>";
g_strNoResultsHTML = g_mthRenderNoResults(); // "<div>There are no results for this subscription (yet).</div>";

// use an estimate for height, to prevent too much bouncing
g_pendingImage = "<img src='http://partners.pubsub.com/images/smallclock.gif'/><BR/><div style='height: 440px;'>   </div>\n";


g_eltMessagesArea = "ps_trackit_results";
g_eltSubscriptionList = "ps_trackit_links";

var userdata = Array();
userdata[ "token"] = "";

var trackitToken = ps_getCookie( "trackit" );
// BL: 2005-11-16: scrub the trackitToken to remove unwanted quotes
if (trackitToken) {
    trackitToken = trackitToken.replace(/\%22|\"/g,'',trackitToken);
}


var cookieToken = ps_getCookie( "pubsub-token" );

// TEMPORARY for login management
function ps_tmp_afterlogin()
{
	trackitToken = ps_getCookie( "trackit" );
	// BL: 2005-11-16: scrub the trackitToken to remove unwanted quotes
	if(trackitToken) {
	    trackitToken = trackitToken.replace(/\%22|\"/g,'',trackitToken);
	}

	if( null != trackitToken && trackitToken != "" )
	{
		// handle the case of a switch - copy subscriptions from
		// one account to the other...
		if( null != cookieToken && cookieToken != "" && cookieToken != trackitToken )
		{
			ps_cloneAccount( cookieToken, trackitToken );
		}
		cookieToken = trackitToken;
		var d = new Date();
		d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);		
		userdata["token"] = cookieToken;
		
		// make sure there's no random cookie token floating around
		ps_deleteCookie( "pubsub-token", "/", ps_getRootDomain() );
	
	}
	else if( null != cookieToken && cookieToken != "" )
	{
		userdata[ "token" ] = cookieToken; 
	}
	ps_subscriptionList( userdata['token'] );
	var xo = document.getElementById( "ps_trackit_token" );
	if( null != xo ) xo.innerHTML = "Token: " + userdata["token"];
	
	// TEMP: reload... 
	document.location.href = trackitRoot; 
}

// TEMPORARY for login management
function ps_tmp_logoutfn()
{
	userdata[ "token" ] = ""; 
	trackitToken = "";
	cookieToken = "";
	ps_deleteCookie( "trackit", "/", ps_getRootDomain() );
	ps_deleteCookie( "pubsub-token", "/", ps_getRootDomain() );
	ps_subscriptionList( userdata['token'] );
	queryParameters = Array();
	var xo = document.getElementById( "ps_trackit_token" );
	if( null != xo ) xo.innerHTML = "Token: " + userdata["token"];
	ps_localSubscriptions = Array();
	
	// if we're reloading, we can skip this part
	//ps_page_updateTrackedLinksCookie();
	
	// reload; basically, treat it as a logout
	document.location.href = trackitRoot; 
	
}

// TEMPORARY for login management
function ps_tmp_loginfn()
{
	var u = "", p = "", o;
	
	o = document.getElementById( "ps_tmp_username" );
	if( null != o ) u = o.value;
	o = document.getElementById( "ps_tmp_password" );
	if( null != o ) p = o.value;
	if( u == "" || p == "" )
	{
		alert( "Please enter a username and password to log in" );
		return;
	}
	o = document.getElementById( "ps_tmp_slogin" );
	if( null != o ) document.body.removeChild( o );	
	
	if( navigator.userAgent.match( /safari/i ))
	{	
		var uri = trackitRoot + "?callthrough=1";		
		o = document.createElement( "iframe" );
		o.id = "ps_tmp_slogin";
		o.src = uri + "&c=ps_tmp_afterlogin&r=" + Math.random() + "&u=" + u + "&p=" + p;
		document.body.appendChild( o );
		document.close();
	}
	else
	{
		o = document.createElement( "script" );
		o.id = "ps_tmp_slogin";
		o.src = "http://partners.pubsub.com/shadow_login_js.php?c=ps_tmp_afterlogin&u=" + u + "&p=" + p;
		document.body.appendChild( o );
		document.close();
	}
}

if( null != trackitToken && trackitToken != "" )
{
	// handle the case of a switch - copy subscriptions from
	// one account to the other...
	if( null != cookieToken && cookieToken != "" && cookieToken != trackitToken )
	{
		ps_cloneAccount( cookieToken, trackitToken );
	}
	cookieToken = trackitToken;
	var d = new Date();
	d.setTime(d.getTime() + 365 * 24 * 60 * 60 * 1000);		
	userdata["token"] = cookieToken;
	
	// make sure there's no random cookie token floating around
	ps_deleteCookie( "pubsub-token", "/", ps_getRootDomain() );

}
else if( null != cookieToken && cookieToken != "" )
{
	userdata[ "token" ] = cookieToken; 
}

// TEMPORARY for login management
var xo = document.getElementById( "ps_trackit_token" );
if( null != xo ) xo.innerHTML = "Token: " + userdata["token"];
	
function ps_start()
{
	// is there a subscription request in the query string?
	if( null != queryParameters['view'] )
	{
		if( queryParameters['view'].toString().match( /about/ )) ps_page_setAltContent(); 
		else ps_page_loadSubscription( queryParameters['view'] );
	}
	ps_subscriptionList( userdata['token'] );

}



