// Copyright (c) Crackle, Inc.
// All rights reserved. Unlicensed usage prohibited.

// shows a given piece of text in a <input type='text'/> field when that field is empty
function DefaultInputText (eltInput, strDefault, fPassword, eltCopyInput, strCopyDefault)
{
	if (typeof (eltInput) == "string")
		eltInput = document.getElementById (eltInput);

	if (typeof (eltCopyInput) == "string")
		eltCopyInput = document.getElementById (eltCopyInput);

	function OnBlur ()
	{
	    if(!eltInput) return;
	    
		if (trim (eltInput.value))
		{
			eltInput.className = eltInput.classNameDefault;
			if (fPassword)
				eltInput.type = "password";
			return;
		}
		eltInput.className = eltInput.classNameDefault + " defaultText";			
		eltInput.value = strDefault;			
		eltInput.fDefault = true;
		if (eltInput.tagName.toUpperCase () == "INPUT")
			eltInput.type = "text";
	}

	function OnFocus ()
	{
		if (!eltInput.fDefault)
			return;
		eltInput.value = "";
		eltInput.fDefault = false;
		eltInput.className = eltInput.classNameDefault;
		if (eltInput.tagName.toUpperCase () == "INPUT")
			if (fPassword)
				eltInput.type = "password";
				
		if(typeof (eltCopyInput) == "object" && typeof (strCopyDefault) == "string" 
			&& eltCopyInput.value != strCopyDefault && eltInput.value == "")
		{
			if(eltInput.id == "userName")
				if(eltCopyInput.value.indexOf("@") > 0)
					eltInput.value = eltCopyInput.value.substring(0, eltCopyInput.value.indexOf("@"));
				else	
					eltInput.value = "";
			else
				eltInput.value = eltCopyInput.value;
		}
	}

	function OnClick ()
	{
		if (!eltInput.fDefault)
			eltInput.select();
	}

	AttachEvent (eltInput, "blur", OnBlur);
	AttachEvent (eltInput, "focus", OnFocus);
	//AttachEvent (eltInput, "click", OnClick);
	AttachEvent (window, "unload", OnFocus);

	if(eltInput)
	{
	    eltInput._focus = OnFocus;
	    eltInput.classNameDefault = eltInput.className || "";
	}

	OnBlur();
}

// handles persisting the search textbox contents between pages
var _searchbar = new function ()
{
	this.Initialize = function ()
	{
		var strTag;
		var eltSearch = document.getElementById ('search_text');
		if (!eltSearch)
			return;

		eltSearch.value = "";

		var strSearch = getCookie ('sch');
		var qs = ParseQueryString (window.location.search)
		if (qs)
			strTag = qs ['fk'];

		if (strSearch)
		{
			strSearch = trim (strSearch.toString ());
			if (strSearch)
				eltSearch.value = strSearch;

			deleteCookie ('sch', "/");
		}
		else if((strSearch == null) && (strTag != null))
		{
			strSearch = trim (strTag.toString ());
			if (strSearch)
				eltSearch.value = decodeURIComponent (strSearch);

			deleteCookie ('sch', "/");
		}

		var eltSearchType = document.getElementById ('search_type');
		if (eltSearchType)
		{
			var strSearchType = getCookie ('scht');
			if (strSearchType)
			{
				eltSearchType.selectedIndex = strSearchType;
				deleteCookie ('scht', "/");
			}
		}
		
		DefaultInputText (eltSearch, "Search");
	}

	this.Save = function ()
	{
		var strSearch;
		
		var eltSearch = document.getElementById ('search_text');
		if (eltSearch)
		{
			strSearch = trim (eltSearch.value);
			setCookie ('sch', eltSearch.value, 30, "/");
		}
		
		if (!strSearch || strSearch == "Search")
			return false;

		var eltSearchType = document.getElementById ('search_type');
		if (eltSearchType)
			setCookie ('scht', eltSearchType.selectedIndex, 30, "/");
		location.href = "/search/" + encodeURIComponent (strSearch);
		return false;
		//return true;
	}

	this.SaveTag = function (tag)
	{
		if (!tag)
			return;
		setCookie ('sch', tag, 30, "/");
		setCookie ('scht',0, 30, "/");
		return true;
	}
}();

