var url = "/inc/script.js";
var cur_url = window.location.href.split('/').pop();
cur_url = cur_url.split('?');
var intervalId;

jQuery.expr[':'].regex = function(elem, index, match) {
    var matchParams = match[3].split(','),
        validLabels = /^(data|css):/,
        attr = {
            method: matchParams[0].match(validLabels) ? 
                        matchParams[0].split(':')[0] : 'attr',
            property: matchParams.shift().replace(validLabels,'')
        },
        regexFlags = 'ig',
        regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags);
    return regex.test(jQuery(elem)[attr.method](attr.property));
}
window.onblur= function() {
	window.onfocus= function () {
		if(Cookies.get('auto-refresh-pause') == "0" && Cookies.get('auto-refresh') > 5000) {
			if (cur_url[0] == "logs.py") {
				showLog();
			} else if (cur_url[0] == "viewsttats.py") {
				showStats()
			} else if (cur_url[0] == "overview.py") {
				showOverview(); 
			} else if (cur_url[0] == "viewlogs.py") {
				viewLogs();
			}  else if (cur_url[0] == "metrics.py") {
				loadMetrics();
			}	 
		} 
	}
};

function autoRefreshStyle(autoRefresh) {
	var margin;
	if (cur_url[0] == "overview.py") {
		if(autoRefresh < 60000) {
			autoRefresh = 60000;
		}
	}
	autoRefresh = autoRefresh / 1000;
	if ( autoRefresh == 60) {
		timeRange = " minute"
		autoRefresh = autoRefresh / 60;
	} else if ( autoRefresh > 60 && autoRefresh < 3600 ) {
		timeRange = " minutes"
		autoRefresh = autoRefresh / 60;
	} else if ( autoRefresh >= 3600 && autoRefresh < 86401 ) {
		timeRange = " hours"
		autoRefresh = autoRefresh / 3600;			
	} else {
		timeRange = " seconds";
	}
	$('#1').text(autoRefresh + timeRange);
	$('#0').text(autoRefresh + timeRange);
	$('.auto-refresh-pause').css('display', 'inline');		
	$('.auto-refresh-resume').css('display', 'none');		
	$('.auto-refresh-pause').css('margin-left', "-25px");	
	$('.auto-refresh-resume').css('margin-left', "-25px");		
	$('.auto-refresh img').remove();
}

function setRefreshInterval(interval) {
	if (interval == "0") {
		Cookies.remove('auto-refresh');
		pauseAutoRefresh();
		$('.auto-refresh').prepend('<img src=/image/pic/update.png alt="restart" class="icon">');
		$('.auto-refresh').css('margin-top', '-3px');
		$('#1').text('Auto-refresh');
		$('#0').text('Auto-refresh');
		$('.auto-refresh-pause').css('display', 'none');
		$('.auto-refresh-resume').css('display', 'none');
		hideAutoRefreshDiv();
	} else {
		clearInterval(intervalId);
		Cookies.set('auto-refresh', interval, { expires: 365 });
		Cookies.set('auto-refresh-pause', "0", { expires: 365 });
		startSetInterval(interval);
		hideAutoRefreshDiv();
		autoRefreshStyle(interval);
	}
}

function startSetInterval(interval) {	
	if(Cookies.get('auto-refresh-pause') == "0") {
		if (cur_url[0] == "logs.py") {
			intervalId = setInterval('showLog()', interval);
			showLog();
		} else if (cur_url[0] == "viewsttats.py") {
			intervalId = setInterval('showStats()', interval);
			showStats()
		} else if (cur_url[0] == "overview.py") {
			if(interval < 60000) {
				interval = 60000;
			}
			intervalId = setInterval('showOverview()', interval);
			showOverview(); 
		} else if (cur_url[0] == "viewlogs.py") {
			intervalId = setInterval('viewLogs()', interval);
			viewLogs();
		} else if (cur_url[0] == "metrics.py") {
			intervalId = setInterval('loadMetrics()', interval);
			loadMetrics();
		} 
	} else {
		pauseAutoRefresh();
	}
}
function pauseAutoRefresh() {
	clearInterval(intervalId);
	$(function() {
		$('.auto-refresh-pause').css('display', 'none');
		$('.auto-refresh-resume').css('display', 'inline');
		Cookies.set('auto-refresh-pause', "1", { expires: 365 });
	});
}	
function pauseAutoResume(){
	var autoRefresh = Cookies.get('auto-refresh');
	setRefreshInterval(autoRefresh);
	Cookies.set('auto-refresh-pause', "0", { expires: 365 });
}

