var FG = new Array();
var FG_current = -1;
var FG_process = false;
var first_run = true;
var last_fg=null;
function CSC( url, fg, b64 , group){
	//buffer írása
	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);
		}
		if(!group){
			var group = '';
		}
		t.push(url);
		t.push(fg);
		t.push('wait');
		t.push(group);
		FG.push(t);
	}
	//ha szabad a buffer, művelet indítása
	if( FG_process == true){
			return false;
		}
	if( run_CSC == false){
		//document.getElementById('log').innerHTML+=(url+'<br />');
		return false; //késlelteti az összes CSC betöltődéséig
	}
	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|Loading...');
	}
	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;
					//JsMain.run('receive', FG[FG_i][0] );
					$.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;
				//JsMain.run('receive', FG[FG_i][0] );
				$.post(FG[FG_i][0], function(data) { receive(data); });
				return true;
			}
		};
		FG_process = false;
	}
}

function receive(str){
	if( FG[FG_current][1] != undefined){
		try{
			if ( str.indexOf('error|') > (-1) &&  FG[FG_current][3] != ''){
				//ha valami groupba van és hibát dob, akkor blokkolja a gropup többi tagjának a betöltését
				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';
					}
				};
				$('.loader .close').click(); 
				alert(str);
			}
		  	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]();
					}
				}catch(e){
				}
				last_fg=null;
				$('.loader .close').click(); //eröltetett kilépés, user modul miatt, lehet hogy néha rossz választás
			}
		}, 200);
		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(!pfg){
		var pfg = function(data) { alert('Saved successfully!'); };
	}
	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){
			CSC( turl, function(data) { }, true, group);
		}
		if(i == max){
			CSC( turl, pfg, true, group);
		}
		i++;
	}
}

function urlConvert(url){
	//szétbontás
	var t=url.split('¤');
	for(var i=0; i<t.length; i++){
	    if ( t[i].indexOf('˙') > -1 ){
	        t[i] = t[i].split('˙');
	    }
	}

	//összeállítás
	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($.trim(text.toString()) == ''){
		return '';
	}
	//szétbontás
	var t=text.split('¤');
	for(var i=0; i<t.length; i++){
	    if ( t[i].indexOf('˙') > -1 ){
	        t[i] = t[i].split('˙');
	    }
	}

	//összeállítás
	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;
}
