var errors = { '404': 'We can\'t find content source file please try again later.', '500': 'Server problems. Please try again later..' };
var loading = '<div class="loading">Loading data, please wait.... </div>';
var p_check = '<div class="loading">Checking if this IP is online, please wait.... </div>';

var checker_loading = '<div class="loading">Checking ... TOTAL: <span id="to_check" style="font-weight:bold;"></span>, CHECKED: <span id="already_checked" style="font-weight:bold;">0</span></div>';
var checker_button = '<div id="send_form" class="button" onClick="process_cform();">CHECK</div>';
var good_proxies = new Array();
var bad_proxies = new Array();

var request_in_action = 'Please wait ! This request is still loading.';
var requests_arr = new Array();
var proxy_requests = new Array();


function process_cform() {
$("#checker_container").empty();
$("#extra_options").hide();
$("textarea#export_list").val('').hide();

//IP:PORT REGEX
var r = /^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}):([0-9]{1,5})$/;

proxies = $("#checkerarea").val().split('\n');
params = $("#pchecker_form").serialize();

//filter proxies input before ajax request
p = new Array();
p_extra = new Array();
good_proxies.length = 0;
bad_proxies.length = 0;

for (var i = 0; i < proxies.length; i++) {

if(r.test($.trim(proxies[i]))){
inf = proxies[i].split(":");
//$("#crez").append('<div class="prez_'+ id[0].replace(/\./g,"") +'">'+proxies[i]+'</div><br />');
$("#checker_container").append(
//'<div class="prez_'+ i +'">'+proxies[i]+'</div><br />'
'<div id="prez_'+ i +'" class="url" onClick="checker_list('+ i +');"><ul><li class="p_ip">'+ inf[0] +'</li><li class="p_port">'+ inf[1] +'</li><li class="p_host">N/A</li><li class="p_country">N/A</li><li class="p_state">N/A</li><li class="p_city">N/A</li></ul><div style="clear:both;"></div></div><div id="pcontainer_'+ i +'" class="pcontainer"></div>'
);
p.push(proxies[i]);
p_extra.push(proxies[i]);
}

}

if(p.length>0){
$("#checker_list").show();
$(".checker_button").empty().html(checker_loading);
$("#to_check").html(p.length);

for (var i = 0; i < p.length; i++) {

ip = p[i].split(':');

$.ajax({
        ajaxcounter: i,
        type: "POST",
        url: "../../tools/checker.php",
		//timeout:30000,
        data: "ip="+ip[0]+"&port="+ip[1]+"&"+params,
		dataType: 'json',
		cache: false,
        success: function(data)
        {
		//id = p[this.ajaxcounter].split(":");
        
			if(data.status == "1") {
			//$("#prez_"+ this.ajaxcounter).css("background-color","#E3F6CE");
			$("#prez_"+ this.ajaxcounter).addClass("green");
			$("#prez_"+ this.ajaxcounter +" li.p_host").html(data.s_hostname);
			$("#prez_"+ this.ajaxcounter +" li.p_country").html(data.s_country);
			$("#prez_"+ this.ajaxcounter +" li.p_state").html(data.s_region);
			$("#prez_"+ this.ajaxcounter +" li.p_city").html(data.s_city);
			good_proxies.push("#prez_"+ this.ajaxcounter);
			$("#pcontainer_"+ this.ajaxcounter).html(data.full_html);
		    }
			
			if(data.status == "0") {
			//$("#prez_"+ this.ajaxcounter).css("background-color","#F6CECE");
			$("#prez_"+ this.ajaxcounter).addClass("red");
			bad_proxies.push("#prez_"+ this.ajaxcounter);
		    }
			
			p_extra = jQuery.grep(p_extra, function(value) { return value != data.proxy; });
			
			$("#already_checked").html(p.length - p_extra.length);

			if(p_extra.length == 0){
	        $(".checker_button").empty().html(checker_button);
			$("#extra_options").slideDown("slow");
	        }

        },
        error: function()
        {
            alert("An error occured while checking proxies.");
        }
    });

	
}

} else {
alert("What should I check ? Enter something.");
}

return false;
}

function remove_badproxies() {
if (bad_proxies.length > 0) {
for (var i = 0; i < bad_proxies.length; i++) {
$(bad_proxies[i]).slideUp("fast").empty();
}
bad_proxies.length = 0;
} else {
alert ('There is no bad proxies in the list.');
}
return false;
}

function export_to_list() {
if (good_proxies.length > 0) {
$("textarea#export_list").val('').show();
for (var i = 0; i < good_proxies.length; i++) {
//$(bad_proxies[i]).slideUp("fast").empty();

ip = $(good_proxies[i]+" .p_ip").html();
port = $(good_proxies[i]+" .p_port").html();


$("textarea#export_list").val( $("textarea#export_list").val() + ip+":"+port+"\n");
//$("textarea#export_list").val(ip+":"+port);


}
good_proxies.length = 0;
} else {
alert ('Here is nothing what I can export to text list :(');
}

return false;
}


function checker_list(id) {

if($("#prez_"+id).hasClass("green")) {

//$("#pcontainer_"+id).toggle(":visible");

if($("#pcontainer_"+id).is(":visible")) {
$("#prez_"+ id).css("font-weight","normal");
$("#pcontainer_"+id).slideUp();
} else {
$("#prez_"+ id).css("font-weight","bold");
$("#pcontainer_"+id).slideDown();
}

}

return false;
}


