// JavaScript Document
var DataInitialized = false;
var TimeoutID = 0;
var colorRED = "#FF0000";
var colorDEFAULT = "#33FF00";	// css defined color
var colorGREEN = "#33FF00";
var colorWHITE = "#FFFFFF";
var colorYELLOW = "#FFFF00";
var ExposureInProgress1 = false;
var ExposureInProgress2 = false;
var LastTscope1Status = "";
var LastTscope2Status = "";

function chgImg(direction) 
	{
	if (document.images) 
		{
		ImgNum = ImgNum + direction;
		pImgNum = ImgNum + 1;
		if (ImgNum > ImgLength) 
			{
			ImgNum = 0;
			pImgNum = 1;
			}
		if (ImgNum < 0) 
			{
			ImgNum = ImgLength;
			}
		if (pImgNum > ImgLength)
			{
			pImgNum = 0;
			}
		window.clearInterval(run);
		chgImgFadeOUT();
		run = setInterval("chgImgFadeIN()", imgTransition);
		}
	}


function MMeffectAppearFade(targetElement, duration, from, to, toggle)
{
	Spry.Effect.DoFade(targetElement, {duration: duration, from: from, to: to, toggle: toggle});
}

function chgImgFadeIN()
	{
	window.clearInterval(run);
	document.slideshow.src = NewImg[ImgNum];
	document.IPreload.src = NewImg[pImgNum];
	MMeffectAppearFade(document.slideshow, imgTransition, 0, 100, false);
	run = setInterval("chgImg(1)", delay);
	}

function chgImgFadeOUT()
	{
	MMeffectAppearFade(document.slideshow, imgTransition, 100, 0, false);
	}

function auto() 
	{
	if (lock == true) 
		{
		lock = false;
		window.clearInterval(run);
		}
	else if (lock == false) 
		{
		lock = true;
		run = setInterval("chgImg(1)", delay);
	   	}
	}
	

//reloads the window if Nav4 resized
function MM_reloadPage(init) 
	{  
  	if (init==true) with (navigator) 
		{
		if ((appName=="Netscape")&&(parseInt(appVersion)==4)) 
			{
		    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; 
			}
		}
  	else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) 
		{
		location.reload();
		}
	}
MM_reloadPage(true);

/* SmoothSlide Element by Id - as first seen in:
* http//www.dynamicdrive.com/forums © by
* John Davenport Scheuer - username:jscheuer1
* This notice must remain for leagal use */
function slidex (id, x)
{
slidex.obj=document.layers? document.layers[id] : document.all? document.all[id].style : document.getElementById? document.getElementById(id).style : null;
if(slidex.obj&&!slidex.going)
	{
	if(slidex.obj.left=="")
		{
		slidex.obj.left = "0";
		}
	slidex.xa=x-parseInt(slidex.obj.left);
	slidex.going=1;
	slidex.doit();
	}
}

slidex.px=document.layers? '' : 'px';

slidex.doit=function() 
{
	if(slidex.xa>0)
		{
		slidex.obj.left = parseInt(slidex.obj.left) + slidex.speed + slidex.px;
		slidex.xa-=slidex.speed;
		setTimeout("slidex.doit()", slidex.xa<5*slidex.speed? 30 : slidex.xa<10*slidex.speed? 20 : 15);
		}
	else if(slidex.xa<0)
		{
		slidex.obj.left = parseInt(slidex.obj.left) - slidex.speed + slidex.px;
		slidex.xa+=slidex.speed;
		setTimeout("slidex.doit()", slidex.xa>5*slidex.speed? 30 : slidex.xa>10*slidex.speed? 20 : 15);
		}
	else
		slidex.going=0;
}
//Configure speed here (1-5). Note: the x in calls for slidex(id, x) should be evenly divisible by the speed value:
slidex.speed=40;


