/* Javascript file for Toshiba Mobile [Asia - G910] */

// ---
// Variables
// ---

// Software versions
var g_g910_versions = {
	 dmy:				[]
	,hongkong:	[
		 {version:"19.1600.32", is_need:true }
		,{version:"19.1600.36", is_need:false}
		]
	,malaysia:	[
		 {version:"19.1800.31", is_need:true }
		,{version:"19.1800.32", is_need:true }
		,{version:"19.1800.36", is_need:false}
	]
};

// Software download files
var g_g910_download_files = {
	 dmy:				[]
	,hongkong:	{
			 name: "G910 Software update & instructions.exe (92MB)"
			,file: "exe/G910_Software_HK.exe"
		}
	,malaysia:	{
			 name: "G910 Software update & instructions.exe (83MB)"
			,file: "exe/G910_Software_MY.exe"
		}
};

// TAC(Type Approval Code)
var g_g910_tac = "35186702";

// IMEI from code to code(00000`99999)
var g_g910_imei_from_to = {
	 dmy:				[]
	,hongkong:	{
			 from: 500001
			,to:   502700
		}
	,malaysia:	{
			 from: 510001
			,to:   512030
		}
};


// ---
// Class
// ---

// software update class
var SoftwareUpdate = function() {
	// selected country
	//   "hongkong" or "malaysia"
	this.country = "";
	
	// selected version
	//   any of g_g910_versions values
	this.version = "";
	
	// entered IMEI code
	//   valid IMEI code
	this.imei = "";
	
	// agreement
	//   true: agree, false: not agree
	this.agree = false;
};
SoftwareUpdate.prototype = {
	// dmy function
	 dmyFunction: function() {}
	
	,main: function(){
		
		// --test code 
		// ----------------------
		
		
		// ---
		// hide Note
		$("#imeiNote").hide();
		$("#versionNote").hide();
		
		// ---
		// set tooltip
		$("#versionQuest").tooltip({
			bodyHandler: function()
				{
					return $("#versionNote").html();
				}
			,showURL: false
		});
		$("#imeiQuest").tooltip({
			bodyHandler: function()
				{
					return $("#imeiNote").html();
				}
			,showURL: false
		});
		// disabled tooltip a element
		$("#versionQuest").click(function(event){
			event.preventDefault(); 
			event.stopPropagation(); 
		});
		$("#imeiQuest").click(function(event){
			event.preventDefault(); 
			event.stopPropagation(); 
		});
		
		// ---
		// set alphanumeric
		$('#txtIMEINumber').numeric({allow:"+."});
		
		
		// ---
		// set event handler
		$('#select_country').change(this.on_select_country_changed);
		$('#select_version').change(this.on_select_version_changed);
		$('#txtIMEINumber').keydown(this.on_txtIMEINumber_keydown);
		$('#imeiCheckBtn').click(this.on_check_imei_click);
		$('#chk_agree').click(this.on_chk_agree_click);
		$('#btn_download').click(this.row_download_show);
		
		
		// ---
		// show/hide box
		$("#row_country").show();
		$("#row_version").show();
		g_softupdate.row_version_reset();
		g_softupdate.row_imei_reset();
		g_softupdate.row_no_need_reset();
		g_softupdate.row_error_reset();
		g_softupdate.row_download_reset();
		g_softupdate.row_agree_reset();
		
	}// main
	
	,on_select_country_changed: function(event){
		// rollback
		g_softupdate.row_version_reset();
		g_softupdate.row_imei_reset();
		g_softupdate.row_no_need_reset();
		g_softupdate.row_error_reset();
		g_softupdate.row_download_reset();
		g_softupdate.row_agree_reset();
		
		// set [country] property
		var t_selected_value = $("#select_country").val();
		if (t_selected_value != "0")
		{
			g_softupdate.country = t_selected_value;
		}
		else // not select
		{
			g_softupdate.country = "";
		}
		
		// update select_version element
		if (g_softupdate.country != "")
		{
			for (var i = 0; i < g_g910_versions[g_softupdate.country].length; i++)
			{
				var v = g_g910_versions[g_softupdate.country][i]["version"];
				elm = $("<option>").html(v).attr({ value: v });
				$("#select_version").append(elm);
			}
		}
		else
		{
			$("#row_imei").hide();
			$("#row_no_need").hide();
		}
		
	}// on_select_country_changed
	
	/**
	 * [event]select version changed handler
	 */
	,on_select_version_changed: function(event){
		// rollback
		g_softupdate.row_imei_reset();
		g_softupdate.row_no_need_reset();
		g_softupdate.row_error_reset();
		g_softupdate.row_download_reset();
		g_softupdate.row_agree_reset();
		
		// set [country] property
		var t_selected_value = $("#select_version").val();
		if (t_selected_value != "0")
		{
			g_softupdate.version = t_selected_value;
		}
		else // not select
		{
			g_softupdate.version = "";
		}
		
		var t_selected_value = $("#select_version").val();
		if (t_selected_value != "0")
		{
			for (var i = 0; i < g_g910_versions[g_softupdate.country].length; i++)
			{
				var v = g_g910_versions[g_softupdate.country][i]["version"];
				if (t_selected_value == v)
				{
					var t_is_need = g_g910_versions[g_softupdate.country][i]["is_need"];
					if (t_is_need)
					{
						$("#row_no_need").hide();
						$("#row_imei").show();
						$("#txtIMEINumber").focus();
					}
					else
					{
						$("#row_imei").hide();
						$("#row_no_need").show();
					}
				}
			}
		}
	}// on_select_version_changed
	,on_txtIMEINumber_keydown: function(event){
		if (event.keyCode == 13)
		{
			g_softupdate.on_check_imei_click(event);
		}
	}
	,on_check_imei_click: function(event){
		// rollback
		g_softupdate.row_no_need_reset();
		g_softupdate.row_error_reset();
		g_softupdate.row_download_reset();
		g_softupdate.row_agree_reset();
		
		var t_imei_code = $("#txtIMEINumber").attr("value");
		var is_ok = g_softupdate.imei_check(t_imei_code);
		if (is_ok)
		{
			g_softupdate.row_agree_show();
		}
		else
		{
			$("#row_error").show();
		}
		
		event.preventDefault(); 
		event.stopPropagation(); 
	}// on_check_imei_click
	
	/**
	 * [event]chk_agree click handler
	 */
	,on_chk_agree_click: function(event){
		var p_checked = $("#chk_agree").get()[0].checked;
		var p_country = g_softupdate.country;
		if (p_checked)
		{
			var name = g_g910_download_files[p_country]["name"];
			$("#btn_download").attr("value", name);
			$("#btn_download").attr("disabled", false);
		}
		else
		{
			$("#btn_download").attr("disabled", true);
		}
	}// chk_agree_change
	
	/**
	 * btn_download click handler
	 */
	,on_btn_download_click: function(event){
		$("#row_agree").hide();
		g_softupdate.row_download_show();
	}// on_btn_download_click
	
	/**
	 * 
	 */
	,row_version_reset: function(){
		$("#select_version").children().remove();
		var elm = $("<option>").html('Please select version').attr({ value: '0' });
		$("#select_version").append(elm);
	}// row_version_reset
	/**
	 * 
	 */
	,row_imei_reset: function(){
		$("#txtIMEINumber").attr("value","");
		$("#row_imei").hide();
	}// row_imei_reset
	/**
	 * 
	 */
	,row_no_need_reset: function(){
		$("#row_no_need").hide();
	}// row_no_need_reset
	/**
	 * 
	 */
	,row_error_reset: function(){
		$("#row_error").hide();
	}// row_error
	/**
	 * 
	 */
	,row_download_reset: function(){
		// download url
		$("#link_download").attr("href", "#");
		// download button name
		$("#link_download").text("");
		
		$("#row_download").hide();
	}// row_download_reset
	/**
	 * 
	 */
	,row_agree_reset: function(){
		$("#chk_agree").get()[0].checked = false;
		$("#btn_download").attr("value", "");
		$("#btn_download").attr("disabled", true);
		$("#row_agree").hide();
	}// row_agree
	/**
	 * 
	 * - country setted
	 */
	,row_agree_show: function(){
		var p_country = g_softupdate.country;
		if (p_country == "")
		{
			return;
		}
		$("#row_agree").show();
		$("#chk_agree").get()[0].checked = false;
		var name = g_g910_download_files[p_country]["name"];
		$("#btn_download").attr("value", name);
		$("#btn_download").attr("disabled", true);
	}// row_agree_show
	
	
	
	/**
	 * 
	 * - require [country, version]
	 */
	,row_imei_show: function(){
		$("#row_imei").show();
	}// row_imei_reset
	/**
	 * 
	 */
	,row_download_show: function(){
		var p_country = g_softupdate.country;
		// download url
		var url = g_g910_download_files[p_country]["file"];
		$("#link_download").attr("href", url);
		// download button name
		var name = g_g910_download_files[p_country]["name"];
		$("#link_download").text(name);
		// show block
		$("#row_download").fadeIn();
		
		// hide IMEI
		g_softupdate.row_imei_reset();
		// hide agree
		$("#row_agree").hide();
	}// row_download_show
	
	/**
	 * IMIE code check
	 */
	,imei_check: function(p_code){
		
		// 15 digits
		if (p_code.length != 15)
		{
			return false;
		}
		
		// first 8 digits is TAC for G910
		if (p_code.substr(0, 8) != g_g910_tac)
		{
			return false;
		}
		
		// sequence number
		var seq = parseInt(p_code.substr(8, 6), 10);
		var t_from = g_g910_imei_from_to[g_softupdate.country]["from"];
		var t_to = g_g910_imei_from_to[g_softupdate.country]["to"];
		if (  (seq < t_from)
		    ||(seq > t_to) )
		{
			return false;
		}
		
		// check digits
		var t_digits = p_code.split("")
		for (var i = 0; i < t_digits.length - 1; i++)
		{
			if ( (i % 2) != 0 )
			{
				t_digits[i] = parseInt(t_digits[i]) * 2;
			}
			else
			{
				t_digits[i] = parseInt(t_digits[i]);
			}
		}
		var t_step2 = 0;
		for (var i = 0; i < t_digits.length - 1; i++)
		{
			if ( t_digits[i] >= 10 )
			{
				var d = t_digits[i].toString().split("");
				t_step2 += parseInt(d[0]);
				t_step2 += parseInt(d[1]);
			}
			else
			{
				t_step2 += parseInt(t_digits[i]);
			}
		}
		
		var t_cd = 0;
		if (t_step2 == 0)
		{
			t_cd = 0;
		}
		else if ( (t_step2 < 10) && (t_step2 != 0) )
		{
			t_cd = 10 - t_step2;
		}
		else if ( (t_step2 >= 10) && (t_step2.toString().substr(1,1) != "0") )
		{
			t_cd = ((parseInt(t_step2.toString().substr(0,1)) + 1) * 10) - t_step2;
		}
		else if ( (t_step2 >= 10) && (t_step2.toString().substr(1,1) == "0") )
		{
			t_cd = 0;
		}
		
		if (p_code.substr(14, 1) == t_cd.toString())
		{
			return true;
		}
		
		return false;
	}
	
};// class: SoftwareUpdate

function fnSoftwareUpdatesForm()
{
	g_softupdate.main();
} //fnSoftwareUpdatesForm

var g_softupdate = new SoftwareUpdate();

