
/*
Copyright 2005 BBN Technologies.
Author: Doron Gan BZByte
*/

function PlayerUtil(){}

PlayerUtil.genAtr = function genAtr(name,value)
{
    return name+"=\""+ value+"\" ";
}

PlayerUtil.genParamTag = function genParamTag(name,value)
{
    return"<PARAM "+
                    PlayerUtil.genAtr("NAME",name)+
                    PlayerUtil.genAtr("VALUE",value)+"/>";
}


PlayerUtil.genParams = function(params){
	var rtnStr = "";
	for (var key in params) {
		if(params[key] != null)
			rtnStr += PlayerUtil.genParamTag(key, params[key]);
	}
	
	return rtnStr;
}

PlayerUtil.genAtrs = function(atrs){
	var rtnStr = "";
	for (var key in atrs) {
		if(atrs[key] != null)
			rtnStr += PlayerUtil.genAtr(key, atrs[key]);
	}
	return rtnStr;
}

// End TODO

PlayerUtil.makeSectionVisible=function (prefix, entryNum, expanded)
{
    var spanEl = document.getElementById(prefix+"_span_"+entryNum);
    if (spanEl!=null)
    {
        if (expanded)
           spanEl.className="ExpandedTextStyle";
        else
           spanEl.className="CollapsedTextStyle";
    }
    var anchorEl = document.getElementById(prefix+"_a_"+entryNum);
    if (anchorEl!=null)
    {
         if (expanded)
           anchorEl.className="CollapsedTextStyle";
        else
           anchorEl.className="ExpandedTextStyle";
    }
    //no we handle the more portion.
   
	fixRegions(prefix,entryNum,expanded);
}


PlayerUtil.toggleExpand = function toggleExpand(entryNum)
{
    //check of current state.
    var expA = document.getElementById("exp_"+entryNum);
    if (expA!=null)
    {
        var image = expA.getElementsByTagName("IMG").item(0);
        var expanded =image.src.indexOf("btn_minus.gif")>=0;
        PlayerUtil.makeVisible(entryNum,!expanded);//toggles.
    }

}

PlayerUtil.makeSnippetVisible=function makeSnippetVisible(entryNum,expanded)
{
   javascript:PlayerUtil.makeSnippetVisible(entryNum,expanded,-1);
}

var storeChangedHeights = new Array();

PlayerUtil.makeSnippetVisible=function makeSnippetVisible(entryNum,expanded,maxheight)
{
	
	var containerDiv = document.getElementById("snipdiv_" + entryNum);
    if(containerDiv != null)
    {
      var largeSpan = document.getElementById("snippet_span_" + entryNum);
      var smallSpan = document.getElementById("snippet_a_" + entryNum);
      // this is needed due to a style change that makes display=none (helps elminate 1-pixel shift on show/hide)
      //largeSpan.style.display = "inline";
    
      if((largeSpan != null) && (maxheight > 0))
      {
        
      	if(expanded )
	    {
	      if(largeSpan.scrollHeight >=maxheight)
	      {
      	  	containerDiv.style.overflow= "auto";
      	  	storeChangedHeights[entryNum] = containerDiv.style.height;
      	  	containerDiv.style.height = "" + maxheight + "px";
      	  }
        }
        else
        {
      	  containerDiv.style.overflow= "visible";
      	  
      	  if(largeSpan.scrollHeight >=maxheight)
	      {
	      	  containerDiv.style.height = storeChangedHeights[entryNum];
	      }
        }
      }
      
    }

	
    
    PlayerUtil.makeSectionVisible("snippet",entryNum,expanded);
    
    // a bit of trickery here.. I just pray it works on Safari.  
    // setting display=null helps avoid that 1-pixel remnant that shifts the
    // results up and down.
    if(expanded) smallSpan.style.display = "none";
    else smallSpan.style.display= "inline";
    
    var trigger = document.getElementById("snippet_trigger_" + entryNum);
    if(trigger != null)
    {
     
      trigger.href = "javascript:PlayerUtil.makeSnippetVisible('"+entryNum+"'," + !expanded + "," + maxheight + ");";
      var altText = trigger.getAttribute("altText");
      trigger.setAttribute("altText",trigger.innerHTML);
      trigger.innerHTML = altText;
 
    }
   
    
 
    
}

