var frp_ip_allow=1;
var frp_port_allow=1;

function checkIp(str){			
    var ipRegex = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
    var hostRegex = /^([a-zA-Z0-9-]{1,63}\.)+[a-zA-Z]{2,}$/i;
    return ipRegex.test(str) || hostRegex.test(str);
}
function checkPort(str){
	var ss =  /^([1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
	return ss.test(str);
}
function allow_upload(){
	var temp1 = $("#frp_addr").is(":visible");
	var temp2 = $("#frp_port").is(":visible");
	if(temp1 && frp_ip_allow == 0) temp1 = 0;
	else temp1 = 1;
	if(temp2 && frp_port_allow == 0) temp2 = 0;
	else temp2 = 1;

	if(temp1 && temp2){
		$("#frp_setting").attr("disabled",false);
	}else{
		$("#frp_setting").attr("disabled",true);
	}
}
function frp_chn_type_change(index){
    var frp_chn_type = $("#frp_chn_type" + index).val();
    if(frp_chn_type == "disable"){
        $(".frp_chn_params" + index).hide();
    }else{
        $(".frp_chn_params" + index).show();
	}
}
function get_frp(){
	$.ajax({
	    type: "GET",
	    url: "http://" + xc_gethost() + "/get_frp",
	    dataType: "xml",
	    cache: false,
	    error: function () {
	    },
	    success: function (data) {
	        var frp_enable = $(data).find("server_enable").text();
            $("#frp_enable").val(frp_enable);
            if(frp_enable == 0){
                $("#frp_content").hide();
            }else if(frp_enable == 1){
                $("#frp_content").show();
            }
                
            var frp_addr = $(data).find("server_addr").text();
            var frp_port = $(data).find("server_port").text();
            var frp_token = $(data).find("server_token").text();
            $("#frp_addr").val(frp_addr);
            $("#frp_port").val(frp_port);
            $("#frp_token").val(frp_token);

            for(var i = 0; i < 4; i++){
                var frp_chn_type = $(data).find("chn_type" + i).text();
                var frp_local_ip = $(data).find("local_ip" + i).text();
                var frp_local_port = $(data).find("local_port" + i).text();
                var frp_remote_port = $(data).find("remote_port" + i).text();
                $("#frp_chn_type" + i).val(frp_chn_type);
                $("#frp_local_ip" + i).val(frp_local_ip);
                $("#frp_local_port" + i).val(frp_local_port);
                $("#frp_remote_port" + i).val(frp_remote_port);
                frp_chn_type_change(i);
            }
	    }
	});
}

function frp_enable_change(){
    var frp_enable = $("#frp_enable").val();
    if(frp_enable == 0){
        $("#frp_content").hide();
    }else if(frp_enable == 1){
        $("#frp_content").show();
    }
}

function frp_setting(){
    var tmp = "";
    var frp_enable = $("#frp_enable").val();
    tmp += "server_enable=" + frp_enable;
    if(frp_enable == 1){
        var frp_addr = $("#frp_addr").val();
        var frp_port = $("#frp_port").val();
        var frp_token = $("#frp_token").val();
        tmp += "&server_addr=" + frp_addr + "&server_port=" + frp_port + "&server_token=" + frp_token;
        for(var i = 0; i < 4; i++){
            var frp_chn_type = $("#frp_chn_type" + i).val();
            tmp += "&chn_type" + i + "=" + frp_chn_type;
            var frp_local_ip = $("#frp_local_ip" + i).val();
            tmp += "&local_ip" + i + "=" + frp_local_ip;
            var frp_local_port = $("#frp_local_port" + i).val();
            tmp += "&local_port" + i + "=" + frp_local_port;
            var frp_remote_port = $("#frp_remote_port" + i).val();
            tmp += "&remote_port" + i + "=" + frp_remote_port;
        }
    }
    $.ajax({
        type: "GET",
        url: "http://" + xc_gethost() + "/set_frp" + "?" + tmp,
        cache: false,
        success: function (data) {
            var ret = $(data).find("return").text();
            if ("ok" == ret) {
                alert($.i18n.prop('frp_setting_success'));
            }
            else {
                alert($.i18n.prop('frp_setting_failed'));
            }
        },
        error: function (){
        	alert($.i18n.prop('frp_setting_failed'));
        }
    });
}

function init_language(){
    jQuery.i18n.properties({
        name: 'common',
        path: '../lang/',
        mode: 'map',
        language: window.parent.get_language_setup(),
        callback: function () {
			$('#header_text').html($.i18n.prop('frp_header_text'));
			$('#frp_enable_txt').html($.i18n.prop('frp_enable_txt'));
			$('#frp_on').html($.i18n.prop('frp_on'));
			$('#frp_off').html($.i18n.prop('frp_off'));
			$('#frp_addr_txt').html($.i18n.prop('frp_addr_txt'));
			$('#frp_port_txt').html($.i18n.prop('frp_port_txt'));
			$('#frp_token_txt').html($.i18n.prop('frp_token_txt'));
            $('.frp_chn_type_disable').text($.i18n.prop('frp_chn_type_disable_txt'));
            for(var i = 0; i < 4; i++){
                $('#frp_chn_type' + i + "_txt").html($.i18n.prop('frp_chn_type_txt') + ' ' + (i + 1) + ':');
                $('#frp_local_ip' + i + "_txt").html($.i18n.prop('frp_local_ip_txt') + ' ' + (i + 1) + ':');
                $('#frp_local_port' + i + "_txt").html($.i18n.prop('frp_local_port_txt') + ' ' + (i + 1) + ':');
                $('#frp_remote_port' + i + "_txt").html($.i18n.prop('frp_remote_port_txt') + ' ' + (i + 1) + ':');
            }
            $('#frp_setting').val($.i18n.prop('frp_setting'));
        }
    });
}

$(function(){
	init_language();
    get_frp();
    
    $("#frp_addr").focusout(function(){
		if($(this).is(":visible")){
			var value=$(this).val();
			if(value==""){
				$("#frp_ip_hint_image").removeClass("display_off");
				frp_ip_allow=0;
			}else if(!checkIp(value)){
				$("#frp_ip_hint_image").removeClass("display_off");
				frp_ip_allow=0;
			}else{
				$("#frp_ip_hint_image").addClass("display_off");
				frp_ip_allow=1;
			}
		}
    	allow_upload();
    });
    $("#frp_port").focusout(function(){
		if($(this).is(":visible")){
    	var value=$(this).val();
			if(value==""){
				$("#frp_port_hint_image").removeClass("display_off");
				frp_port_allow=0;
			}else if(!checkPort(value)){
				$("#frp_port_hint_image").removeClass("display_off");
				frp_port_allow=0;
			}else{
				$("#frp_port_hint_image").addClass("display_off");
				frp_port_allow=1;
			}
		}
    	allow_upload();
    });
});