// load xml data from website...
function loadMyData()
{
var d = new Date();
Observatory.setURL(".//obsdata.xml?cacheBuster=" + d.getTime());
Observatory.setXPath("Obs");
Observatory.loadData();

// service most recent picture upload on observatory page

/*try{
alert("height = " + document.getElementById("Cam2ResizeThumbnail").height);
}
catch(err)
{	alert("error");}

*/}

// service new data arrival tasks
function Observatory_NewDataArrival(dta)
{
	var FColor = colorDEFAULT;

	// new data arrival tasks
	Observatory.dataWasLoaded=false;

	// update internal variables
	LastTscope1Status = Tscope1Status;	// prevent repeats of same data due to downloading or browser 

	if (isNaN(dta[0]["Exposure1Count"])==false)
		{
		if((Tscope1Status!=dta[0]["Telescope1Status"])||(ExpCount1!=dta[0]["Exposure1Count"]))
			{
			Tscope1Status=dta[0]["Telescope1Status"];
			if((ExposureInProgress1==false)&&(Tscope1Status=="Exposing"))	// exposure start
				{
				ExposureInProgress1=true;
				ExpCount1= dta[0]["Exposure1Count"];		
				if(ExpCount1!=""){UpdateTimeCounter("divExposure1Count",ExpCount1);}
				}
			if(Tscope1Status!="Exposing")
				{
				ExposureInProgress1=false;
				ExpCount1=0;
				}
			}
		}

	LastTscope2Status = Tscope2Status;	
	if (isNaN(dta[0]["Exposure2Count"])==false)
		{
		if((Tscope2Status!=dta[0]["Telescope2Status"])||(ExpCount2!=dta[0]["Exposure2Count"]))
			{
			Tscope2Status=dta[0]["Telescope2Status"];	
			if((ExposureInProgress2==false)&&(Tscope2Status=="Exposing"))	// exposure start
				{
				ExposureInProgress2=true;
				ExpCount2= dta[0]["Exposure2Count"];		
				if(ExpCount2!=""){UpdateTimeCounter("divExposure2Count",ExpCount2);}
				}
			if(Tscope2Status!="Exposing")
				{
				ExposureInProgress2=false;
				ExpCount2=0;
				}
			}
		}

	TempWarmRoom = dta[0]["TempWarmRoom"];
	TempObservatory = dta[0]["TempScopeRoom"];
	TempOutside = dta[0]["CsAmbientTemp"];
	TempCam1=dta[0]["Camera1Temp"];
	TempCam2=dta[0]["Camera2Temp"];
	TempOptics1=dta[0]["Primary1Temp"];
	TempOptics2=dta[0]["Primary2Temp"];
	TwilightStrt =dta[0]["TwilightStrt"];
	TwilightEnd = dta[0]["TwilightEnd"];
	MoonRise = dta[0]["MoonRise"];
	MoonSet = dta[0]["MoonSet"];	
	MoonPhase = dta[0]["MoonPhase"];
	MoonAlt = dta[0]["MoonAlt"];
	if(MoonAlt>10){FColor = colorYELLOW;}
	document.getElementById("divMoonAlt").style.color=FColor;

// update webpage
	document.getElementById("divTempWarmRoom").innerHTML = RetTempText(TempWarmRoom,0);
	document.getElementById("divTempObservatory").innerHTML = RetTempText(TempObservatory,0);
	document.getElementById("divTempOutside").innerHTML = RetTempText(TempOutside,0);
	if(TempCam1!=""){document.getElementById("divTempCam1").innerHTML = RetTempText(TempCam1,0);}
	if(TempCam2!=""){document.getElementById("divTempCam2").innerHTML = RetTempText(TempCam2,0);}
	if(TempOptics1!=""){document.getElementById("divTempOptics1").innerHTML = RetTempText(TempOptics1,0);}
	if(TempOptics2!=""){document.getElementById("divTempOptics2").innerHTML = RetTempText(TempOptics2,0);}
	document.getElementById("divScope1Status").innerHTML = Tscope1Status;
	document.getElementById("divScope2Status").innerHTML = Tscope2Status;
	document.getElementById("divTwilightStrt").innerHTML = SecsToHHMMSS(TwilightStrt);
	document.getElementById("divTwilightEnd").innerHTML = SecsToHHMMSS(TwilightEnd);	
	document.getElementById("divMoonRise").innerHTML = SecsToHHMMSS(MoonRise);
	document.getElementById("divMoonSet").innerHTML = SecsToHHMMSS(MoonSet);
	document.getElementById("divMoonPhase").innerHTML = MoonPhase + "%";
	document.getElementById("divMoonAlt").innerHTML = MoonAlt;

	// update field colors based on text..
	document.getElementById("divObsStatus").style.color=SelectTextColor(dta[0]["ObservatoryStatus"]);
	document.getElementById("divMountStatus").style.color=SelectTextColor(dta[0]["MountStatus"]);
	document.getElementById("divRoofState").style.color=SelectTextColor(dta[0]["Roof"]);
	document.getElementById("divScope1Status").style.color=SelectTextColor(Tscope1Status);
	document.getElementById("divScope2Status").style.color=SelectTextColor(Tscope2Status);
	document.getElementById("divGuider1").style.color=SelectTextColor(dta[0]["Guider1"]);
	document.getElementById("divGuider2").style.color=SelectTextColor(dta[0]["Guider2"]);	
	document.getElementById("divTempOptics1").style.color=SelectTextColor(dta[0]["Primary1Temp"]);	
	document.getElementById("divTempOptics2").style.color=SelectTextColor(dta[0]["Primary2Temp"]);		
	document.getElementById("divCsClouds").style.color=SelectTextColor(dta[0]["CsClouds"]);		
	document.getElementById("divCsWind").style.color=SelectTextColor(dta[0]["CsWind"]);		
	document.getElementById("divCsDark").style.color=SelectTextColor(dta[0]["CsDark"]);		
	document.getElementById("divCsRain").style.color=SelectTextColor(dta[0]["CsRain"]);		
	WriteTargetList(dta);		// write out current target listings
	DataInitialized = true;
}

