
// スクリプト実行結果ステータスのみをチェック
function script_exec_callback(data){
	if (data.Result != "Success"){
		if(data.ErrorText.match(/CertifyUpdateSession failed/i)) {
			$.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"});
		} else {
			$.mobile.changePage( "#error_back_dialog", {transition: "pop",role:"dialog"});
		}
	} 
}

// UI コンポーネントの xml 属性値を検索取得
function getAttrVal(node,name){
	var val = "";
	var attr =  node.attributes;
	for (var i=0; i<attr.length; i++){
		if (attr[i].nodeName == name){
			val = attr[i].nodeValue;
		}
	}
	return val;
}

// チェックボックスのチェック状態を data に格納されたシグナル値で更新する
function apply_ui(data){
	var pval;
	var	flag;

	if (data.SIGNAL_VALUE != null){
		pval = parseInt(data.SIGNAL_VALUE,16);

		flag = ((pval & (1 << 5)) != 0);
		if ($("#alarm_checkbox").checked != flag) $("#alarm_checkbox").attr("checked",flag).checkboxradio("refresh");

	}
}

// REMOLAB/I2C_TMP102_READ スクリプト実行結果のイベントハンドラ。
function get_temperature_handler(data){
	if (data.Result != "Success"){
		if(data.ErrorText.match(/CertifyUpdateSession failed/i)) {
			$.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"});
		} else {
			$.mobile.changePage( "#error_back_dialog", {transition: "pop",role:"dialog"});
		}
		return;
	}
	// jqplot ライブラリを使用して温度ゲージを表示
	var series1 = [ parseFloat(data.ResultParams.temperature)];
	var plot1 = $.jqplot('example',[series1],{
		seriesDefaults: {
			renderer: $.jqplot.MeterGaugeRenderer,
			rendererOptions: {
				label: "温度 " + data.ResultParams.temperature + " ℃",
				labelPosition: 'bottom',
				showTickLabels: true,
				min:-30,
				max:40,
				ticks:[-30,-20,-10,0,10,20,30,40],
				intervals:[-20,-10,0,10,20,30,40],
                intervalColors:['#9999FF','#99CCFF','#99FFFF','#99FFCC','#99FF99','#CCFF99','#FFCC99']
			}
		},
		grid:{
	    	background:'#E0E0E0',
			borderColor:'#999999'
		}
   });
}


// REMOLAB/SIGNAL_GET スクリプト実行結果のイベントハンドラ。
function get_alarm_signal_handler(data){
	if (data.Result != "Success"){
		if(data.ErrorText.match(/CertifyUpdateSession failed/i)) {
			$.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"});
		} else {
			$.mobile.changePage( "#error_back_dialog", {transition: "pop",role:"dialog"});
		}
		return;
	}
	if (data.ResultParams.STATUS != "OK"){
		$.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"});
		return;
	}
	//
	apply_ui(data.ResultParams);
}

// リモートデバイスの温度センサー値を取得
function get_temperature(){
	var params = {};
	params["device"] = target_xbee_device;
	script_exec("REMOLAB/I2C_TMP102_READ",params,"get_temperature_handler");
}

// リモートデバイスのシグナル状態(Yellow LED)を取得
function get_alarm_signal(){
	var params = {};
	params["device"] = target_xbee_device;
	script_exec("REMOLAB/SIGNAL_GET",params,"get_alarm_signal_handler");
}

// リモートデバイスの状態を取得してGUIコンポーネントの状態を更新する
function load_sensor_data(){
	get_temperature();
	get_alarm_signal();
}

// メイン操作画面が表示された
$( "#page1" ).live( "pageshow",function(event){
	load_sensor_data();
});

// チェックボックスを操作してシグナル値が更新された
$('input[class="alarm"]' ).bind( "change", function(event, ui){
	var params = {};
	var attrVal = getAttrVal(this,"bit");
	if (attrVal != ""){
		params["device"] = target_xbee_device;
		params["bit"] = attrVal;
		if (this.checked){
			params["value"] = "1";
		} else {
			params["value"] = "0";
		}
		script_exec("REMOLAB/SIGNAL_BIT_SET",params,"script_exec_callback");
	}
});

