function xtext_add_panel_button(wheres, onclick, img, title, popup_name){
	
	var where_ids = XTEXT_PANEL_TEXTAREAS;
	
	if($type(wheres) != 'array'){
		wheres = [wheres];
	}
	
	var found_textarea_id = '';
	
	wheres.each(function(where){
		if($type(where) != 'string') return;
		if(!$chk(where_ids[where])) return;
		if(!$(where_ids[where])) return;
		found_textarea_id = where_ids[where];
	});
	
	if(!found_textarea_id){
		return;
	}
	
	var panel_forms = $$(XTEXT_PANEL_SELECTOR);
	if(!$chk(panel_forms[0])){
		return;
	}
	
	var onclick = onclick.replace(/\$textarea\$/gm, '"'+found_textarea_id+'"')
	
	if($chk(popup_name)){
		var popup_id = 'xtext_popup_'+popup_name;
		var popup_div = new Element('div')
		.inject('xtext_popups')
		.set('load', {
			evalScripts: true,
			onSuccess: function(){
				popup_div.getFirst('div').set('id', popup_id);
			}
		})
		.load(DIR_WEB_ROOT+'/xtext-popup/getpopup/'+popup_name+'/'+found_textarea_id+'/');
	}
	
	new Element('a', {
		'href': '#',
		'class': 'button',
		'onclick': onclick+'; return false;',
		'html': '<img title="'+title.h2c()+'" src="'+XTEXT_TEMPLATE_PATH+img.h2c()+'">'
	}).inject(panel_forms[0]);
	
}

var xtext_popup_win = {};


function xtext_center_popup(popup_name){
	var popup_id = 'xtext_popup_'+popup_name;
	var popup_div = $(popup_id);
	if(!$chk(popup_div)){
		return;
	}
	var mask = window;
	var mask_size = mask.getSize();
	var popup_coord = popup_div.getCoordinates(mask);
	var popup_fix_left = Math.round((mask_size.x-popup_coord.width)/2);
	var popup_fix_top = Math.round((mask_size.y-popup_coord.height)/2);
	popup_div.setPosition({x: popup_fix_left, y: popup_fix_top<0?0:popup_fix_top});
	var popup_parent = popup_div.getParent('.StickyWinInstance');
	if(popup_parent){
		popup_parent.setPosition({x: popup_fix_left, y: popup_fix_top<0?0:popup_fix_top});
	}
}


function xtext_open_popup(popup_name){
	var popup_id = 'xtext_popup_'+popup_name;
	var popup_div = $(popup_id);
	if(!$chk(popup_div)){
		return;
	}
	if(!$chk(xtext_popup_win[popup_name])){
		xtext_popup_win[popup_name] = new StickyWin.Modal({
			content: popup_div,
			closeClassName: 'close-block',
			useIframeShim: false,
			modalOptions: {
				modalStyle:{
					'z-index':900
				}
			}
		}).addEvent('display', function(){
			setTimeout(function(){
				xtext_center_popup(popup_name);
				var func = 'xtext_popup_'+popup_name+'_show_after';
				if($type(window[func]) == 'function') window[func]();
			}, 1);
			xtext_popup_win[popup_name].centerInterval = setInterval(
				'xtext_center_popup("'+popup_name+'")',
				500
			);
		}).addEvent('close', function(){
			clearInterval(
				xtext_popup_win[popup_name].centerInterval
			);
		});
	}
	xtext_popup_win[popup_name].show();
	xtext_popup_win[popup_name].pin(true);	
}


function xtext_close_popup(popup_name){
	xtext_popup_win[popup_name].hide();
}

function xtext_init_tags(){
	if($type(XTEXT_TAGS) != 'array'){
		return;
	}
	XTEXT_TAGS.each(function(tag){
		var tag_init_func = 'xtext_'+tag+'_init';
		//alert(tag_init_func + ' = ' + $type(window[tag_init_func]));
		if($type(window[tag_init_func]) == 'function'){
			var tag_panel_rules = $type(XTEXT_PANEL_RULES[tag]) == 'array'
				? XTEXT_PANEL_RULES[tag]
				: []
			;
			(window[tag_init_func])(tag_panel_rules);
		}
	});
}


function xtext_process_tags(parent){
	if($type(XTEXT_TAGS) != 'array'){
		return;
	}
	XTEXT_TAGS.each(function(tag){
		var tag_process_func = 'xtext_'+tag+'_process';
		//alert(tag_process_func + ' = ' + $type(window[tag_process_func]));
		if($type(window[tag_process_func]) == 'function'){
			(window[tag_process_func])(parent);
		}
	});
}


function xtext_init(){
	if(!$chk($('xtext_popups'))){
		new Element('div', {
			'id': 'xtext_popups',
			'styles': {
				'display': 'none'
			}
		}).inject($$('body')[0]);
	}
	xtext_init_tags();
	xtext_init_blocks();
	xtext_process_tags();
}


function xtext_lang_get(name, replace){
	if($type(XTEXT_LANG_VARS[name]) != 'string'){
		return 'NOT_FOUND_LANG_TEXT';
	}
	return $type(replace) == 'object'
		? XTEXT_LANG_VARS[name].tr(replace)
		: XTEXT_LANG_VARS[name]
	;
}


function xtext_mathround(num, dec){
	if(!$chk(dec)){
		dec = 0;
	}
	var mult = Math.pow(10, dec);
	var n = $type(num)=='string' ? parseFloat(num) : new Number(num);
	return Math.round(n*mult)/mult;
}


document.addEvent('domready', xtext_init);


