// basic.js
// Function Index:
// Append(ID,Str) // Append to div,textarea,...
// FormArgs(Arglist)
// GetArg(Argname)
// GetCookie(Name)
// GetEl(ID)
// //GetStyle(ID,StyleIx)
// GetValue(ID)
// o(str) // Write bare string to page
// on(str) // Write string to page with <br>
// SetCookie(Name,Value)
// //SetStyle(ID,StyleIx,Value)
// SetValue(ID,Value,Flags)
// Show(DivID,ShowIt)
// Toggle(DivID,DefaultIsShowing) // Toggle extent of element
//EOI

var NL="\r\n";

function o(str) // Write bare string to page
	{
	document.write(str);
	} // o

function on(str) // Write string to page with <br>
	{
	document.writeln(str+'<br>');
	} // on

// Caller should test for null
function GetEl(ID)
	{
	El=document.getElementById(ID);
	return El;
	} // GetEl

/*q1 unused
<script type="text/javascript">
//var El=GetEl('text');
//x=GetStyle('text','width');
var AreaW=GetStyle('text','width');
var Trans1W=GetStyle('Trans1','width');
//alert('AreaW='+AreaW+' Trans1W='+Trans1W);
var Trans1L=GetStyle('Trans1','left');
var AreaL=GetStyle('text','left');
alert('AreaL='+AreaL+' Trans1L='+Trans1L);

/*
var Trans1R=GetStyle('Trans1','left');
SetStyle('Trans1','left','29px');
Trans1R=GetStyle('Trans1','left');
//SetStyle('Trans1','top',AreaR);
//SetStyle('Trans1','left',AreaR);
*//*

//var AreaR=GetStyle('text','right');
//var Trans1R=GetStyle('Trans1','right');
//alert('AreaR='+AreaR+' Trans1R='+Trans1R);

//var x=GetEl('Trans1');
//alert('Ready to move');
//x.style.pixelLeft=20;// IE N8
//x.style.left=20;// IE FF N9 N8
//x.left=20;
//alert(x.style.left);// 700px
//SetStyle('Trans1','left',20);
</script>

// Add new entries at end of arrays:
var StyleKind1=['offsetLeft','','','offsetTop','offsetHeight','offsetWidth']; // Firefox
var StyleKind2=['pixelLeft','pixelRight','pixelBottom','pixelTop','height','width']; // IE
var StyleKind3=['left','right','bottom','top','height','width']; // Others
function IntStyleKind(El)
	{
	if ('MozOpacity' in El)
		return 1; // Firefox
	if (!('style' in El))
		return 0;
	if ('pixelLeft' in El.style)
		return 2; // IE
	if ('offsetLeft' in El)
		return 1; // Firefox
	if ('left' in El.style)
		return 3; // others
	return 0;
	} // IntStyleKind

function GetStyleProp(El,Style)
	{
	var Prefix=['client','offset'];
	var Cap=Style.substr(0,1).toUpperCase()+Style.substr(1);
	var Res;
	for (i in Prefix)
		{
		Res=Prefix[i]+Cap;
		if (Res in El)
			return Res;
		}
	return 0;
	} // GetStyleProp

//x.style.pixelLeft: IE N8
//x.style.left: IE FF N9 N8
//x.left: --
function GetStyle(ID,Style)
	{
	var El=GetEl(ID);
	if (!El)
		return 0;
	if (!('style' in El))
		return 0;
	var StyleProp=GetStyleProp(El,Style);
	if (StyleProp)
		return El[StyleProp];
	return El.style[Style];

	/*
	var Kind=IntStyleKind(El);
	if (!Kind)
		return 0;
	if (Kind==1)
		{
		var Sty=StyleKind1[StyleIx];
		if (Sty)
			return El.style[Sty];
		if (StyleIx==1) // right
			return El.offsetLeft+El.offsetWidth;
		if (StyleIx==2) // bottom
			return El.offsetTop+El.offsetHeight;
		}
	if (Kind==2)
		return El.style[StyleKind2[StyleIx]];
	if (Kind==3)
		return El.style[StyleKind3[StyleIx]];
	*//*
	} // GetStyle

function SetStyle(ID,Style,Value)
	{
	var El=GetEl(ID);
	if (!El)
		return 0;
	if (!('style' in El))
		return 0;
	El.style[Style]=Value;
	/*
	var El=GetEl(ID);
	if (!El)
		return;
	var Kind=IntStyleKind(El);
	if (!Kind)
		return 0;
	if (Kind==1)
		{
		var Sty=StyleKind1[StyleIx];
		if (Sty)
			El.style[Sty]=Value;
		if (StyleIx==1) // right
			El.left=Value-El.offsetWidth;
		if (StyleIx==2) // bottom
			El.offsetTop=Value-El.offsetHeight;
		}
	if (Kind==2)
		El.style[StyleKind2[StyleIx]]=Value;
	if (Kind==3)
		El.style[StyleKind3[StyleIx]]=Value;
	*//*
	} // SetStyle
*/