// handles periodic refreshing of ads
function AdElement(_strId, _strFirstLevel, _strSecondLevel, _strPage, _strAdTags, _strAdType, _strPageType)
{
    if (_strPage)
	    _strPage = _strPage.replace("%","");//247 can't handle %;
	//else _strPage = document.title;

	var _fDynamic = false;
	var _fStatic = false;
	var _eltAds;

	this.EnableDynamic = function ()
	{
		if (navigator.userAgent.indexOf ('Safari') < 0)
			_fDynamic = true;
	}

	this.IsDynamic = function ()
	{
		return _fDynamic;
	}

	this.InitializeStatic = function (strChannel, strRating, strText)
	{
		_fStatic = true;
		_fDynamic = false;
		this.RefreshAd (strChannel, strRating, strText);
	}

	this.InitializeDefault = function ()
	{
		if (_fDynamic || _fStatic)
			return;
		this.RefreshAd ();
	}

	this.SetPage = function(strPage)
	{
	    _strPage = strPage;
	}

	var _timeout = null;
	var _fFirst = true;

	var _strWordsLast = "";

	var _strChannel = "";
	var _strRating = "";

	var _fAllowRefresh = true;
	var _fAllowTimeout = true;

	this.AllowRefresh= function(fAllowRefresh)
	{
		_fAllowRefresh = fAllowRefresh;

	}

	this.AllowTimeout = function(fAllowTimeout)
	{
		_fAllowTimeout = fAllowTimeout;
	}

	this.SetAdParams = function(strChannel, strRating, strText)
	{

		_strChannel = strChannel;
		_strRating = strRating;
		_strText = strText;

		if (_fDynamic)
		{
			this.RefreshAd(strChannel, strRating, strText);
			_fDynamic = false;
		}
	}

	this.RefreshAd = function(strChannel, strRating, strText) {
	    /*var strWords = "";
	    if (strText)
	    {
	    var mapWords = new Object ();
	    var re = new RegExp ("[A-Za-z][A-Za-z]+", "g");
	    var strWord;
	    while (strWord = re.exec (strText))
	    {
	    strWord = strWord.toString ().toLowerCase ();
	    if (strWord.length > 4)
	    mapWords [strWord] = 1;
	    }

			for (strWord in mapWords)
	    {
	    strWords += strWord + ",";
	    if (strWords.length > 1000)
	    break;
	    }
	    _strWordsLast = strWords;
	    }
	    else
	    {
	    strWords = _strWordsLast;
	    }
	    */

	    if (_timeout != null)
	        clearTimeout(_timeout);

	    if (_fAllowTimeout)
	        _timeout = setTimeout(BindCall(this, this.OnTimeout), 1 * 90 * 1000);

	    if (!_fAllowRefresh)
	        return;

	    if (!_eltAds) {
	        _eltAds = document.getElementById(_strId);
	        if (!_eltAds)
	            return;
	    }

	    var strURL = "http://" + location.host + "/tracking/bannerad.ashx?a=" + encodeURIComponent(_strAdType);

	    //alert(getQueryVariable("testChannel")); 
	    if (getQueryVariable("testChannel") == null) {
	        //alert("no testChannel set, using current channel");
	    } else {
	        //alert("setting channel to " + getQueryVariable("testChannel"));
	        _strPage = getQueryVariable("testChannel");
	        //_strChannel = strChannel;
	    }

	    if (strChannel)
	        _strChannel = strChannel;
	    if (_strChannel)
	        strURL += "&c=" + encodeURIComponent(_strChannel);

	    if (strRating)
	        _strRating = strRating;
	    if (_strRating)
	        strURL += "&r=" + encodeURIComponent(_strRating);

	    /*
	    if (strText)
	    _strText = strText;
	    if (_strText)
	    strURL += "&t=" + encodeURIComponent (_strText);
	    */

        if(_strFirstLevel)
            strURL += "&f=" + encodeURIComponent(_strFirstLevel);

        if(_strSecondLevel)
            strURL += "&s=" + encodeURIComponent(_strSecondLevel);

	    if (_strPage)
	        strURL += "&p=" + encodeURIComponent(_strPage);
	        
	    if (_strAdTags)
	        strURL += "&at=" + encodeURIComponent(_strAdTags);
	    
	    if (_strPageType)
	        strURL += "&pt=" + encodeURIComponent(_strPageType);
	     
	     if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)))
	        strURL += "&ua=iphone";

	    /*if (_fFirst)
	    {
	    strQuery += "f";
	    _fFirst = false;
	    }

		strQuery += new Date().getTime();
	    if (strWords)
	    strQuery += "#" + strWords;
	    */

	    setTimeout(
			function() {
			    try {
			        _eltAds.innerHTML = "<iframe id='ad" + _strAdType + "' frameborder='0' scrolling='no' marginheight='0' marginwidth='0' src='" + strURL + "' />";
			        //_eltAds.contentWindow.location.href = strURL;
			        //_eltAds.contentWindow.navigate (strURL);

			        //alert("utils _eltAds.innerHTML is set to " + _eltAds.innerHTML);
			        //var adIframe = document.getElementById("ad" + _strAdType);
			        //alert("adIframe is " + adIframe);
			        //var doc = adIframe.contentDocument;



			    }
			    catch (error) {
			        // just catch it

			        //alert("caught exception");
			    }

			    if (_strAdType == "Top") {
			        setTimeout(showHideTopBanner, 2500);
			    }
			},
			10
		);
	}

	this.OnTimeout = function ()
	{
		if (_timeout)
		{
			clearTimeout (_timeout);
			_timeout = null;
		}

		/*if (_strWordsLast != null)
		{
			var ichComma = _strWordsLast.indexOf (',');
			if (ichComma >= 0)
				_strWordsLast = _strWordsLast.substr (ichComma + 1);
		}
		*/
		if (_fAllowTimeout)
			this.RefreshAd ();
	}
}

