//clear priority and other tasks if people reload the page or lost connection while a wizard was active
$(window.hyperion).one("ready", function(event) {
	if(getStorage("wizardactive") === 'true')
	{
		requestPriorityClear();
		setStorage("wizardactive", false);
		if(getStorage("kodiAddress") != null)
		{
			kodiAddress = getStorage("kodiAddress");
			sendToKodi("stop");
		}
	}
});

function resetWizard()
{
	$("#wizard_modal").modal('hide');
	clearInterval(wIntveralId);
	requestPriorityClear();
	setStorage("wizardactive", false);
	$('#wizp1').toggle(true);
	$('#wizp2').toggle(false);
	$('#wizp3').toggle(false);
	//cc
	if(withKodi)
		sendToKodi("stop");
	step = 0;
	location.reload();
}

//rgb byte order wizard
var wIntveralId;
var new_rgb_order;

function changeColor()
{
	var color = $("#wiz_canv_color").css('background-color');

	if (color == 'rgb(255, 0, 0)')
	{
		$("#wiz_canv_color").css('background-color','rgb(0, 255, 0)');
		requestSetColor('0','255','0');
	}
	else
	{
		$("#wiz_canv_color").css('background-color','rgb(255, 0, 0)');
		requestSetColor('255','0','0');
	}
}

function startWizardRGB()
{
	//create html
	$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_rgb_title'));
	$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_rgb_title')+'</h4><p>'+$.i18n('wiz_rgb_intro1')+'</p><p style="font-weight:bold;">'+$.i18n('wiz_rgb_intro2')+'</p>');
	$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
	$('#wizp2_body').html('<p style="font-weight:bold">'+$.i18n('wiz_rgb_expl')+'</p>');
	$('#wizp2_body').append('<div class="form-group"><label>'+$.i18n('wiz_rgb_switchevery')+'</label><div class="input-group" style="width:100px"><select id="wiz_switchtime_select" class="form-control"></select><div class="input-group-addon">'+$.i18n('edt_append_s')+'</div></div></div>');
	$('#wizp2_body').append('<canvas id="wiz_canv_color" width="100" height="100" style="border-radius:60px;background-color:red; display:block; margin: 10px 0;border:4px solid grey;"></canvas><label>'+$.i18n('wiz_rgb_q')+'</label>');
	$('#wizp2_body').append('<table class="table borderless" style="width:200px"><tbody><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qrend')+'</label></td><td class="itd"><select id="wiz_r_select" class="form-control wselect"></select></td></tr><tr><td class="ltd"><label>'+$.i18n('wiz_rgb_qgend')+'</label></td><td class="itd"><select id="wiz_g_select" class="form-control wselect"></select></td></tr></tbody></table>');
	$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_save"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_checkok" style="display:none" data-dismiss="modal"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_ok')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');

	//open modal
	$("#wizard_modal").modal({
		backdrop : "static",
		keyboard: false,
		show: true
	});

	//listen for continue
	$('#btn_wiz_cont').off().on('click',function() {
		beginWizardRGB();
		$('#wizp1').toggle(false);
		$('#wizp2').toggle(true);
	});
}