function proxy_list(id) {
if(proxy_requests.length < 10) {
if ($("#pid_"+id).is(".this") && jQuery.inArray(id, proxy_requests) == -1) {
$("#pid_"+id).removeClass("this");
$("#pcontainer_"+id).empty().slideUp();
} else {
if(jQuery.inArray(id, proxy_requests) == -1) {
proxy_requests.push(id);
$("#pid_"+id).addClass("this");
$("#pcontainer_"+id).html(p_check).slideDown();
check_proxy(id);
} else {
alert('Please wait this request is still processing ...');
}
}
} else {
alert('Please wait there is too much proxy which are still checking.');
}
return false;
}



function check_proxy(id) {
$.ajax({
        type: "POST",
        url: file,
		//timeout:30000,
        data: "id="+id,
		dataType: 'json',
		cache: false,
        success: function(result)
        {
          if(result.type == 'error')
            {
             alert("ERROR: "+result.content);
            }

            if(result.type == 'success')
            {
            $("#pcontainer_"+id).html(result.content);
			
			    //if p,s is offline change to red
			    if(result.online == '0')
                {
			    $("#pid_"+result.id).css("background-color","#F6CECE");
			    }
				
				if(result.online == '1')
                {
			    $("#pid_"+result.id).css("background-color","#E3F6CE");
			    }
            }
            proxy_requests = jQuery.grep(proxy_requests, function(value) { return value != id; });
        },
        error: function()
        {
            alert("An error occured while checking proxy");
        }
    });

return false;
}



function go(url) {
$(window.location).attr("href", url);
}

function visit(url) {
window.open(url, "_blank");
}


function check_ports (ip,ports,prefix) {
if(ports.length>0){
for (var i = 0; i < ports.length; i++) {
$.ajax({
        ajaxcounter: i,
        type: "GET",
        url: "tools/port.php",
		//timeout:30000,
        data: "ip="+ip+"&port="+ports[i],
		cache: false,
        success: function(data)
        {
		$("#"+prefix+ports[this.ajaxcounter]).removeClass("in_progress");
        
			if(data == "0") {
			$("#"+prefix+ports[this.ajaxcounter]).addClass("off");
		    }
			
			if(data == "1") {
			$("#"+prefix+ports[this.ajaxcounter]).addClass("on");
		    }

        },
        error: function()
        {
            alert("An error occured while getting ports.");
        }
    });
}
}
return false;
}

function flash_check(){
$("#flash_f").html('<object width="1" height="1"><param name="movie" value="tools/get_ip.swf"><param name="menu" value="false"><param name="allowScriptAccess" value="always"><param name="bgcolor" value="#ffffff"><param name="flashVars" value="id='+flash_id+'"><embed src="tools/get_ip.swf" width="1" height="1" menu="false" loop="false" allowScriptAccess="always" flashVars="id='+flash_id+'"></embed></object>');
return false;
}

function submit(id){
$("#"+id).submit();
return false;
}

function check_cports(id,max_check) {
por = $("#"+id).val();
make_arr = por.split(',');
//check for dublicates and remove them
make_arr = uniarr(make_arr);

if(make_arr.length < 1) {
alert("Enter at least 1 port numbers.");
} else {

//filter input
if(make_arr.length <= max_check) {
$(".ports_cont").empty();
for (var i = 0; i < make_arr.length; i++) {

if(isNumber(make_arr[i]) && make_arr[i].indexOf(".") == -1 && make_arr[i] > 5 && make_arr[i] < 65534) {
$(".ports_cont").append('<li id="port_'+make_arr[i]+'" class="in_progress">'+make_arr[i]+'</li>');
} else {
alert("This port number is invalid.");
}

}
check_ports(ip,make_arr,"port_"); 
} else {
alert("We can check only "+max_check+" ports please delete some and try again.");
}

}
}

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}


function uniarr(u) {
        var uniqueArr = [];
        for (var i = u.length; i--; ) {
            var val = u[i];
            if ($.inArray(val, uniqueArr) === -1 && val.length != 0 && val > 0) {
                uniqueArr.unshift(val);
            }
        }
        return uniqueArr;
} 



function get_info(result_div,file,ip,get)
{

//push to know which actions are running and which not running.
requests_arr.push(get);

req = "ip="+ip+"&get="+get;

if(get == "flash_check") {
req = "ip="+ip+"&get="+get+"&guid="+flash_id;
}

$.ajax({
		type: "POST",
		url: file,
		data: req,
		dataType: 'json',
		timeout:30000,
		cache: false,
		success: function(result){
		check_req = false;
		//remove action from array when done.
		requests_arr = jQuery.grep(requests_arr, function(value) { return value != get; });
if(result.type == 'error')
{
alert("ERROR: "+result.content);
}

if(result.type == 'success')
{
$(result_div).empty().html(result.content);
$("html, body").animate({ scrollTop: $("#"+get).offset().top }, 1000);

//if it is get ports we process and get ports
if(get == "check_ports") {
setTimeout( function() { check_ports(ip,ports,"port_"); }, 1000 );
}
}

},
error:function(xhr,err){
$.each(errors, function(err, msg) {
if (xhr.status == err) { 				
alert(msg);			
}				
});
}

});
return false;
}


function process(div,ip) {

if ($("#"+div).is(".open"))
{
    $("#"+div+"_content").hide().empty();
	$("#"+div).removeClass('open');
	$("#"+div).addClass('closed');
} else {
    $("#"+div+"_content").html(loading).show();
	$("#"+div).removeClass('closed');
    $("#"+div).addClass('open');
	if(div == 'flash_check'){
	flash_check();
	}
	
  	get_info("#"+div+"_content","json.php",ip,div);  
}

return false;
}

function clicker(div){
var id = $("#"+div).attr("id");
if(jQuery.inArray(id, requests_arr) == -1) {
process(id,ip);
} else {
alert(request_in_action);
}
return false;
}