PlayerUtil.makeDivsVisible = function makeDivsVisible(entryNum, expanded)
{


    var el = document.getElementById("stats_"+entryNum);
    var divs = el.getElementsByTagName("div");

    //PlayerUtil.debug("MakeDivsVisible: num:"+ entryNum + " numdivs:"+ divs.length);
    for (var index=0 ; index<divs.length; index++)
    {
        var div = divs.item(index);
        var id = div.getAttribute("id");
        //PlayerUtil.debug("Div id:"+ id + " isId:"+ !!(id));
        if(!(id))
        {
            if (expanded)
            {
                div.style.height="";
                div.style.visibility="";
            }
            else
            {
                div.style.height="1px";
                div.style.visibility="hidden";
            }
         }
    }

}

PlayerUtil.makeVisible = function makeVisible(entryNum, expanded)
{

    PlayerUtil.makeDivsVisible(entryNum,expanded);
    PlayerUtil.makeSectionVisible("desc",entryNum,expanded);
    //PlayerUtil.makeSectionVisible("snippet",entryNum,expanded);


    var expEl =document.getElementById("exp_"+entryNum);
    if (expEl!=null)
    {
        var image = expEl.getElementsByTagName("IMG").item(0);
        if (expanded)
        {
            //expEl.innerHTML="(-)";
            image.src="images/btn_minus.gif"
        }
        else
        {
            image.src="images/btn_plus.gif"
            //expEl.innerHTML="(+)";
        }
     }

    var extEl =document.getElementById("ext_"+entryNum);
    if (extEl!=null)
    {
       // if (expanded)
       //    extEl.className="ExpandedTextStyle";
       // else
       //    extEl.className="CollapsedTextStyle";
        if (expanded)
        {
            extEl.style.height="";
        }
        else
        {
            extEl.style.height="1px";
        }
     }
}

PlayerUtil.getSourceElement=function getSourceElement(eventObj)
{
    var srcEl = eventObj["srcElement"]; //IE
    if (srcEl==null)
        srcEl = eventObj.target;
    // Fix for safari bug.
    // In safari for elements containing text
    // target returns text node instead of the node.
    if (srcEl.nodeType == 3)
		srcEl = srcEl.parentNode;
    return srcEl;
}

PlayerUtil.seriesChange= function seriesChange(el,youtube)
{
    var selIndex= el.selectedIndex;
    var option = el.options[selIndex];
    var val = option.value;
    var text = option.text;

    document.getElementById("sname").value=text;
    if(youtube)
      document.cookie = "cat=" + val;
    else
      document.cookie = "s=" + val;
	
}

/** removes the first 3 "/" characters and retuns the rest.*/
PlayerUtil.getURLPath= function getURLPath(path)
{
    var slashIndex=0;
    for (var index=0; index<3; index++)
    {
       slashIndex= path.indexOf("/",slashIndex+1);
    }

    return path.slice(slashIndex,path.length);
}

function simpleSearch(inputString,searchChar,startIndex)
{
   
   if(searchChar.length == 0) return -1;
  
   var compareChar = searchChar.charAt(0);
   while(startIndex < inputString.length)
   {
   	  if(inputString.charAt(startIndex) == compareChar) return startIndex;
   	  startIndex++;
   }
   return -1;
}

function replaceAll(inputString, searchString,replaceString)
{
	//alert(inputString + ":" + searchString + ":" + replaceString);
    var startIndex = simpleSearch(inputString,searchString,0);
    
	while(startIndex > -1)
	{
		inputString = inputString.replace(searchString,replaceString);
		startIndex = simpleSearch(inputString,searchString,startIndex+1);
	}
	return inputString;
}

function makeQuerySafe(inputString)
{
	inputString = replaceAll(inputString,"%","%25");
	
	inputString = replaceAll(inputString," ","%20");
	inputString = replaceAll(inputString,"!","%21");
	inputString = replaceAll(inputString,"\"","%22");
	inputString = replaceAll(inputString,"#","%23");
	inputString = replaceAll(inputString,"$","%24");
	inputString = replaceAll(inputString,"&","%26");
	inputString = replaceAll(inputString,"\'","%27");
	inputString = replaceAll(inputString,"(","%28");
	inputString = replaceAll(inputString,")","%29");
	inputString = replaceAll(inputString,"*","%2a");
	inputString = replaceAll(inputString,"+","%2b");
	inputString = replaceAll(inputString,",","%2c");
	inputString = replaceAll(inputString,"-","%2d");
	inputString = replaceAll(inputString,".","%2e");
	inputString = replaceAll(inputString,"/","%2f");
	inputString = replaceAll(inputString,":","%3a");
	inputString = replaceAll(inputString,";","%3b");
	inputString = replaceAll(inputString,"<","%3c");
	inputString = replaceAll(inputString,"=","%3d");
	inputString = replaceAll(inputString,">","%3e");
	inputString = replaceAll(inputString,"?","%3f");
	inputString = replaceAll(inputString,"@","%40");
	inputString = replaceAll(inputString,"[","%5b");
	inputString = replaceAll(inputString,"\\","%5c");
	inputString = replaceAll(inputString,"]","%5d");
	inputString = replaceAll(inputString,"^","%5e");
	return inputString;
}