function hideAutoRefreshDiv() {
	$(function() {
		$('.auto-refresh-div').hide("blind", "fast");
		$('#1').css("display", "none");			
		$('#0').css("display", "inline");
	});
}
$( document ).ajaxSend(function( event, request, settings ) {
	NProgress.start();
});
$( document ).ajaxComplete(function( event, request, settings ) {
	NProgress.done();
});

function showOverview() {
	showOverviewServers();
	$.ajax( {
		url: "options.py",
		data: {
			act: "overview",
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajaxstatus").empty();
			$("#ajaxstatus").html(data);
		}					
	} );
}
function showOverviewServers() {
	$.ajax( {
		url: "options.py",
		data: {
			act: "overviewServers",
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajaxservers").html(data);
			$.getScript('/inc/overview.js');
		}					
	} );
}
function showStats() {
	$.ajax( {
		url: "options.py",
		data: {
			act: "stats",
			serv: $("#serv").val(),
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);			
			window.history.pushState("Stats", "Stats", cur_url[0]+"?serv="+$("#serv").val());
			wait();
		}					
	} );

}
function showLog() {
	$.ajax( {
		url: "options.py",
		data: {
			rows: $('#rows').val(),
			serv: $("#serv").val(),
			grep: $("#grep").val(),
			hour: $('#time_range_out_hour').val(),
			minut: $('#time_range_out_minut').val(),
			hour1: $('#time_range_out_hour1').val(),
			minut1: $('#time_range_out_minut1').val(),
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);
			window.history.pushState("Logs", "Logs", cur_url[0]+"?serv="+$("#serv").val()+"&rows="+$('#rows').val()+"&grep="+$("#grep").val());
		}					
	} );
}
function showMap() {
	var unique = $.now();
	$.ajax( {
		url: "options.py",
		data: {
			serv: $("#serv").val(),
			act: "showMap",
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);
		}					
	} );
}

