/*
Script Name: Javascript Cookie Script
Author: Public Domain, with some modifications
Script Source URI: http://techpatterns.com/downloads/javascript_cookies.php
Version 1.0.0
Last Update: 30 May 2004

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
*/

// this function gets the cookie, if it exists
function Get_Cookie( 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 ) );
}

/*
only the first 2 parameters are required, the cookie name, the cookie
value. Cookie time is in milliseconds, so the below expires will make the 
number you pass in the Set_Cookie function call the number of days the cookie
lasts, if you want it to be hours or minutes, just get rid of 24 and 60.

Generally you don't need to worry about domain, path or secure for most applications
so unless you need that, leave those parameters blank in the function call.
*/
function Set_Cookie( name, value, expires, path, domain, secure ) {
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );
	// if the expires variable is set, make the correct expires time, the
	// current script below will set it for x number of days, to make it
	// for hours, delete * 24, for minutes, delete * 60 * 24
	if ( expires )
	{
		expires = expires * 1000 * 60 * 60 * 24;
	}
	//alert( 'today ' + today.toGMTString() );// this is for testing purpose only
	var expires_date = new Date( today.getTime() + (expires) );
	//alert('expires ' + expires_date.toGMTString());// this is for testing purposes only

	document.cookie = name + "=" +escape( value ) +
		( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + //expires.toGMTString()
		( ( path ) ? ";path=" + path : "" ) + 
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
}

// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
	if ( Get_Cookie( name ) ) document.cookie = name + "=" +
			( ( path ) ? ";path=" + path : "") +
			( ( domain ) ? ";domain=" + domain : "" ) +
			";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}function myAccordionView(containerid, myInp, clickCallBack, blogtitle, titleDivID) {
    this.containerid = null; // div with id = entries.
	this.myOpenEntry=null;
	this.containerelem=null;
    this.totalChildren=null;
	this.idpref=null;
	this.clickCallBack = null;
	this.blogtitle = null;
	this.titleDivID = null;
	this.addEntry = function(oneEntry)
	{
//When all stories are played guid is not passed.
		if (!oneEntry.guid){oneEntry.guid= Math.random()*100;}
		var eguid = 'http://guid.blogbard.com/' + escape(oneEntry.guid);
		oneEntry.guid = eguid;
		this.storiesHash[oneEntry.guid] = oneEntry;
		var pardiv = document.createElement('div');
		pardiv.id = this.idpref +this.totalChildren;
		this.totalChildren++;
		var hdiv = document.createElement('div');
		var bdiv = document.createElement('div');
		pardiv.appendChild(hdiv);
		pardiv.appendChild(bdiv);
		hdiv.innerHTML  = oneEntry.t;
		var guiddiv=document.createElement('div');
		YAHOO.util.Dom.addClass(guiddiv,"myacc-guid" );
		var guidanchor = document.createElement('A');
		YAHOO.util.Dom.addClass(guidanchor,"myacc-guidanchor" );
		guidanchor.setAttribute('href', oneEntry.guid);
		guiddiv.appendChild(guidanchor);
		hdiv.appendChild(guiddiv);
		// Do not add the body when you add the entry to prevent IE from loading everything.
		// The body is available in storiesHash.
	//	if (oneEntry.b != null) {bdiv.innerHTML = oneEntry.b}
		if (oneEntry.fulldata)
		{
			YAHOO.util.Dom.addClass(pardiv,"myfulldata" );
		}
		YAHOO.util.Dom.addClass(hdiv,"myhd" );
		YAHOO.util.Dom.addClass(bdiv,"mybd" );
		YAHOO.util.Dom.addClass(pardiv,"myaccentry" );
		this.containerelem.appendChild(pardiv);
	}
    
	this.closeAndScroll = function (myparent)
	{
		YAHOO.log('closeAndScroll called ' + this.containerelem.scrollTop);
		var oldScrollTop = this.containerelem.scrollTop;
		var bdr = YAHOO.util.Dom.getRegion(myparent);
		var cdr = YAHOO.util.Dom.getRegion(this.containerelem);
		var newScrollTop = bdr.top -cdr.top +this.containerelem.scrollTop;
		YAHOO.log('closeAndScroll xx called' + this.containerelem.scrollTop);
		var x = YAHOO.util.Dom.getElementsByClassName('mybd',null, myparent)
		if (x.length) {
			YAHOO.log('reached in closing');
			YAHOO.util.Dom.setStyle(x[0], 'display', 'none');
		}
		else{
			YAHOO.log('FAILED reached in closing');
		}
		this.containerelem.scrollTop = newScrollTop;
		return;
	}
	this.openAndScroll = function (myparent)
	{
		var bddiv  = null;
		var hdr = YAHOO.util.Dom.getElementsByClassName('myhd',null, myparent);
		if(!hdr.length){alert("Header not found!"); return;}
		var anchor = YAHOO.util.Dom.getElementsByClassName('myacc-guidanchor',null, hdr[0]);
		if (!anchor.length){alert("internal error"); return;}
		var guid = anchor[0].href;

		var x = YAHOO.util.Dom.getElementsByClassName('mybd',null, myparent)
		if (!x.length){return;}
		bddiv =x[0];
		YAHOO.util.Dom.setStyle(bddiv, 'display', 'block');
		if(!YAHOO.util.Dom.hasClass(bddiv, 'myacc-loaded')) {
			YAHOO.util.Dom.addClass(bddiv, 'myacc-loaded');
			bddiv.innerHTML = this.storiesHash[guid].b;
		}
		var oldScrollTop = this.containerelem.scrollTop;
		this.containerelem.scrollTop = oldScrollTop;
		var bdr = YAHOO.util.Dom.getRegion(myparent);
		var cdr = YAHOO.util.Dom.getRegion(this.containerelem);
		if (bdr.top >= cdr.top && bdr.top <= cdr.bottom &&
			bdr.bottom <= cdr.bottom)
		{
			YAHOO.log('Hurray nothing needs to be done');
			return;
		}
		YAHOO.log(oldScrollTop + ' nw='+ this.containerelem.scrollTop);
		var bdheight = bdr.bottom-bdr.top;
		var containerheight=cdr.bottom-cdr.top;
		var newScrollTop=null;
		if (containerheight >= bdheight)
		{

			newScrollTop = this.containerelem.scrollTop + (bdr.bottom - cdr.bottom);

			YAHOO.log('Hurray moved '+ newScrollTop + ' ' + (bdr.bottom - cdr.bottom ));
		}
		else
		{
			newScrollTop = bdr.top -cdr.top +this.containerelem.scrollTop;
			YAHOO.log('Hurray moved to top '+ newScrollTop);
			YAHOO.log(bdr + cdr);
		}
		YAHOO.log(newScrollTop);
		this.containerelem.scrollTop = newScrollTop;
		return;
	}

	this.clickHandler = function (e, f) {
		//get the resolved (non-text node) target:
		var elTarget;
		if (e == null)
		{
			elTarget = f;
		}
		else
		{
			elTarget = YAHOO.util.Event.getTarget(e);	
		}
		//walk up the DOM tree looking for an <li>
		//in the target's ancestry; desist when you
		//reach the container div
		var hrefClicked=null;
		while (elTarget.id != this.containerid) {
			if(YAHOO.util.Dom.hasClass(elTarget, 'myhd'))
			{
				var myparent = elTarget.parentNode;
				if (myparent == null){ return;}
				if (myparent == this.myOpenEntry)
				{
					var x = YAHOO.util.Dom.getElementsByClassName('mybd',null, this.myOpenEntry);
					if (x.length){
						var disp = YAHOO.util.Dom.getStyle(x[0], 'display');
						if (disp.toUpperCase() == 'NONE') { disp = 'block'; } else { disp = 'none'}
						if (disp == 'block')
						{
							this.openAndScroll(myparent);
						}
						else
						{
							this.closeAndScroll(myparent);
						}
					}
				}
				else
				{
					if (this.myOpenEntry != null)
					{
						var x = YAHOO.util.Dom.getElementsByClassName('mybd',null, this.myOpenEntry)
						if (x.length){
							this.closeAndScroll(this.myOpenEntry);
						}

					}
					var x = YAHOO.util.Dom.getElementsByClassName('mybd',null, myparent)
					if (x.length){
						this.openAndScroll(myparent);
					//YAHOO.util.Dom.setStyle(x[0], 'display', 'block');  YAHOO.util.Dom.setStyle(x[0], 'visible', 'true');  
					}

				}
				if (e != null)
				{ // Actual Click Event.
					if (this.clickCallBack)
					{
						var prevstory = -1;
						var currentstory;
						if ( this.myOpenEntry != null)
						{
							var divid = this.myOpenEntry.id;
							prevstory = divid.substring(this.idpref.length, divid.length );
							//get the ID and storynum from there.
						}
						var newdivid = myparent.id;
						currentstory = newdivid.substring(this.idpref.length, newdivid.length );
					}
					this.clickCallBack(currentstory, prevstory);
				}
				this.myOpenEntry = myparent;
				break;
			}
			else {
				if(YAHOO.util.Dom.hasClass(elTarget, 'mybd')) {
					break;
				}
				if(elTarget.nodeName.toUpperCase() == "A"){
					hrefClicked=elTarget; if (hrefClicked.target != "_blank"){hrefClicked.target="_blank";} 
				}
				//wasn't the container, but wasn't an li; so
				//let's step up the DOM and keep looking:
				elTarget = elTarget.parentNode;
			}
		}
	}
	this.setCorrectHeight = function(e) {
		var vpheiht = YAHOO.util.Dom.getViewportHeight();
		var bdr = YAHOO.util.Dom.getRegion(this.containerid);
		var divheight=vpheiht-bdr.top -20;
        if (divheight <= 0){divheight = 200}
         YAHOO.util.Dom.setStyle( this.containerid, 'height', ''+divheight+'px');
	};
	this.setTitle = function(blogtitle, titleDivID) {
		
		if (titleDivID|| this.titleDivID ) {
			var titleelem=null;
			if (titleDivID) {
				titleelem = YAHOO.util.Dom.get(titleDivID);
			} else {
				titleelem = YAHOO.util.Dom.get(this.titleDivID);
			}
			if (!titleelem){return false;}
			this.titleelem = titleelem;
			if(this.titleelem) {
				if (!YAHOO.util.Dom.hasClass(this.titleelem, 'mytheblogtitle'))
				{
					YAHOO.util.Dom.addClass(this.titleelem, 'mytheblogtitle');
				}
				this.titleelem.innerHTML = blogtitle;
				this.blogtitle=blogtitle;
			}
		}
	};
    this.init= function(containerid,myInp, fn, blogtitle, titleDivID) {
		this.containerid = containerid;
		this.containerelem = YAHOO.util.Dom.get(this.containerid);
		this.totalChildren=0;
		this.idpref = "myaccid_";
		this.clickCallBack=clickCallBack;
		this.blogtitle=blogtitle;
		this.titleDivID = titleDivID;
		this.storiesHash = null;
        if(!this.containerelem) return false;
		this.setTitle(blogtitle);
		if (!YAHOO.util.Dom.hasClass(this.containerelem, 'myaccentries'))
		{
			YAHOO.util.Dom.addClass(this.containerelem, 'myaccentries');
		} 
		if (myInp){this.createNewBlogEntries(myInp);}
		YAHOO.util.Event.on(this.containerid, "click", this.clickHandler, this, true);
		this.setCorrectHeight();
		YAHOO.util.Event.on(window, "resize", this.setCorrectHeight, this, true);
    };
	this.openStory = function(storyNum) {
		if (storyNum == null || storyNum >=this.totalChildren)
		{
			return false;
		}
		var pardiv = document.getElementById( this.idpref  + storyNum);
		if (!pardiv){return false;}
		var x = YAHOO.util.Dom.getElementsByClassName('myhd',null, pardiv)
		this.clickHandler(null, x[0]);
		return true;
	};
