if ( typeof( console ) == 'undefined' ) {
	console = { log : function( msg ) {} };
}

// FIXME törlendő var sw_ajax_req_run = false;
var sw_ajax_req_spool = [];
var sw_ajax_req_spool_size = 0;

function sw_new_ajax_request()
{
	var myRequest = false;

	if(window.XMLHttpRequest)
	{
		myRequest = new XMLHttpRequest();
		if(myRequest.overrideMimeType)
		{
			myRequest.overrideMimeType('text/xml');
		}
	}
	else if(window.ActiveXObject)
	{
		try
		{
			myRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try
			{
				myRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	return myRequest;
}

function sw_init_ajax( p_url, p_handler, hide_reqest_id ) {
	
	req_id = sw_ajax_req_spool.length;
	sw_ajax_req_spool_size++;
	sw_ajax_req_spool[ req_id ] = sw_new_ajax_request();
	if(!sw_ajax_req_spool[ req_id ])
	{
		alert('Error: could not get requested information; please reload this page.');
		return false;
	}

	document.body.style.cursor = 'progress';	
	sw_ajax_req_spool[ req_id ].sw_req_id = req_id;
	sw_ajax_req_spool[ req_id ].sw_stop_ajax = sw_stop_ajax;
	
	sw_ajax_req_spool[ req_id ].onreadystatechange = p_handler;
	if ( hide_reqest_id ) {
		sw_ajax_req_spool[ req_id ].open('GET', p_url, true);
	} else {
		sw_ajax_req_spool[ req_id ].open('GET', p_url +'&sw_req_id='+ req_id, true);
	}
	sw_ajax_req_spool[ req_id ].send(null);	
	
}

function sw_init_ajax_post( p_url, p_handler, p_form_id ) {
	var form_reference;
	var form_elements;
	var postdata ='';

	form_reference = document.getElementById(p_form_id);
	form_elements = form_reference.getElementsByTagName('input');
	for( var i = 0; i< form_elements.length; i++){
		switch( form_elements[i].type){
			case 'checkbox':
			case 'radio':
				if( form_elements[i].checked ){
					if( postdata!=''){
						postdata += '&';
					}
					postdata += form_elements[i].name + '=' + escape(form_elements[i].value );
				}
			break;
			
			case 'submit':
			case 'button':
			case 'reset':
				// Ezeket nem küldjük
			break;
			
			default:
				if( postdata!=''){
					postdata += '&';
				}
				postdata += form_elements[i].name + '=' + escape(form_elements[i].value ); 
			break;
		}
	}
	form_select_elements = form_reference.getElementsByTagName('select');
	if(form_select_elements){
		for( var i = 0; i< form_select_elements.length; i++ ){		
			if( postdata!=''){
				postdata += '&';
			}
			postdata += form_select_elements[i].name + '=' + escape(form_select_elements[i].value);
		}
	}

	form_textarea_elements = form_reference.getElementsByTagName('textarea');
	if(form_textarea_elements){
		for( var i = 0; i< form_textarea_elements.length; i++ ){
			if( typeof(tinyMCE)!='undefined' ){
				var editor = tinyMCE.get(form_textarea_elements[i].id);
				if( editor ){
					form_textarea_elements[i].value = editor.getContent();
				}
			}
			if( postdata!=''){
				postdata += '&';
			}
			postdata += form_textarea_elements[i].name + '=' + escape(form_textarea_elements[i].value);
		}
	}
	

	
	if ( typeof( form_reference.sw_submited_button ) != 'undefined' ) {
		if( postdata!=''){
			postdata += '&';
		}
		postdata += form_reference.sw_submited_button.name +'='+ form_reference.sw_submited_button.value;
	}
	
	
	sw_ajax_post_uri = window.location.href;
	postdata += '&sw_ajax_post_uri=' + escape(encodeURIComponent(sw_ajax_post_uri));
	req_id = sw_ajax_req_spool.length;
	sw_ajax_req_spool_size++;
	sw_ajax_req_spool[ req_id ] = sw_new_ajax_request();
	if(!sw_ajax_req_spool[ req_id ])
	{
		alert('Error: could not get requested information; please reload this page.');
		return false;
	}
	
	document.body.style.cursor = 'progress';
	
	sw_ajax_req_spool[ req_id ].sw_req_id = req_id;
	sw_ajax_req_spool[ req_id ].sw_stop_ajax = sw_stop_ajax;
	sw_ajax_req_spool[ req_id ].onreadystatechange = p_handler;	
	sw_ajax_req_spool[ req_id ].open('POST', p_url +'&sw_req_id='+ req_id, true);	
	sw_ajax_req_spool[ req_id ].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	sw_ajax_req_spool[ req_id ].send(postdata);
}


function sw_stop_ajax () {

	try
	{
		this.abort();
	} catch (e) {}
	
	delete sw_ajax_req_spool[ this.sw_req_id ];
	sw_ajax_req_spool_size--;
	
	if ( sw_ajax_req_spool_size <= 0 ) {
		document.body.style.cursor = 'default';
	}
}

function sw_result_replace_html () {
	if(this.readyState == 4)	{
		if(this.status == 200) {
			var obj_id = this.responseText.match(/<swobjid>(.+)<\/swobjid>/m);
			if ( obj_id != null ) {
				var dest_obj = document.getElementById( obj_id[1] );
				if ( dest_obj != null ) {
					var new_html_content = this.responseText.match(/<swhtml>([\s\S]*)<\/swhtml>/m);
					dest_obj.innerHTML = new_html_content[1];
				}
			}
			this.sw_stop_ajax();
		}
	}
}

function sw_result_replace_html_json () {
	if(this.readyState == 4)	{
		if(this.status == 200) {
			var result_obj = {};			
			if ( this.responseText != '' ) {
				result_obj = eval( '('+  this.responseText +')' );
			}
			if ( this.responseText == '' || typeof( result_obj ) == 'undefined' || typeof( result_obj.success ) == 'undefined' ) {
				
				alert( 'A szervertől hibás válasz érkezett: "'+ this.responseText +'"' );

			} else {
				if ( result_obj.success == true ) {
					try {
						if ( typeof(result_obj.swobjid ) != 'undefined' && typeof(result_obj.swhtml) != 'undefined') {
							var dest_obj = document.getElementById( result_obj.swobjid );
							if ( dest_obj != null ) {
								
								var sw_header_obj = document.getElementsByTagName("head")[0];
								
								try {
									if ( (typeof( jQuery ) != 'undefined') && (typeof( jQuery.prototype ) != 'undefined' ) && (typeof( jQuery.prototype.AeroWindow ) != 'undefined' ) ) {
										var tmp_jquery_content = jQuery(dest_obj).find('.AeroWindow .table-mm-content');
										if ( tmp_jquery_content.length > 0 ) {
											tmp_jquery_content.id = result_obj.swobjid +'_jq_aerowindow_content';
											dest_obj = tmp_jquery_content.get(0);
										}
									}
								} catch (e) {
									console.log( 'Error while closing AeroWindow.');
									console.log( e );
									//console.log( e.toString() );
								}
								
								dest_obj.innerHTML = result_obj.swhtml.replace( 
										/<script[^>]+src\s*=\s*("|')([^"']+)("|')[^>]*><\/script>/gi,
										function( all, quote, script_src ) {
											if( (typeof( script_src ) != 'undefined' ) && (script_src != '') ) {
												try {
													//console.log( 'script_src: '+ script_src );
													
													var script_obj = document.createElement("script");
													script_obj.type = 'text/javascript';
													script_obj.src = script_src;
													
													sw_header_obj.appendChild( script_obj );
													
												} catch (e) {
													console.log( 'Error in ajax content linked script.');
													console.log( e );
													//console.log( e.toString() );
													console.log( script_src );
												}
											}
											return '';
										}
									);
								
								setTimeout(
										function() {
											var sw_script_tags = dest_obj.getElementsByTagName('script');
											for( var sc_i = 0; sc_i < sw_script_tags.length; sc_i++ ) {
												
												if ( (typeof( sw_script_tags[ sc_i ].innerHTML ) != 'undefined') &&
													(sw_script_tags[ sc_i ].innerHTML != '')
												) {
													try {
														//console.log( 'eval script: '+ sw_script_tags[ sc_i ].innerHTML );
														
														eval( sw_script_tags[ sc_i ].innerHTML );
													} catch (e) {
														console.log( 'Error in ajax content inline script.');
														console.log( e );
														//console.log( e.toString() );
														if ( typeof( sw_script_tags[ sc_i ] ) != 'undefined' ) {
															if ( typeof( sw_script_tags[ sc_i ].innerHTML ) != 'undefined' ) {
																console.log( sw_script_tags[ sc_i ].innerHTML );
															} else {
																console.log( 'Nincs innerHTML mezője a scriptnek' );
																console.log( sw_script_tags[ sc_i ] );
															}
														} else {
															console.log( 'Nincs definiálva: sw_script_tags['+ sc_i +']' );
														}
													}
													
												}
												
											}
										},
										100
								);
							}							
						}
						this.sw_stop_ajax();
						if( typeof(result_obj.call_script) != 'undefined') {
							eval(result_obj.call_script);
						}						
						if ( typeof( result_obj.recall ) != 'undefined' && result_obj.recall && typeof( result_obj.recall_url ) != 'undefined' ) {
							if ( typeof( result_obj.recall_time ) == 'undefined' ) {
								this.sw_init_ajax( result_obj.recall_url, sw_result_replace_html_json );
							} else {
								setTimeout( 'sw_init_ajax( "'+ result_obj.recall_url +'", sw_result_replace_html_json )', result_obj.recall_time);
							}
						}						
						if ( typeof( result_obj.redirect ) != 'undefined' && result_obj.redirect && typeof( result_obj.redirect_url ) != 'undefined' ) {
							if ( typeof( result_obj.redirect_time ) == 'undefined' ) {
								document.location = result_obj.redirect_url;
							} else {
								setTimeout( 'document.location ='+ result_obj.redirect_url, result_obj.redirect_time);
							}
						}						

					} catch (e) {
						
						tmp = '';
						for ( field_name in result_obj ) {
							tmp += field_name +': '+ result_obj[field_name] +"\n";
						}
						alert( 'Exception: '+ e.message +'\n result_obj: '+ tmp );
						
						// TODO: handle exception
					}
				} else {
					try {
						alert( result_obj.errors );
					} catch (e) {
						alert( 'Exception: '+ e.message );
						// TODO: handle exception
					}
					result_obj = { recall: false };
				}
				
			}
			
		} else {
			alert( 'AJAX status: '+ this.status +'\n responseText:\n"'+ this.responseText +'"' );
		}	
		this.sw_stop_ajax();
	}
}

function sw_progress_result() {

	if(this.readyState == 4)	{
		if(this.status == 200) {
			var result_obj = {};
			if ( this.responseText != '' ) {
				result_obj = eval( '('+  this.responseText +')' );
			}
			if ( this.responseText == '' || typeof( result_obj ) == 'undefined' || typeof( result_obj.success ) == 'undefined' ) {
				
				alert( 'A szervertől hibás válasz érkezett: "'+ this.responseText +'"' );
				
			} else {
				
				if ( result_obj.success == true ) {
					try {
						var progress_obj = document.getElementById( result_obj.progress_id );
						progress_obj.style.width = result_obj.progress +'%';
						
						var progress_text_obj = document.getElementById( result_obj.progress_text_id );
						progress_text_obj.innerHTML = result_obj.progress +'%';
						
						var current_obj = document.getElementById( result_obj.current_id );
						current_obj.innerHTML = result_obj.current;
						
						if ( typeof( result_obj.all_id ) != 'undefined' ) {
							var all_obj = document.getElementById( result_obj.all_id );
							all_obj.innerHTML = result_obj.all;
						}
						
						if ( typeof( result_obj.last_req_time_id) != 'undefined' ) {
							var last_req_time_obj = document.getElementById( result_obj.last_req_time_id );
							last_req_time_obj.innerHTML = result_obj.last_req_time;
						}
						
					} catch (e) {
						/*
						tmp = '';
						for ( field_name in result_obj ) {
							tmp += field_name +': '+ result_obj[field_name] +"\n";
						}
						alert( 'Exception: '+ e.message +'\n result_obj: '+ tmp );
						*/
						// TODO: handle exception
					}
				} else {
					try {
						alert( result_obj.errors );
					} catch (e) {
						alert( 'Exception: '+ e.message );
						// TODO: handle exception
					}
					result_obj = { recall: false };
				}
				
			}
			
			this.sw_stop_ajax();
			if( typeof(result_obj.call_script) != 'undefined') {
				eval(result_obj.call_script);
			}
			if ( typeof( result_obj.recall ) != 'undefined' && result_obj.recall && typeof( result_obj.recall_url ) != 'undefined' ) {
				if ( typeof( result_obj.recall_time ) == 'undefined' ) {
					this.sw_init_ajax( result_obj.recall_url, sw_progress_result );
				} else {
					setTimeout( 'sw_init_ajax( "'+ result_obj.recall_url +'", sw_progress_result )', result_obj.recall_time);
				}
			}
			if ( typeof( result_obj.redirect ) != 'undefined' && result_obj.redirect && typeof( result_obj.redirect_url ) != 'undefined' ) {
				if ( typeof( result_obj.redirect_time ) == 'undefined' ) {
					document.location = result_obj.redirect_url;
				} else {
					setTimeout( 'document.location ="'+ result_obj.redirect_url+'"', result_obj.redirect_time);
				}
			}			
		}
	}
}

function sw_send_form_content_with_ajax(p_form_id, p_url, p_handler){
	if ( p_handler == null ) {
		p_handler = 'sw_result_replace_html_json';
	}		
	window.setTimeout( "sw_init_ajax_post( '"+ p_url +"', "+ p_handler +",'"+ p_form_id +"')", 100 );
	return false;
}


function sw_init_ajax_form( p_form_id, p_url, p_handler ) {
	var form_obj = document.getElementById( p_form_id );
	if ( form_obj ) {
		form_obj.onsubmit = function( sw_event ) {
			return sw_send_form_content_with_ajax( p_form_id, p_url, p_handler );
		};
		
		var form_inputs = form_obj.getElementsByTagName('input');
		for( var i = 0; i < form_inputs.length; i++ ) {
			if ( form_inputs[i].type == 'submit' ) {
				form_inputs[i].onclick = sw_ajax_submit_button_on_click;
			}
		}
		form_obj.sw_submited_button;
	}
}

function sw_ajax_submit_button_on_click() {
	this.form.sw_submited_button = this;
	return true;
}

function sw_start_editor(p_url, p_skin, p_div_id, use_window ){
	if ( typeof( use_window ) == 'undefined' ) {
		use_window = false;
	}
	var sw_content_div;	
	sw_content_div = document.getElementById(p_div_id);
	if(sw_content_div){
		sw_close_aero_window( p_div_id );
	} else {
		sw_content_div = document.createElement('div');		
		sw_content_div.id = p_div_id;
		if ( use_window ) {
			sw_content_div.className = 'sw_s'+ p_skin +'_hidden_content input_add_item_box_win sw_s'+ p_skin +'_popup_editor_win';
		} else {
			sw_content_div.className = 'sw_s'+ p_skin +'_hidden_content input_add_item_box sw_s'+ p_skin +'_popup_editor';
		}
		document.body.appendChild(sw_content_div);
	}
	if(p_url.indexOf('?') == -1){
		p_url += '?';
	}else{
		if(p_url.substr(p_url.length-1, 1) != '&'){
			p_url += '&';
		}	
	}			
	p_url += 'sw_obj=' + p_div_id;
	sw_init_ajax(p_url, sw_result_replace_html_json);
	
	sw_content_div.style.visibility = "visible";
	sw_content_div.style.display = "block";
	sw_content_div.innerHTML = '<div class="sw_s'+ p_skin +'_ajax_loading" style="text-align: center"><img src="/data/skins/1/loading.gif" alt="Loading..." /> Loading...</div>';
	
}


function _sw_get_new_input_container( sw_input_element ) {
	
	if ( sw_input_element.parentNode.tagName.toLowerCase() != 'td' ) {
		// A tartalmazó tag végére rakunk egy rádiógombot
		return sw_input_element.parentNode;
	}
	
	/**
	 * Táblázatát ki kell elemezni, 
	 * ha utolsó sorban van üres, akkor oda rakjuk,
	 * egyébként új sor első cellájába az új elemet
	 */
	var outer_obj;
	var table_obj = null;
	var tbody_obj = sw_input_element.parentNode.parentNode.parentNode;
	
	if ( tbody_obj.tagName.toLowerCase() == 'table' ) {
		table_obj = tbody_obj;
	} else {
		table_obj = tbody_obj.parentNode;
	}
	
	var col_num = 3; // ha nem tudjuk megállapítani, akkor default 3
	if ( typeof( table_obj.cols ) != 'undefined' ) {
		col_num = table_obj.cols.length;
	} else {
		col_num = tbody_obj.rows[0].cells.length;
	}
	var last_row_i = tbody_obj.rows.length -1;
	
	if ( tbody_obj.rows[ last_row_i ].cells.length < col_num ) {
		/**
		 * ha az utolsó sorban nincs elég cella, akkor csinálunk egyet 
		 * és az lesz a cél cella
		 */ 
		outer_obj = tbody_obj.rows[ last_row_i ].insertCell( tbody_obj.rows[ last_row_i ].cells.length );
	} else {
		/**
		 * Ha az utolsó sorban van üres, akkor az lesz a cél cella
		 */
		var i = 0;
		var content;
		while ( (i < tbody_obj.rows[ last_row_i ].cells.length) && (outer_obj == null) ) {
			content = tbody_obj.rows[ last_row_i ].cells[i].innerHTML.trim();
			if ( content == '' || content == '&nbsp;' ) {
				outer_obj = tbody_obj.rows[ last_row_i ].cells[i];
			}
			i++;
		}
		
		if ( outer_obj == null ) {
			// nincs üres cella új sorban egy új cellát kell csinálni
			
			var new_row = tbody_obj.insertRow( tbody_obj.rows.length );
			outer_obj = new_row.insertCell( 0 );
		}
	}
	
	return outer_obj;
}

function sw_finish_editor(p_editor_div_id, p_new_key, p_new_value){
	var sw_content_div_element = document.getElementById(p_editor_div_id);
	var sw_item_box_replace_regexp = new RegExp('_(modify|add)_item_box', 'i');
	var sw_select_id = p_editor_div_id.replace(sw_item_box_replace_regexp,'');
	var sw_input_element = document.getElementById(sw_select_id);
	if ( sw_input_element == null ) {
		sw_select_id += '_0';
		sw_input_element = document.getElementById(sw_select_id);
		if ( sw_input_element == null ) {
			/**
			 *  Nincs meg a bővítendő select, vagy a rádiócsoport vagy a
			 *  jelölőnégyzet csoportnak nincs egy eleme sem.
			 *  TODO utóbbi 2 tag esetében a reload segíthet 
			 */
			document.location.href = document.location.href;		 
			return false;
		}
	}
	
	sw_content_div_element.style.visibility = "hidden";
	switch ( sw_input_element.tagName.toLowerCase() ) {
		case 'input':
			
			switch ( sw_input_element.type ) {
				case 'checkbox':
					var outer_obj = _sw_get_new_input_container( sw_input_element );
					
					// Meg kell keresni a következő sorszámozott id-t a rádiógombnak
					n = sw_input_element.name.replace(/^(.*)_([0-9]+)$/gi, '$1' );
					var i = 0;
					while ( document.getElementById( n +'_'+ i ) ) {
						i++;
					}
					if( !outer_obj.innerHTML ){
						outer_obj.innerHTML += '<input type="checkbox" name="'+ n +'_'+i+'" id="'+ n +'_'+ i +'" value="'+ p_new_key +'" /> '+
						'<label for="'+ n +'_'+ i +'">'+ p_new_value +'</label>';
						
					}
					else{
						/* megvalósítandó ha nem táblázatos formátum van */
					}
				break;
				
				case 'radio':
					var outer_obj = _sw_get_new_input_container( sw_input_element );
					
					// Meg kell keresni a következő sorszámozott id-t a rádiógombnak
					var i = 0;
					while ( document.getElementById( sw_input_element.name +'_'+ i ) ) {
						i++;
					}
					
					outer_obj.innerHTML += '<input type="radio" name="'+ sw_input_element.name +'" id="'+ sw_input_element.name +'_'+ i +'" value="'+ p_new_key +'" checked="cheked" /> '+
						'<label for="'+ sw_input_element.name +'_'+ i +'">'+ p_new_value +'</label>';
					
				break;
			}
			
		break;
		
		case 'select':
			var new_idx = sw_input_element.options.length;
			var sw_input_element_id = 0;
			var sw_is_modify = false;
			while(sw_input_element_id < new_idx && sw_is_modify == false){
				if(sw_input_element.options[sw_input_element_id].value == p_new_key){
					sw_is_modify = true;
					new_idx = sw_input_element_id;
				}else{
					sw_input_element_id++;
				}	
			}
			sw_input_element.options[new_idx] = new Option(p_new_value, p_new_key);
			sw_input_element.options[new_idx].selected = true;			
		break;
	}
	sw_close_aero_window( sw_content_div_element.id );
	document.body.removeChild(sw_content_div_element);
}

function sw_close_editor( p_editor_div_id, keep_container ){
	var sw_content_div_element = document.getElementById(p_editor_div_id);
	if ( sw_content_div_element != null ) {
		var parent_node = sw_content_div_element.parentNode;
		sw_content_div_element.innerHTML = '';
		if( keep_container = true ) {
			sw_content_div_element.style.display = 'none';
		} else {
			try {
				sw_close_aero_window( p_editor_div_id );
				parent_node.removeChild(sw_content_div_element);
			} catch (e) {}
		}
	}
}

function sw_close_aero_window( p_editor_div_id ) {
	try {
		if ( (typeof( jQuery ) != 'undefined') && document.getElementById( p_editor_div_id ) ) {
			if ((jQuery('body').data( p_editor_div_id )) != null) {
				//Register this Window
				jQuery('body').data( p_editor_div_id , null);
			}
		}
	} catch (e) {}
}

function sw_ajax_replace_urls( p_container_div_id, p_ajax_url ) {
	var container_div = document.getElementById( p_container_div_id );
	if ( container_div ) {
		var cur_url;
		var cur_url_param_pos = document.location.href.indexOf('?');
		if ( cur_url_param_pos == -1 ) {
			cur_url = document.location.href;
		} else {
			cur_url = document.location.href.substr( 0, cur_url_param_pos+1 );
		}
		
		var links = container_div.getElementsByTagName('a');
		if ( links && (links.length > 0) ) {
			
			if ( p_ajax_url.indexOf('?') == -1 ) {
				p_ajax_url += '?';
			} else {
				if ( p_ajax_url.substr( p_ajax_url.length-1, 1 ) != '&' ) {
					p_ajax_url += '&';
				}
			}
			for ( var i = 0; i < links.length; i++ ) {
				if ( links[ i ].href.indexOf( cur_url ) != -1 ) {
					links[ i ].href = 'javascript:sw_init_ajax("'+ p_ajax_url + links[ i ].href.substr( cur_url.length ) +'", sw_result_replace_html_json);';
				}
			}
		}
	} else {
		console.log( 'Url csere nem lehetséges, "'+ p_container_div_id +'" div hiányzik.' );
	}
}
function sw_start_modify_editor(p_input_id, p_url, p_skin, p_div_id, use_window){
	var sw_input_element = document.getElementById(p_input_id);
	var sw_selected_value;
	switch(sw_input_element.type){
		case 'select-one':
			sw_selected_value = sw_input_element.value;
		break;
	}
	if(sw_selected_value){
		p_url = p_url + sw_selected_value;
		sw_start_editor(p_url, p_skin, p_div_id, use_window );
	}
}