function showRuntime() {
	if($('#save').prop('checked')) {
		saveCheck = "on";
	} else {
		saveCheck = "";
	}
	$.ajax( {
		url: "options.py",
		data: {
			servaction: $('#servaction').val(),
			serv: $("#serv").val(),
			servbackend: $("#servbackend").val(),
			save: saveCheck,
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);
		}					
	} );
}
function showCompare() {
	$.ajax( {
		url: "options.py",
		data: {
			serv: $("#serv").val(),
			left: $('#left').val(),
			right: $("#right").val(),
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);
			$.getScript(url);
		}					
	} );
}
function showCompareConfigs() {
	$.ajax( {
		url: "options.py",
		data: {
			serv: $("#serv").val(),
			act: "showCompareConfigs",
			open: "open",
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax-compare").html(data);
			$.getScript(url);
		}					
	} );
}
function showConfig() {
	$.ajax( {
		url: "options.py",
		data: {
			serv: $("#serv").val(),
			act: "configShow",
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);
			var urlConfigShowJs = '/inc/configshow.js';
			$.getScript(urlConfigShowJs);
		}					
	} );
}
function showUploadConfig() {
	var view = $('#view').val();
	if(view != "1") {
		view = ""
	}
	$.ajax( {
		url: "options.py",
		data: {
			serv: $("#serv").val(),
			act: "configShow",
			configver: $('#configver').val(),
			token: $('#token').val(),
			view: view 
		},
		type: "GET",
		success: function( data ) {
			$("#ajax").html(data);
			if(view == "1") {
				window.history.pushState("Show config", "Show config", cur_url[0]+"?serv="+$("#serv").val()+"&open=open&configver="+$('#configver').val()+"&view="+$('#view').val());
			} else {
				window.history.pushState("Show config", "Show config", cur_url[0]+"?serv="+$("#serv").val()+"&open=open&configver="+$('#configver').val());
			}
			var urlConfigShowJs = '/inc/configshow.js';
			$.getScript(urlConfigShowJs);
		}					
	} );
}
function viewLogs() {
	if($('#viewlogs').val() == 'haproxy-wi.error.log' || $('#viewlogs').val() == 'haproxy-wi.access.log') {
		showApacheLog($('#viewlogs').val());
	} else {
		$.ajax( {
			url: "options.py",
			data: {
				viewlogs: $('#viewlogs').val(),
				rows2: $('#rows').val(),
				grep: $("#grep").val(),
				hour: $('#time_range_out_hour').val(),
				minut: $('#time_range_out_minut').val(),
				hour1: $('#time_range_out_hour1').val(),
				minut1: $('#time_range_out_minut1').val(),
				token: $('#token').val(),				
			},
			type: "GET",
			success: function( data ) {
				$("#ajax").html(data);
				window.history.pushState("View logs", "View logs", cur_url[0]+"?viewlogs="+$("#viewlogs").val());
			}					
		} );
	}
}
$( function() {
	$( "#serv" ).on('selectmenuchange',function()  {
		$("#show").css("pointer-events", "inherit");
		$("#show").css("cursor", "pointer");
	});
	if ($( "#serv option:selected" ).val() == "Choose server")  {
		$("#show").css("pointer-events", "none");
		$("#show").css("cursor", "not-allowed");
	}
	
	var pause = '<a onclick="pauseAutoRefresh()" title="Pause auto-refresh" class="auto-refresh-pause"></a>'
	var autoRefresh = Cookies.get('auto-refresh');
	
	if ($('.auto-refresh')) {
		if(autoRefresh) {
			startSetInterval(autoRefresh);
			autoRefreshStyle(autoRefresh);
		}
	}
	$("body").mCustomScrollbar({
		theme:"minimal-dark",
		scrollInertia:30
		});
	$(".top-link").mCustomScrollbar({
		theme:"minimal-dark",
		scrollInertia:30
		});	
	$(".diff").mCustomScrollbar({
		theme:"minimal-dark",
		scrollInertia:30
		});	
	$( "#tabs" ).tabs();
	$( "#redirectBackend" ).on( "click", function() {
		$( "#tabs" ).tabs( "option", "active", 2 );
	} );
	$( "select" ).selectmenu();
		
    var tooltips = $( "[title]" ).tooltip();
	$( "input[type=submit], button" ).button();
	$( "input[type=checkbox]" ).checkboxradio();
	$( ".controlgroup" ).controlgroup();
	
    var location = window.location.href;
    var cur_url = '/app/' + location.split('/').pop();
	cur_url = cur_url.split('?');
		
    $('.menu li').each(function () {
        var link = $(this).find('a').attr('href');

        if (cur_url[0] == link)
        {
            $(this).addClass('current');
        }
    });
	var now = new Date(Date.now());
	var date1 = now.getHours() * 60 - 1 * 60;
	var date2 = now.getHours() * 60 + now.getMinutes();
	$("#time-range").slider({	
		range: true,
		min: 0,
		max: 1440,
		step: 15,
		values: [ date1, date2 ],
		slide: function(e, ui) {
			var hours = Math.floor(ui.values[0] / 60);
			var minutes = ui.values[0] - (hours * 60);

			if(hours.toString().length == 1) hours = '0' + hours;
			if(minutes.toString().length == 1) minutes = '0' + minutes;
			
			var hours1 = Math.floor(ui.values[1] / 60);
			var minutes1 = ui.values[1] - (hours1 * 60);

			if(hours1.toString().length == 1) hours1 = '0' + hours1;
			if(minutes1.toString().length == 1) minutes1 = '0' + minutes1;
			$('#time_range_out_hour').val(hours);
			$('#time_range_out_minut').val(minutes);
			$('#time_range_out_hour1').val(hours1);
			$('#time_range_out_minut1').val(minutes1);
		}
	});
        var date1_hours = Math.floor(date1/60);
        var date2_hours = date1_hours + 1;
		var date2_minute = now.getMinutes()
        if(date1_hours <= 9) date1_hours = '0' + date1_hours;
        if(date2_hours <= 9) date2_hours = '0' + date2_hours;
        if(date2_minute <= 9) date2_minute = '0' + date2_minute;

	$('#time_range_out_hour').val(date1_hours);
	$('#time_range_out_minut').val('00');
	$('#time_range_out_hour1').val(date2_hours);
	$('#time_range_out_minut1').val(date2_minute);
		
	$('#0').click(function() {
		$('.auto-refresh-div').show("blind", "fast");
		$('#0').css("display", "none");		
		$('#1').css("display", "inline");
		});
		
	$('#1').click(function() {	
		$('.auto-refresh-div').hide("blind", "fast");
		$('#1').css("display", "none");			
		$('#0').css("display", "inline");			
	});
			
	$('#select_all').click(function(){
        var checkboxes = $(this).closest('form').find(':checkbox');
        if($(this).prop('checked')) {
          $("form input[type='checkbox']").attr("checked",true).change();
		  $("#label_select_all").text("Unselect all");
        } else {
          $("form input[type='checkbox']").attr("checked",false).change();
		  $("#label_select_all").text("Select all");
        }
    });

	$( "#listen-mode-select" ).on('selectmenuchange',function()  {
		if ($( "#listen-mode-select option:selected" ).val() == "tcp") {
			$( "#https-listen-span" ).hide("fast");
			$( "#https-hide-listen" ).hide("fast");
			$( "#https-listen" ).prop("checked", false);
		} else {
			$( "#https-listen-span" ).show("fast");
		}
	});
	$( "#frontend-mode-select" ).on('selectmenuchange',function()  {
		if ($( "#frontend-mode-select option:selected" ).val() == "tcp") {
			$( "#https-frontend-span" ).hide("fast");
			$( "#https-hide-frontend" ).hide("fast");
		} else {
			$( "#https-frontend-span" ).show("fast");
		}
	});
	$( "#backend-mode-select" ).on('selectmenuchange',function()  {
		if ($( "#backend-mode-select option:selected" ).val() == "tcp") {
			$( "#https-backend-span" ).hide("fast");
			$( "#https-hide-backend" ).hide("fast");
		} else {
			$( "#https-backend-span" ).show("fast");
		}
	});
	$( "#https-listen" ).click( function(){
		if ($('#https-listen').is(':checked')) {
			$( "#https-hide-listen" ).show( "fast" );
			$( "#path-cert-listen" ).attr('required',true);
		} else {
			$( "#https-hide-listen" ).hide( "fast" );
			$( "#path-cert-listen" ).prop('required',false);
		}
	});	
	$( "#https-frontend" ).click( function(){
		if ($('#https-frontend').is(':checked')) {
			$( "#https-hide-frontend" ).show( "fast" );
			$( "#path-cert-frontend" ).attr('required',true);
		} else {
			$( "#https-hide-frontend" ).hide( "fast" );
			$( "#path-cert-frontend" ).prop('required',false);
		}
	});	
	$( "#https-backend" ).click( function(){
		if ($('#https-backend').is(':checked')) {
			$( "#https-hide-backend" ).show( "fast" );
			$( "#path-cert-backend" ).attr('required',true);
		} else {
			$( "#https-hide-backend" ).hide( "fast" );
			$( "#path-cert-backend" ).prop('required',false);
		}
	});	
	$( "#options-listen-show" ).click( function(){
		if ($('#options-listen-show').is(':checked')) {
			$( "#options-listen-show-div" ).show( "fast" );
		} else {
			$( "#options-listen-show-div" ).hide( "fast" );
		}
	});	
	$( "#options-frontend-show" ).click( function(){
		if ($('#options-frontend-show').is(':checked')) {
			$( "#options-frontend-show-div" ).show( "fast" );
		} else {
			$( "#options-frontend-show-div" ).hide( "fast" );
		}
	});	
	$( "#options-backend-show" ).click( function(){
		if ($('#options-backend-show').is(':checked')) {
			$( "#options-backend-show-div" ).show( "fast" );
		} else {
			$( "#options-backend-show-div" ).hide( "fast" );
		}
	});	
	$( "#controlgroup-listen-show" ).click( function(){
		if ($('#controlgroup-listen-show').is(':checked')) {
			$( "#controlgroup-listen" ).show( "fast" );
			if ($('#check-servers-listen').is(':checked')) {
				$( "#rise-listen" ).attr('required',true);
				$( "#fall-listen" ).attr('required',true);
				$( "#inter-listen" ).attr('required',true);
				$( "#inter-listen" ).attr('disable',false);				
			}				
		} else {
			$( "#controlgroup-listen" ).hide( "fast" );			
		}
	$( "#check-servers-listen" ).click( function(){
		if ($('#check-servers-listen').is(':checked')) {
			$( "#rise-listen" ).attr('required',true);
			$( "#fall-listen" ).attr('required',true);
			$( "#inter-listen" ).attr('required',true);
			$( "#inter-listen" ).selectmenu( "option", "disabled", false );
			$( "#fall-listen" ).selectmenu( "option", "disabled", false );
			$( "#rise-listen" ).selectmenu( "option", "disabled", false );
		} else {
			$( "#rise-listen" ).attr('required',false);
			$( "#fall-listen" ).attr('required',false);
			$( "#inter-listen" ).attr('required',false);
			$( "#inter-listen" ).selectmenu( "option", "disabled", true );
			$( "#fall-listen" ).selectmenu( "option", "disabled", true );
			$( "#rise-listen" ).selectmenu( "option", "disabled", true );
		}
	});
	
	});
	$( "#controlgroup-backend-show" ).click( function(){
		if ($('#controlgroup-backend-show').is(':checked')) {
			$( "#controlgroup-backend" ).show( "fast" );
			if ($('#check-servers-backend').is(':checked')) {
				$( "#rise-backend" ).attr('required',true);
				$( "#fall-backend" ).attr('required',true);
				$( "#inter-backend" ).attr('required',true);
			}
		} else {
			$( "#controlgroup-backend" ).hide( "fast" );			
		}
	});
	$( "#cookie" ).click( function(){
		if ($('#cookie').is(':checked')) {
			$("#cookie_name" ).attr('required',true);
			$("#cookie_div").show( "fast" );
		} else {
			$("#cookie_name" ).attr('required',false);
			$("#cookie_div").hide( "fast" );
			$("#dynamic-cookie-key" ).attr('required',false);
		}
	});
	$( "#cookie2" ).click( function(){
		if ($('#cookie2').is(':checked')) {
			$("#cookie_name2" ).attr('required',true);
			$("#cookie_div2").show( "fast" );
		} else {
			$("#cookie_name2" ).attr('required',false);
			$("#cookie_div2").hide( "fast" );
			$("#dynamic-cookie-key2" ).attr('required',false);
		}
	});
	$( "#rewrite" ).on('selectmenuchange',function()  {
		if ($( "#rewrite option:selected" ).val() == "insert" || $( "#rewrite option:selected" ).val() == "rewrite") {
			$( "#prefix" ).checkboxradio( "disable" );
		} else {
			$( "#prefix" ).checkboxradio( "enable" );
		}
	});
	$( "#rewrite2" ).on('selectmenuchange',function()  {
		if ($( "#rewrite2 option:selected" ).val() == "insert" || $( "#rewrite2 option:selected" ).val() == "rewrite") {
			$( "#prefix2" ).checkboxradio( "disable" );
		} else {
			$( "#prefix2" ).checkboxradio( "enable" );
		}
	});
	$( "#dynamic" ).click( function(){
		if ($('#dynamic').is(':checked')) {
			$("#dynamic-cookie-key" ).attr('required',true);
			$("#dynamic_div").show("slide", "fast" );
		} else {
			$("#dynamic-cookie-key" ).attr('required',false);
			$("#dynamic_div").hide("slide", "fast" );
		}
	});
	$( "#dynamic2" ).click( function(){
		if ($('#dynamic2').is(':checked')) {
			$("#dynamic-cookie-key2" ).attr('required',true);
			$("#dynamic_div2").show("slide", "fast" );
		} else {
			$("#dynamic-cookie-key2" ).attr('required',false);
			$("#dynamic_div2").hide("slide", "fast" );
		}
	});
	$( "#check-servers-backend" ).click( function(){
		if ($('#check-servers-backend').is(':checked')) {
			$( "#rise-backend" ).attr('required',true);
			$( "#fall-backend" ).attr('required',true);
			$( "#inter-backend" ).attr('required',true);
			$( "#inter-backend" ).selectmenu( "option", "disabled", false );
			$( "#fall-backend" ).selectmenu( "option", "disabled", false );
			$( "#rise-backend" ).selectmenu( "option", "disabled", false );
		} else {
			$( "#rise-backend" ).attr('required',false);
			$( "#fall-backend" ).attr('required',false);
			$( "#inter-backend" ).attr('required',false);
			$( "#inter-backend" ).selectmenu( "option", "disabled", true );
			$( "#fall-backend" ).selectmenu( "option", "disabled", true );
			$( "#rise-backend" ).selectmenu( "option", "disabled", true );
		}
	});
	$( "#hide_menu" ).click(function() {
		$(".top-menu").hide( "drop", "fast" );
		$(".container").css("max-width", "98%");
		$(".container").css("margin-left", "1%");
		$(".show_menu").show();
		Cookies.set('hide_menu', 'hide', { expires: 365 });
	});
	$( "#show_menu" ).click(function() {
		$(".top-menu").show( "drop", "fast" );
		$(".container").css("max-width", "91%");
		$(".container").css("margin-left", "207px");
		$(".show_menu").hide();
		Cookies.set('hide_menu', 'show', { expires: 365 });
	});
	
	var hideMenu = Cookies.get('hide_menu');
	if (hideMenu == "show") {
		$(".top-menu").show( "drop", "fast" );
		$(".container").css("max-width", "91%");
		$(".container").css("margin-left", "207px");
	}
	if (hideMenu == "hide") {
		$(".top-menu").hide();
		$(".container").css("max-width", "98%");
		$(".container").css("margin-left", "1%");
		$(".show_menu").show();
	}	
	
	var availableTags = [
		"acl", "http-request", "http-response", "set-uri", "set-url", "set-header", "add-header", "del-header", "replace-header", "path_beg", "url_beg()", "urlp_sub()", "set cookie", "dynamic-cookie-key", "mysql-check", "tcpka", "tcplog", "forwardfor", "option"
	];
			
	$( "#ip" ).autocomplete({
		source: function( request, response ) {
			if ( request.term == "" ) {
				request.term = 1
			}
			$.ajax( {
				url: "options.py",
				data: {
					ip: request.term,
					serv: $("#serv").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));				
				}					
			} );
		},
		autoFocus: true,
		minLength: -1,
		select: function( event, ui ) {
			$('#listen-port').focus();				
		}
	});
	$( "#ip1" ).autocomplete({
		source: function( request, response ) {
			if ( request.term == "" ) {
				request.term = 1
			}
			$.ajax( {
				url: "options.py",
				data: {
					ip: request.term,
					serv: $("#serv2").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));
					}					
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	$( "#backends" ).autocomplete({
		source: function( request, response ) {
			if ( request.term == "" ) {
				request.term = 1
			}
			$.ajax( {
				url: "options.py",
				data: {
					backend: request.term,
					serv: $("#serv2").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					response(data.split('<br>'));
				}						
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	$( "#options" ).autocomplete({
		source: availableTags,
		autoFocus: true,
	    minLength: -1,
		select: function( event, ui ) {
			$("#optionsInput").append(ui.item.value + " ");
			$("#options").empty();
		}
	});
	$( "#options1" ).autocomplete({
		source: availableTags,
		autoFocus: true,
	    minLength: -1,
		select: function( event, ui ) {
			$("#optionsInput1").append(ui.item.value + " ");				
		}
	});
	$( "#options2" ).autocomplete({
		source: availableTags,
		autoFocus: true,
	    minLength: -1,
		select: function( event, ui ) {
			$("#optionsInput2").append(ui.item.value + " ")
		}
	});
	$( "#path-cert-listen" ).autocomplete({
		source: function( request, response ) {
			$.ajax( {
				url: "options.py",
				data: {
					getcert:1,
					serv: $("#serv").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));
				}						
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	var ssl_offloading_var = "http-request set-header X-Forwarded-Port %[dst_port] \n"+
						"http-request add-header X-Forwarded-Proto https if { ssl_fc } \n"+
						"redirect scheme https if !{ ssl_fc } \n"
	$('#ssl_offloading').click(function() {
		if($('#optionsInput').val().indexOf('ssl_fc ') == '-1') {
			$("#optionsInput").append(ssl_offloading_var)
		} else {
			replace_text("#optionsInput", ssl_offloading_var);
		}
	});
	$('#ssl_offloading1').click(function() {
		if($('#optionsInput1').val().indexOf('ssl_fc ') == '-1') {
			$("#optionsInput1").append(ssl_offloading_var)
		} else {
			replace_text("#optionsInput1", ssl_offloading_var);
		}

	});
	$('#ssl_offloading2').click(function() {
		if($('#optionsInput2').val().indexOf('ssl_fc ') == '-1') {
			$("#optionsInput2").append(ssl_offloading_var)
		} else {
			replace_text("#optionsInput2", ssl_offloading_var);
		}
	});
	var forward_for_var = "option forwardfor if-none\n";
	$('#forward_for').click(function() {
		if($('#optionsInput').val().indexOf(forward_for_var) == '-1') {
			$("#optionsInput").append(forward_for_var)
		} else {
			replace_text("#optionsInput", forward_for_var);
		}	
	});
	$('#forward_for1').click(function() {
		if($('#optionsInput1').val().indexOf(forward_for_var) == '-1') {
			$("#optionsInput1").append(forward_for_var)
		} else {
			replace_text("#optionsInput1", forward_for_var);
		}	
	});
	$('#forward_for2').click(function() {
		if($('#optionsInput2').val().indexOf(forward_for_var) == '-1') {
			$("#optionsInput2").append(forward_for_var)
		} else {
			replace_text("#optionsInput2", forward_for_var);
		}	
	});
	var redispatch_var = "option redispatch\n";
	$('#redispatch').click(function() {
		if($('#optionsInput').val().indexOf(redispatch_var) == '-1') {
			$("#optionsInput").append(redispatch_var)
		} else {
			replace_text("#optionsInput", redispatch_var);
		}	
	});
	$('#redispatch2').click(function() {
		if($('#optionsInput2').val().indexOf(redispatch_var) == '-1') {
			$("#optionsInput2").append(redispatch_var)
		} else {
			replace_text("#optionsInput2", redispatch_var);
		}	
	});
	var slow_atack = "option http-buffer-request\ntimeout http-request 10s\n"
	$('#slow_atack').click(function() {
		if($('#optionsInput').val().indexOf(slow_atack) == '-1') {
			$("#optionsInput").append(slow_atack)
		} else {
			replace_text("#optionsInput", slow_atack);
		}	
	});
	$('#slow_atack1').click(function() {
		if($('#optionsInput1').val().indexOf(slow_atack) == '-1') {
			$("#optionsInput1").append(slow_atack)
		} else {
			replace_text("#optionsInput1", slow_atack);
		}	
	});
	$("#ddos").checkboxradio( "disable" );
	$("#ddos1").checkboxradio( "disable" );
	$("#ddos2").checkboxradio( "disable" );
	$( "#name" ).change(function() {
		table_name = $('#name').val();
		table_name = $.trim(table_name)
		if($('#name').val() != "") {
			$("#ddos").checkboxradio( "enable" );
		} else {
			$("#ddos").checkboxradio( "disable" );
		}
	});
	$( "#new_frontend" ).change(function() {
		table_name = $('#new_frontend').val();
		table_name = $.trim(table_name)
		if($('#new_frontend').val() != "") {
			$("#ddos1").checkboxradio( "enable" );
		} else {
			$("#ddos1").checkboxradio( "disable" );
		}
	});
	$( "#new_backend" ).change(function() {
		table_name = $('#new_backend').val();
		table_name = $.trim(table_name)
		if($('#new_backend').val() != "") {
			$("#ddos2").checkboxradio( "enable" );
		} else {
			$("#ddos2").checkboxradio( "disable" );
		}
	});
	
	$('#ddos').click(function() {
		if($('#name').val() == "") {
			$("#optionsInput").append(ddos_var)
		}
		var ddos_var = "#Start config for DDOS atack protecte\n"+
								  "stick-table type ip size 1m expire 1m store gpc0,http_req_rate(10s),http_err_rate(10s)\n"+
								  "tcp-request connection track-sc1 src\n"+
								  "tcp-request connection reject if { sc1_get_gpc0 gt 0 }\n"+
								  "# Abuser means more than 100reqs/10s\n"+
								  "acl abuse sc1_http_req_rate("+table_name+") ge 100\n"+
								  "acl flag_abuser sc1_inc_gpc0("+table_name+")\n"+
								  "tcp-request content reject if abuse flag_abuser\n"+
								  "End config for DDOS\n";
		if($('#optionsInput').val().indexOf(ddos_var) == '-1') {			
			if($('#name').val() == "") {
				alert("First set Listen name")
			} else {
				$("#optionsInput").append(ddos_var);
			}
		} else {
			replace_text("#optionsInput", ddos_var);
		}	
	});
	$('#ddos1').click(function() {
		if($('#new_frontend').val() == "") {
			$("#optionsInput1").append(ddos_var)
		}
		var ddos_var = "#Start config for DDOS atack protecte\n"+
								  "stick-table type ip size 1m expire 1m store gpc0,http_req_rate(10s),http_err_rate(10s)\n"+
								  "tcp-request connection track-sc1 src\n"+
								  "tcp-request connection reject if { sc1_get_gpc0 gt 0 }\n"+
								  "# Abuser means more than 100reqs/10s\n"+
								  "acl abuse sc1_http_req_rate("+table_name+") ge 100\n"+
								  "acl flag_abuser sc1_inc_gpc0("+table_name+")\n"+
								  "tcp-request content reject if abuse flag_abuser\n"+
								  "End config for DDOS\n";
		if($('#optionsInput1').val().indexOf(ddos_var) == '-1') {
			if($('#new_frontend').val() == "") {
				alert("First set Frontend name")
			} else {
				$("#optionsInput1").append(ddos_var)
			}
		} else {
			replace_text("#optionsInput1", ddos_var);
		}	
	});
	$('#ddos2').click(function() {
		if($('#new_backend').val() == "") {
			table_name = $('#new_backend').val();
		}
		var ddos_var = "#Start config for DDOS atack protecte\n"+
								  "stick-table type ip size 1m expire 1m store gpc0,http_req_rate(10s),http_err_rate(10s)\n"+
								  "tcp-request connection track-sc1 src\n"+
								  "tcp-request connection reject if { sc1_get_gpc0 gt 0 }\n"+
								  "# Abuser means more than 100reqs/10s\n"+
								  "acl abuse sc1_http_req_rate("+table_name+") ge 100\n"+
								  "acl flag_abuser sc1_inc_gpc0("+table_name+")\n"+
								  "tcp-request content reject if abuse flag_abuser\n"+
								  "End config for DDOS\n";
		if($('#optionsInput2').val().indexOf(ddos_var) == '-1') {
			if($('#new_backend').val() == "") {
				alert("First set Backend name")
			} else {
				$("#optionsInput2").append(ddos_var)
			}
		} else {
			replace_text("#optionsInput2", ddos_var);
		}	
	});
	$( "#path-cert-frontend" ).autocomplete({
		source: function( request, response ) {
			$.ajax( {
				url: "options.py",
				data: {
					getcert:1,
					serv: $("#serv2").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));
				}						
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	$( "#path-cert-backend" ).autocomplete({
		source: function( request, response ) {
			$.ajax( {
				url: "options.py",
				data: {
					getcert:1,
					serv: $("#serv3").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));
				}						
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	$( "#interface" ).autocomplete({
		source: function( request, response ) {
			$.ajax( {
				url: "options.py",
				data: {
					showif:1,
					serv: $("#master").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));
				}						
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	$( "#interface-add" ).autocomplete({
		source: function( request, response ) {
			$.ajax( {
				url: "options.py",
				data: {
					showif:1,
					serv: $("#master-add").val(),
					token: $('#token').val()
				},
				success: function( data ) {
					data = data.replace(/\s+/g,' ');
					response(data.split(" "));
				}						
			} );
		},
		autoFocus: true,
		minLength: -1
	});
	$( "#ssl_key_upload" ).click(function() {
		$('.alert-danger').remove();
		$.ajax( {
			url: "options.py",
			data: {
				serv: $('#serv4').val(),
				ssl_cert: $('#ssl_cert').val(),
				ssl_name: $('#ssl_name').val(),
				token: $('#token').val()
			},
			type: "GET",
			success: function( data ) {
				data = data.replace(/\s+/g,' ');
				if (data.indexOf('danger') != '-1') {
					$("#ajax-ssl").html(data);
				} else if (data.indexOf('success') != '-1') {
					$('.alert-danger').remove();
					$( "#ajax-ssl").html(data);
					setTimeout(function() {
						$( "#ajax-ssl").html("");
					}, 2500 );
				} else {
					$("#ajax-ssl").html('<div class="alert alert-danger">Something wrong, check and try again</div>');
				}
			}
		} );
	});
	$('#ssl_key_view').click(function() {
		$.ajax( {
			url: "options.py",
			data: {
				serv: $('#serv5').val(),
				getcerts: "viewcert",
				token: $('#token').val()
			},
			type: "GET",
			success: function( data ) {
				if (data.indexOf('danger') != '-1') {
					$("#ajax-show-ssl").html(data);
				} else {
					$('.alert-danger').remove();
					var i;
					var new_data = "";
					data = data.split("\n");
					
					for (i = 0; i < data.length; i++) {
						
						new_data += ' <a onclick="view_ssl(\''+data[i]+'\')" style="cursor: pointer;" title="View this cert">'+data[i]+'</a> '
					}
					$("#ajax-show-ssl").html("<b>"+new_data+"</b>");					
				} 
			}
		} );
	});

	$('#auth').submit(function() {
		$('.alert-danger').remove();
		let searchParams = new URLSearchParams(window.location.search)
		if(searchParams.has('ref')) {
			var ref = searchParams.get('ref');
		} else {
			var ref = "overview.py";
		}
		$.ajax( {
			url: "login.py",
			data: {
				login: $('#login').val(),
				pass: $('#pass').val()
			},
			type: "GET",
			success: function( data ) {
				if (data.indexOf('ok') != '-1') {
					window.location.replace(ref);
				} else {
					$('.alert-danger').remove();
					$("#ajax").html(data);					
				} 
			}
		} );
		return false;
	});
});
function replace_text(id_textarea, text_var) {
	var str = $(id_textarea).val();
	var len = str.length;
	var len_var = text_var.length;
	var beg = str.indexOf(text_var);
	var end = beg + len_var
	var text_val = str.substring(0, beg) + str.substring(end, len);
	$(id_textarea).text(text_val);
}

function view_ssl(id) {
	$.ajax( {
		url: "options.py",
		data: {
			serv: $('#serv5').val(),
			getcert: id,
			token: $('#token').val()
		},
		type: "GET",
		success: function( data ) {
			if (data.indexOf('danger') != '-1') {
				$("#ajax-show-ssl").html(data);
			} else {
				$('.alert-danger').remove();
				$('#dialog-confirm-body').text(data);
				$( "#dialog-confirm" ).dialog({
					resizable: false,
					height: "auto",
					width: 800,
					modal: true,
					title: "Certificate from "+$('#serv5').val()+", name: "+id,
					buttons: {
						Ok: function() {
							$( this ).dialog( "close" );
						}
					  }
				});					
			} 
		}
	} );

}