var TLM_APPLET_NAME="ptz_ctrl";		// Name of the Telemetry applet
var TXT_TLM_SPEED=null;				// Reference to textbox used to store the telemetry speed setting
var TXT_TLM_PAD=null;				// Reference to textbox used to store the telemetry numeric pad number
var LAST_TLM_FUNC=null;				// Keep track of the last telemetry function sent
var LAST_TLM_MOVE=null;				// Keep track of whether we're still panning or tilting

/* Variables used for telemetry dome setup */
var TLM_AUTO_PAN=false;
var TLM_PATROL=false;
var TLM_MENU_MODE=false;
var TLM_SETUP=false;
var TLM_WipeOn = 0;
var TLM_LightsOn = 0;
var arrTPatrol=new Array(4);
arrTPatrol[0]=new Array("Activate Patrol Sequence",'1','0','1');
arrTPatrol[1]=new Array("Deactivate Patrol Sequence",'1','0','0');
arrTPatrol[2]=new Array("Start Learning Patrol Sequence",'1','3','1');
arrTPatrol[3]=new Array("Finish Learning Patrol Sequence",'1','3','0');
var arrTZones=new Array(4);
arrTZones[0]=new Array("Stage 1",'3','0','1');
arrTZones[1]=new Array("Stage 2",'3','1','1');
arrTZones[2]=new Array("Stage 3",'3','2','1');
var arrTPresets=new Array(4);
arrTPresets[0]=new Array("Goto Preset",'4','1','1');
arrTPresets[1]=new Array("Save Preset",'4','2','1');
arrTPresets[2]=new Array("Clear Preset",'4','3','1');

// Returns required HTML to create the telemetry applet used for retrieving events
function GetTLMAppletHTML() {
	var s='<applet name="'+TLM_APPLET_NAME+'" codetype="application:java-vm" codebase="/common/" code="ptz_control.class" ARCHIVE="'+TLM_APPLET_NAME+'.jar" width=10 height=10>'+
	'<param name="Target_URL" VALUE="'+BASE_URL+'">'+
	'<param name="host_ip" VALUE="'+TelemParseIp(location.host)+'">'+
	'<param name="udp_port" VALUE="1025">'+
	'<param name="BrowserBackgroundColor" VALUE="2B377F">'+
	'</applet>\n';
	return s;
}
function setTlmSpeedCtrl(txt){TXT_TLM_SPEED=txt;}
function setTlmPadCtrl(txt){TXT_TLM_PAD=txt;}

// Telemetry speed functions
function setTlmSpeed(dir) {
	BtnOnOff('TSpeed'+dir,1);
	var v=parseInt(TXT_TLM_SPEED.value);
	if (dir=="D"){v--;}else{v++;}
	if (v<0){v=0;}
	if (v>15){v=15;}
	TXT_TLM_SPEED.value=v;
}
function getTlmSpeed() {return parseInt(TXT_TLM_SPEED.value);}

// Telemetry wheel action (pan or tilt)
function TW(id,state) {
	if (state==null){state=0;}
	if ((state==2)&&(LAST_TLM_MOVE==1)) {state=0;}
	if (state==2){return;}
	LAST_TLM_MOVE=state;
	BtnOnOff('TlmW'+id,state);
	myTLM.telemetry_setDefaultSpeed(getTlmSpeed());
	if (state==1) {
		if (id==1){myTLM.telemetry_moveNorthWest();}
		if (id==2){myTLM.telemetry_moveNorth();}
		if (id==3){myTLM.telemetry_moveNorthEast();}
		if (id==4){myTLM.telemetry_moveWest();}
		if (id==6){myTLM.telemetry_moveEast();}
		if (id==7){myTLM.telemetry_moveSouthWest();}
		if (id==8){myTLM.telemetry_moveSouth();}
		if (id==9){myTLM.telemetry_moveSouthEast();}
	}
	if ((id==1)||(id==4)||(id==7)||(id==3)||(id==6)||(id==9)) { if(state==0){myTLM.telemetry_sendCommand("B");} }
	if ((id==1)||(id==2)||(id==3)||(id==7)||(id==8)||(id==9)) { if(state==0){myTLM.telemetry_sendCommand("A");} }
}