// GetValue var=1/27/08
function GetValue(ID)
	{
	var El=GetEl(ID);
	if (El==null)
		return null;
	//alert('GetValue('+ID+')--'+El.tagName+'/'+El.type);
	if (El.tagName=='INPUT'&&(El.type=='text'||El.type=='password'
		||El.type=='hidden'||El.type=='file'))
		return El.value;
	else if (El.tagName=='SELECT')
		{
		Index=El.selectedIndex;
		if (Index<0)
			return '';
		Val=El.options[Index].value;
		//alert(Val);
		return Val;
		}
	else if (El.tagName=='INPUT'&&(El.type=='button'))
		return El.disabled;
	else if (El.tagName=='INPUT'&&(El.type=='checkbox'))
		return El.checked;
	else if (El.tagName=='INPUT'&&(El.type=='radio'))
		return El.checked;
	else if (El.tagName=='SPAN')
		return El.innerHTML;
	else if (El.tagName=='DIV')
		return El.innerHTML;
	else if (El.tagName=='TEXTAREA'&&(El.type=='textarea'))
		return El.value;
	else
		alert('Not yet implemented: GetValue: '+El.tagName+'/'+El.type);
	} // GetValue

// SetValue var=1/27/08
// Flags: t=Set text
function SetValue(ID,Value,Flags)
	{
	El=GetEl(ID);
	if (El==null)
		return null;
	else if (El.tagName=='SELECT')
		{
		if (!Value)
			{
			// Option value is missing: treat as first option
			//Announce(DumpObj(El));
			El.options[0].selected=true;
			//El.selectedIndex=0;
			return;
			}
		for (i=0; i<El.options.length; i++)
			{
			if (El.options[i].value==Value)
				{
				//alert('Setting to index '+i);
				El.options[i].selected=true;
				//El.selectedIndex=i;
				return;
				}
			}
		}
	else if (El.tagName=='INPUT'&&(El.type=='text'||El.type=='password'
		||El.type=='hidden'||El.type=='file'))
		El.value=Value;
	else if (El.tagName=='INPUT'&&(El.type=='button'))
		{
		if (IsFlag(Flags,'t'))
			El.value=Value;
		else
			El.disabled=!Value;
		}
	else if (El.tagName=='INPUT'&&(El.type=='checkbox'))
		El.checked=(Value?'on':'');
	else if (El.tagName=='INPUT'&&(El.type=='radio'))
		El.checked=(Value?'on':'');
	else if (El.tagName=='SPAN')
		//var html='<span id='+AnnounceID+' class=Announce>' + Text + '</span>';
		// For different browsers:
		El.innerHTML=Value;
		//El.outerHTML=html;
	else if (El.tagName=='DIV')
		El.innerHTML=Value;
	else if (El.tagName=='TEXTAREA'&&(El.type=='textarea'))
		El.value=Value;
	else
		alert('Not yet implemented: SetValue: '+El.tagName+'/'+El.type);
	} // SetValue