function updateQueryHref(newQuery,isBottom)
{
	var elemID = "switchLink";
	if(isBottom) elemID = elemID + "_2";
	
	newQuery = makeQuerySafe(newQuery);
	
	
 	document.getElementById(elemID).href = document.getElementById(elemID).getAttribute('originalValue') + '&q=' + newQuery;
}

function onSearchChange(elmt)
  {
    
    
    var topQ = document.getElementById("topQuery");
    var bottomQ = document.getElementById("bottomQuery");

    updateQueryHref(elmt.value,elmt==bottomQ);
    if (elmt == topQ)
    {
      bottomQ.value = topQ.value;
    }
    else if (elmt == bottomQ)
    {
      topQ.value = bottomQ.value;
    }
  }



function searchSeries(series)
{
var s = document.getElementById("seriesName");
s.value = series;
var f = document.getElementById("topForm");
f.submit();
}

var targetDivID;
var minHeight=150;
var originalHeights = new Array();
var snipHeights = new Array();
var moreDescriptionHeights = new Array();
var moreSnippetsHeights = new Array();
var state = new Array();
function fixRegions(){alert("0");fixRegions(-1,0);}
function fixRegions(prefix,entrynum,expanded){

	
	
	if((expanded != undefined) && (entrynum != undefined))
	{
		var currentState = state[entrynum];
		var frameRegion = document.getElementById(targetDivID + entrynum);
	  	if(frameRegion != null)
	  	{
			if(expanded)
			{
				var resultElem = document.getElementById("resultTable" + entrynum);
				var newHeight = correctHeight(resultElem.scrollHeight);
	
				frameRegion.style.height = newHeight;
				if(currentState == 0)
				{
					if(prefix == "desc")
						moreDescriptionHeights[entrynum] = newHeight;
					else
						moreSnippetsHeights[entrynum] = newHeight;
					
				}
				else
				{
					if(prefix == "desc")
						moreDescriptionHeights[entrynum] = (newHeight - moreSnippetsHeights[entrynum]) + originalHeights[entrynum];
					else
						moreSnippetsHeights[entrynum] = (newHeight - moreDescriptionHeights[entrynum]) + originalHeights[entrynum];
				}
				state[entrynum] = currentState + ((prefix == "desc") ? 1 : 2);
			}
			else
			{
				if(currentState == 3)
					frameRegion.style.height = (prefix == "desc") ? moreSnippetsHeights[entrynum] : moreDescriptionHeights[entrynum];
				else
					frameRegion.style.height = originalHeights[entrynum];
									
				state[entrynum] = currentState - ((prefix == "desc") ? 1 : 2);
				
				var snipRegion = document.getElementById("snipdiv_" + entrynum);
	  			if((snipRegion != null) && (prefix == "snippet"))
	  				snipRegion.style.height = snipHeights[entrynum];
			}
			  	
	  	}
	  	
	  	
	  	return;
	}

	for(var i=0;i<10;i++)
	{
	
		var resultElem = document.getElementById("resultTable" + i);
			
		if(resultElem == null) break;
	  	var usedArea = resultElem.scrollHeight;
	  			  		
	  	var frameRegion = document.getElementById(targetDivID + i);
	  	if(frameRegion == null) break;
	  		
	  	state[i] = 0;
	  	var snipRegion = document.getElementById("snipdiv_" + i);
	  	if((snipRegion != null) && (entrynum == undefined))
	  	   snipHeights[i] = snipRegion.scrollHeight;
	  			 
	  	frameRegion.style.height = correctHeight(usedArea);
	  	originalHeights[i] = correctHeight(usedArea);
	  	 			  		
	  }
}

function correctHeight(usedArea)
{
	return (usedArea < minHeight) ? minHeight : (usedArea+10);
}