function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
    return null;
    //alert('Query Variable ' + variable + ' not found');
}

/*
if (!window.XMLHttpRequest) XMLHttpRequest = function()
{
	try{ return new ActiveXObject("Msxml2.XMLHTTP.6.0") }catch(e){}
	try{ return new ActiveXObject("Msxml2.XMLHTTP.3.0") }catch(e){}
	try{ return new ActiveXObject("Msxml2.XMLHTTP") }catch(e){}
	try{ return new ActiveXObject("Microsoft.XMLHTTP") }catch(e){}
	throw new Error("Could not find an XMLHttpRequest alternative.")
};


function MyXMLHttpRequest (onload)
{
	var req = new XMLHttpRequest ();
	var _url;

	function NULL () {}
	
	req.onreadystatechange = function ()
	{
		if (req.readyState == 4)
		{
			req.onreadystatechange = NULL;
			onload ((req.status >= 400) ? null : req, _url);
		}
	};
	
	this.sendAsync = function (body)
	{
		setTimeout (function () { req.send (body || null); }, 1);
	}
	
	this.get = function (url)
	{
		_url = url;
		req.open ("GET", url, true);
		this.sendAsync ();
	}
	
	this.post = function (url, mapParams)
	{
		var strParams = "";
		for (var key in mapParams)
		{
			var value = mapParams [key];
			//if (value == null || value == "")
			//	continue;
				
			if (strParams)
				strParams += "&";
				
			strParams += key + "=" + encodeURIComponent (value || "");
		}

		_url = url;
		req.open ("POST", url, true);
		req.setRequestHeader ("Content-type", "application/x-www-form-urlencoded");
		this.sendAsync (strParams);
	}
}
*/
function showHideTopBanner() {

    //
    var adHeaderDiv = document.getElementById("adHeader");
    var mainTopDiv = document.getElementById("mainTop");;
    //alert("adHeaderDiv.innerHTML is " + adHeaderDiv.innerHTML + " length is " + adHeaderDiv.innerHTML.length);
    if (adHeaderDiv.innerHTML.length < 250) {
        //alert("Hiding top ad");
        // hiding
        adHeaderDiv.style.display = 'none';
        mainTopDiv.style.height = "387px";
    } else {
        //alert("Showing top ad");
        // showing
        mainTopDiv.style.height = "417px";        
        adHeaderDiv.style.display = 'block';

    }
}