function beginWizardRGB()
{
	$("#wiz_switchtime_select").off().on('change',function() {
		clearInterval(wIntveralId);
		var time = $("#wiz_switchtime_select").val();
		wIntveralId = setInterval(function() { changeColor(); }, time*1000);
	});

	$('.wselect').change(function () {
		var rgb_order = window.serverConfig.device.colorOrder.split("");
		var redS = $("#wiz_r_select").val();
		var greenS = $("#wiz_g_select").val();
		var blueS = rgb_order.toString().replace(/,/g,"").replace(redS, "").replace(greenS,"");

		for (var i = 0; i<rgb_order.length; i++)
		{
			if (redS == rgb_order[i])
				$('#wiz_g_select option[value='+rgb_order[i]+']').attr('disabled',true);
			else
				$('#wiz_g_select option[value='+rgb_order[i]+']').attr('disabled',false);
			if (greenS == rgb_order[i])
				$('#wiz_r_select option[value='+rgb_order[i]+']').attr('disabled',true);
			else
				$('#wiz_r_select option[value='+rgb_order[i]+']').attr('disabled',false);
		}

		if(redS != 'null' && greenS != 'null')
		{
			$('#btn_wiz_save').attr('disabled',false);

			for (var i = 0; i<rgb_order.length; i++)
			{
				if(rgb_order[i] == "r")
					rgb_order[i] = redS;
				else if(rgb_order[i] == "g")
					rgb_order[i] = greenS;
				else
					rgb_order[i] = blueS;
			}

			rgb_order = rgb_order.toString().replace(/,/g,"");

			if(redS == "r" && greenS == "g")
			{
				$('#btn_wiz_save').toggle(false);
				$('#btn_wiz_checkok').toggle(true);
			}
			else
			{
				$('#btn_wiz_save').toggle(true);
				$('#btn_wiz_checkok').toggle(false);
			}
			new_rgb_order = rgb_order;
		}
		else
			$('#btn_wiz_save').attr('disabled',true);
	});

	$("#wiz_switchtime_select").append(createSelOpt('5','5'),createSelOpt('10','10'),createSelOpt('15','15'),createSelOpt('30','30'));
	$("#wiz_switchtime_select").trigger('change');

	$("#wiz_r_select").append(createSelOpt("null", ""),createSelOpt('r', $.i18n('general_col_red')),createSelOpt('g', $.i18n('general_col_green')),createSelOpt('b', $.i18n('general_col_blue')));
	$("#wiz_g_select").html($("#wiz_r_select").html());
	$("#wiz_r_select").trigger('change');

	requestSetColor('255','0','0');
	setTimeout(requestSetSource, 100, 'auto');
	setStorage("wizardactive", true);

	$('#btn_wiz_abort').off().on('click', resetWizard);

	$('#btn_wiz_checkok').off().on('click',function() {
		showInfoDialog('success', "", $.i18n('infoDialog_wizrgb_text'));
		resetWizard();
	});

	$('#btn_wiz_save').off().on('click',function() {
		resetWizard();
		window.serverConfig.device.colorOrder = new_rgb_order;
		requestWriteConfig({"device" : window.serverConfig.device});
	});
}

$('#btn_wizard_byteorder').off().on('click',startWizardRGB);

//color calibration wizard
var kodiAddress = document.location.hostname+':8080';
var wiz_editor;
var colorLength;
var cobj;
var step = 0;
var withKodi = false;
var profile = 0;
var websAddress;
var imgAddress;
var vidAddress = "https://sourceforge.net/projects/hyperion-project/files/resources/vid/";
var picnr = 0;
var availVideos = ["Sweet_Cocoon","Caminandes_2_GranDillama","Caminandes_3_Llamigos"];

if(getStorage("kodiAddress") != null)
	kodiAddress = getStorage("kodiAddress");

function switchPicture(pictures)
{
	if(typeof pictures[picnr] === 'undefined')
		picnr = 0;

	sendToKodi('playP',pictures[picnr]);
	picnr++;
}