// service new data arrival tasks
function Weather_NewDataArrival(dta)
{
	var FColor = colorDEFAULT;
	
	// new data arrival tasks
	Observatory.dataWasLoaded=false;
		
// update webpage
	document.getElementById("divCsClouds").style.color=SelectTextColor(dta[0]["CsClouds"]);		
	document.getElementById("divCsWind").style.color=SelectTextColor(dta[0]["CsWind"]);		
	document.getElementById("divCsDark").style.color=SelectTextColor(dta[0]["CsDark"]);		
	document.getElementById("divCsRain").style.color=SelectTextColor(dta[0]["CsRain"]);		
}


// update time counters and colors on page
function UpdateTimeCounter(id,cnt)
{
	document.getElementById(id).innerHTML = SecsToHHMMSS(cnt);
	// set color
	var fColor=colorDEFAULT;
	if (cnt>0){fColor=colorWHITE;}
	document.getElementById(id).style.color=fColor;
}

// return formatted temperature. optional adjustment by xx degrees
function RetTempText(temp,offset)
{
	if (isNaN(temp)==true){return("N/A");}
	temp = temp*1 + offset*1;
	var p= new Number(temp);
	return(String(p.toFixed(1)) + " F");
}

// liven up the temperatures!
function TempLiven()
{
	if (TempWarmRoom == -1){return;}
	var n = new Number(Math.random()/2-.25);
	var o = n.toFixed(1);
	var h = Math.round(Math.random()*7);
	switch(h)
		{
		case 0:if(TempWarmRoom!=""){document.getElementById("divTempWarmRoom").innerHTML = RetTempText(TempWarmRoom,o);break;}
		case 1:if(TempObservatory!=""){document.getElementById("divTempObservatory").innerHTML = RetTempText(TempObservatory,o);break;}
		case 2:if(TempOutside!=""){document.getElementById("divTempOutside").innerHTML = RetTempText(TempOutside,o);break;}
		case 3:if(TempCam1!=""){document.getElementById("divTempCam1").innerHTML = RetTempText(TempCam1,o);break;}
		case 4:if(TempCam2!=""){document.getElementById("divTempCam2").innerHTML = RetTempText(TempCam2,o);break;}
		case 5:if(TempOptics1!=""){document.getElementById("divTempOptics1").innerHTML = RetTempText(TempOptics1,o);break;}
		case 6:if(TempOptics2!=""){document.getElementById("divTempOptics2").innerHTML = RetTempText(TempOptics2,o);break;}
		}
}	