function LoadXML (url, onload)
{
	var req = new MyXMLHttpRequest (onload);
	req.get (url);
}


var _eltDebug;
function Debug (s)
{
	if (!_eltDebug)
	{
		_eltDebug = document.createElement ("div");
		_eltDebug.id = "debug";
		document.body.appendChild (_eltDebug); 
	}
	_eltDebug.innerHTML += "<p>" + s + "</p>";
}

function trim (str)
{
	if (!str) return str;
	return str.replace(/^\s*|\s*$/g,"");	// trim
}

function IsValidEmail (str)
{
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return filter.test(str);
}

function GetOffsets (elt)
{
	var offsets = new Point (-document.body.offsetLeft, -document.body.offsetTop);
	while (elt)
	{
		offsets.Add2 (elt.offsetLeft, elt.offsetTop);
		elt = elt.offsetParent;
	}
	return offsets;
}

function GetEventOffsets (evt)
{
	if (document.all)
	{
		var target = GetTarget (evt);
		var offsets = GetOffsets (target);
		offsets.Add2 (evt.offsetX, evt.offsetY);
		return offsets;
	}
	else
	{
		return new Point (evt.pageX, evt.pageY);
	}
}

function GetEventOffsetsFrom (evt, elt)
{
	var offsets = GetEventOffsets (evt);
	offsets.Sub (GetOffsets (elt));
	
	return offsets;
}

function GetTarget (evt)
{
	if (!evt) evt = window.event;
	if (!evt) return null;
	var target = evt.target ? evt.target : evt.srcElement;
	if (target.nodeType == 3)
		return target.parentNode;
	return target;
}


function Point (x, y)
{
	this.x = x || 0;
	this.y = y || 0;

	this.Add = function (pt)
	{
		this.x += pt.x;
		this.y += pt.y;
	}

	this.Sub = function (pt)
	{
		this.x -= pt.x;
		this.y -= pt.y;
	}

	this.Add2 = function (x, y)
	{
		this.x += x;
		this.y += y;
	}
	
	this.toString = function ()
	{
		return "("+this.x+","+this.y+")";
	}
}


function insertAfter (eltParent, eltNew, eltAfter)
{
	if (!eltAfter)
		eltParent.insertBefore (eltNew, eltParent.firstChild);
	else if (eltAfter.parentNode == eltParent)
		eltParent.insertBefore (eltNew, eltAfter.nextSibling);
	else
		alert ('invalid parent');
}

function BindEvent (elt, handler)
{
	return function (e) { return handler.call (elt, e || window.event); }
}

// currying
function BindCall (obj, handler)
{
	var rgArgs = new Array ();
	for (var iArg = 2; iArg < arguments.length; iArg ++)
		rgArgs.push (arguments [iArg]);
	var cArgs = rgArgs.length;
		
	return function ()
	{
		rgArgs.length = cArgs;
		for (var iArg = 0; iArg < arguments.length; iArg ++)
			rgArgs.push (arguments [iArg]);
		return handler.apply (obj, rgArgs);
	}
}


function CancelEvent (evt)
{
	if (evt)
	{
		evt.cancelBubble = true;
		if (evt.stopPropagation) evt.stopPropagation();
	}
}



function GetEvent (evt)
{
	if (evt) return evt;
	var wnd = window;
	while (wnd && !wnd.event)
	{
		var wndParent = wnd.parent;
		if (wnd == wndParent)
			break;
		wnd = wndParent;
	}
	if (wnd)
		return wnd.event;
	return null;
}


// initiate an 'ajax' call
function DoAjax (strURL, callback, callbackError)
{
	var eltFrame = document.createElement ("iframe");
	
	// remember the callback functions for later
	eltFrame.callback = callback;
	eltFrame.callbackError = callbackError;
	
	// load the iframe
	eltFrame.fRemove = true;	// by default, we remove the iframe after the call
	//eltFrame.style.display = "none";
	eltFrame.style.position = "absolute";
	eltFrame.style.visibility = "hidden";
	document.body.appendChild (eltFrame);
	eltFrame.src = strURL;
}