function sendToKodi(type, content, cb)
{
	var command;

	if(type == "playP")
		content = imgAddress+content+'.png';
	if(type == "playV")
		content = vidAddress+content;

	if(type == "msg")
		command = '{"jsonrpc":"2.0","method":"GUI.ShowNotification","params":{"title": "'+$.i18n('wiz_cc_title')+'", "message": "'+content+'", "image":"info", "displaytime":5000 },"id":"1"}';
	else if (type == "stop")
		command = '{"jsonrpc":"2.0","method":"Player.Stop","params":{"playerid": 2},"id":"1"}';
	else if (type == "playP" || type == "playV")
		command = '{"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"' + content + '"}},"id":"1"}';
	else if (type == "rotate")
		command = '{"jsonrpc":"2.0","method":"Player.Rotate","params":{"playerid": 2},"id":"1"}';

	$.ajax({
		url: 'http://' + kodiAddress + '/jsonrpc',
		dataType: 'jsonp',
		crossDomain: true,
		jsonpCallback: 'jsonCallback',
		type: 'POST',
		timeout: 2000,
		data: 'request=' + encodeURIComponent( command )
	})
	.done( function( data, textStatus, jqXHR ) {
		if ( jqXHR.status == 200 && data['result'] == 'OK' && type == "msg")
			cb("success");
	})
	// Older Versions Of Kodi/XBMC Tend To Fail Due To CORS But Typically If A '200' Is Returned Then It Has Worked!
	.fail( function( jqXHR, textStatus ) {
		if ( jqXHR.status != 200 && type == "msg")
			cb("error")
	});
}