function xtext_ajax_path(tag, event, args, nosecure){
	var url = DIR_WEB_ROOT+'/xtext-ajax/'+tag+'-'+event+'/?'
		+($chk(nosecure)&&nosecure ? '' : 'security_ls_key='+LIVESTREET_SECURITY_KEY)
	;
	if($type(args) == 'string'){
		url += '&'+args;
	}else if($type(args) == 'object'){
		url += '&'+new Hash(args).toQueryString();
	}
	return url;
}

String.prototype.h2c = function(){
	var e = Element('span').set('text',this);
	var s = e.get('html');
	e.destroy();
	return s;
};
String.prototype.c2h = function(){
	var e = Element('span').set('html',this);
	var s = e.get('text');
	e.destroy();
	return s;
};
String.prototype.tr = function(a,p) { var k; var p=typeof(p)=='string'?p:''; var s=this; for(k in a){ var tk=p?p.split('/'):[]; tk[tk.length]=k; var tp=tk.join('/'); if(typeof(a[k])=='object'){ s=s.tr(a[k],tp); }else{ s=s.replace((new RegExp((new String('%%'+tp+'%%')), 'g')), a[k]); }; }; return s; };



function xtext_function_clone(func, as_text){
	if($type(func) == 'function'){
		var fbody = func.toString().replace(/^(function)([^\(]*)\(/gi, '$1 (');
		if($chk(as_text) && as_text){
			return fbody;
		}
		return eval('('+fbody+')');
	}
	return $empty;
}
////
eval('var Native_AjaxTextPreview = '+xtext_function_clone(ajaxTextPreview, 1));

var ajaxTextPreview = function (textarea_id,hsc,div_id) {
	var textarea = $(textarea_id);
	var div = $chk(div_id) ? $(div_id) : $('text_preview');
	if(!textarea || !div){
		Native_AjaxTextPreview(textarea_id,hsc,div_id);
		return;
	}
	var ajax_url = xtext_ajax_path('_', 'textpreview');
	var post_data = new Hash({
		textarea_id: textarea.get('id'),
		hsc: $chk(hsc)&&hsc ? 1 : 0,
		text: textarea.get('value')
	}).toQueryString();
	div.set('load', {
		method: 'post',
		noCache: true,
		data: post_data,
		evalResponse: true,
		onSuccess: function(){
			div.setStyle('display', 'block');
		}
	})
	.load(ajax_url);
};

function xtext_block_id(tag, block){
	return 'xtext_tag_'+tag+'_block_'+block;
}

function xtext_block_element(tag, block){
	return $(xtext_block_id(tag, block));
}

function xtext_block_tab_id(tag, block, tab){
	return xtext_block_id(tag, block)+'_tab_'+tab;
}

function xtext_block_tab_element(tag, block, tab){
	return $(xtext_block_tab_id(tag, block, tab));
}

function xtext_block_tab_path_to_param(path){
	if(!path){
		return;
	}
	var param = path.split('/');
	if(param.length != 3){
		return;
	}
	return param;
}

function xtext_block_tab_load_path(path){
	var param = xtext_block_tab_path_to_param(path);
	if(!param){
		return;
	}
	xtext_block_tab_load(param[0], param[1], param[2]);
}

function xtext_block_tab_load(tag, block, tab){
	var div = xtext_block_tab_element(tag, block, tab);
	if(!div){
		return;
	}
	var ajax_url = DIR_WEB_ROOT+'/xtext-block-tab/'+tag+'/'+block+'/'+tab+'/';
	var loading = $(xtext_block_id(tag, block)+'_loading');
	if(loading){
		loading.setStyle('display', '');
	}
	div.set('load', {
		method: 'get',
		noCache: true,
		evalResponse: true,
		onSuccess: function(){
			xtext_block_hide_tabs(xtext_block_id(tag, block), true);
			div.setStyle('display', '');
		}
	})
	.load(ajax_url);
}


function xtext_block_hide_tabs(block_id, no_switcher){
	var block = $(block_id);
	block
	.getElements('.xtext-block-tab')
	.each(function(tab){
		tab.setStyle('display', 'none');
	});
	if($chk(no_switcher) && no_switcher){
		return;
	}
	block
	.getElements('.xtext-block-tab-switcher')
	.each(function(switcher){
		switcher.getParent('li').removeClass('active');
	});
}

function xtext_block_highlight_switcher(block, tab){
	var switcher = $(block)
	.getElement('.xtext-block-tab-switcher[_tab_id='+$(tab).get('id')+']');
	if(switcher){
		switcher.getParent('li').addClass('active');
	}
}

function xtext_block_display_tab_by_id(block_id, tab_id, dont_load){
	var tab = $(tab_id);
	if(!tab){
		return;
	}
	var dont_load = $chk(dont_load) && dont_load;
	xtext_block_hide_tabs(block_id);
	var path = tab.get('_tab_path');
	if(path && !dont_load){
		xtext_block_tab_load_path(path);
	}else{
		tab.setStyle('display', '');
	}
	xtext_block_highlight_switcher($(block_id), tab);
}

function xtext_init_blocks(){
	$$('.xtext-block').each(function(block){
		var block_id = block.get('id');
		var switchers = block.getElements('.xtext-block-tab-switcher');
		if(!switchers.length){
			return;
		}
		switchers.each(function(switcher){
			switcher.addEvent('click', function(event){
				var dont_load = true;
				if($type(event) == 'event'){
					event.preventDefault();
					dont_load = false;
				}
				xtext_block_display_tab_by_id(block_id, $(this).get('_tab_id'), dont_load);
			});
			if(switcher.hasClass('xtext-block-tab-switcher-selected')){
				switcher.fireEvent('click', switcher);
			}
		});
	});
}