// the ajax success callback
function HandleAjaxCallback (wnd)
{
	// get the frame
	var frame = GetFrameElement (wnd);
	if (!frame) return;
	
	// get the callback function
	var callback = frame.callback;
	
	// cleanup
	frame.callback = null;
	frame.callbackError = null;
	if (!callback) return;
	
	// push any additional arguments
	var args = new Array ();
	for (var i = 1; i < arguments.length; i ++)
		args.push (arguments [i]);

	// call the callback
	callback.apply(this, args);
	
	// remove the frame, if necessary
	if (frame.fRemove)
		document.body.removeChild (frame);
}

// the ajax error callback
function HandleAjaxError (wnd)
{
	var frame = GetFrameElement (wnd);
	if (!frame) return;
	var callback = frame.callbackError;
	frame.callback = null;
	frame.callbackError = null;
	if (!callback) return;
	
	var args = new Array ();
	for (var i = 1; i < arguments.length; i ++)
		args.push (arguments [i]);

	callback.apply (this, args);
	if (frame.fRemove)
		document.body.removeChild (frame);
}

// find the frame element for a given window
function GetFrameElement (wnd)
{
	if (!wnd) return null;
	var elt = wnd.frameElement;
	if (elt) return elt;

	var rgFrames = window.frames;
	for (var i = 0; i < rgFrames.length; i ++)
	{
		var frame = rgFrames [i];
		var wndFrame = frame.contentWindow;
		if (wndFrame == wnd)
			return frame;
	}
	return null;
}

// break/decode a query string into its component key/value pairs
function ParseQueryString (strQuery)
{
    //var map = [];
    //don't use associative arrays, switching to object instead
    var map = new Object();
	if (!strQuery)
		return map;

	var ch = strQuery.charAt (0);
	if (ch == '?' || ch == '#')
		strQuery = strQuery.substring (1);

	var rgPairs = strQuery.split ('&');
	var cPairs = rgPairs.length;
	for (var i = 0; i < cPairs; i ++)
	{
		var strPair = rgPairs [i];
		var ichEq = strPair.indexOf ('=');
		if (ichEq > 0)
		{
			var key = strPair.substr (0, ichEq);
			var val = strPair.substr (ichEq + 1);
			map [key] = decodeURIComponent (val);
		}
	}
	return map;
}

// build/encode a query string from a set of key/value pairs
function BuildQueryString(qs)
{
	var str = null;
	for (var i in qs)
	{
		if (str)
			str += "&";
		else
			str = "";

		str += i + "=" + encodeURIComponent(qs[i]);
	}
	return str;
}


function GetQueryFromAfterPound (strQuery)
{
	if (strQuery.length == 0)
		return;
	var ich = strQuery.indexOf ('#');
	if (ich < 0)
		ich = strQuery.indexOf ('?');
	if (ich < 0)
		return "";
	return strQuery.substring (ich + 1);
}

// get some info about the version of the browser we're running on
var _version = new function ()
{
	this.IsIE = navigator.appVersion.indexOf ("MSIE") >= 0;
	this.IsSafari = navigator.userAgent.indexOf ('Safari') >= 0;
	this.IsWindows = navigator.appVersion.indexOf ('Windows') >= 0;
	this.IsMac = navigator.appVersion.indexOf ('Mac') >= 0;
	
	this.Version = 0.0;
	
	if (this.IsIE)
		this.Version = parseFloat (navigator.appVersion.split("MSIE") [1]);
}();

// get a cookie
function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

// set a cookie
function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}

// delete a cookie
function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


// browser-neutral helper functions:

function AttachEvent (elt, strEvent, fnEvent)
{
	if (!elt) return;
	if (elt.addEventListener)
		elt.addEventListener (strEvent, fnEvent, false);
	else if (elt.attachEvent)
		elt.attachEvent ('on' + strEvent, fnEvent);
}

function DetachEvent (elt, strEvent, fnEvent)
{
	if (!elt) return;
	if (elt.removeEventListener)
		elt.removeEventListener (strEvent, fnEvent, false);
	else if (elt.attachEvent)
		elt.detachEvent ('on' + strEvent, fnEvent);
}

