/* these calls are just the plumbing */

pipesrpc = {};
pipesrpc._timeoutlength = 30000;  /* 30 seconds by default */
pipesrpc._running = [];

pipesrpc._timeout = function(id,url) {
    var cbo = pipesrpc._running[id];
    pipesrpc._running[id]=null;
    if (!cbo.callbackErr) return;
    cbo.callbackErr("Timeout",-1,cbo.self);
}

pipesrpc._buildurl = function(pipeid,params) {
	var url = "http://pipes.yahoo.com/pipes/pipe.run?_id="+pipeid+"&_render=json";
	if (params) {
    	for (var key in params) {
            if (params[key]===null) continue;
    		url+="&"+encodeURIComponent(key)+"="+encodeURIComponent(params[key])
    	}
	}
    return url;
}

pipesrpc._callbackhandler = function(o) {
	var cbo = pipesrpc._running[callbackIndex];
    if (!cbo) return;
    pipesrpc._running[callbackIndex]=null;
   	window.clearTimeout(cbo.timeout);
   	if (!o || !o.count) {
   	    if (!cbo.callbackErr) return;
        cbo.callbackErr("Bad response",-2,cbo.self);
        return;
   	}
    if (!cbo.callbackOk) return;
    cbo.callbackOk(o,cbo.self);
}

pipesrpc._execute = function(url,callbackOk,callbackErr,timeoutlength) {
    if (!timeoutlength) timeoutlength = pipesrpc._timeoutlength;
    var id = pipesrpc._running.length;
  	url+="&_callback=pipesrpc._callbackhandler_"+id;
    var s=document.createElement("script");
    s.setAttribute("src",url);
    var fn = ""+pipesrpc._callbackhandler;
    fn = fn.replace(/callbackIndex/g,id);
    eval("pipesrpc._callbackhandler_"+id+"="+fn);
    pipesrpc._running.push({self:this,callbackOk:callbackOk,callbackErr:callbackErr,timeout:window.setTimeout(function() { pipesrpc._timeout(id,url); },timeoutlength)});    
    document.getElementsByTagName("head")[0].appendChild(s);
    return id;
}

/* use these three calls to run and cancel Pipes calls */
pipesrpc.cancelrequest = function(id) {
	var cbo = pipesrpc._running[i];
    window.clearTimeout(cbo.timeout);
    pipesrpc._running[i]=null;
}

pipesrpc.cancelallrequests = function() {
    for (var i=0; i<pipesrpc._running.length; i++) {
        pipesrpc._cancelrequest(i);
    }	
}

pipesrpc.run = function(pipeid,params,callbackOk,callbackErr,timeoutLength) {
    return pipesrpc._execute(pipesrpc._buildurl(pipeid,params),callbackOk,callbackErr,timeoutLength);
}

/* This is the example */
function init() {
	var requestId = pipesrpc.run("vmGiN_V93RGL4mdX6ycw5g",null,
	    function(data) {
	    	//loop and create a dl dt/dd list.
	    	//Note: its much quicker to create using an HTML string but this looks nicer in an example
			var updatesToDisplay = 6;
			var feeddiv = document.getElementById("blogfeed");
			var finalOutput = "";
	        //var dl = document.createElement("dl");
	       // for (var i=0; i<1; i++) {
			  for(var i =0;i < updatesToDisplay;i++)
			  {
	        	var item = data.value.items[i];
	        	//var dt = document.createElement("dt");
				
				var cutOutput = item.title.slice(0,140);
				finalOutput += "<a name='" + createName(cutOutput) + "' style='color:#2c4d74' href='"+item.link+"'>" + cutOutput + "</a>";
				/*var outputArray = cutOutput.split(" ");
				
				var finalOutput = "";
				
				for(var i=0; i<outputArray.length-1; i++) {
					var space = i < outputArray.length-2 ? " " : "...";
					finalOutput += outputArray[i]+space;
				}*/
				if(i<updatesToDisplay-1)
					finalOutput += " <span style='color:black'>and</span> ";
			  }
				
				
				//finalOutput
	        	feeddiv.innerHTML = finalOutput;
				cX("onload");
				startticker();
				
	        	//dl.appendChild(dt);
				
				//alert("item.description: "+item.description);
				
	        	//var dd = document.createElement("dd");
	        	//dd.innerHTML = item.description.slice(0,100) +"... <a href='"+item.link+"'>MORE &gt;</a>";
	        	//dl.appendChild(dd);
	      	//}
		    //feeddiv.appendChild(dl);
		}
	);
}
var tSpeed=1;                        // scroll speed (1 = slow, 5 = fast)
	var cps=tSpeed;
	var tWidth = 440;
function startticker()
{
	
	mq = document.getElementById("mq1"); 
	mq.style.left=(parseInt(tWidth)+10)+"px"; 
	aw = document.getElementById("blogfeed").offsetWidth; 
	lefttime=setInterval("scrollticker()",50);
}

function scrollticker()
{  mq.style.left = (parseInt(mq.style.left)>(-10 - aw)) ? parseInt(mq.style.left)-cps+"px" : parseInt(tWidth)+10+"px";  }


// This removes special characters and (in some cases) replaces them w/ standard characters for Cormetrics
function createName(html){
	var name=html.replace(/[^a-zA-Z0-9 :_|-]+/g,function(char){
		var ltr='';
		if(char=="&"||char==";") return char;
		var fragment=encodeURIComponent(char).split('%');
		if(fragment[1]=="C3"){
			switch(fragment[2]){
				case '92': case '93': case '94': case '95': case '96':ltr='O'; break;
				case 'B2': case 'B3': case 'B4': case 'B5':ltr='o'; break;
				case 'BB': case 'B9': case 'BA': case 'BC':ltr='u'; break;
				case '89':ltr='E'; break;
				case 'A8': case 'A9':ltr='e'; break;
				case 'B1':ltr='n'; break;
				case 'A7':ltr='c'; break;
				case '9F':ltr='B'; break;
				case 'A6':ltr='ae'; break;
				case '91':ltr='N'; break;
			}
		}
		return ltr;
	});
	return name;
}


window.onload = init;