// サーバー側でログイン操作が成功したらデバイス選択画面に移動する
function login_callback(data){
	if (data.Result == "Success"){
		session_token = data.SessionToken;
		// dump_login_result(data);
		$.mobile.changePage( "#select_device", { transition: "none"}); 
	} else {
		$.mobile.changePage( "#login_error_dialog", {transition: "pop",role:"dialog"}); 
	} 
}

// サーバー側でログアウト操作が完了したらログイン画面に戻る
function logout_callback(data){
	session_token = "";
	$("#login_password").val("");
	$.mobile.changePage( "#login", { transition: "pop"}); 
}

// ログインボタンを押した
$( "#login_btn" ).bind( "click", function(event, ui){
	var user = $("#login_name").val();
	var pass = $("#login_password").val();
	login(user,pass,"login_callback");
});

// ログアウトボタンを押した
$( "#logout_ok_btn" ).bind( "click", function(event, ui){
	logout("logout_callback");
});

// サーバーエラーのダイアログから復帰する場合はログイン画面に戻る
$( "#server_error_ok_btn" ).bind( "click", function(event, ui){
	session_token = "";
	$.mobile.changePage( "#login", { transition: "pop"}); 
});

// ログインページが表示された
$( "#login" ).live( "pageshow",function(event){
	// セッショントークンが指定されている場合にはユーザー認証を省略して
	// デバイス選択画面に移動する
	if (session_token != ""){
		$.mobile.changePage( "#select_device", { transition: "slide"}); 
	}
});

// リロードボタンが操作された
$( "#reloadBtn" ).bind( "click", function(event, ui){
	load_sensor_data();
});


// XBee デバイスリストを取得する
function list_xbee_device(){
	script_exec("REMOLAB/XBEE_LIST",{},"list_xbee_handler");
}

// REMOLAB/XBEE_LIST スクリプト実行結果のイベントハンドラ。
function list_xbee_handler(data){
	if (data.Result != "Success"){
		if(data.ErrorText.match(/CertifyUpdateSession failed/i)) {
			$.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"});
		} else {
			$.mobile.changePage( "#error_back_dialog", {transition: "pop",role:"dialog"});
		}
		return;
	}

	// リストビューに XBee デバイス名を表示する
	$("#device_list li").remove();
	for(key in data.ResultParams){
		$('<li data-theme="a"><a data-transition="none" device="' + data.ResultParams[key] + '" class="dev_select">' + 
            data.ResultParams[key] + '</a></li>').appendTo($('#device_list'));
	}
	$("#device_list").listview("refresh");

}

// デバイスが選択されたら、このデバイスが利用可能かどうかの判断を行う
// スクリプトを実行する
$(".dev_select").live( "click", function(event, ui){
	var params = {};
	var attrVal = getAttrVal(this,"device");
	if (attrVal != ""){
		target_xbee_device = attrVal;
		params["device"] = target_xbee_device;
		script_exec("REMOLAB/DEVICE_AVAILABLE",params,"device_available_handler");
	}
});

// REMOLAB/DEVICE_AVAILABLE スクリプト実行結果のイベントハンドラ。
function device_available_handler(data){
	if (data.Result != "Success"){
		if(data.ErrorText.match(/CertifyUpdateSession failed/i)) {
			$.mobile.changePage( "#error_quit_dialog", {transition: "pop",role:"dialog"});
		} else {
			$.mobile.changePage( "#error_back_dialog", {transition: "pop",role:"dialog"});
		}
		return;
	}

	if (data.ResultParams.STATUS != "OK"){
		$.mobile.changePage( "#invalid_device_dialog", {transition: "pop",role:"dialog"});
		return;
	}

	// デジタルポート操作用のメイン画面に移動する
	$( "#main_title" ).text(target_xbee_device);
	$.mobile.changePage( "#page1", { transition: "none"}); 

}

// デバイス選択画面が表示された
$( "#select_device" ).live( "pageshow",function(event){
	list_xbee_device();
});