// select text color
function SelectTextColor(txt)
{
	var fColor;	
	switch(txt)	
		{
		case "Offline":		// RED
		case "Closed":		// 
		case "N/A":
		case "Cloudy":
		case "Vcloudy":
		case "Light":
		case "VLight":
		case "Rain":
		case "Wet":
		case "Windy":
		case "Vwindy":
			fColor=colorRED;break;
	
		case "Exposing":	// WHITE
		case "Tracking":
		case "Running":
		case "Online":
		case "Open":
			fColor=colorWHITE;break;

		default: 			// CSS color for lcdPanelData
			fColor=colorDEFAULT;break;
		}
	return(fColor);	
}

function ObsSetTimeout()
{
	if(TimeoutID>0){clearTimeout(TimeoutID);}
	setTimeout ("Observatory_OneSecond()",1000);
}

// Observatory one second maintenance
function Observatory_OneSecond()
{
var dta;

	// new data arrival tasks
	if(Observatory.dataWasLoaded == true)
		{
		dta = Observatory.getData();
		Observatory_NewDataArrival(dta);
		ObsSetTimeout();
		return;
		}
	if(DataInitialized==false){	ObsSetTimeout();return;}

	dta = Observatory.getData();
	
	// update clocks

// initialize global clock vars from xml object
	if(TimeLocal==-1){if (isNaN(dta[0]["LocalTime"])==false){TimeLocal=Number(dta[0]["LocalTime"]);}}
	if(TimeUTC==-1){if (isNaN(dta[0]["UTC"])==false){TimeUTC=Number(dta[0]["UTC"]);}}
	if(TimeSidereal==-1){if (isNaN(dta[0]["SiderealTime"])==false){TimeSidereal=Number(dta[0]["SiderealTime"]);}}
	
	// update clocks
	if (TimeLocal> -1)	// xml data has been read in...
		{
		TimeLocal=IncrementTime(TimeLocal);
		document.getElementById("timeLocal").innerHTML=SecsToHHMMSS(TimeLocal);
		TimeUTC=IncrementTime(TimeUTC);
		document.getElementById("timeUTC").innerHTML=SecsToHHMMSS(TimeUTC);
		TimeSidereal=IncrementTime(TimeSidereal);
		document.getElementById("timeSidereal").innerHTML=SecsToHHMMSS(TimeSidereal);
		}


		// update exposure counters
		if(ExpCount1>0)
			{
			ExposureCountdown("divExposure1Count","divScope1Status",--ExpCount1);
			}
		if(ExpCount1==0)
			{
			ExposureInProgress1=false;
			}
		if(ExpCount2>0)
			{
			ExposureCountdown("divExposure2Count","divScope2Status",--ExpCount2);
			}		
		if(ExpCount2==0)
			{
			ExposureInProgress2=false;
			}

	// liven up the temperature readings
	TempLiven()
	
	// do again in one second
	ObsSetTimeout();
}

// Weather one second maintenance
function Weather_OneSecond()
{

	var dta = Observatory.getData();
	
	// new data arrival tasks
	if(Observatory.dataWasLoaded == true)
		{Weather_NewDataArrival(dta);}

}


// handle exposure countdown timers
function ExposureCountdown(idCount,idStatus,cnt)
{
	UpdateTimeCounter(idCount,cnt);
	if(cnt<=0){document.getElementById(idStatus).innerHTML="Downloading";}
}