function FireEvent (elt, strEvent)
{
	if (elt.fireEvent)
	{
		elt.fireEvent ('on' + strEvent);
	}
	else if (document.createEvent) 
	{
		var evt = document.createEvent ('MouseEvents');
		evt.initEvent (strEvent, true, false);
		elt.dispatchEvent (evt);
	}
}

function InnerText (elt, str)
{
	if (!elt) return;
	try
	{
	if (document.all)
		elt.innerText = str;
	else
		elt.textContent = str;
	}
	catch (e)
	{}
}

function InnerHTML (elt, str)
{
	if (!elt) return;
	try
	{
		elt.innerHTML = str;
	}
	catch (e)
	{}
}

function CallFunction (fn)
{
	if (!fn) return;
	
	if (typeof (fn) == "function")
		return fn ();
		
	if (typeof (fn) == "string")
		return eval (fn);
}

// format a number with commas
function AddCommas(number)
{
	var str = "";
	while (number > 1000)
	{
		var part = '' + (number % 1000);
		str = ",000".substr (0, 4 - part.length) + part + str;
		number = Math.floor (number / 1000);
	}
	return '' + Math.floor (number) + str;
}

// findsa child element with a given 'name' attribute
function FindChildByName (elt, strName)
{
	for (var child = elt.firstChild; child; child = child.nextSibling)
	{
		if (child.getAttribute && child.getAttribute ('name') == strName)
			return child;
		var found = FindChildByName (child, strName);
		if (found) return found;
	}
	return null;
}

// tests if eltChild is within the tree below eltParent
function IsParentOf (eltParent, eltChild)
{
	if (!eltParent)
		return false;
	
	while (eltChild)
	{
		if (eltChild == eltParent)
			return true;
			
		eltChild = eltChild.parentNode;
	}
	
	return false;
}

function SetCampaignCookiesAndLogUniques (campaignId)
{
	if (getCookie ("scmp")) //only do tracking once per session
		return;
		
	var expdate = new Date();
	expdate.setFullYear (expdate.getFullYear () + 10);

	var permCampaign = getCookie ("pcmp");
	
	// Convert old style campaigns
	if (permCampaign != null && permCampaign.indexOf ('=') < 0)
	{
		nPermCampaign = parseInt(permCampaign);
		if (nPermCampaign >= 0)
			permCampaign = "cmpid=" + nPermCampaign;
	}
	
	ck = ParseQueryString (permCampaign);
	
	if (permCampaign == null || campaignId > 0)
	{
		ck ["cmpid"] = campaignId;
		permCampaign = BuildQueryString (ck);
		setCookie("scmp", permCampaign, null, "/", ".crackle.com");
		setCookie("pcmp", permCampaign, (365*10), "/", ".crackle.com");
		LogGenericTracking("cmpid=" + campaignId + "&return=0");
	}
	else
	{	
		permCampaign = BuildQueryString (ck);
		setCookie("scmp", -1, null, "/", ".crackle.com");
		setCookie("pcmp", permCampaign, (365*10), "/", ".crackle.com");
		LogGenericTracking("cmpid=" + ck ["cmpid"] + "&return=1");
	}
}

function LogGenericTracking(params)
{
	var trackImage = new Image(1,1);
	trackImage.src= "/tracking/pixel.gif?cachebust=" + Math.floor(Math.random() * 1000000) + "&" + params;	
}

function ScrollToVertical (elt, duration)
{
	if (!duration)
		duration = 1000;
		
	var top = elt.offsetTop;
	var bottom = top + elt.offsetHeight;
	
	var parent = elt.parentNode;
	var topParent = parent.scrollTop;
	var heightParent = parent.offsetHeight;
	
	if (top < topParent)
	{
		new Tween (
			duration,
			topParent, top,
			Tween_evaluate (
				Tween_easeOut,
				function (value)
				{
					parent.scrollTop = value;
				}
			)
		);
	}
	else if (bottom > topParent + heightParent)
	{
		new Tween (
			duration,
			topParent, bottom - heightParent,
			Tween_evaluate (
				Tween_easeOut,
				function (value)
				{
					parent.scrollTop = value;
				}
			)
		);
	}
}