function Append(ID,Str) // Append to div,textarea,...
	{
	var Prev=GetValue(ID);
	SetValue(ID,Prev+Str);
	} // Append

// Warning! only works when moved to caller
// Package args from one or more forms
// FormArgs ver=11/17/07
function FormArgs(Arglist)
	{
	if (typeof(Arglist)=='undefined' || !Arglist)
		return '';
	var Names=Arglist.split(',');
	var Inside=false;
	var Res='';
	for (i=0; i<Names.length; i++)
		{
		if (Inside)
			Res+='&';
		Inside=true;
		Res+=Names[i]+'='+escape(GetValue(Names[i]));
		}
	//alert(Res);
	return Res;
	} // FormArgs

// GetArg ver=11/9/07
// Returns null if arg is missing, '' if arg is empty string
function GetArg(Argname)
	{
	if (location.search.substr(0,1)=='?')
		Args=location.search.substr(1);
	else
		Args=location.search;
	var Val=null;
	var ThisName;
	var params=Args.split("&");
	for (i=0; i<params.length;i++)
		{
		ThisName=params[i].substring(0,params[i].indexOf('='));
		if (ThisName == Argname)
			Val=params[i].substring(params[i].indexOf('=')+1);
		}
	return Val;
	} // GetArg

// SetCookie ver=5/18/07
// Expires in 6 mo.
function SetCookie(Name,Value)
	{
	Dt = new Date();
	if (Value)
		Dt.setMonth(Dt.getMonth() + 6);
	else
		Dt.setMonth(Dt.getMonth() - 6);
	Exp = Dt.toGMTString();
	var Cookie=Name+'='+escape(Value)+'; expires='+Exp+'; path=/';
	document.cookie=Cookie;
	//alert('SetCookie: '+Name+'='+Value+'; Result: '+Cookie);
	}

// GetCookie ver=8/11/06
// With alerts for debugging
function GetCookie(Name)
	{
	var Cookies=document.cookie;
	//alert('Getting '+Name+' from: '+Cookies);
	// Find name
	// Inside list
	Index=Cookies.indexOf(' '+Name+'=');
	if (Index<0)
		{
		// Or at start of list
		Index=Cookies.indexOf(Name+'=');
		if (Index)
			{
			//alert('Name not found; \'\' returned');
			return '';
			}
		//alert('Cookie found at start of cookie string');
		}
	//else alert('Cookie found inside cookie string');
	// Find value
	Index=Cookies.indexOf('=',Index)+1;
	IndexEnd=Cookies.indexOf(';',Index);
	if (IndexEnd<0)
		IndexEnd=Cookies.length;
	Value=Cookies.substring(Index,IndexEnd);
	//alert('Escaped Value='+Value);
	Value=Value.replace(/\+/g,' ');
	Value=unescape(Value);
	//alert('Returned value='+Value);
	return Value;
	} // GetCookie

// Show ver=1/27/08
function Show(BlockID,ShowIt)
	{
	var ShowVal='block';
	El=GetEl(BlockID);
	if (El==null)
		return null;
	if (El)
		{
		if (El.tagName=='SPAN')
			ShowVal='inline';
		if (ShowIt)
			El.style.display=ShowVal;
		else
			El.style.display='none';
		}
	} // Show

function Toggle(DivID,DefaultIsShowing) // Toggle extent of element
	{
	El=GetEl(DivID);
	if (El==null)
		return null;
	if (El)
		{
		if (El.style.display=='')
			Show(DivID,!DefaultIsShowing);
		else if (El.style.display=='block')
			El.style.display='none';
		else if (El.style.display=='none')
			El.style.display='block';
		}
	} // Toggle

// Visible ver=10/26/08
function Visible(BlockID,ShowIt)
	{
	El=GetEl(BlockID);
	if (El==null)
		return null;
	if (El)
		{
		// IE,FF
		if (ShowIt)
			El.style.visibility='';
		else
			El.style.visibility='hidden';
		}
	} // Visible