// takes Seconds, returns string in HH:MM:SS format
function SecsToHHMMSS(lsecs)
{
var h=String(Math.floor(lsecs/3600));
var m=String(Math.floor((lsecs-(h*3600))/60));
var s=String(Math.floor(lsecs-(h*3600)-(m*60)));
if(h.length==1) {h="0"+h;}
if(m.length==1) {m="0"+m;}
if(s.length==1) {s="0"+s;}
return(h+":"+m+":"+s);
}

// takes Seconds, returns string in HH:MM format
function SecsToHHMM(lsecs)
{
var h=String(Math.floor(lsecs/3600));
var m=String(Math.floor((lsecs-(h*3600))/60));
if(h.length==1) {h="0"+h;}
if(m.length==1) {m="0"+m;}
return(h+":"+m);
}

function IncrementTime(lsecs)
{
	lsecs = lsecs+1;
	if (lsecs>86400)
		{
		lsecs=0;
		}
	return(lsecs);
}

function WriteTargetList(dta)
{
var ldta="";
var lStyle="";
var i,suf;
var NumTargets=dta[0]["NumTargets"];

// Blue paneled area, need embedded styling here...
ldta=  "<div style='background-color:#00002F;border:thin;border-color:#009;border-width:1;border-style:solid;padding-top:5px;overflow:hidden;z-index:0;height:" + String(75+(NumTargets*18)) + "px;" +
	"position:absolute;left:60px;top:5px;width:920px;z-index:9;'>";

ldta=ldta + "<div id='ImageQue' class='LCDItemHeading' style='text-align:left;'>&nbsp;&nbsp;&nbsp;&nbsp;Target List<br />";
ldta=ldta + "<div class='PanelTenColContainerLeft'>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'></div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'></div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left;width:175px;'>&nbsp;&nbsp;J2000 Coordinates</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;Rise&nbsp;&nbsp;Set</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;Altitude</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left;width:175px;'>&nbsp;&nbsp;Scope #1</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left;width:175px;'>&nbsp;&nbsp;Scope #2</div>";

ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;User</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;Target</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;RA</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;DEC</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;(hh:mm)</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left'>&nbsp;&nbsp;Min-Now</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left;width:175px;'>&nbsp;&nbsp;Bin-Secs-Filter-Comp</div>";
ldta=ldta + "<div class='LCDItemDesc' style='text-align:left;width:175px;'>&nbsp;&nbsp;Bin-Secs-Filter-Comp</div>";

if(NumTargets==0)
	{	ldta=ldta + "<div class='LCDItemData' style='width:250px;float:left;'>&nbsp;&nbsp;No Targets Scheduled.</div>";}
else
	{
	for(i=1;i<=NumTargets;i++)
		{
		suf="_" + String(i);																					// form target number
		ldta= ldta + "<div class='LCDItemData' style='width:175px;'>" + dta[0]["C2Params"+suf] + "</div>"		// camera 2 params
		ldta= ldta + "<div class='LCDItemData' style='width:175px;'>" + dta[0]["C1Params"+suf] + "</div>"		// camera 1 params		
		// altitude with color flag
		if(Number(dta[0]["AltCurrent"+suf]) < Number(dta[0]["AltMinimum"+suf]))	{lStyle=" style='color:" + colorRED + ";'>";} else{lStyle=">";}
		ldta= ldta + "<div class='LCDItemData'" + lStyle + dta[0]["AltMinimum"+suf] + " " + dta[0]["AltCurrent"+suf] + "</div>";		// altitude

		ldta= ldta + "<div class='LCDItemData'>" + SecsToHHMM(dta[0]["TgRise"+suf]) + " " + SecsToHHMM(dta[0]["TgSet"+suf]) + "</div>";		// rise set
		ldta= ldta + "<div class='LCDItemData'>" + dta[0]["TgDec"+suf] + "</div>"								// dec
		ldta= ldta + "<div class='LCDItemData'>" + dta[0]["TgRa"+suf] + "</div>"								// ra
		ldta= ldta + "<div class='LCDItemData'>" + dta[0]["Target"+suf] + "</div>"								// target
		ldta= ldta + "<div class='LCDItemData'>" + dta[0]["User"+suf] + "</div>"								// user		
		}
	}

ldta=ldta + "</div></div></div>";
document.getElementById("TargetList").innerHTML=ldta;	// write it all out
}