function GetViewportScrollY ()
{
    if (document.documentElement && document.documentElement.scrollTop)
        return document.documentElement.scrollTop;
    else if (document.body && document.body.scrollTop)
        return document.body.scrollTop;
    else if (window.pageYOffset)
        return window.pageYOffset;
    else if (window.scrollY)
        return window.scrollY;

	return 0;
}


function GetViewportWidth()
{
    if (document.documentElement && document.documentElement.clientWidth)
        return document.documentElement.clientWidth;
    else if (document.body && document.body.clientWidth)
        return document.body.clientWidth;
    else if (window.innerWidth)
        return window.innerWidth - 18;
        
    return 0;
}

function GetViewportHeight ()
{
    if (document.documentElement && document.documentElement.clientHeight)
        return document.documentElement.clientHeight;
    else if (document.body && document.body.clientHeight)
        return document.body.clientHeight;
    else if (window.innerHeight)
        return window.innerHeight - 18;

	return 0;
}


function ScrollBodyToVertical (elt, height, duration)
{
	if (!duration)
		duration = 1000;
		
	var offsets = GetOffsets (elt);
	
	var top = offsets.y;
	var bottom = top + (height || elt.offsetHeight);
	
	var topParent = GetViewportScrollY ();
	var heightParent = GetViewportHeight ();
	
	if (topParent > top)
	{
		new Tween (
			duration,
			topParent, top,
			Tween_evaluate (
				Tween_easeOut,
				function (value)
				{
					window.scrollTo (0, value);
				}
			)
		);
	}
	else if (topParent < bottom - heightParent)
	{
		new Tween (
			duration,
			topParent, Math.min (top, bottom - heightParent),
			Tween_evaluate (
				Tween_easeOut,
				function (value)
				{
					window.scrollTo (0, value);
				}
			)
		);
	}
}

function BookmarkURL (url, title)
{
	try
	{
		window.external.AddFavorite(url,title);
		return false;
	}
	catch (err) {}

	try
	{
		window.sidebar.addPanel(title,url,"")
		return false;
	}
	catch (err) {}
	
	//backup message.
	try
	{
		var strShortcut = 'CTRL-D';
		
		if (_version.IsMac)
			strShortcut = 'CMD-D';
		
		alert("Press " + strShortcut + " to bookmark this page.");
		return false;
	}
	catch (err) {}
	
	return false;
}

function StartsWith (str, strPrefix)
{
	var cchPrefix = strPrefix.length;
	if (cchPrefix > str.length)
		return false;
	
	return str.substr (0, cchPrefix) == strPrefix;
}


function HasClass (elt, strClass)
{
	var rgParts = elt.className.split (' ');
	for (var iPart = rgParts.length - 1; iPart >= 0; iPart --)
	{
		var str = rgParts [iPart];
		if (str == strClass)
			return true;
	}
	return false;
}

function AddClass (elt, strClass)
{
	if (!elt)
		return;
	if (!elt.className)
		elt.className = strClass;
	else if (!HasClass (elt, strClass))
		elt.className = elt.className + " " + strClass;
}

function RemoveClass (elt, strClass)
{
	if (!elt)
		return;
	var strClassOrig = elt.className;
	var strNew = "";
	var rgParts = elt.className.split (' ');
	for (var iPart = rgParts.length - 1; iPart >= 0; iPart --)
	{
		var str = rgParts [iPart];
		if (str != strClass)
		{
			if (strNew)
				strNew += " ";
			strNew += str;
		}
	}
	if (strClassOrig != strNew)
		elt.className = strNew;
		
	// make IE update CSS for unselected item
	//elt.innerHTML = elt.innerHTML;
}

function SetClass (elt, strClass, fPresent)
{
	if (!elt)
		return;
	var fHasClass = HasClass (elt, strClass);
	if (fPresent && !fHasClass)
		AddClass (elt, strClass);
	else if (!fPresent && fHasClass)
		RemoveClass (elt, strClass);
}