// Telemetry functions (zoom, focus, lights etc)
function TZoomIn(OnOff)		{ LAST_TLM_FUNC=((OnOff==1)?'1':'C'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc1',OnOff); }
function TZoomOut(OnOff)	{ LAST_TLM_FUNC=((OnOff==1)?'3':'C'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc2',OnOff); }
function TFocusNear(OnOff)	{ LAST_TLM_FUNC=((OnOff==1)?'7':'D'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc5',OnOff); }
function TFocusFar(OnOff)	{ LAST_TLM_FUNC=((OnOff==1)?'9':'D'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc6',OnOff); }
function TIrisOpen(OnOff)	{ LAST_TLM_FUNC=((OnOff==1)?'0':'D'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc9',OnOff); }
function TIrisClose(OnOff)	{ LAST_TLM_FUNC=((OnOff==1)?'5':'D'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc10',OnOff); }
function TWash(OnOff)		{ LAST_TLM_FUNC="*41"+((OnOff==1)?'5':'0'); myTLM.telemetry_sendCommand(LAST_TLM_FUNC); BtnOnOff('TFunc3',OnOff); }
function TWipe(OnOff)		
{ 
	if (TLM_WipeOn == 1)
		TLM_WipeOn = 0;
	else
		TLM_WipeOn = 1;
		
	LAST_TLM_FUNC="*42"+((TLM_WipeOn==1)?'5':'0'); 
	myTLM.telemetry_sendCommand(LAST_TLM_FUNC); 
	BtnOnOff('TFunc7',TLM_WipeOn); 
}

function TLights(OnOff)		
{ 
	if (TLM_LightsOn == 1)
		TLM_LightsOn = 0;
	else
		TLM_LightsOn = 1;
		
	LAST_TLM_FUNC="*43"+((TLM_LightsOn==1)?'5':'0'); 
	myTLM.telemetry_sendCommand(LAST_TLM_FUNC); 
	BtnOnOff('TFunc11',TLM_LightsOn); 
}

function TAutoPatrol()		{ TDoTlmOpt(1,0,(TLM_PATROL?0:1)); }
function TAutoPan() {
	TLM_AUTO_PAN=!TLM_AUTO_PAN;
	myTLM.telemetry_sendCommand('*85800'+(TLM_AUTO_PAN?'1':'0'));
	BtnOnOff('TFunc4',(TLM_AUTO_PAN?'1':'0'))
}
function TSelectCam(cam)	{ 
	var intC=parseInt(cam,10);
	if (isNaN(intC)){intC=-1;}
	if (intC>-1){
		intC+=200;
		myTLM.telemetry_sendCommand('*'+intC.toString());
	}
}

// Telemetry numeric pad
function TPAD(num) { 
	if (TLM_MENU_MODE) { myTLM.telemetry_sendCommand('*81300'+num.toString()); }
	else { TXT_TLM_PAD.value=right('00'+TXT_TLM_PAD.value+num.toString(),2); }
}

// Goto the preset
function TGO(obj) {
	var intP=parseInt(TXT_TLM_PAD.value,10);
	if (isNaN(intP)){intP=-1;}
	if (intP>-1){
		if (TLM_SETUP) { ShowPopup(3,viewerGetProperty(obj,'width')+55,96); }
		else {
			myTLM.telemetry_gotoPreset(intP);
			TXT_TLM_PAD.value="";
		}
	} else { MsgWarning(); }
}
function PKeyPress(key){if (!TLM_SETUP&&(key==13)){TGO();}}

// In case the user moves the mouse off the button the onMouseUp event isn't fired
// This function is designed to catch this condition being envoked by onMouseOut
// CTFE = CheckTelemetryFunctionEnded
function CTFE(){
	//window.status="LAST_TLM_FUNC = " + LAST_TLM_FUNC;
	if (LAST_TLM_FUNC=='1'){TZoomIn(0);}
	else if (LAST_TLM_FUNC=='3'){TZoomOut(0);}
	else if (LAST_TLM_FUNC=='7'){TFocusNear(0);}
	else if (LAST_TLM_FUNC=='9'){TFocusFar(0);}
	else if (LAST_TLM_FUNC=='0'){TIrisOpen(0);}
	else if (LAST_TLM_FUNC=='5'){TIrisClose(0);}
	else if (LAST_TLM_FUNC=='*415'){TWash(0);}
	else if (LAST_TLM_FUNC=='*858001'){TAutoPan(0);}
}
function DoPresetOpt(num,id) {
	var intP=parseInt(num,10);
	if (isNaN(intP)){intP=-1;}
	if (intP>-1){
		if (id==1){myTLM.telemetry_gotoPreset(intP);}
		else if (id==2){myTLM.telemetry_setPreset(intP);}
	}
	BtnOnOff('TlmGO',0);
	ClosePopup();
}
function ClearPresets(num) {
	myTLM.telemetry_sendCommand("*8830"+num);
	BtnOnOff('TlmGO',1);
	ClosePopup();
}
function TelemPatrol() { TDoTlmOpt(1,0,(TLM_PATROL?0:1)); }
function TDoTlmOpt(opt1,opt2,opt3) {
	opt1=parseInt(opt1);opt2=parseInt(opt2);opt3=parseInt(opt3);
	var num=parseInt(TXT_TLM_PAD.value,10);
	if (isNaN(num)){num=-1;}
	if (num>-1){
		TXT_TLM_PAD.value=right('00'+num.toString(),2);
		num=TXT_TLM_PAD.value;
		if (opt1==3) { var s='*814'+opt2+num; }
		else if (opt1==4) { 
			if (opt2==3) { ClearPresets(num); }
			else { DoPresetOpt(num,opt2); }
			return false;
		}
		else {
			var s='*'+((opt1==1)?'854':'858')+opt2+((opt3==1)?num:'00');
			if ((opt2==3)&&(opt3==0)) {s='*811000';}
			BtnOnOff('TFunc'+((opt1==1)?'8':'4'),((opt3==1)?'1':'0'));
		}
		if (opt1==1) { 
			TLM_PATROL=((opt2==0)&&(opt3>0)); 
			if (TLM_PATROL&&TLM_AUTO_PAN){TDoTlmOpt(2,0,0);}
		}
		if (opt1==2) { 
			TLM_AUTO_PAN=((opt2==0)&&(opt3>0)); 
			if (TLM_PATROL&&TLM_AUTO_PAN){TDoTlmOpt(1,0,0);}
		}
		myTLM.telemetry_sendCommand(s);
		ClosePopup();
	} else { MsgWarning(); }
}
function MsgWarning() {alert('Use numeric keys to enter a number 00-99 before performing this action');}
function ClosePopup() { 
	if (typeof(myTlmOptions)!='undefined') { myTlmOptions.style.visibility="hidden"; }
	if (TLM_SETUP){BtnOnOff('TFunc12',0);}
	BtnOnOff('TlmGO',0);
}
function ShowPopup(id,pX,pY) {
	var pX,pY;
	var str=GetTlmPopupHTML(id);
	myTlmOptions.style.left=pX;
	myTlmOptions.style.top=pY;
	myTlmOptions.style.visibility="visible";
	myTlmOptions.innerHTML=str;
	if (id==2){BtnOnOff('TFunc12',1);}
	return false;
}
function GetTlmPopupHTML(id) {
	var w=220;
	if (id==1) { 
		var arrTOpts=arrTPatrol;
		var sHeader="Telemetry Patrol";
	} else if (id==2) { 
		var arrTOpts=arrTZones;
		var sHeader="Zone Define";
		w=130;
	} else if (id==3) { 
		var arrTOpts=arrTPresets;
		var sHeader="Presets";
		w=130;
	}

	var str='<div style="position:absolute;">&nbsp;</div>\n'+
	'<table border=0 cellpadding=0 cellspacing=0 width='+w+' class=TDALL>\n'+
	'<tr bgcolor='+COLOUR5+'><td colspan=2>'+B(3,5)+'</td></tr>\n'+
	'<tr bgcolor='+COLOUR5+'>\n'+
	'	<td align=left>&nbsp;&nbsp;<font class=ABlue><b>'+sHeader.replace(/ /gi,"&nbsp;")+'</b></td>\n'+
	'	<td align=right><a href="javascript:ClosePopup();" class=ABlue><u>'+arrL[4][9]+'</u></a>&nbsp;&nbsp;</td>\n'+
	'</tr>\n'+
	'<tr bgcolor='+COLOUR5+'><td colspan=2>'+B(3,5)+'</td></tr>\n';
	for(i in arrTOpts) {
		str+=""+
		"<tr><td colspan=2 onMouseover=\"this.style.backgroundColor='"+COLOUR1+"';return true;\" onMouseout=\"this.style.backgroundColor='"+COLOUR2+"';return true;\" onClick=\"TDoTlmOpt('"+arrTOpts[i][1]+"','"+arrTOpts[i][2]+"','"+arrTOpts[i][3]+"');\" style=\"cursor:pointer;\">\n"+
		"	<img src='images/b.gif' width=3 height=5><br>\n"+
		"	&nbsp;&nbsp;"+
		arrTOpts[i][0]+
		"<br>\n"+
		"	<img src='images/b.gif' width=3 height=5><br>\n"+
		"</td></tr>\n";
	}
	str+='</table>';
	return str;
}
function CT2(telem,state) {
	var id=4;
	if (state==1) { 
		if (telem==1){id=4;}
		if (telem==2){id=2;}
		if (telem==3){id=6;}
		if (telem==4){id=8;}
		myTLM.telemetry_sendCommand("*81200"+id);
	}
	TlmBtnOnOff('TLMC'+telem,state);
}
function TelemMenuMode(OnOff) { 
	TLM_MENU_MODE=OnOff;
	myTLM.telemetry_sendCommand("*81000"+((OnOff)?'0':'1'));
	FRM.elements['cmdEnterMenu'].value=(TLM_MENU_MODE?'*Menu Open*':'Open Menu');
	TlmBtnOnOff('cmdEnterMenu',(OnOff?1:0));
}
function TelemSelectMenuItem(id) { myTLM.telemetry_sendCommand("*81100"+id); }

function TelemParseIp(StringIpData)
{
	var split=StringIpData.indexOf(":");
	if (split==-1) 
	{ 
		return StringIpData; 
	}
	else if (split==0) 
	{ 
		return ""; 
	}
	else 
	{
		return StringIpData.substring(0,split);
	}
}