function limitText(limitField, limitNum) 
{
	if (limitField.value.length > limitNum) {limitField.value = limitField.value.substring(0, limitNum);} 
}

// takes button ID, increments it and updates value. "|" for delimiter
function ButtonClick(id, list)
{

var i=0;
	var slist = list.split("|");
	var scur = String(document.getElementById(id).value); 
	var slen=slist.length;

	if (slen < 2){return;}
	
	// find current index
	for(i=0;i<slen;i++)
		{
		if(String(slist[i])==scur)
			{
			if(i>=(slen-1))	{i=-1;}
			document.getElementById(id).value = slist[i+1];
			document.getElementById(id).innerHTML=slist[i+1];
			return;
			}
		}
}

// clear all image parameters in form
function ClearParams()
{
	var i,j,id;
	for(i=1;i<3;i++)
		{
		for (j=1;j<5;j++)
			{
			if((i>1)&&(j>2)){break;}
			document.getElementById(RetId(i,"Bin",j)).value = "1";
			document.getElementById(RetId(i,"Secs",j)).value = "0";
			document.getElementById(RetId(i,"Cnt",j)).value = "0";
			if(i==1)
				{
				document.getElementById(RetId(i,"Filter",j)).value = "Clear";
				document.getElementById(RetId(i,"Rot",j)).value = "0";
				}
			}
		}
	document.getElementById("MinZenDist").value = "0";
	document.getElementById("MoonMaxAlt").value = "0";
	document.getElementById("MinMoonSep").value = "0";
	document.getElementById("MaxMoonPhase").value = "0";	
	CalculateCost();
}

// calculate total cost
function CalculateCost()
{
	var TMCam1=new Number();;
	var TMCam2=new Number();;
	var i,j,id;
	var secs=new Number();
	var cnt = new Number();
	
	for(i=1;i<5;i++)
	{
		secs=document.getElementById(RetId(1,"Secs",i)).value;
		cnt=document.getElementById(RetId(1,"Cnt",i)).value;
		if((secs*cnt)==0)
			{SetColor(1,i,colorRED);}
		else
		{
			TMCam1+=(secs*cnt);
			SetColor(1,i,colorGREEN);
		}
	}
	for(i=1;i<3;i++)
	{
		secs=document.getElementById(RetId(2,"Secs",i)).value;
		cnt=document.getElementById(RetId(2,"Cnt",i)).value;
		if((secs*cnt)==0)
			{SetColor(2,i,colorRED);}
		else
		{
			TMCam2+=(secs*cnt);
			SetColor(2,i,colorGREEN);
		}
	}
	// update max time
	
	var TotalSecs=Math.max(TMCam1,TMCam2);
	document.getElementById("SecondTotal").innerHTML = TotalSecs;	

	var TotalMinutes = new Number(TotalSecs/60);		
	document.getElementById("MinuteTotal").innerHTML = TotalMinutes.toFixed(2);		


	// adjust going rate here for moon params
	var Rate=new Number(.0001666);
	document.getElementById("SecondRate").innerHTML = "$" + Rate.toFixed(5);		

	// total to submit to paypal
	var TotalCost = new Number(Rate*TotalSecs);
	document.getElementById("TotalCost").innerHTML = "$" + TotalCost.toFixed(2);		
			
}

// set color of set
function SetColor(lScope,lSet,lColor)
{
	document.getElementById(RetId(lScope,"Secs",lSet)).style.color=lColor;
	document.getElementById(RetId(lScope,"Cnt",lSet)).style.color=lColor;
	document.getElementById(RetId(lScope,"Rot",lSet)).style.color=lColor;
	document.getElementById(RetId(lScope,"Bin",lSet)).style.color=lColor;
	document.getElementById(RetId(lScope,"Filter",lSet)).style.color=lColor;	
}

