NS6 = false;
IE4 = (document.all);
NS4 = (document.layers);
if(!IE4){NS6 = (document.getElementById);}

var ntrans = false;

animdelay = 10;
switchtimeout = 120;

var helppane = null;

// define/init areas
var areas = new Array();
areas["hpane"] = new Array();
areas["hpane"]["ex"] = false;
areas["hpane"]["reveal"] = "";
areas["hpane"]["revealout"] = {"height":"100%","width":"100%"};
areas["hpane"]["revealin"] = {"height":"0px"};
areas["hpane"]["maxn"] = 0;
areas["hpane"]["elem"] = "height";
areas["hpane"]["ef"] = "";
areas["hpane"]["eft"] = 0;

function contract(area, evalfinal, evalfinaltimeout)
{
	_expand("in", area, areas[area]["maxn"], evalfinal, evalfinaltimeout);
}

function expand(area, maxn, evalfinal, evalfinaltimeout)
{
	areas[area]["maxn"] = maxn;
	_expand("out", area, maxn, evalfinal, evalfinaltimeout);
}

/* TODO: optmze */
function _expand(direction, area, maxn, evalfinal, evalfinaltimeout)
{
	ntrans = true;

	var out = (direction=="out")?true:false;
    var nn, nn1;
	var fi = true;

	loopi = function(i)
	{
		i = Math.round(i);

		if(fi){firsti();}fi = false;

	    if(i>1)
	    {
			if(out)
			{
			    nn = maxn - i;
  			}
  			else
  			{
  			    nn = i;
			}

    		setStyleVal(area, areas[area]["elem"], nn + "px");

			if(helppane!=null)
			{
	    		nn1 = 310 - nn;
	    		if(nn1 >= 0)
		    		setStyleVal(helppane, "height", (nn1) + "px");

			}

			i/=1.5;   // to do: get these values from array

			setTimeout("loopi("+i+")", animdelay);
		}
		else
		{
			lasti();
		}
	}

	firsti = function()
	{
		if(!out)
		{
			finaleval();
		}
	}

	lasti = function()
	{
	    if(out)
			nn = maxn;
		else
		    nn = 0;

   		setStyleVal(area, areas[area]["elem"], nn + "px");

   		finalstate();
	}


	finalstate = function()
	{
	    ntrans = false;
		if(out)
		{
			//alert("All the way out: "+areas[area]["reveal"]+"  in: "+areas[area]["revealout"]);
			// all the way out
		    //unhideDiv(areas[area]["reveal"], "100%", "100%");
		    unhideDiv(areas[area]["reveal"],areas[area]["revealout"]);
			finaleval();
		}
		else
		{
			// all the way in
			hideDiv(areas[area]["reveal"],areas[area]["revealin"]);
			finaleval();
		}
	}

	finaleval = function()
	{
		//alert("unlocked");
		if(evalfinal!=null && evalfinal!=undefined && evalfinal!="")
		{
			setTimeout(evalfinal,Number(evalfinaltimeout));
		}
	}

	// start loop
	loopi(maxn);
}


function setStyleVal(element, what, val)
{
	/*alert("el: "+element+" what: "+what+" val:"+val);*/
	getStyle(element)[what] = val;
}

function getStyle(element)
{
	if (NS6)
	{
		return document.getElementById(element).style;
	}
	else if (IE4)
	{
		return document.all[element].style;
	}
	else if (NS4)
	{
		return document.layers[element];
	}
	else
	{
		return document.getElementById(element).style;	
	}
}

function hideDiv(element, styles)
{
	//alert("hide: "+element);

	if(element!="") {

		var a = getStyle(element);
		a["visibility"]="hidden";
		a["overflow"]="hidden";

		for (var st in styles)
		{
			a[st] = styles[st];
		}
	}
}

function unhideDiv(element, styles)
{
	 /*
	alert("unhide: "+element+" styles:"+debugArray(styles)+"\n\n"+
			"visibility: "+getStyle(element)["visibility"]+"\n"+
			"overflow: "+getStyle(element)["overflow"]+"\n"+
			"width: "+getStyle(element)["width"]+"\n"+
			"height: "+getStyle(element)["height"]+"\n"
	);
	*/

	//alert("Unhide div: "+element+"  styles: "+styles);

	if(element!="")
	{
		var a = getStyle(element);
		a["visibility"]="visible";

		for (var st in styles)
		{
			a[st] = styles[st];
		}
	}
}