function performAction()
{
	var h;

	if(step == 1)
	{
		$('#wiz_cc_desc').html($.i18n('wiz_cc_chooseid'));
		updateWEditor(["id"]);
		$('#btn_wiz_back').attr("disabled", true);
	}
	else
		$('#btn_wiz_back').attr("disabled", false);

	if(step == 2)
	{
		updateWEditor(["white"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_white_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_white_title'));
			sendToKodi('playP',"white");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_white_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 3)
	{
		updateWEditor(["gammaRed","gammaGreen","gammaBlue"]);
		h = '<p>'+$.i18n('wiz_cc_adjustgamma')+'</p>';
		if(withKodi)
		{
			sendToKodi('playP',"HGradient");
			h +='<button id="wiz_cc_btn_sp" class="btn btn-primary">'+$.i18n('wiz_cc_btn_switchpic')+'</button>';
		}
		else
			h += '<p>'+$.i18n('wiz_cc_lettvshowm', "gey_1, grey_2, grey_3, HGradient, VGradient")+'</p>';
		$('#wiz_cc_desc').html(h);
		$('#wiz_cc_btn_sp').off().on('click', function(){
			switchPicture(["VGradient","grey_1","grey_2","grey_3","HGradient"]);
		});
	}
	if(step == 4)
	{
		updateWEditor(["red"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_red_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_red_title'));
			sendToKodi('playP',"red");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_red_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 5)
	{
		updateWEditor(["green"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_green_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_green_title'));
			sendToKodi('playP',"green");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_green_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 6)
	{
		updateWEditor(["blue"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_blue_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_blue_title'));
			sendToKodi('playP',"blue");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_blue_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 7)
	{
		updateWEditor(["cyan"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_cyan_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_cyan_title'));
			sendToKodi('playP',"cyan");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_cyan_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 8)
	{
		updateWEditor(["magenta"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_magenta_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_magenta_title'));
			sendToKodi('playP',"magenta");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_magenta_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 9)
	{
		updateWEditor(["yellow"]);
		h = $.i18n('wiz_cc_adjustit',$.i18n('edt_conf_color_yellow_title'));
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_yellow_title'));
			sendToKodi('playP',"yellow");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_yellow_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 10)
	{
		updateWEditor(["backlightThreshold","backlightColored"]);
		h = $.i18n('wiz_cc_backlight');
		if(withKodi)
		{
			h += '<br/>'+$.i18n('wiz_cc_kodishould',$.i18n('edt_conf_color_black_title'));
			sendToKodi('playP',"black");
		}
		else
			h += '<br/>'+$.i18n('wiz_cc_lettvshow',$.i18n('edt_conf_color_black_title'));
		$('#wiz_cc_desc').html(h);
	}
	if(step == 11)
	{
		updateWEditor([""], true);
		h = '<p>'+$.i18n('wiz_cc_testintro')+'</p>';
		if(withKodi)
		{
			h += '<p>'+$.i18n('wiz_cc_testintrok')+'</p>';
			sendToKodi('stop');
			for(var i = 0; i<availVideos.length; i++)
			{
				var txt = availVideos[i].replace(/_/g," ");
				h +='<div><button id="'+availVideos[i]+'" class="btn btn-sm btn-primary videobtn"><i class="fa fa-fw fa-play"></i> '+txt+'</button></div>';
			}
			h +='<div><button id="stop" class="btn btn-sm btn-danger videobtn" style="margin-bottom:15px"><i class="fa fa-fw fa-stop"></i> '+$.i18n('wiz_cc_btn_stop')+'</button></div>';
		}
		else
			h += '<p>'+$.i18n('wiz_cc_testintrowok')+' <a href="https://sourceforge.net/projects/hyperion-project/files/resources/vid/" target="_blank">'+$.i18n('wiz_cc_link')+'</a></p>';
		h += '<p>'+$.i18n('wiz_cc_summary')+'</p>';
		$('#wiz_cc_desc').html(h);

		$('.videobtn').off().on('click', function(e){
			if(e.target.id == "stop")
				sendToKodi("stop");
			else
				sendToKodi("playV",e.target.id+'.mp4');

			$(this).attr("disabled", true);
			setTimeout(function(){$('.videobtn').attr("disabled", false)},10000);
		});

		$('#btn_wiz_next').attr("disabled", true);
		$('#btn_wiz_save').toggle(true);
	}
	else
	{
		$('#btn_wiz_next').attr("disabled", false);
		$('#btn_wiz_save').toggle(false);
	}
}

function updateWEditor(el, all)
{
	for (var key in cobj)
	{
		if(all === true || el[0] == key || el[1] == key || el[2] == key)
			$('#editor_container_wiz [data-schemapath*=".'+profile+'.'+key+'"]').toggle(true);
		else
			$('#editor_container_wiz [data-schemapath*=".'+profile+'.'+key+'"]').toggle(false);
	}
}

function startWizardCC()
{
	//create html
	$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_cc_title'));
	$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_cc_title')+'</h4><p>'+$.i18n('wiz_cc_intro1')+'</p><label>'+$.i18n('wiz_cc_kwebs')+'</label><input class="form-control" style="width:170px;margin:auto" id="wiz_cc_kodiip" type="text" placeholder="'+kodiAddress+'" value="'+kodiAddress+'" /><span id="kodi_status"></span><span id="multi_cali"></span>');
	$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont" disabled="disabled"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
	$('#wizp2_body').html('<div id="wiz_cc_desc" style="font-weight:bold"></div><div id="editor_container_wiz"></div>');
	$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_back"><i class="fa fa-fw fa-chevron-left"></i>'+$.i18n('general_btn_back')+'</button><button type="button" class="btn btn-primary" id="btn_wiz_next">'+$.i18n('general_btn_next')+'<i style="margin-left:4px;"class="fa fa-fw fa-chevron-right"></i></button><button type="button" class="btn btn-warning" id="btn_wiz_save" style="display:none"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');

	//open modal
	$("#wizard_modal").modal({
		backdrop : "static",
		keyboard: false,
		show: true
	});

	$('#wiz_cc_kodiip').off().on('change',function() {
		kodiAddress = $(this).val();
		setStorage("kodiAddress", kodiAddress);
		sendToKodi("msg", $.i18n('wiz_cc_kodimsg_start'), function(cb){
			if(cb == "error")
			{
				$('#kodi_status').html('<p style="color:red;font-weight:bold;margin-top:5px">'+$.i18n('wiz_cc_kodidiscon')+'</p><p>'+$.i18n('wiz_cc_kodidisconlink')+' <a href="https://sourceforge.net/projects/hyperion-project/files/resources/Hyperion_calibration_pictures.zip/download" target="_blank">'+$.i18n('wiz_cc_link')+'</p>');
				withKodi = false;
			}
			else
			{
				$('#kodi_status').html('<p style="color:green;font-weight:bold;margin-top:5px">'+$.i18n('wiz_cc_kodicon')+'</p>');
				withKodi = true;
			}

			$('#btn_wiz_cont').attr('disabled', false);
		});
	});

	//listen for continue
	$('#btn_wiz_cont').off().on('click',function() {
		beginWizardCC();
		$('#wizp1').toggle(false);
		$('#wizp2').toggle(true);
	});

	$('#wiz_cc_kodiip').trigger("change");
	colorLength = window.serverConfig.color.channelAdjustment;
	cobj = window.schema.color.properties.channelAdjustment.items.properties;
	websAddress = document.location.hostname+':'+window.serverConfig.webConfig.port;
	imgAddress = 'http://'+websAddress+'/img/cc/';
	setStorage("wizardactive", true);

	//check profile count
	if(colorLength.length > 1)
	{
		$('#multi_cali').html('<p style="font-weight:bold;">'+$.i18n('wiz_cc_morethanone')+'</p><select id="wiz_select" class="form-control" style="width:200px;margin:auto"></select>');
		for(var i = 0; i<colorLength.length; i++)
			$('#wiz_select').append(createSelOpt(i,i+1+' ('+colorLength[i].id+')'));

		$('#wiz_select').off().on('change', function(){
			profile = $(this).val();
		});
	}

	//prepare editor
	wiz_editor = createJsonEditor('editor_container_wiz', {
		color : window.schema.color
	}, true, true);

	$('#editor_container_wiz h4').toggle(false);
	$('#editor_container_wiz .btn-group').toggle(false);
	$('#editor_container_wiz [data-schemapath="root.color.imageToLedMappingType"]').toggle(false);
	for(var i = 0; i<colorLength.length; i++)
		$('#editor_container_wiz [data-schemapath*="root.color.channelAdjustment.'+i+'."]').toggle(false);
}

function beginWizardCC()
{

	$('#btn_wiz_next').off().on('click',function() {
		step++;
		performAction();
	});

	$('#btn_wiz_back').off().on('click',function() {
		step--;
		performAction();
	});

	$('#btn_wiz_abort').off().on('click', resetWizard);

	$('#btn_wiz_save').off().on('click',function() {
		requestWriteConfig(wiz_editor.getValue());
		resetWizard();
	});

	wiz_editor.on("change", function(e){
		var val = wiz_editor.getEditor('root.color.channelAdjustment.'+profile+'').getValue();
		var temp = JSON.parse(JSON.stringify(val));
		delete temp.leds
		requestAdjustment(JSON.stringify(temp),"",true);
	});

	step++
	performAction();
}

$('#btn_wizard_colorcalibration').off().on('click', startWizardCC);

//hue wizard
var hueIPs = [];
var hueIPsinc = 0;
var lightIDs = null;
var huePosTop =    {hmax: 0.85, hmin: 0.15, vmax: 0.2,  vmin: 0};
var huePosBottom = {hmax: 0.85, hmin: 0.15, vmax: 1,    vmin: 0.8};
var huePosLeft =   {hmax: 0.15, hmin: 0,    vmax: 0.85, vmin: 0.15};
var huePosRight =  {hmax: 1,    hmin: 0.85, vmax: 0.85, vmin: 0.15};
var huePosEntire = {hmax: 1.0,  hmin: 0.0,  vmax: 1.0,  vmin: 0.0};

function startWizardPhilipsHue()
{
	//create html
	$('#wiz_header').html('<i class="fa fa-magic fa-fw"></i>'+$.i18n('wiz_hue_title'));
	$('#wizp1_body').html('<h4 style="font-weight:bold;text-transform:uppercase;">'+$.i18n('wiz_hue_title')+'</h4><p>'+$.i18n('wiz_hue_intro1')+'</p>');
	$('#wizp1_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_cont"><i class="fa fa-fw fa-check"></i>'+$.i18n('general_btn_continue')+'</button><button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
	$('#wizp2_body').html('<div id="wh_topcontainer"></div>');
	$('#wh_topcontainer').append('<p style="font-weight:bold">'+$.i18n('wiz_hue_desc1')+'</p><div class="form-group"><label>'+$.i18n('wiz_hue_ip')+'</label><div class="input-group" style="width:175px"><input type="text" class="input-group form-control" id="ip"><span class="input-group-addon" id="retry_bridge" style="cursor:pointer"><i class="fa fa-refresh"></i></span></div></div><span style="font-weight:bold;color:red" id="wiz_hue_ipstate"></span>');
	$('#wh_topcontainer').append('<div class="form-group" id="usrcont" style="display:none"><label>'+$.i18n('wiz_hue_username')+'</label><div class="input-group" style="width:250px"><input type="text" class="form-control" id="user"><span class="input-group-addon" id="retry_usr" style="cursor:pointer"><i class="fa fa-refresh"></i></span></div><span style="font-weight:bold;color:red" id="wiz_hue_usrstate"></span><br><button type="button" class="btn btn-primary" style="display:none" id="wiz_hue_create_user" onclick="createHueUser()"> <i class="fa fa-fw fa-plus"></i>'+$.i18n('wiz_hue_create_user')+'</button></div>');
	$('#wizp2_body').append('<div id="hue_ids_t" style="display:none"><p style="font-weight:bold">'+$.i18n('wiz_hue_desc2')+'</p></div>');
	createTable("lidsh", "lidsb", "hue_ids_t");
	$('.lidsh').append(createTableRow([$.i18n('edt_dev_spec_lightid_title'),$.i18n('wiz_hue_pos'),$.i18n('wiz_hue_ident')], true));
	$('#wizp2_footer').html('<button type="button" class="btn btn-primary" id="btn_wiz_save" style="display:none"><i class="fa fa-fw fa-save"></i>'+$.i18n('general_btn_save')+'</button><button type="button" class="btn btn-danger" id="btn_wiz_abort"><i class="fa fa-fw fa-close"></i>'+$.i18n('general_btn_cancel')+'</button>');
	$('#wizp3_body').html('<span>'+$.i18n('wiz_hue_press_link')+'</span> <br /><br /><center><span id="connectionTime"></span><br /><i class="fa fa-cog fa-spin" style="font-size:100px"></i></center>');

	//open modal
	$("#wizard_modal").modal({
		backdrop : "static",
		keyboard: false,
		show: true
	});

	//listen for continue
	$('#btn_wiz_cont').off().on('click',function() {
		beginWizardHue();
		$('#wizp1').toggle(false);
		$('#wizp2').toggle(true);
	});
}

function checkHueBridge(cb,hueUser){
	var usr = "";

	if(typeof hueUser != "undefined")
		usr = hueUser;

	$.ajax({
		url: 'http://'+hueIPs[hueIPsinc].internalipaddress+'/api/'+usr,
		contentType: 'application/json',
		type: 'GET',
		timeout: 2000
	})
	.done( function( data, textStatus, jqXHR ) {
		if(Array.isArray(data) && data[0].error && data[0].error.type == 4)
			cb(true);
		else if(Array.isArray(data) && data[0].error)
			cb(false);
		else
			cb(true);
	})
	.fail( function( jqXHR, textStatus ) {
		cb(false);
	});
}

function checkUserResult(reply){
	if(reply)
	{
		$('#wiz_hue_usrstate').html("");
		$('#wiz_hue_create_user').toggle(false);
		get_hue_lights();
	}
	else
	{
		$('#wiz_hue_usrstate').html($.i18n('wiz_hue_failure_user'));
		$('#wiz_hue_create_user').toggle(true);
	}
};

function checkBridgeResult(reply){
	if(reply)
	{
		//abort checking, first reachable result is used
		$('#wiz_hue_ipstate').html("");
		$('#ip').val(hueIPs[hueIPsinc].internalipaddress)

		//now check hue user on this bridge
		$('#usrcont').toggle(true);
		checkHueBridge(checkUserResult,$('#user').val() ? $('#user').val() : "newdeveloper");
	}
	else
	{
		//increment and check again
		if(hueIPs.length-1 > hueIPsinc)
		{
			hueIPsinc++;
			checkHueBridge(checkBridgeResult);
		}
		else
		{
			$('#usrcont').toggle(false);
			$('#wiz_hue_ipstate').html($.i18n('wiz_hue_failure_ip'));
		}
	}
};

	function assignHuePos(id, pos)
	{
		var i = null;

	if(pos == "top")
		i = huePosTop;
	else if(pos == "bottom")
		i = huePosBottom;
	else if(pos == "left")
		i = huePosLeft;
	else if(pos == "right")
		i = huePosRight;
	else
		i = huePosEntire;

		return i;
	}

function identHueId(id, off)
{
	var on = true;
	if(off !== true)
		setTimeout(identHueId,1500,id,true);
	else
		on = false;

	$.ajax({
		url: 'http://'+$('#ip').val()+'/api/'+$('#user').val()+'/lights/'+id+'/state',
		type: 'PUT',
		timeout: 2000,
		data: '	{"on":'+on+', "sat":254, "bri":254,"hue":47000}'
	})
}

function getHueIPs(){
	$('#wiz_hue_ipstate').html($.i18n('wiz_hue_searchb'));
	$.ajax({
		url: 'https://discovery.meethue.com',
		crossDomain: true,
		type: 'GET',
		timeout: 3000
	})
	.done( function( data, textStatus, jqXHR ) {
		if(data.length == 0)
			$('#wiz_hue_ipstate').html($.i18n('wiz_hue_failure_ip'));
		else
		{
			hueIPs = data;
			checkHueBridge(checkBridgeResult);
		}
	})
	.fail( function( jqXHR, textStatus ) {
		$('#wiz_hue_ipstate').html($.i18n('wiz_hue_failure_ip'));
	});
};

function beginWizardHue()
{
	var usr = conf_editor.getEditor("root.specificOptions.username").getValue();
	if(usr != "")
	{
		$('#user').val(usr);
	}

	//check if ip is empty/reachable/search for bridge
	if(conf_editor.getEditor("root.specificOptions.output").getValue() == "")
		getHueIPs();
	else
	{
		var ip = conf_editor.getEditor("root.specificOptions.output").getValue();
		$('#ip').val(ip);
		hueIPs.push({internalipaddress : ip});
		checkHueBridge(checkBridgeResult);
	}

	$('#retry_bridge').off().on('click', function(){
		hueIPs.push({internalipaddress : $('#ip').val()});
		hueIPsinc = 0;
		checkHueBridge(checkBridgeResult);
	});

	$('#retry_usr').off().on('click', function(){
		checkHueBridge(checkUserResult,$('#user').val() ? $('#user').val() : "newdeveloper");
	});

	$('#btn_wiz_save').off().on("click", function(){
		var hueLedConfig = [];
		var finalLightIds = [];

		//create hue led config
		for(var key in lightIDs)
		{
			if($('#hue_'+key).val() != "disabled")
			{
				hueLedConfig.push(assignHuePos(key, $('#hue_'+key).val()));
				finalLightIds.push(parseInt(key));
			}
		}


		window.serverConfig.leds = hueLedConfig;

		//Adjust gamma, brightness and compensation
		var c = window.serverConfig.color.channelAdjustment[0];
		c.gammaBlue = 1.0;
		c.gammaRed = 1.0;
		c.gammaGreen = 1.0;
		c.brightness = 100;
		c.brightnessCompensation = 0;

		//device config
		var d = window.serverConfig.device;
		d.output = $('#ip').val();
		d.lightIds = finalLightIds;
		d.username = $('#user').val();
		d.type = "philipshue";
		d.transitiontime = 1;
		d.switchOffOnBlack = true;

		//smoothing off
		window.serverConfig.smoothing.enable = false;

		requestWriteConfig(window.serverConfig, true);
		resetWizard();
	});

	$('#btn_wiz_abort').off().on('click', resetWizard);
}

function createHueUser()
{
    var connectionRetries = 30;
	var data = {"devicetype":"hyperion#"+Date.now()};
	var UserInterval = setInterval(function(){
		$.ajax({
			type: "POST",
			url: 'http://'+$("#ip").val()+'/api',
			processData: false,
			timeout: 1000,
			contentType: 'application/json',
			data: JSON.stringify(data),
			success: function(r) {
				$('#wizp1').toggle(false);
				$('#wizp2').toggle(false);
				$('#wizp3').toggle(true);

				connectionRetries--;
				$("#connectionTime").html(connectionRetries);
				if(connectionRetries == 0)
				{
					abortConnection(UserInterval);
				}
				else
				{
					if (typeof r[0].error != 'undefined')
					{
						console.log(connectionRetries+": link not pressed");
					}
					if (typeof r[0].success != 'undefined')
					{
						$('#wizp1').toggle(false);
						$('#wizp2').toggle(true);
						$('#wizp3').toggle(false);
						$('#user').val(r[0].success.username);
						checkHueBridge(checkUserResult,r[0].success.username);
						clearInterval(UserInterval);
					}
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				$('#wizp1').toggle(false);
				$('#wizp2').toggle(true);
				$('#wizp3').toggle(false);
				clearInterval(UserInterval);
			}
		});
	},1000);
}

function get_hue_lights(){
	$.ajax({
		type: "GET",
		url: 'http://'+$("#ip").val()+'/api/'+$("#user").val()+'/lights',
		processData: false,
		contentType: 'application/json',
		success: function(r) {
			if(Object.keys(r).length > 0)
			{
				$('#wh_topcontainer').toggle(false);
				$('#hue_ids_t, #btn_wiz_save').toggle(true);
				lightIDs = r;

				for(var lightid in r)
				{
					$('.lidsb').append(createTableRow([lightid+' ('+r[lightid].name+')', '<select id="hue_'+lightid+'" class="hue_sel_watch form-control"><option value="disabled">'+$.i18n('wiz_hue_ids_disabled')+'</option><option value="top">'+$.i18n('conf_leds_layout_cl_top')+'</option><option value="bottom">'+$.i18n('conf_leds_layout_cl_bottom')+'</option><option value="left">'+$.i18n('conf_leds_layout_cl_left')+'</option><option value="right">'+$.i18n('conf_leds_layout_cl_right')+'</option><option value="entire">'+$.i18n('wiz_hue_ids_entire')+'</option></select>','<button class="btn btn-sm btn-primary" onClick=identHueId('+lightid+')>'+$.i18n('wiz_hue_blinkblue',lightid)+'</button>']));
				}

				$('.hue_sel_watch').bind("change", function(){
					var cC = 0;
					for(var key in lightIDs)
					{
						if($('#hue_'+key).val() != "disabled")
						{
							cC++;
						}
					}
					cC == 0 ? $('#btn_wiz_save').attr("disabled",true) : $('#btn_wiz_save').attr("disabled",false);
				});

				$('.hue_sel_watch').trigger('change');
			}
			else
			{
				$('#wizp2_body').html('<h4>'+$.i18n('wiz_hue_noids')+'</h4>')
			}
		}
	});
}

function abortConnection(UserInterval){
	clearInterval(UserInterval);
	$('#wizp1').toggle(false);
	$('#wizp2').toggle(true);
	$('#wizp3').toggle(false);
	$("#wiz_hue_usrstate").html($.i18n('wiz_hue_failure_connection'));
}