//The input is {stories:[list of title/body ], guids:[list of guids], other parameter.
// This is the format of speakfeed_itemfetch.
    this.createNewBlogEntries= function(myInp) {
		this.containerelem.innerHTML = '';
		this.storiesHash = new Array();
		this.totalChildren=0;
		if (!myInp){return ;}
		for (var i=0; i < myInp.stories.length; i++)
		{
			this.addEntry({ "t":myInp.stories[i].t, "b":myInp.stories[i].b, "guid": myInp.guids[i]});
		}
    };
    this.init(containerid, myInp, clickCallBack,blogtitle);
	
};
//attach clickHandler as a listener for any click on
//the container div:
	
function myBlogList(containerid, readertype, hdr, feeds, clickCallBack) {
    this.containerid = null; // div with id = entries.
	this.containerelem=null;
    this.totalChildren=null;
	this.hdr=null;
	this.clickCallBack = null;

	this.addEntry = function(title, xmlurl, subid, select)
	{
		if (subid == null){subid='';}
		this.feeds.push({"t":title, "xml":xmlurl, "subid" : subid });
		var entryObj = myBlogList.createEntryHelper(this.readertype, title, xmlurl,subid);
		this.containerelem.appendChild(entryObj);
		this.feeds[this.feeds.length-1]['obj'] = entryObj;
		if (select)
		{
			var anchorlist = YAHOO.util.Dom.getElementsByClassName("mybloglist-link" , "A" , entryObj);
			for( var i = 0; i < anchorlist.length; i ++)
			{
				var aobj=anchorlist[i];
				if (!YAHOO.util.Dom.hasClass(aobj, "mybloglist-dellink"))
				{
					this.clickHandler(null, aobj);
					break;
				}
			}
		}
	}
	this.playXmlUrl = function(xmlUrl, subid, addIfReq, optTitle, optSelect)
	{
		//if (!this.feeds.length){return false;}
		for (var i = 0; i < this.feeds.length; i++)
		{
			if (this.feeds[i].xml == xmlUrl) {
				break;
			}
		}
		if ( i < this.feeds.length) {
			var anchorlist = YAHOO.util.Dom.getElementsByClassName("mybloglist-link" , "A" , this.feeds[i].obj);
			for( var i = 0; i < anchorlist.length; i ++)
			{
				var aobj=anchorlist[i];
				if (!YAHOO.util.Dom.hasClass(aobj, "mybloglist-dellink"))
				{
					this.clickHandler(null, aobj);
					return true;
				}
			}
		}
		else if (addIfReq) {
			if (!optTitle){optTitle = xmlUrl;}
			return this.addEntry(optTitle, xmlUrl, subid, optSelect);
		}

		return false;
	}
	// External Handler for Deleting the entry.
	// Its not needed since its handled by clickHandler right now.
	// If needed just simulate clickHandler as in addentry.
	this.deleteEntry = function (xmlurl) 
	{
		alert("notimplemented");
	}
	this.clickHandler = function (e, f) {
		//get the resolved (non-text node) target:
		var elTarget;
		if (e == null)
		{
			elTarget = f;
		}
		else
		{
			elTarget = YAHOO.util.Event.getTarget(e);	
		}
		//walk up the DOM tree looking for an <li>
		//in the target's ancestry; desist when you
		//reach the container div
		while (elTarget.id != this.containerid){
			if((elTarget.nodeName.toUpperCase() == "A") && (YAHOO.util.Dom.hasClass(elTarget, "mybloglist-link"))) {
			// Set the background stuff here.
				var newSelectedEntry = elTarget.parentNode.parentNode;
				var equalIndex = elTarget.href.lastIndexOf('=');
				if (equalIndex <= 0) {alert('Internal Error clickHandler'); break;}
				var seceqindex =  elTarget.href.lastIndexOf('=', equalIndex -1);
				if (seceqindex < 0 || seceqindex > equalIndex -2) {alert('Internal Error clickHandler'); break;}
				var xmlurl = elTarget.href.substr(equalIndex+1, elTarget.href.length - equalIndex);
				xmlurl = unescape(xmlurl);
				var subid = elTarget.href.substr(seceqindex + 1, equalIndex - seceqindex -3);
				subid=unescape(subid);
				if (YAHOO.util.Dom.hasClass(elTarget, "mybloglist-dellink")) { 
					if (this.selectedEntry == newSelectedEntry){ this.selectedEntry  = null;}
					if (this.clickCallBack) {this.clickCallBack(elTarget, xmlurl, subid);}
					this.containerelem.removeChild(elTarget.parentNode.parentNode);
					for (var i = 0; i < this.feeds.length; i++)
					{
						if (this.feeds[i].xml == xmlurl) {
							this.feeds.splice(i, 1);
							break;
						}
					}
				}
				else {
					if (this.selectedEntry != null) {
						YAHOO.util.Dom.removeClass(this.selectedEntry, 'bloglist-selected-entry');
					}
					YAHOO.util.Dom.addClass(newSelectedEntry, 'bloglist-selected-entry');
					this.selectedEntry = newSelectedEntry;
					if (this.clickCallBack) {this.clickCallBack(elTarget, xmlurl, subid);}
				}
				break;
			}
			else if((elTarget.nodeName.toUpperCase() == "A") && (YAHOO.util.Dom.hasClass(elTarget, "mybloglist-normal"))) {
				return;
			}
			else {
				//let's step up the DOM and keep looking:
				elTarget = elTarget.parentNode;
			}
		} 
		if (e!=null) {YAHOO.util.Event.preventDefault(e);}

	}
	this.getHtmlElement = function(){return this.containerelem;}
    this.init= function(containerid, readertype, hdrhtml, feeds, clickCallBack) {
		this.containerid = containerid; // div with id = entries.
		this.totalChildren=0;
		this.hdr=null;
		this.clickCallBack = clickCallBack;
		this.containerid = containerid;
		this.readertype = readertype;
		this.containerelem = YAHOO.util.Dom.get(this.containerid);
		this.clickCallBack=clickCallBack;
		this.feeds= new Array();
        if(!this.containerelem) {this.containerelem = document.createElement('DIV'); this.containerelem.setAttribute('id', this.containerid); }
		if (!YAHOO.util.Dom.hasClass(this.containerelem, 'bloglist-container'))
		{
			YAHOO.util.Dom.addClass(this.containerelem, 'bloglist-container');
		}
		if (hdrhtml) { 
			this.hdr = document.createElement('DIV');  
			this.hdr.innerHTML = hdrhtml;
			this.containerelem.appendChild(this.hdr);
 		}
		if (feeds && feeds.length) {
			for (var i = 0; i < feeds.length; i++)
			{
				this.addEntry(feeds[i].t, feeds[i].xml, feeds[i].subid);
			}
		}
		YAHOO.util.Event.on(this.containerid, "click", this.clickHandler, this, true);
		return this;
    };
    this.init(containerid, readertype, hdr, feeds, clickCallBack);
	
};
myBlogList.createEntryHelper = function(type, title, xmlurl, subid)
{
	var divObject = document.createElement('DIV');
	YAHOO.util.Dom.addClass(divObject,"single-blog" );
	var titleDiv = document.createElement('DIV');
	YAHOO.util.Dom.addClass(titleDiv,"blog-titlelink" );
	var aobj = document.createElement('A');
	aobj.setAttribute('href', '/blodio/blogmainpage?type=' + type+ '&j='+escape(subid) + '&i='+ escape(xmlurl));
	YAHOO.util.Dom.addClass(aobj, "mybloglist-link");
	aobj.appendChild(document.createTextNode(title));
	titleDiv.appendChild(aobj);
	divObject.appendChild(titleDiv);
	if(type != 'bloglines') {
		var xdivobj = document.createElement('DIV');
		YAHOO.util.Dom.addClass(xdivobj,"blog-del" );
		var xobj = document.createElement('A');
		YAHOO.util.Dom.addClass(xobj, "mybloglist-link");
		YAHOO.util.Dom.addClass(xobj, "mybloglist-dellink");
		xobj.setAttribute('href',  '/blodio/blogmainpage?optype=unsubscribe&type=' + type + '&j='+escape(subid) + '&i='+ escape(xmlurl));
		xobj.appendChild(document.createTextNode('x'));
		xdivobj.appendChild(xobj);
		divObject.appendChild(xdivobj);
	}
	return divObject;
}
//attach clickHandler as a listener for any click on
//the container div:
	