function replace(area, newh, newreveal, ef, eft)
{
	if(ntrans)return;

	// close old reveal, open new

	if(areas[area]["ef"]!=undefined && areas[area]["ef"]!="")
	{
		//alert("have to close something before toggling new thing: "+areas[area]["ef"]);
		areas[area]["ex"] = false;
		eval(areas[area]["ef"],areas[area]["eft"]);
	}

	var str = "areas[\""+area+"\"][\"ex\"]=false;toggle(\""+area+"\","+newh+",\""+newreveal+"\",\""+ef+"\",\""+eft+"\")";
	//alert("replace: "+str);
	contract(area, str, switchtimeout);
}

function toggle(area, h, rev, ef, eft)
{
	if(ntrans)return;

	var _rev = areas[area]["reveal"]; // reveal for this area
	var _ex = areas[area]["ex"]; // e   xpanded this area?
	var _ef	= areas[area]["ef"];
	var _eft = areas[area]["eft"];

	if(_rev != undefined && _rev != rev && _ex == true)
	{
		// will open rev after closing _rev
		//alert("will open "+rev+" after closing "+_rev+" ef:"+_ef+" eft:"+_eft);
		replace(area, h, rev, ef, eft);
		return;
	}

	areas[area]["reveal"] = rev;
	if(ef!=undefined && ef!="" && ef!=null)
	{
		areas[area]["ef"] = ef;
		areas[area]["eft"] = eft;
	}

	if(_ex)
	{
	    // TODO: pass the second line into contract
		contract(area, ef, eft);
		areas[area]["ex"] = false;
	}
	else
	{
		expand(area, h, ef, eft);
		areas[area]["ex"] = true;
	}
}


/* Entry Functions */

var hph = 286 + 40;

function cust_email()
{
        if(areas["hpane"]["ex"])
        {
                //alert("done! all the way out");
                setStyleVal("emails_list","height","70px");
        }
        else
        {
                setStyleVal("emails_list","height","0px");
                //alert("all the way in");
        }
}


function email() { toggle("hpane", hph, "email","cust_email()",0); }



function charprofile(id) { toggle("hpane", hph, "charprofile"+id); }
function credits() { toggle("hpane", hph-40, "credits"); }
function dlep() { toggle("hpane", hph-40, "dlep"); }
function msg() { toggle("hpane", 100, "msg"); }
function err() { toggle("hpane", 100, "err"); }
function transcript()
{
	toggle("hpane", hph, "transcript","cust_trans()",0);
}

function cust_trans()
{
	if(areas["hpane"]["ex"])
	{
		//alert("done! all the way out");
		setStyleVal("trans","overflow","auto");
	}
	else
	{
		setStyleVal("trans","overflow","hidden");
		//alert("all the way in");
	}
}

function syn(id)
{
        var _h = hph;

        if(id==1)
        {
			_h = 170;
        }

        if(id == 2)
        {
                toggle("hpane",_h, "syn"+id, "cust_syn();", 0);
        }
        else
        {
                toggle("hpane", _h, "syn"+id);
        }
}

function cust_syn()
{
        if(areas["hpane"]["ex"])
        {
                //alert("done! all the way out");
                setStyleVal("feedurl","height","60px");
        }
        else
        {
                setStyleVal("feedurl","height","0px");
		//setStyleVal("feedurldiv","height","0px");
                //alert("all the way in");
        }
}

/*Feed related functions*/

var feedType = "rss";

function selectFeedOpt(opt)
{
	setFeedURL(opt);
	syn(2);
}

function setFeedURL(opt)
{
	if(feeduri == "")
	{
		feeduri = "/";
	}
	var url = feeduri+feedType+"/";
	url += opt + "." + feedType;
	var feedurl = document.getElementById('feedurl');
	feedurl.value = url;
	var feedlink = document.getElementById('feedlink');
	feedlink.href = url;
}






function debugStyle(e)
{

	var str = e+".style: "+debugArray(getStyle(e));
	return str;

}

function debugArray(a)
{

	var ststr = "";

	for(var i in a)
	{
		ststr += i + ": "+a[i]+"\n ";
	}

	return ststr;
}

