var _cams		= new Array();
var _uaSupported	= true;
var _shownCam		= "";


function uninit() 
{
	clearAllCams();
	hideCam();
}

function verifyUA() 
{
	CamController.isBrowserSupported(function(data) 
	{
		_uaSupported = data;
	});
}

function retrieveCamList() 
{
	
	CamController.retrievePublicCamList(function(data) 
	{
		var resp = data.parseJSON();

		if(true == resp.successful)
		{
			//dwr.util.setValue("pub-cams", "");
                        setCams(resp.data.parseJSON());
		}
		else
		{
			//dwr.util.setValue("status-bar", resp.error);
			//uninit();
			clearAllCams();
			//hideCam();
		}
	});
}



function refresh()
{
    retrieveCamList();

    setTimeout("refresh()", 15000);
}

function showCam(index) 
{
	var player =	"<APPLET codebase='viewer' code='net/livestream/web/LiveStreamApplet.class'  ARCHIVE='web-viewer.jar' width=264 height=216><PARAM NAME='guid'  VALUE='" + _cams[index].guid + "'><PARAM NAME='ep' VALUE='" + _cams[index].pubpoint + "'><PARAM NAME='login' VALUE='" + _cams[index].owner + "'><PARAM NAME='transport'   VALUE='" + _cams[index].transport + "'><PARAM NAME='min-view-percentage'  VALUE='99'><PARAM NAME='resolver' VALUE='http://live-stream.net/camresolver?cam='></APPLET>" + 
					"<br><br>" +
					"<input name='hide_cam' class='button' value='Hide' type='button' onclick='hideCam()'/></td>" +
					"<br>";		

        var flag = "";
        if(_cams[index].ccode.length > 0)
            flag = "<img src='res/flags/" + _cams[index].ccode + ".png' alt='" + _cams[index].cname +  "' title='"  + _cams[index].cname + "'>";
    
        document.getElementById("player").innerHTML		= player;
	document.getElementById("cam-name").innerHTML	= "<p><code>" + flag + "&nbsp;<label>" + _cams[index].alias_full + "</label></code></p>";// + (_uaSupported? "" : "<code>Internet Explorer required</code>");
	_shownCam = _cams[index].guid;
}

function hideCam() 
{
    var clip = "";
    
    clip += "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' width='500' height='300' id='livestream' align='middle'>";
    clip += "<param name='allowScriptAccess' value='sameDomain' />";
    clip += "<param name='allowFullScreen' value='false' />";
    clip += "<param name='movie' value='res/livestream.swf' />";
    clip += "<param name='quality' value='high' />";
    clip += "<param name='bgcolor' value='#ffffff' />";	
    clip += "<embed src='res/livestream.swf' quality='high' bgcolor='#ffffff' width='500' height='300' name='livestream' align='middle' allowScriptAccess='sameDomain' allowFullScreen='false' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' />";
    clip += "</object>";
    document.getElementById("player").innerHTML	= clip;
    document.getElementById("cam-name").innerHTML	= "<h1>Watch from anywhere!";
    _shownCam					= "";
}

function hideCamByIndex(index) 
{
	if(null != _cams[index] && _shownCam == _cams[index].guid)//null != document.getElementById("player_" + _cams[index].pubpoint))
		 hideCam();
}


function clearCams(cams) 
{
        //dwr.util.setValue("pub-dir", "");
        document.getElementById("pub-dir").innerHTML    = "<h1>Public directory</h1><p>Turn your cam to public, broadcast to the world!</p>";
        
        if(0 == cams.length)
            document.getElementById("cam-table-holder").innerHTML = "";
        else if(null == document.getElementById("cam-table-body"))
            document.getElementById("cam-table-holder").innerHTML = "<div class='left-box' style='overflow:auto; height:300px; width:195px;'><table class='table' style='width:155px;'><tbody id='cam-table-body'></tbody></table></div>";
            
            
        var tbody = document.getElementById("cam-table-body");
        
        if(null != tbody)
        {
            var shouldBeRemoved = new Array();
            var index           = 0;
            var trElems         = tbody.getElementsByTagName("tr");

            for (var i = 0; i <trElems.length; i++) 
            {   
                    var trElem = trElems[i];

                    var exists = false;
                    for (var j = 0; j < cams.length; j++) 
                    {
                            //alert(trElem.id + " to remove: " + cams[j].guid);

                            if(trElem.id == cams[j].guid)
                            {
                                    exists = true;
                                    break;
                            }
                    }

                    if(false == exists)
                            shouldBeRemoved[index++] = trElem.id;

            }


            for (var i = 0; i < shouldBeRemoved.length; i++) 
                    tbody.removeChild(document.getElementById(shouldBeRemoved[i]));
        }
}

function clearAllCams() 
{
        document.getElementById("pub-dir").innerHTML            = "<h1>Public directory</h1><p>Turn your cam to public, broadcast to the world!</p>";
        document.getElementById("cam-table-holder").innerHTML   = "";
        //document.getElementById("cam-table").innerHTML  = "";
        
        /*
	var tbody = document.getElementById("cam-table-body");

	while (tbody.childNodes.length > 0) 
		tbody.removeChild(tbody.firstChild);
*/
	_cams = new Array();
}


function createPreview(index)
{
    var flag = "";
    if(_cams[index].ccode.length > 0)
        flag = "<img src='res/flags/" + _cams[index].ccode + ".png' alt='" + _cams[index].cname +  "' title='"  + _cams[index].cname + "'>";

    return  "<a href='javascript:;' onclick='showCam(" + index + ")'><label>" + _cams[index].alias + "</label></a>" +
            "<a href='javascript:;' onclick='showCam(" + index + ")'><img src='" + (("" != _cams[index].preview)? (_cams[index].preview + "' width='66' height='54'>") : "") + "</a>&nbsp;" + flag;
}


function setCams(cams) 
{
	_cams = cams;
         
	clearCams(cams);
         
         if(_cams.length > 0)
         {
             document.getElementById("pub-dir").innerHTML = "<h1>Public directory</h1>";
             
             if(null == document.getElementById("cam-table-body"))
                document.getElementById("cam-table-holder").innerHTML = "<div class='left-box' style='overflow:auto; height:300px; width:195px;'><table class='table' style='width:155px;'><tbody id='cam-table-body'></tbody></table></div>";
        
            var tbody = document.getElementById("cam-table-body");

            var trElem, tdElem, txtNode;
            for (var j = 0; j < cams.length; j++) 
            {
                    trElem              = document.getElementById(cams[j].guid);
                    if(null == trElem)
                    {
                            trElem = document.createElement("tr");

                            trElem.className    = (j%2 == 0)? "row-a" : "row-b";
                            trElem.id           = cams[j].guid

                            tdElem              = document.createElement("td");
                            tdElem.id           = "preview";
                            tdElem.innerHTML    = createPreview(j); 
                            trElem.appendChild(tdElem);

                            tbody.appendChild(trElem);

                    }
                    else
                    {
                            for (var i = 0; i < trElem.childNodes.length; i++) 
                            {
                                    if("preview" == trElem.childNodes[i].id)
                                    {   
                                            var preview = createPreview(j);
                                            if(preview != trElem.childNodes[i].innerHTML)
                                                    trElem.childNodes[i].innerHTML = preview;
                                    }
                            }
                    }
            }

            // reinit style
            for (var i = 0; i < tbody.childNodes.length; i++) 
            {
                    trElem				= tbody.childNodes[i];
                    trElem.className    = (i%2 == 0)? "row-a" : "row-b";
            }
        }
}