function SetClassOption (elt, strClass, strOption)
{
	if (!elt)
		return;
	var strClassOrig = elt.className;
	var strNew = "";
	var strPrefix = strClass + "_";
	var rgParts = strClassOrig.split (' ');
	for (var iPart = rgParts.length - 1; iPart >= 0; iPart --)
	{
		var str = rgParts [iPart];
		if (!StartsWith (str, strPrefix))
		{
			if (strNew)
				strNew += " ";
			strNew += str;
		}
	}
	
	if (strOption)
	{
		if (strNew)
			strNew += " ";
		strNew += strPrefix + strOption;
	}
	
	if (strClassOrig != strNew)
		elt.className = strNew;
}

function ClearFocus ()
{
	return;
	document.body.focus ();
	document.body.blur ();
}


function SelectItem (elt, fDeselect)
{
	for (var eltItem = elt.parentNode.firstChild; eltItem; eltItem = eltItem.nextSibling)
	{
		if (!eltItem.tagName /* || eltItem.tagName.toUpperCase () != "LI"*/)
			continue;
		
		SetClass (eltItem, "selectedItem", (eltItem == elt) && !fDeselect);
	}
}


    	
	    function pad(str)
	    {
		    str +="";
		    if(str.length == 1)
			    str = "0" + str;
		    return str;
	    }
    		
	    function doDateCheck(element)
	    {
		   
		   
		   var dateArray = new Array;
	        dateArray[0] = 0;
	        dateArray[1] = 31;
	        dateArray[2] = 28;
	        dateArray[3] = 31;
	        dateArray[4] = 30;
	        dateArray[5] = 31;
	        dateArray[6] = 30;
	        dateArray[7] = 31;
	        dateArray[8] = 31;
	        dateArray[9] = 30;
	        dateArray[10] = 31;
	        dateArray[11] = 30;
	        dateArray[12] = 31; 
	        
	        var childrenNodes = element.childNodes;
	        var monthNode;
	        var dayNode;
	        var yearNode;
		   for(var i = 0; i < childrenNodes.length; i++)
		   {
		        switch(childrenNodes.item(i).id)
		        {
		            case "month":
		                monthNode = childrenNodes.item(i);
		                break;
		            case "year":
		                yearNode = childrenNodes.item(i);
		                break;
		            case "day":
		                dayNode = childrenNodes.item(i);
		                break;
		        }
		   }
		   
		   var currentDay = dayNode.selectedIndex;
		   
		    dayNode.innerHTML = "";
		    dayNode.options[0] = new Option('Day', 'none')
		   // var dateString = '<option value=\"none\">Day</option>';
		    var numDays = dateArray[monthNode.selectedIndex];
    		
		    
    		
		    var daysToAdd = 0;
		    if(numDays == 28)
		    {
			    year=parseInt(yearNode[yearNode.selectedIndex].value);
			    if(yearNode[yearNode.selectedIndex].value != "none")
			    {
				    if (year % 4 != 0 )
				    {
					    daysToAdd=0;
				    }
				    else 
				    {
					    daysToAdd=1;
				    }
			    }
    			
		    }
		    numDays += daysToAdd;
    		
		    for(i = 1; i <= numDays; i++)
		    {
			    if(currentDay == i)
			    {
				    dayNode.options[i] = new Option(i, pad(i));
				    dayNode.options[i].selected = true;
				    //dateString += "<option value=\"" + pad(i) + "\" selected>" + i + "</option>\n";
			    }
			    else
			    {
			        dayNode.options[i] = new Option(i, pad(i));
				    //dateString += "<option value=\"" + pad(i) + "\">" + i + "</option>\n";
			    }
    			
		    }
		   // alert("DateString:\n" + dateString);
		   // alert("Current Day:\n" + dayNode.innerHTML);
		    //dayNode.innerHTML = dateString;
		   // alert("After Set:\n" + dayNode.innerHTML);
	    }

	    function createCookie(name, value, days) {
	        if (days) {
	            var date = new Date();
	            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
	            var expires = "; expires=" + date.toGMTString();
	        }
	        else var expires = "";
	        document.cookie = name + "=" + value + expires + "; path=/; domain=.crackle.com";
	    }

	    function readCookie(name) {
	        var nameEQ = name + "=";
	        var ca = document.cookie.split(';');
	        for (var i = 0; i < ca.length; i++) {
	            var c = ca[i];
	            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
	            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	        }
	        return null;
	    }

	    function eraseCookie(name) {
	        createCookie(name, "", -1);
	    }