// return id of parameter
function RetId(lScope,lFld,lSet)
{
	return "Scope" + lScope + lFld + lSet;	
}

// validate minutes and count field, recalculate cost
function ValidateNCalc(id,upr,lwr,def)
{
	ValidateNumeric(id,upr,lwr,def);
	CalculateCost();
}

// check data is numeric and within range
function ValidateNumeric(id, upr, lwr, def)
{
	var dta=document.getElementById(id).value;
	if(isNaN(dta)==true)
		{alert("This field must only contain numbers between " + lwr + " to " + upr + "!!");}
	else if((dta>upr)||(dta<lwr))
		{alert("The range for this field is from " + lwr + " to " + upr + "!!");}
	else
		{return(true);}
	document.getElementById(id).value = def;			  
	return(false);
}

// apply preset
function ApplyPreset()
{

	var	 lType=	document.getElementById("presetType").value;			  
	var	 lSecs=	document.getElementById("presetSecs").value;			  
	var	 lFrames=document.getElementById("presetFrames").value;			  
	var	 lBin=document.getElementById("presetBin").value;			  
	var	 lRot=document.getElementById("presetRot").value;			  	
	var	 lFilter=document.getElementById("presetFilter").value;			  	
	var S2M=300;	// maximum seconds for fsq...
	

	ClearParams();

// one set current filter	
	if(lType=="Luminence")
		{
		LinePreset(1,1,lSecs,lFrames,lBin,lRot,lFilter);
		LinePreset(2,1,Math.min(lSecs,S2M),lFrames,lBin,0,"Color");
		}

	else if(lType=="RGB")
		{
		LinePreset(1,1,lSecs,lFrames,lBin,lRot,"Red");
		LinePreset(1,2,lSecs,lFrames,lBin,lRot,"Green");
		LinePreset(1,3,lSecs,lFrames,lBin,lRot,"Blue");
		LinePreset(2,1,Math.min(lSecs,S2M),lFrames,lBin,0,"Color");		
		LinePreset(2,2,Math.min(lSecs,S2M)/2,lFrames,lBin,0,"Color");
		}

	else if(lType=="LRGB")
		{

LinePreset(1,1,lSecs,lFrames,lBin,lRot,"Red");
		LinePreset(1,2,lSecs,lFrames,lBin,lRot,"Green");
		LinePreset(1,3,lSecs,lFrames,lBin,lRot,"Blue");
		LinePreset(1,4,lSecs,lFrames,lBin,lRot,"Clear");
		LinePreset(2,1,Math.min(lSecs,S2M),lFrames,lBin,0,"Color");		
		LinePreset(2,2,Math.min(lSecs,S2M)/2,lFrames,lBin,0,"Color");
}

	else if(lType=="HA-SII-OIII")
		{
		LinePreset(1,1,lSecs,lFrames,lBin,lRot,"HA");
		LinePreset(1,2,lSecs,lFrames,lBin,lRot,"SII");
		LinePreset(1,3,lSecs,lFrames,lBin,lRot,"OIII");
		LinePreset(2,1,Math.min(lSecs,S2M),lFrames,lBin,0,"Color");		
		LinePreset(2,2,Math.min(lSecs,S2M)/2,lFrames,lBin,0,"Color");
}
	else
		{}

	CalculateCost();
}

// apply preset to one line
function LinePreset(lScope,lIndex,lSecs,lFrames,lBin,lRot,lFilter)
{

	document.getElementById("Scope" + lScope + "Secs" + lIndex).value=lSecs;
	document.getElementById("Scope" + lScope + "Cnt" + lIndex).value=lFrames;
	document.getElementById("Scope" + lScope + "Filter" + lIndex).value=lFilter;
	document.getElementById("Scope" + lScope + "Bin" + lIndex).value=lBin;
	document.getElementById("Scope" + lScope + "Rot" + lIndex).value=lRot;
}