// Script written by Drew Noakes -- http://drewnoakes.com
// 14 Dec 2006

var HintClass = "hintTextbox";
var HintActiveClass = "hintTextboxActive";

// define a custom method on the string class to trim leading and training spaces
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };

function initHintTextboxes() {
  var inputs = document.getElementsByTagName('input');
  for (i=0; i<inputs.length; i++) {
    var input = inputs[i];
    if (input.type!="text")
      continue;
      
    if (input.className.indexOf(HintClass)!=-1) {
      input.hintText = input.value;
      //input.className = HintClass;
      input.onfocus = onHintTextboxFocus;
      input.onblur = onHintTextboxBlur;
    }
  }
}

function onHintTextboxFocus() {
  var input = this;
  if (input.value.trim()==input.hintText) {
    input.value = "";
	YAHOO.util.Dom.addClass(input, HintActiveClass );
	YAHOO.util.Dom.removeClass(input, HintClass );
  }
}

function onHintTextboxBlur() {
  var input = this;
  if (input.value.trim().length==0) {
    input.value = input.hintText;
    //input.className = HintClass;
	YAHOO.util.Dom.addClass(input, HintClass );
	YAHOO.util.Dom.removeClass(input, HintActiveClass);
  }
}

//window.onload = initHintTextboxes;
// Let us call it from our init.
