var FG = new Array();
var FG_current = -1;
var FG_process = false;
var first_run = true;
var last_fg=null;
var last_data=null; //utoljára átadott paraméter
function CSC2( url, fg, b64 , group){
	console.log(url);
	if (url =='') {
		if (FG_current == FG.length-1) {
			var found = $("body").find("div.loader");
			if (found.length != 0) {
				$('.loader .close').click();		
			}
		};
	}
	if (url =='last') {
		if (last_fg==null){
			last_fg = new Array();
		}
		last_fg.push(fg);
	}
	if (url !='' && url !='last') {
		var t = new Array();
		if(!b64){
			var url = urlConvert(url);
			console.log('new:'+url);
		}
		if(!group){
			var group = '';
		}
		t.push(url);
		t.push(fg);
		t.push('wait');
		t.push(group);
		FG.push(t);
	}
	if( FG_process == true){
			return false;
		}
	if( run_CSC == false){
		return false;
	}
	if ( FG.length>0 ){
		callCommand();
	}else{
		if (last_fg!=null) {
			try{
				for(var x=0; x<last_fg.length; x++){
				last_fg[x]();
				}
			}catch(e){
			}
			last_fg=null;
		}
	}
}

function callCommand(){
	FG_process = true;
	var found = $("body").find("div.loader");
	var founds = $("body").find("div.success");
	var foundf = $("body").find("div.eror");
	var foundc = $("body").find("div.confirm");
	if (found.length == 0 && founds.length == 0 && foundf.length == 0 && foundc.length == 0 && FG.length>0) {
		alert('loader|Betöltés...');
	}
	if ( first_run == true ) {
		first_run = false;
		window.setTimeout(function() {
			for (var FG_i=0; FG_i < FG.length; FG_i++) {
				if ( FG[FG_i][2] == 'wait' ){
					FG_current = FG_i;
					$.post(FG[FG_i][0], function(data) { receive(data); });
					return true;
				}
			};
			FG_process = false;
		},200);
	}else{
		for (var FG_i=0; FG_i < FG.length; FG_i++) {
			if ( FG[FG_i][2] == 'wait' ){
				FG_current = FG_i;
				$.post(FG[FG_i][0], function(data) { receive(data); });
				return true;
			}
		};
		FG_process = false;
	}
}

function receive(str){
	last_data = str;
	if( FG[FG_current][1] != undefined){
		try{
			if ( str.indexOf('error|') > (-1) &&  FG[FG_current][3] != ''){
				FG[FG_current][2] = 'success';
				for (var FG_i=FG_current; FG_i < FG.length; FG_i++) {
					if ( FG[FG_i][2] == 'wait' &&  FG[FG_i][3] == FG[FG_current][3]){
						FG[FG_i][2] = 'success';
					}
				};
			}
		  	FG[FG_current][1](str);
			FG[FG_current][2] = 'success';
			FG_process = false;
			callCommand();
		}catch(err){
			FG[FG_current][2] = 'success';
			FG_process = false;
			callCommand();  
	  	}	
	}else{
		FG_process = false;
	}
	if (FG_current == FG.length-1) {
		setTimeout(function() {
			if (last_fg!=null) {
				try{
					for(var x=0; x<last_fg.length; x++){
					last_fg[x](last_data);
					}
				}catch(e){
				}
				last_fg=null;
				$('.loader .close').click();
			}
		}, 2000);
		var found = $("body").find("div.loader");
		if (found.length != 0) {
			if (last_fg!=null) {
				
				
			}else{
				$('.loader .close').click();
			}
			
		}
	};
}
/**
 * @param: url: String
 * @param: fparam: Strint (first parameter pl: |kiraly|ture|0)
 * @param: html: String (large content pl |xmlcontent
 * @param: lparam: Strint (last parameter pl: |12)
 
 felkell készíteni a CSC apit a fogadásra
 pl:
 streamer(
 	'<?php echo $main_url; ?>CSC/?param=admin|FormEditor|addOrModifyItem',
 	'|'+escape($('#main_form input[name=name]').val())+'|<?php echo $id ?>',
 	$('#stage').html(),
 	'|'+name_index,
 	 function(data) {successAlert(data)});
 */
function streamer(url, fparam, html, lparam, group, pfg){
	var limit = 300;
	var url = urlConvert(url+fparam);
	var html = sendFromJS($.trim(html));
	html = html.substring(('_B-64_').length,html.length); 
	/*nem akarjuk hogy visszakódjolja a CSC php része, mert feldaraboljuk*/
	var max = Math.ceil((html.length)/limit)-1;
	var i = 0;
	
	if( max == -1){
		i= -1;
	}
	
	if(!group){
		var group = '';
	}
	if(!lparam){
		var lparam = '';
	}
	
	if(!pfg){
		var pfg = function(data) { alert('Sikeres mentés!'); };
	}
	while(i <= max){
		var content = html.slice(i*limit,(i+1)*limit);
		var turl = url + '|' + content + fullTextConvert(lparam) + '|'+ sendFromJS(i) + '|'+ sendFromJS(max) ;
		
		
		if(i < max){
			CSC2( turl, function(data) { }, true, group);
		}
		if(i == max){
			CSC2( turl, pfg, true, group);
		}
		i++;
	}
}

function urlConvert(url){
	var t=url.split('¤');
	for(var i=0; i<t.length; i++){
	    if ( t[i].indexOf('˙') > -1 ){
	        t[i] = t[i].split('˙');
	    }
	}
	var new_url='';
	for (var i=0; i<t.length; i++){
	    if ( new_url != ''){
	        new_url+='|';
	    }
	    if( t[i].constructor == Array){
	       var part='';
	       for (var k=0; k<t[i].length; k++){
	             if ( part != ''){
	                part+=',';
	            }
	            part+=sendFromJS(t[i][k]);
	       }
	        new_url+=part;
	    }else{
	    	if(i>0){
	            new_url+=sendFromJS(t[i]);
	        }else{
	            new_url+=t[i];
	        }
	    }
	}
	return new_url;
}

function fullTextConvert(text){
	if(!text) return '';
	if($.trim(text.toString()) == ''){
		return '';
	}
	var t=text.split('¤');
	for(var i=0; i<t.length; i++){
	    if ( t[i].indexOf('˙') > -1 ){
	        t[i] = t[i].split('˙');
	    }
	}

	var new_url='';
	for (var i=0; i<t.length; i++){
	    if ( new_url != ''){
	        new_url+='|';
	    }
	    if( t[i].constructor == Array){
	       var part='';
	       for (var k=0; k<t[i].length; k++){
	             if ( part != ''){
	                part+=',';
	            }
	            part+=sendFromJS(t[i][k]);
	       }
	        new_url+=part;
	    }else{
	        new_url+=sendFromJS(t[i]);
	    }
	}
	return new_url;
}

function sendFromJS(str){
	
	var tmp = '_B-64_'+escape(Base64.encode($.trim(str.toString())));
	//return tmp;
	return tmp.replace(/%3D/g,'=');
}

var Base64 = {
 
	
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
	
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = Base64._utf8_encode(input);
 
		while (i < input.length) {
 
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
 
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
		}
 
		return output;
	},
 
	
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
		while (i < input.length) {
 
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
 
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
 
			output = output + String.fromCharCode(chr1);
 
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
 
		}
 
		output = Base64._utf8_decode(output);
 
		return output;
 
	},
 
	
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
};