// apply custom preset
function CustomPreset(id)
{

	var	 lType,lSecs,lFrames,lBin,lRot,lFilter;

	// set preset and sequence values
	switch(id)
	{
		case "presetQuickBW":
			lType="Luminence";lSecs=60;lFrames=5;lBin=2;lRot=0;lFilter="Clear";break;
			
		case "presetQuickCOLOR":
			lType="RGB";lSecs=120;lFrames=5;lBin=2;lRot=0;lFilter="Clear";break;
			
		case "presetLRGBCOLOR":
			lType="LRGB";lSecs=240;lFrames=10;lBin=1;lRot=0;lFilter="Clear";break;

		case "presetHiDefBW":
			lType="Luminence";lSecs=120;lFrames=8;lBin=1;lRot=0;lFilter="Clear";break;
			
		case "presetHiDefCOLOR":
			lType="RGB";lSecs=240;lFrames=10;lBin=1;lRot=0;lFilter="Clear";break;
			
		case "presetNarrowband":
			lType="HA-SII-OIII";lSecs=2700;lFrames=1;lBin=1;lRot=0;lFilter="Clear";break;
			
		default:
			return;
	}
	
	// set preset cells
	document.getElementById("presetType").value=lType;
	document.getElementById("presetSecs").value=lSecs;
	document.getElementById("presetFrames").value=lFrames;	  
	document.getElementById("presetBin").value=lBin;
	document.getElementById("presetRot").value=lRot;		  	
	document.getElementById("presetFilter").value=lFilter;			  	

	// apply it
	ApplyPreset();

	// modify individual cells
	switch(id)
	{
		case "presetLRGBCOLOR":
			document.getElementById(RetId(1,"Secs",4)).value=120;

		case "presetNarrowband":
			document.getElementById(RetId(1,"Secs",3)).value=240;

	}

	// final tally
	CalculateCost();

}

function test(dta)
{
	
	if (dta==undefined)
		{alert("in Test");}
	else
		{alert(dta);}
}

// update target RA, DEC, Desc from user click
function TargetUpdate(ds,lRow)
{
	var cRow = ds.getRowByID(lRow);
	// set object name
	document.getElementById("Description").value = cRow.ObjectName;	
	// set ra
	var slist = cRow.RaNow.split(" ");
	document.getElementById("RaD").value = slist[0];	
	document.getElementById("RaM").value = slist[1];		
	document.getElementById("RaS").value = slist[2];		
	// set dec
	var slist = cRow.DecNow.split(" ");
	document.getElementById("DecD").value = slist[0];	
	document.getElementById("DecM").value = slist[1];		
	document.getElementById("DecS").value = slist[2];		
	// switch back to User Setup tab
	TabbedPanels1.showPanel(0);
}

// get target info from web
function TargetInfo(ds,lRow)
{
	var cRow = ds.getRowByID(lRow);
	open("http://www.google.com/search?q="+cRow.ObjectName);
}

function TargetType(index)
{
	var ltxt = "StarsVariableBright";
	var htxt = "Bright Stars";
	switch(index)
		{
			case 0: 
				ltxt="StarsBright";
				htxt="Bright Stars";
				break;
			case 1: 
				ltxt="StarsVariableBright";
				htxt="Variable Stars";
				break;
			case 2: 
				ltxt="StarsDoubleBright";
				htxt="Double Stars";
				break;
			case 3: 
				ltxt="OpenClusters";
				htxt="Open Clusters";				
				break;
			case 4: 
				ltxt="GlobularClusters";
				htxt="Globular Clusters";				
				break;
			case 5: 
				ltxt="BrightNebula";
				htxt="Bright Nebula";				
				break;
			case 6: 
				ltxt="DarkNebula";
				htxt="Dark Nebula";				
				break;
			case 7: 
				ltxt="Galaxies";
				htxt="Galaxies";				
				break;
		}
		document.getElementById("TargetHeader").innerHTML = htxt;
		tg.setXPath("targets/" + ltxt + "/Obj");
}
	