var addget = '';

function wait_for_search_answer(){
//if (typeof(console)!='undefined') console.log(XmlHttp.readyState);
if (XmlHttp.readyState == 1){
show_wait_description(lang[act_lang]['states']['sending_request']);
}
else if (XmlHttp.readyState == 2){
show_wait_description(lang[act_lang]['states']['searching']);
}
else if (XmlHttp.readyState == 3){
show_wait_description(lang[act_lang]['states']['receiving_data']);
}
else if (XmlHttp.readyState == 4){
process_search(XmlHttp.responseXML);
}
}
function query_search_variants(search, type){
alert('?');
if (!search){
document.getElementById('search_variants').innerHTML = '';
}
var url = "makesearch.php?";
var post = 'post=1';

if (type>=1 && type<=4){
url += "type=" + type;
}
else{
return;
}

if (document.getElementById("sbySlog") && document.getElementById("sbySlog").checked ){
url += "&mode[slog]=1";
}
else if (document.getElementById("sbyLike") && document.getElementById("sbyLike").checked){
url += "&mode[fonet]=1";
}
else if (document.getElementById("sbyIn") && document.getElementById("sbyIn").checked ){
url += "&mode[in]=1";
}
else if (document.getElementById("sbyIdent") && document.getElementById("sbyIdent").checked ){
url += "&mode[ident]=1";
}
if (false){
if (document.getElementById("sbyLike") && document.getElementById("sbyLike").checked){
//if (document.getElementById("sbyFonet") && document.getElementById("sbyFonet").checked) url += "&mode[fonet]=1";
//if (document.getElementById("sbySemant") && document.getElementById("sbySemant").checked) url += "&mode[semant]=1";
//if (document.getElementById("sbyGraph") && document.getElementById("sbyGraph").checked) url += "&mode[graph]=1";
}
}
post += '&search=' + escape(search);
post += '&info=1';
XmlHttp.abort();
XmlHttp.open("POST", url, true);
XmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XmlHttp.onreadystatechange = wait_variants;
XmlHttp.send(post);
}
function wait_variants(){
if (XmlHttp.readyState == 4){
process_variants(XmlHttp.responseXML);
}
}
function process_variants(data){
try{
var j = document.getElementById('search_variants');
var a = data.getElementsByTagName('VARIANT');
var text = '';
for (var i=0; i<a.length; i++){
var v = a.item(i).firstChild.data;
if (i>0) text += ', ' + v;
else text += v;
}
j.innerHTML = text;
}
catch(err){
}
}

function make_search(type, query, show_history_records){
search_price2 = Math.round(search_price/currency.rate*100)/100 + ' ' + currency.sign;
search_holder_price2 = Math.round(search_holder_price/currency.rate*100)/100 + ' ' + currency.sign;
search_cert_price2 = Math.round(search_cert_price/currency.rate*100)/100 + ' ' + currency.sign;
search_inv_price2 = Math.round(search_inv_price/currency.rate*100)/100 + ' ' + currency.sign;
//var cert_search = false;
if (type==1) { if (search_price) {
bases = $('.base_selector:checked');
			var cert_search = true;
			
			for (b=0; b<bases.length; b++)
			{
				if (bases[b].value!="1" && bases[b].value!="21") cert_search = false;
			}
//if (bases.length==1 && bases[0].value=="1") cert_search = true;
if (cert_search && user_balance>10){
if (!confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', Math.round(10/currency.rate*100)/100+' '+currency.sign))) return;
}
else if (user_tickets) {if (!confirm(lang[act_lang]['reports']['purchase_alert4']) ) return;}
else{
if (cert_search)
		{
if (user_balance<10) {alert(lang[act_lang]['reports']['balance_alert']); return}
if (!confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', Math.round(10/currency.rate*100)/100+' '+currency.sign))) return;
		}
else{
if (user_balance<search_price) {alert(lang[act_lang]['reports']['balance_alert']); return}
if (!confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_price2))) return;
}
}
} } 
if (type==2) { if (search_holder_price) {
if (user_tickets) {if (!confirm(lang[act_lang]['reports']['purchase_alert4']) ) return;} 
else if (!confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_holder_price2))) return;
} } 
if (type==3) { if (search_cert_price) {
if (user_tickets) {if (!confirm(lang[act_lang]['reports']['purchase_alert4']) ) return;} 
else if (!confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_cert_price2))) return;
} } 
if (type==4) { if (search_inv_price) {
if (user_tickets) {if (!confirm(lang[act_lang]['reports']['purchase_alert4']) ) return;} 
else if (!confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_inv_price2))) return;
} } 
//if (type==2) if (!user_tickets && search_holder_price && !confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_holder_price2))) return;
//if (type==3) if (!user_tickets && search_cert_price && !confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_cert_price2))) return; 
//if (type==4) if (!user_tickets && search_inv_price && !confirm(lang[act_lang]['reports']['purchase_alert3'].replace('%price%', search_inv_price2))) return;
show_wait_message(true);
show_wait_description(lang[act_lang]['states']['searching']);
$('#savedoc').hide();
if (document.getElementById('results')) document.getElementById('results').innerHTML = '';
if (document.getElementById('results_nav_top')) document.getElementById('results_nav_top').style.display = 'none';
if (document.getElementById('results_nav_bot')) document.getElementById('results_nav_bot').style.display = 'none';
if (document.getElementById('forprint')) document.getElementById('forprint').style.display = 'none';
if (document.getElementById('forprint2')) document.getElementById('forprint2').style.display = 'none';

if (!(allow_innersearch && document.getElementById("innersearch").checked && document.getElementById("innersearch").value)){
//selected = new Array();
cur_query = query;
}
var url = "makesearch_new.php?";
var post = 'post=1';

if (type>=1 && type<=4){
url += "type=" + type;
}
else{
return;
}

last_search_type = type;
	
	last_search_siml = 0;
	

if (document.getElementById("sbySlog") && document.getElementById("sbySlog").checked ){
url += "&mode[slog]=1";
}
else{
if (document.getElementById("sbyIdent") && document.getElementById("sbyIdent").checked ) url += "&mode[ident]=1";
if (document.getElementById("sbyIn") && document.getElementById("sbyIn").checked ) url += "&mode[in]=1";
if (document.getElementById("sbyIn") && document.getElementById("sbyIn").checked && document.getElementById("searchInFullWord").checked){
post += '&addit[fullword]=1';
}
if (document.getElementById("sbyIn") && document.getElementById("sbyIn").checked && document.getElementById("searchInUseTranslit").checked){
post += '&addit[usetranslit]=1';
}
if (document.getElementById("sbyIdent") && document.getElementById("sbyIdent").checked && document.getElementById("searchIdentUseTranslit").checked){
post += '&addit[usetranslit]=1';
}
if (document.getElementById("sbyLike") && document.getElementById("sbyLike").checked){
last_search_siml = 1;
url += "&mode[fonet]=1";
}
if (document.getElementById("shallw") && document.getElementById("shallw").checked){
last_search_siml = 1;
url += "&mode[sh]=allw";
}
if (document.getElementById("shanyw") && document.getElementById("shanyw").checked){
last_search_siml = 1;
url += "&mode[sh]=anyw";
}
if (document.getElementById("shent") && document.getElementById("shent").checked){
last_search_siml = 1;
url += "&mode[sh]=ent";
}
if (document.getElementById("shtrs") && document.getElementById("shtrs").checked){
last_search_siml = 1;
url += "&mode[trs]=1";
}
}
if (allow_innersearch && document.getElementById("innersearch").checked && document.getElementById("innersearch").value){
post += '&innersearch=' + escape(document.getElementById("innersearch").value);
}
// Если по слогам
if (document.getElementById('sbySlog') && document.getElementById('sbySlog').checked == true){
var k = 0;
var ar = 0;
var po = 0;
var nec_l = 0;
var opt_l = 0;
var slog;
for (ar in slogSelect['and']){
for (po in slogSelect['and'][ar]){
slog = slogSelect['and'][ar][po];
post += '&slog[and][' + ar + '][]=' + escape(slog);
nec_l += slog.length;
}
}
var l_opt_l;
for (ar in slogSelect['or']){
for (po in slogSelect['or'][ar]){
l_opt_l = 0;
slog = slogSelect['or'][ar][po];
post += '&slog[or][' + ar + '][]=' + escape(slog);
if (slog.length) l_opt_l = Math.max(l_opt_l, slog.length);
}
if (l_opt_l) opt_l += l_opt_l;
}
if ( (nec_l + opt_l) < minSlogLength){
show_wait_message(false);
alert(lang[act_lang]['search']['syllable_alert']);
return;
}
}
var bases_check = search_check_bases_selected();
if (!bases_check){
show_wait_message(false);
alert(lang[act_lang]['common']['no_base_select']);
return;
}
post += bases_check;

if (document.getElementById("mktu_all") && !document.getElementById("mktu_all").checked && mktu_count && mktu_count>0){
for (var i=1; i<=mktu_count; i++){
if (document.getElementById("mktu_" + i).value){
post += '&mktu[' + i + ']=1';
}
}
}
	
	
	if (jQuery("#sd").attr('checked'))
	{
		post += '&sd=1';
	}
	

var check_ok = false;
if (query){
post += '&query=' + escape(cur_query);
post += '&search=' + escape(query);
check_ok = true;
}
	
	post += '&token=' + token;
if (check_ok==false){
show_wait_message(false);
alert(lang[act_lang]['search']['empty_alert']);
cur_query = '';
return;
}
if (type==1){
post += '&sim=' + document.getElementById('simLimit').value;
var engine = $('#engine option:selected').val();
if (engine!==undefined && engine!=='standart') post += '&engine=' + engine;
}
if (show_history_records) post += '&archive=1';

document.getElementById('show_innersearch').style.display = 'none';
document.getElementById('innersearch').value = '';
document.getElementById('innersearch').checked = false;
if (addget){
url += addget;
}
$.ajax({'type': "POST", 'url': url, 'data': post, 'success': process_search_request});
onSearchFieldChange();
}
function search_check_bases_selected(){
post = '';
var bcheck = false;
bases = getElementsByClass('base_selector', document);
for (i=0; i<bases.length; i++){
if (bases[i].checked){
post += '&bases[]='+bases[i].value;
bcheck = true;
}
}
return post;
}
var search_hid = '';
var current_search_hid;
function onerr(){
setTimeout(function(){
var post = 'hid='+current_search_hid+'&token='+token;
$.ajax({'type': "POST", 'url': 'makesearch_result.php', 'data': post, 'success': process_search, 'error': onerr});
}, 5000);
}
function process_search_request(data){
show_wait_message('Обработка');
current_search_hid = $('SRID', data).text();
if (current_search_hid!=""){
var post = 'hid='+current_search_hid+'&token='+token;
$.ajax({'type': "POST", 'url': 'makesearch_result.php', 'data': post, 'success': process_search, 'error': onerr});
}
else{
show_wait_message(false);
alert($('ERROR',data).text());
}
}


function process_search(xmlData){
$('#results').hide('');
$('#results_nav_top').hide();
$('#results_nav_bot').hide();
$('#savedoc').hide();
$('#forprint').hide('');
$('#forprint2').hide('');
var id_arr;
var obj_orid;
if (!xmlData || !xmlData.documentElement){
alert(lang[act_lang]['common']['xml_error']);
show_wait_message(false);
return;
}
xmlRoot = xmlData.documentElement;

id_arr = xmlRoot.getElementsByTagName("ERROR");
if (id_arr && id_arr.item(0) && id_arr.item(0).firstChild.data){
err_text = id_arr.item(0).firstChild.data;
show_wait_message(false);
alert(err_text);
return;
}
if (!(id_arr = xmlRoot.getElementsByTagName("RSLT"))){
alert(lang[act_lang]['common']['prs_error']);
show_wait_message(false);
return;
}
//alert(Dump(id_arr));
obj_qry_a = xmlRoot.getElementsByTagName("SET_QUERY");
if (obj_qry_a && obj_qry_a.item(0) && obj_qry_a.item(0).firstChild){
obj_qry = obj_qry_a.item(0).firstChild.data;
cur_query = unescape(obj_qry);
document.getElementById("SearchField").value = unescape(obj_qry);
}
var obj_size_a = xmlRoot.getElementsByTagName("SIZE");
if (obj_size_a && obj_size_a.item(0) && obj_size_a.item(0).firstChild.data){
search_full_size = obj_size_a.item(0).firstChild.data;
} 
var search_key_id_a = xmlRoot.getElementsByTagName("SRID");
if (search_key_id_a && search_key_id_a.item(0) && search_key_id_a.item(0).firstChild.data){
search_key_id = search_key_id_a.item(0).firstChild.data;
} 
var obj_afields_a = xmlRoot.getElementsByTagName("ADDFIELDS");
if (obj_afields_a) obj_afields_a = obj_afields_a[0];
afields = new Array();
if (obj_afields_a && obj_afields_a.childNodes){
obj_afields_list = obj_afields_a.childNodes;
for (i=0;i<obj_afields_list.length;i++){
if (obj_afields_list[i] && obj_afields_list[i].firstChild && obj_afields_list[i].firstChild.data) afields[obj_afields_list[i].nodeName] = obj_afields_list[i].firstChild.data;
}
}
var obj_qname_a = xmlRoot.getElementsByTagName("QNAME");
if (obj_qname_a && obj_qname_a.item(0) && obj_qname_a.item(0).firstChild && obj_qname_a.item(0).firstChild.data){
curr_qname = obj_qname_a.item(0).firstChild.data;
curr_qname = curr_qname.replace(/\"/g, '&quot;');
//alert(curr_qname);
}
if (id_arr.length==0){
allow_innersearch = 0;
document.getElementById('show_innersearch').style.display = 'none';
if (document.getElementById("SearchType").value==1){
if (document.getElementById("innersearch").checked){
var err_text = lang[act_lang]['search']['empty_search2'];
var err_text = err_text.replace(/%searched%/g, document.getElementById('SearchField').value);
var err_text = err_text.replace(/%order_url%/g, 'order.php?mark=' + escape(document.getElementById('SearchField').value.replace(/\"/g,'&quot;')));
$('#results').html(err_text);
//document.getElementById('results').innerHTML = err_text;
}
else{
var err_text = lang[act_lang]['search']['empty_search3'];
var err_text = err_text.replace(/%searched%/g, document.getElementById('SearchField').value);
var err_text = err_text.replace(/%order_url%/g, 'order.php?mark=' + document.getElementById('SearchField').value.replace(/\"/g,'&quot;'));
$('#results').html(err_text);
//document.getElementById('results').innerHTML = err_text;
}
}
else if (document.getElementById("SearchType").value==2){
var err_text = lang[act_lang]['search']['empty_search4'];
var err_text = err_text.replace(/%searched%/g, document.getElementById('SearchField').value);
var err_text = err_text.replace(/%order_url%/g, 'order.php?mark=' + escape(document.getElementById('SearchField').value.replace(/\"/g,'&quot;')));
$('#results').html(err_text);
}
else{
$('#results').html('<div class="search_empty">' + lang[act_lang]['search']['empty_search'] + '<\/div>');
//document.getElementById('results').innerHTML = '<div class="search_empty">' + lang[act_lang]['search']['empty_search'] + '<\/div>';
}
show_wait_message(false);
$('#results').show('');
return;
}
var search_hid_a = xmlRoot.getElementsByTagName("HID");
if (search_hid_a && search_hid_a.item(0) && search_hid_a.item(0).firstChild.data){
search_hid = search_hid_a.item(0).firstChild.data;
} 
search_limited = $("LIMITED",xmlRoot).val();
var result;
results = new Array();
var len = id_arr.length;
var obj_siml;
//id_cache = new Array();
for (i=0; i<len; i++){
obj = id_arr.item(i);

obj_id = $('ID', obj).text();


obj_name_a = obj.getElementsByTagName("NM");
if (obj_name_a.item(0).firstChild && obj_name_a.item(0).firstChild.data){
obj_name = obj_name_a.item(0).firstChild.data;
obj_name = obj_name.replace(/\"/g, '&quot;');
}
else{
	 obj_name = 'Изобразительный';
}

obj_siml = $('SML', obj).text();
		if (obj_siml)
		{
			last_search_siml = true;
		}

obj_prc = $('PRC', obj).text();

obj_flag = $('FLAG', obj).text();

obj_type = $('TYPE', obj).text();

if (obj.getElementsByTagName("ORID")){
obj_orid = $('ORID', obj).text();
}
result = new Array();

result['addfields'] = new Array();
//if (afields.length) 
for (af in afields){
obj_addfields = obj.getElementsByTagName(af);
if (obj_addfields.item(0) && obj_addfields.item(0).firstChild) result['addfields'][af] = obj_addfields.item(0).firstChild.data;
}

obj_classes = new Array();
obj_class_a = obj.getElementsByTagName("C");
for (k=0; k<obj_class_a.length; k++){
if (obj_class_a.item(k).firstChild) obj_classes[k] = obj_class_a.item(k).firstChild.data;
}
result['id'] = obj_id;
result['name'] = obj_name;
result['classes'] = obj_classes;
result['prc'] = obj_prc;
result['flag'] = obj_flag;
result['type'] = obj_type;

obj_disabled = $('DISABLED', obj).text();
if (obj_disabled) result['disabled'] = true;
//console.log(obj, obj_disabled);
if (obj_orid) result['orid'] = obj_orid*1;
if (obj_siml && obj_siml!=undefined) result['siml'] = obj_siml;
all_purchased[obj_id] = obj_prc;
results[i] = result;
results_key[obj_id] = results[i];
}
draw_results('siml','', 0);
update_history();
}

function restore_query(query){
show_wait_message(true);
var url = "makesearch.php?type=10&mode[ident]=1'";
var type = '1';
var post = 'post=1';
post += '&search=' + query;
$.ajax({'type': "POST", 'url': url, 'data': post, 'success': process_search});
}

function draw_reports_select(){
var report;
var reports_select_text = '<select name="report" id="all_reports" style="width : 190px;" onchange="javascript:open_report_records(this.value);" \/>';
if (current_report_id=='') reports_select_text += '<option value="" selected="selected">' + lang[act_lang]['reports']['new_report'] + '<\/option>';
else reports_select_text += '<option value="">' + lang[act_lang]['reports']['new_report'] + '<\/option>';
if (reports){
for (report_id in reports){
report = reports[report_id];
reports_select_text += '<option value="' + report_id + '"';
if (report_id == current_report_id) reports_select_text += ' selected="selected"';
reports_select_text += '>' + report['name'] + '<\/option>';
}
}
reports_select_text += '<\/select>';
document.getElementById('all_reports_div').innerHTML = reports_select_text;
}

function draw_reports(){
var text = '';
var reports_select_text = '';
var z=0;
if (reports){
for (report_id in reports){
var report = reports[report_id];
var report_records = new Array();
text += '<div class="history_report" id="r_' + report_id + '">';
text += '<span style="cursor : pointer; font-family : Courier new, monospace;" id="' + report_id + '_open" onclick="javascript:toggle_list_display(\'report_' + report_id + '_inner\', \'' + report_id + '_open\');" title="' + lang[act_lang]['common']['show_contents'] + '">+</span>';
text += '<span onclick="generate_report(\'' + report_id + '\',null,\'' + addslashes(report['name']) + '\')" onmouseover="javascript:this.style.color=\'#CC0000\'; this.style.textDecoration=\'underline\'" onmouseout="javascript:this.style.color=\'#008CBB\'; this.style.textDecoration=\'none\'" class="report_name" id="report_' + report_id + '_name">' + report['name'] + '</span>';
text += '<span class="del_report" onclick="delete_report_record(\'' + report_id + '\',0,0);">(' + lang[act_lang]['common']['delete'] + ')</span>';
text += '<div class="inner_queries" ';
if (last_updated_report!=report_id){
text += 'style="display : none;" ';
}
else{
last_updated_report = null;
}
text += 'id="report_' + report_id + '_inner">';
var query_num = 0;
for (var report_query in report['queries']){
query_num++;
text += '<div class="inner_query" id="r_' + report_id + '_q_' + query_num + '">';
//text += '<img src="images/rcross.gif" alt="' + lang[act_lang]['common']['delete_group'] + '" onclick="delete_report_record(\'' + report_id + '\',\'' + query_num + '\',0);">';
text += '<span style="font-size : 13px; color : red; font-weight : bold;" title="' + lang[act_lang]['common']['delete_group'] + '" onclick="delete_report_record(\'' + report_id + '\',\'' + query_num + '\',0);">X</span>';
text += lang[act_lang]['common']['search'] + ' ' + report['queries'][report_query]['name'];
for (var report_query_record in report['queries'][report_query]['records']){
record = report['queries'][report_query]['records'][report_query_record];
report_records[z] = record['id'];
text += '<div style="position : relative; padding-left : 3px;" class="inner_records" id="r_' + report_id + '_q_' + query_num + '_r_' + report_query_record + '">';
//text += '<img style="position : absolute; left : -15px; top : 3px;" src="images/rcross.gif" alt="Удалить запись" style="cursor : pointer;" onclick="delete_report_record(\'' + report_id + '\',\'' + query_num + '\',\'' + report_query_record + '\');">';
text += '<span style="position : absolute; left : -15px; top : 3px; color : red; font-size : 13px; font-weight : bold;" title="Удалить запись" style="cursor : pointer;" onclick="delete_report_record(\'' + report_id + '\',\'' + query_num + '\',\'' + report_query_record + '\');">X</span>';
if (all_purchased[record['id']]==1){
text += '<span name="rr' + record['id'] + '" class="hst_record_purchased" onMouseOver="javascript:this.style.textDecoration=\'underline\'" onMouseOut="javascript:this.style.textDecoration=\'none\'" onclick="javascript:generate_report(null, ' + record['id'] + ', \'' + addslashes(record['name']) + '\');">'
}
else{
text += '<span name="rr' + record['id'] + '" class="hst_record_obsolete" onMouseOver="javascript:this.style.textDecoration=\'underline\'" onMouseOut="javascript:this.style.textDecoration=\'none\'" onclick="javascript:generate_report(null, ' + record['id'] + ', \'' + addslashes(record['name']) + '\');">'
}
text += record['name'] + '</span>';
text += '<\/div>';
z++;
}
text += '<\/div>';
}
text += '<div class="report_legend">' + lang[act_lang]['blocks']['report_legend'] + '</div>';
text += '<div style="padding-top : 0.5em; border-bottom : 1px solid #cccccc;">';
text += '<span style="cursor : pointer; color : #008CBB;" onclick="generate_report(\'' + report_id + '\',null,\'' + addslashes(report['name']) + '\')" onmouseover="javascript:this.style.color=\'#CC0000\'" onmouseout="javascript:this.style.color=\'#008CBB\'">' + lang[act_lang]['reports']['generate_report'] + '</span>';
text += '</div>';
text += '<\/div>';
text += '<\/div>';
}
}
document.getElementById('reportHistory').innerHTML = text;
draw_reports_select();
}

function delete_report_record(report, query_id, id){
var answ = false;
if (query_id){
var query_num=0;
for (query_name in reports[report]['queries']){
query_num++;
query = query_name;
if (query_num==query_id) break;
}
}
else{
query = 0;
}
//if (id) answ = confirm('Удалить запись "' + reports[report]['queries'][query]['records'][id]['name'] + '"?');
//else if (query) answ = confirm('Удалить группу "' + reports[report]['queries'][query]['name'] + '"?');
//else if (report) answ = confirm('Удалить отчёт "' + reports[report]['name'] + '"?');
if (id && query) var conft = lang[act_lang]['delete']['delete_record'].replace(/%record%/, reports[report]['queries'][query]['records'][id]['name'].replace(/&quot;/g, '"'));
else if (id) var conft = lang[act_lang]['delete']['delete_record'].replace(/%record%/,'');
else if (query) var conft = lang[act_lang]['delete']['delete_group'].replace(/%group%/, reports[report]['queries'][query]['name'].replace(/&quot;/g, '"'));
else if (report) var conft = lang[act_lang]['delete']['delete_report'].replace(/%report%/, reports[report]['name'].replace(/&quot;/g, '"'));
answ = confirm(conft);
if (!answ) return;
if (id!=0 && query!=0){
delete(reports[report]['queries'][query]['records'][id]);
if (document.getElementById('r_' + report + '_q_' + query_num + '_r_' + id)) document.getElementById('r_' + report + '_q_' + query_num + '_r_' + id).style.display = 'none';
var del = new Array();
del['report'] = report;
del['query'] = query;
del['id'] = id;
del_query['reports'][report + '_' + query + '_' + id] = del;
}
if (query==0 && id!=0){
for (quer in reports[report]['queries']){
for (recd in reports[report]['queries'][quer]['records']){
if (recd==id){
var del = new Array();
del['report'] = report;
del['query'] = quer;
del['id'] = id;
del_query['reports'][report + '_' + query + '_' + id] = del;
}
}
}
}
if (id==0 || get_array_size(reports[report]['queries'][query]['records'])==0){
if (query!=0){
delete(reports[report]['queries'][query]);
document.getElementById('r_' + report + '_q_' + query_num).style.display = 'none';
var del = new Array();
del['report'] = report;
del['query'] = query;
del['id'] = 0;
del_query['reports'][report + '_' + query + '_0'] = del;
}
if (query==0 || get_array_size(reports[report]['queries'])==0){
delete(reports[report]);
//document.getElementById('r_' + report).outerHTML = '';
document.getElementById('r_' + report).style.display = 'none';
var del = new Array();
del['report'] = report;
del['query'] = 0;
del['id'] = 0;
del_query['reports'][report + '_0_0'] = del;
}
}
send_delete();
draw_reports_select();
}
function delete_history_record2(query, id){
if (history_records){
for (i in history_records){
if (history_records[i]['records'] && history_records[i]['records'][id] && history_records[i].name==query){
del = new Array();
del['query'] = history_records[i]['name'];
del['id'] = history_records[i]['records'][id]['id'];
del_query['history'][i + '_' + id] = del;
delete(history_records[i]['records'][id]);
var line = document.getElementById('q' + i + 'r' + id + '_disp');
line.parentNode.removeChild(line);
if (get_array_size(history_records[i]['records'])==0){
var line = document.getElementById('q' + i + '_group');
line.parentNode.removeChild(line);
delete(history_records[i]);
}
send_delete();
}
}
}
}
function delete_history_record(query, id){
var answ;
//if (id) var conft = lang[act_lang]['delete']['delete_record'].replace(/%record%/, reports[report]['queries'][query]['records'][id]['name'].replace(/&quot;/g, '"'));
//else if (query) var conft = lang[act_lang]['delete']['delete_group'].replace(/%group%/, reports[report]['queries'][query]['name'].replace(/&quot;/g, '"'));
//else if (report) var conft = lang[act_lang]['delete']['delete_report'].replace(/%report%/, reports[report]['name'].replace(/&quot;/g, '"'));
//if (id!=undefined) answ = confirm(lang[act_lang]['common']['delete_record'] + ' "' + history_records[query]['records'][id]['name']. + '"?');
//else if (query!=undefined) answ = confirm(lang[act_lang]['common']['delete_group'] + ' "' + history_records[query]['name'] + '"?');
if (id!=undefined) answ = confirm(lang[act_lang]['delete']['delete_record'].replace(/%record%/, history_records[query]['records'][id]['name'].replace(/&quot;/g, '"')));
else if (query!=undefined) answ = confirm(lang[act_lang]['delete']['delete_group'].replace(/%group%/, history_records[query]['name'].replace(/&quot;/g, '"')));
if (!answ) return;
if (id!=undefined){
var del = new Array();
del['query'] = history_records[query]['name'];
del['id'] = history_records[query]['records'][id]['id'];
del_query['history'][query + '_' + id] = del;
delete(history_records[query]['records'][id]);
var line = document.getElementById('q' + query + 'r' + id + '_disp');
line.parentNode.removeChild(line);
if (get_array_size(history_records[query]['records'])==0){
var line = document.getElementById('q' + query + '_group');
line.parentNode.removeChild(line);
delete(history_records[query]);
}
but = document.getElementById('rec_' + del['id'] + '_but');
if (but) but.disabled = false;
var so = document.getElementById('rec_' + id + '_chb');
if (so) so.checked = false;
}
else if (query!=undefined){
for (id in history_records[query]['records']){
var del = new Array();
del['query'] = history_records[query]['name'];
del['id'] = history_records[query]['records'][id]['id'];
del_query['history'][query + '_' + id] = del;
but = document.getElementById('rec_' + del['id'] + '_but');
if (but) but.disabled = false;
}
var line = document.getElementById('q' + query + '_group');
line.parentNode.removeChild(line);
delete(history_records[query]);
}
send_delete();
}

function send_delete(){
if (reportConnection.readyState == 4 || reportConnection.readyState == 0){
var url = 'add2report.php';
var post = 'post=1';
		post += '&token='+token;
var c = 0;
post += '&search_type=' + document.getElementById("SearchType").value;
for (dr in del_query['history']){
c++;
post += '&delete[hst][' + c + '][query]=' + escape(del_query['history'][dr]['query']);
post += '&delete[hst][' + c + '][id]=' + escape(del_query['history'][dr]['id']);
delete(del_query['history'][dr])
}
for (dr in del_query['reports']){
c++;
post += '&delete[rep][' + c + '][report]=' + escape(del_query['reports'][dr]['report']);
post += '&delete[rep][' + c + '][query]=' + escape(del_query['reports'][dr]['query']);
post += '&delete[rep][' + c + '][id]=' + escape(del_query['reports'][dr]['id']);
delete(del_query['reports'][dr])
}
if (c>0){
reportConnection.abort();
reportConnection.open("POST", url, true);
reportConnection.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
reportConnection.onreadystatechange = function(){};
reportConnection.send(post);
}
}
else{
setTimeout("send_delete()", 3000);
}
}
function add_to_report(){
var answ = false;
current_report_id = document.getElementById('all_reports').value;
for (query in all_history_selected){
for (record_num in all_history_selected[query]){
if (all_history_selected[query][record_num]==1) var sugg_report_name = query;
}
}
if (current_report_id){
new_report_name = reports[current_report_id]['name'];
}
else{
new_report_name = prompt(lang[act_lang]['reports']['enter_report_name'], sugg_report_name);
if (new_report_name==false || new_report_name==undefined) return;
if (new_report_name=='') new_report_name = lang[act_lang]['reports']['new_report'];
}
var records = new Array();
var n;
var post = 'post=1&token='+token;
var unpurchased=0;
if (!current_report_id) post += '&name=' + escape(new_report_name);
else post += '&hid=' + current_report_id;
n=0;
for (query in all_history_selected){
records[query] = new Array();
for (record in all_history_selected[query]){
if (all_history_selected[query][record]==1){
post += '&add[' + escape(query) + '][]=' + record;
n++;
}
}
}
var url = 'add2report.php';
if (n>0){

reportConnection.abort();
reportConnection.open("POST", url, true);
reportConnection.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
reportConnection.onreadystatechange = wait_for_report_add;
reportConnection.send(post);
}
clear_history_tags();
show_wait_message(false);
}
function wait_for_report_add(){
if (reportConnection.readyState == 4){
current_report_id = reportConnection.responseText;
last_updated_report = current_report_id;
update_history();
//set_rpanel_act(3, true);
	$('#lp_3').show();
}
}
function open_report_records(report_id){
var rep_arr = getElementsByClass('inner_queries');
//set_rpanel_act(3, true);
$('#lp_3').show();
for (var i=0; i<rep_arr.length; i++){
var el = rep_arr[i];
if (el.id == 'report_' + report_id + '_inner'){
el.style.display = '';
}
else{
el.style.display = 'none';
}
}
}

function generate_report(report, id, name, merge_confirm, allow_select){
show_wait_message(false);
var records = new Array();
var n=0;
var post='post=1';
if (id){
records[0] = id;
}
else{
if (reports[report]) for (record in reports[report]['records']){
records[n] = record;
n++;
}
}
var unpurchased=0;
var url = 'reportgen.php';
if (report) post+='&hid=' + report;
open_report = report;
	
	post += '&token='+token;
for (i=0; i<records.length; i++){
if (!report) post += '&rec[]=' + records[i];
if (!all_purchased[records[i]] || all_purchased[records[i]]==0){
unpurchased++;
post += '&commit[]=' + records[i];
}
}
if (!report) post += '&name=' + escape(name);
if (unpurchased>0){
if (user_balance<(unpurchased*record_price)){
alert(lang[act_lang]['reports']['balance_alert']);
return;
}
else if (record_price>0){
if (!merge_confirm){
var alert_text = lang[act_lang]['reports']['purchase_alert'];
alert_text = alert_text.replace('%unpurchased%', unpurchased);
alert_text = alert_text.replace('%price%', Math.round(unpurchased*record_price/currency.rate*100)/100+' '+currency.sign);
var answ = confirm(alert_text);
if (!answ) return;
}
else{
var alert_text = lang[act_lang]['reports']['purchase_alert2'];
alert_text = alert_text.replace('%unpurchased%', unpurchased);
alert_text = alert_text.replace('%price%', Math.round(unpurchased*record_price/currency.rate*100)/100+' '+currency.sign);
var answ = confirm(alert_text);
if (!answ) return;
}
}
}
else{
if (merge_confirm && record_price>0){
var answ = confirm(lang[act_lang]['reports']['open_report']);
if (!answ) return;
}
}
r_w = window.open('wait.php', '', 'width=' + (screen.width-100) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes, resizable=yes');
if (id){

var l = 'view.php?id=' + id + '&commit[]=' + id +'&token='+token;
if (allow_select) l = l + '&type=1';
		
r_w.location = l;
}
else{
//show_wait_message(true);
//show_wait_description('Формируется очёт');
last_updated_report = report;

genConnection.abort();
genConnection.open("POST", url, true);
genConnection.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
genConnection.onreadystatechange = wait_for_report_gen;
genConnection.send(post);
}

//window.open(url, '', 'width=' + (screen.width-100) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes, resizable=yes');
//setTimeout('update_history()', 1000);
setTimeout('update_balance()', 2000);
}

function wait_for_report_gen(){
url = 'view.php?hid=' + open_report+'&token='+token;
if (genConnection.readyState == 4){
if (r_w){
r_w.location = url;
}
else{
alert(lang[act_lang]['reports']['block_alert']);
}
update_balance();
}
}

function generate_list(){
var len = results.length;
if (cur_query=='' || results.length<1) return;
var date = new Date();
var mid_text = '';
var head_text = '<html><head><title>Intels Agency &mdash; Поисковый отчет</title><link href=\'new.css\' rel=\'stylesheet\' type=\'text/css\'></head><body><table class="forprint_list">';
var day = date.getDate();
var month = date.getMonth()+1;
var year = date.getYear()%100;
if (day<10) day = '0' + day;
if (month<10) month = '0' + month;
if (year<10) year = '0' + year;
head_text += '<tr><td style="text-align : center;"><img src="images/logo.jpg"></td><td><span style="font-size : 120%; font-weight : bold;">Агенство интеллектуальной собственности</span></td></tr>';
head_text += '<tr><td class="hl">Дата:</td><td>' + day + '.' + month + '.' + year + '</td></tr>';
head_text += '<tr><td class="hl">Источник:</td><td>КАИС "ИНТЭЛС" (Intels Agency)</td></tr>';
head_text += '<tr><td class="hl">Отчет по поиску на запрос:</td><td>' + cur_query + '</td></tr>';
head_text += '<tr><td class="hl">Найдено записей:</td><td>' + results.length + '</td></tr>';
head_text += '<tr><td colspan="2" style="padding-bottom : 0.5em;"><div>Словестное описание</div><hr style="width : 80%; height : 1px;" />';
var bot_text = '</td></tr><tr><td colspan="2" style="text-align : center; font-weight : bold; font-size : 80%;"><a href="http://www.intelsonline.ru" target="_blank">www.intelsonline.ru</a> &copy; Все права защищены 2005-2006</td></tr></body></html></table>';
for (i=0; i<len; i++){
mid_text += '<div>' + results[i]['name'] + '<\/div>';
}
var listWindow = window.open('', 'list', 'width=660,height=' + (screen.height-200) + ',left=' + ((screen.width-660)/2) + ',top=50,scrollbars=yes,resizable=yes,menubar=yes');
listWindow.document.write(head_text + mid_text + bot_text);
}
function generate_list2(){
//var url = 'results.php?srid=' + search_key_id;
//var a = window.open(url,'list');
//alert(curr_qname);
//alert(Dump(history_records));
var post = 'srid=' + search_key_id;
	post += '&token='+token;
for (query_id in history_records){
if (curr_qname==history_records[query_id]['name']){
for (id in history_records[query_id]['records']){
var el = history_records[query_id]['records'][id];
post += '&rec[]=' + el['id'];
}
var url = 'results.php';
reportConnection.abort();
reportConnection.open("POST", url, true);
reportConnection.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
reportConnection.onreadystatechange = generate_list2_open;
reportConnection.send(post);
//alert(Dump(history_records[query_id]['records']));
//toggle_list_display('q' + query_id + '_disp', 'q' + query_id + '_open', true);
}
}

}
function generate_list2_open(){
if (reportConnection.readyState == 4){
//alert(reportConnection.responseText);
var text = reportConnection.responseText;
//alert(text);
var wid = 'list2' + Math.floor(100000*Math.random());
var listWindow2 = window.open('', wid, 'width=660,height=' + (screen.height-200) + ',left=' + ((screen.width-660)/2) + ',top=50,scrollbars=yes,resizable=yes,menubar=yes');
listWindow2.document.write(text);
}
}var lang = new Array();
lang[0] = new Array();
lang[1] = new Array();
lang[2] = new Array();
lang[0]['currency'] = 'руб.';
lang[1]['search'] = new Array(); // Поиск
lang[2]['search'] = new Array();
lang[1]['search']['refresh_state'] = 'Обновляется';
lang[2]['search']['refresh_state'] = 'Refresing';
lang[1]['search']['syllable_alert'] = 'Общая длина самых коротких слогов должна составлять не менее 4-х символов!';
lang[2]['search']['syllable_alert'] = 'Syllables are too short!';
lang[1]['search']['empty_alert'] = 'Пустое поле запроса!';
lang[2]['search']['empty_alert'] = 'Search string is empty!';
lang[1]['search']['empty_search'] = 'Документов не найдено';
lang[2]['search']['empty_search'] = 'No documents found';
lang[1]['search']['empty_search2'] = 'В результатах прошлого поиска нет строк, соответствующих запросу &laquo;<span style="color : red;">%searched%</span>&raquo;';
lang[2]['search']['empty_search2'] = 'No documents found';
lang[1]['search']['empty_search3'] = 'В базе товарных знаков, зарегистрированных в государственном реестре, и заявок, поданных на рассмотрение в Патентное Ведомство, тождественные или сходные до степени смешения с обозначением &laquo;<span style="color : red;">%searched%</span>&raquo; не найдены.';
lang[2]['search']['empty_search3'] = 'No trademarks found. You can make an <a href="%order_url%">order</a> to register &laquo;<span style="color : red;">%searched%</span>&raquo;';
lang[1]['search']['empty_search4'] = 'Товарных знаков (зарегистрированных и заявленных на регистрацию обозначений), принадлежащих &laquo;<span style="color : red;">%searched%</span>&raquo;, не найдено.';
lang[2]['search']['empty_search4'] = 'No trademarks found. You can make an <a href="%order_url%">order</a> to register &laquo;<span style="color : red;">%searched%</span>&raquo;';
lang[1]['search']['add_formant'] = 'Добавить формант';
lang[2]['search']['add_formant'] = 'Add syllable';
lang[1]['search']['formant_off'] = 'Не использовать формант';
lang[2]['search']['formant_off'] = 'Do not use';
lang[1]['search']['formant_and'] = 'Обязательный формант';
lang[2]['search']['formant_and'] = 'Required syllable';
lang[1]['search']['formant_or'] = 'Возможный формант';
lang[2]['search']['formant_or'] = 'Optional syllable';
lang[1]['search']['wdesc_col'] = 'Словесное обозначение';
lang[2]['search']['wdesc_col'] = 'Mark';
lang[1]['search']['mktu_col'] = 'Классы МКТУ';
lang[2]['search']['mktu_col'] = 'Classes';
lang[1]['search']['siml_col'] = 'Сходство';
lang[2]['search']['siml_col'] = 'Similarity';
lang[1]['search']['app_col'] = '№ заявки';
lang[2]['search']['app_col'] = 'App. num';
lang[1]['search']['search_results'] = 'Результаты поиска';
lang[2]['search']['search_results'] = 'Results';
lang[1]['search']['found'] = 'Найдено';
lang[2]['search']['found'] = 'Found';
lang[1]['search']['syl_rowname1'] = 'Обязательные';
lang[2]['search']['syl_rowname1'] = 'AND';
lang[1]['search']['syl_rowname2'] = 'Возможные';
lang[2]['search']['syl_rowname2'] = 'OR';
lang[1]['search']['syl_colname1'] = 'Начало';
lang[2]['search']['syl_colname1'] = 'Beginning';
lang[1]['search']['syl_colname2'] = 'Середина';
lang[2]['search']['syl_colname2'] = 'Middle';
lang[1]['search']['syl_colname3'] = 'Конец';
lang[2]['search']['syl_colname3'] = 'End';
lang[1]['common'] = new Array();
lang[2]['common'] = new Array();
lang[1]['common']['search'] = 'Поиск';
lang[2]['common']['search'] = 'Search';
lang[1]['common']['hide_contents'] = 'Скрыть содержимое';
lang[2]['common']['hide_contents'] = 'Hide contents';
lang[1]['common']['show_contents'] = 'Показать содержимое';
lang[2]['common']['show_contents'] = 'Show contents';
lang[1]['common']['delete'] = 'Удалить';
lang[2]['common']['delete'] = 'Delete';
lang[1]['common']['delete_group'] = 'Удалить группу';
lang[2]['common']['delete_group'] = 'Delete group';
lang[1]['common']['delete_record'] = 'Удалить запись';
lang[2]['common']['delete_record'] = 'Delete record';
lang[1]['common']['all_records'] = 'Все записи';
lang[2]['common']['all_records'] = 'All records';
lang[1]['common']['pages_cnt'] = 'Страницы';
lang[2]['common']['pages_cnt'] = 'Pages';
lang[1]['common']['page_size'] = 'Выбор размера страницы';
lang[2]['common']['page_size'] = 'Page size';
lang[1]['common']['sort_by'] = 'Сортировать';
lang[2]['common']['sort_by'] = 'Sort';
lang[1]['common']['sort_sim'] = 'по соответствию';
lang[2]['common']['sort_sim'] = 'by similarity';
lang[1]['common']['sort_alp'] = 'по алфавиту';
lang[2]['common']['sort_alp'] = 'alphabetical';
lang[1]['common']['image'] = 'Изобр.';
lang[2]['common']['image'] = 'Image';
lang[1]['common']['xml_error'] = 'Ошибка получения данных';
lang[2]['common']['xml_error'] = 'XML error';
lang[1]['common']['prs_error'] = 'Ошибка обработки данных';
lang[2]['common']['prs_error'] = 'Parse error';
lang[1]['common']['report_gen_prc'] = 'Формируется отчёт';
lang[2]['common']['report_gen_prc'] = 'Generating report';
lang[1]['common']['many_results'] = 'Внимание! Записи выведены частично - слишком много описаний, соответствующих выбранным критериям.<br/>Пожалуйста, уточните запрос.';
lang[2]['common']['many_results'] = 'Attention! Too many results, not all of them are shown';
lang[1]['common']['no_base_select'] = 'Не выбрано ни одной базы для поиска';
lang[2]['common']['no_base_select'] = 'No database selected';
lang[1]['delete'] = new Array();
lang[2]['delete'] = new Array();
lang[1]['delete']['delete_report'] = 'Удалить отчёт %report%?';
lang[2]['delete']['delete_report'] = 'Delete %report%?';
lang[1]['delete']['delete_group'] = 'Удалить группу %group%?';
lang[2]['delete']['delete_group'] = 'Delete %group%?';
lang[1]['delete']['delete_record'] = 'Удалить запись %record%?';
lang[2]['delete']['delete_record'] = 'Delete %record%?';
lang[1]['reports'] = new Array();
lang[2]['reports'] = new Array();
lang[1]['reports']['open_report'] = 'Открыть отчёт?';
lang[2]['reports']['open_report'] = 'Open report?';
lang[1]['reports']['add_to_report'] = 'Добавить к отчёту';
lang[2]['reports']['add_to_report'] = 'Add to report';
lang[1]['reports']['new_report'] = 'Новый отчёт';
lang[2]['reports']['new_report'] = 'New report';
lang[1]['reports']['generate_report'] = 'Сформировать отчёт';
lang[2]['reports']['generate_report'] = 'Generate report';
lang[1]['reports']['enter_report_name'] = 'Введите имя для отчёта';
lang[2]['reports']['enter_report_name'] = 'Enter report name';

lang[1]['reports']['purchase_alert'] = 'Внимание!!! Вы выбрали %unpurchased% неоплаченных ТЗ.\nЗа оказанную услугу с Вашего личного счета будет списано %price%';
lang[2]['reports']['purchase_alert'] = 'Attention! %unpurchased% unpurchased marks are tagged.\n The price is %price%';

lang[1]['reports']['purchase_alert2'] = 'Открыть отчёт?\n\n(Внимание! За выбранные записи с Вашего личного счета будет списано %price%)';
lang[2]['reports']['purchase_alert2'] = 'Open report? (Attention! The price is %price%)';

lang[1]['reports']['purchase_alert3'] = 'Внимание!!! За услугу поиска с Вашего личного счета будет списано %price% \nПродолжить?';
lang[2]['reports']['purchase_alert3'] = 'Attention! The price of search is %price%';
lang[1]['reports']['purchase_alert4'] = 'Внимание!!! За услугу поиска с Вашего личного счета будет списан 1 предоплаченный поиск\nПродолжить?';
lang[2]['reports']['purchase_alert4'] = 'Attention! 1 pre-paid search ticket will be removed\nContinue search?';
lang[1]['reports']['balance_alert'] = 'На Вашем счете недостаточно средств для проведения операции. Пожалуйста, обратитесь к администрации сайта.';
lang[2]['reports']['balance_alert'] = 'You account is too low';
lang[1]['reports']['block_alert'] = 'Отчёт был сгенерирован, но в Вашем браузере заблокированы всплывающие окна. Для его показа нажмите, пожалуйста, ссылку "сформировать отчёт" в правой навигационной панели.';
lang[2]['reports']['block_alert'] = 'Your report was generated, but blocked by your browser. Please disable pop-up blocker';
lang[1]['states'] = new Array();
lang[2]['states'] = new Array();
lang[1]['states']['sending_request'] = 'Отправляется запрос';
lang[2]['states']['sending_request'] = 'Sending request';
lang[1]['states']['searching'] = 'Выполняется поиск<br />Вы можете не дожидаться окончания результатов поиска,<br />после выполнения он будет доступен в вашей "Истории поисков"';
lang[2]['states']['searching'] = 'Searching';
lang[1]['states']['receiving_data'] = 'Идёт получение данных';
lang[2]['states']['receiving_data'] = 'Receiving data';
lang[1]['states']['sorting'] = 'Идёт сортировка';
lang[2]['states']['sorting'] = 'Sorting';
lang[1]['states']['recompose'] = 'Идёт переформирование страниц';
lang[2]['states']['recompose'] = 'Recomposing';
lang[1]['blocks'] = new Array();
lang[2]['blocks'] = new Array();
lang[1]['blocks']['report_legend'] = '<div style="color : green;">Записи, помеченные зелёным, уже приобретены.</div><div>Записи, помеченные чёрным, еще не куплены и вы можете их купить.</div>';
lang[2]['blocks']['report_legend'] = '<div style="color : green;">Green marks are purchased.</div><div>Black marks are free for purchase</div>';
var act_lang = 1;
var XmlHttp = createXmlHttpRequest(); 
var updateHistoryConnection = createXmlHttpRequest();
//var wordBreakConnection = createXmlHttpRequest();
var balanceConnection = createXmlHttpRequest();
var reportConnection = createXmlHttpRequest();
var genConnection = createXmlHttpRequest();
var addConnection = createXmlHttpRequest();
var current_balance;
var mktu_count; 
//var id_arr; 
var add_arr; 
var cur_page = 0; 
var current_page_size = 20; 
var cur_sort_mode = 'siml'; 
var search_rows_cache = new Array();
var cookie_page_size = GetCookie('page_size');
if (cookie_page_size){
current_page_size = cookie_page_size;
}
//var id_cache = new Array();
var history_update_in_progress = false;
var xpos = (screen.width-400)/2;
var ypos = (screen.height-200)/2;
var results = new Array(); 
var results_key = new Array(); 
//var selected = new Array(); 
var all_purchased = new Array(); 
var all_history_selected = new Array(); 
var allow_innersearch; 
var user_balance; 
var record_price; 
var user_tickets; 
var cur_query = '';
var current_report_id = '';
var new_report_name = '';
var reports = new Array(); 
var history_records = new Array(); 
var del_query = new Array();
var add_records_cache = new Array(); 
del_query['history'] = new Array();
del_query['reports'] = new Array();
var err_history_update = 0;
var last_updated_report = null;
var open_report = '';
var init_errs = 0;
var r_w;
var wordbreak_points;
var search_full_size = 0;
var last_search_type = 0; 
var last_search_siml = 0; 
//var open_report_on_hst_update = '';
var curr_qname = '';
var ubq = false;
var syllab_arr = new Array(); // Массив слогов
var afields = new Array(); // Дополнительные поля в результатах поиска
var oldLimPanelState; // Состояние выбора порога схожести до поиска
var search_key_id; // ID проведённого поиска
var imgToShow = false;
var previewCache = new Array();
var shist = new Array(); // История поисков
var search_limited; // = false; // Превышение лимита количества записей в поиске
function search_init(){
update_history();
}
function getImgPreviewCallback(id){
return function(){
previewCache[id] = true;
showImgPreview(id);
}
}
function getWhoisCallback(id){
var iid = id;
return function(data){
drawWhois(iid, data);
}
}
function getImgPreview(id){
imgToShow = id;
if ($('#im4row_'+id+' img').width()!=22){
hideImgPreview();
return;
}
pos = $('#im4row_'+id).offset();
$('#imp').html('<img src="/images/clock.gif" style="margin-top:45px; margin-left:45px" />');
$('#imp').css({'left':''+(pos.left+50)+'px', 'top':''+(pos.top-10)+'px'}).show();
$('#imps').css({'left':''+(pos.left+55)+'px', 'top':''+(pos.top-5)+'px'}).fadeTo(0,0.2).show();
//if (typeof(previewCache[id])=='Object')
if (previewCache[id]==true){
showImgPreview(id)
} 
else{
var elm = $('<img src="/pic/' + id + '/small.jpg" width="20"/>');
$(elm).load(getImgPreviewCallback(id));
$('#prel').append(elm);
}
} 
function showImgPreview(id){
if (id==imgToShow) $('#imp').html('<img src="/pic/'+id+'/small.jpg" />');
}
function hideImgPreview(){
imgToShow = false;
$('#imp').hide();
$('#imps').hide();
$('#whs').hide();
$('#whss').hide();
}
function getWhois(id){
imgToShow = id;
 
//$.get('whois.php?domain='+results_key[id].name, function(data){drawWhois(id, data)}, 'html');
drawWhoisBox($('#im4row_'+id).offset(), '<img src="/images/clock.gif" alt="" />');
$.get('whois.php?domain='+results_key[id].name, getWhoisCallback(id), 'html');
}
function drawWhois(id, html){
if (id==imgToShow){
drawWhoisBox($('#im4row_'+id).offset(), html);
//$('#imp').html(html).show();
}
}
function drawWhoisBox(pos, text){
if (text==''){
$('#whs').hide();
$('#whss').hide();
}
else{
$('#whs').css({'left':''+(pos.left+50)+'px', 'top':''+(pos.top-10)+'px'}).show();
$('#whs').html(text);
var w = $('#whs').outerWidth();
var h = $('#whs').outerHeight();
$('#whss').css({'left':''+(pos.left+55)+'px', 'top':''+(pos.top-5)+'px', 'width':(w-12)+'px', 'height':(h-12)+'px'}).fadeTo(0,0.2).show();
//$('#whss').css({'width':w+'px', 'height':h+'px'});
}
}

var panels_state = new Array();
// Кэширование - блок истории на прав. панели
var cache_hst_qrs_blocks;
var hst_qrs_blocks_text;
var cquery_text;
var cquery_obj;
var cquery_qid;
// Перетаскивание объектов
var isMSIE = document.attachEvent != null;
var isGecko = !document.attachEvent && document.addEventListener;
var DraggingItem = new Object();
var slogSelect = new Array();
var ub_hst = false; // При обновлении баланса обновить историю
var test_v = 'Test';
var minSlogLength = 3;

function createXmlHttpRequest(){
try{
var XmlHttp = new XMLHttpRequest();
}
catch (e){
var XmlHttpVersions = new Array ('MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.5.0','MSXML2.XMLHTTP.4.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP');
for (var i=0; i<XmlHttpVersions.length && !XmlHttp; i++){
try{
XmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
catch(e){
}
}
}
return XmlHttp;
}
function make_balance_update(data){
user_balance = $('BALANCE', data).text()*1;
user_tickets = $('TICKETS', data).text()*1;
if (user_tickets>0) $('#ui_tickets_row').show();
else $('#ui_tickets_row').hide();
$('#ticketsCnt').text(user_tickets);
currency.rate = $('CURRENCY_RATE', data).text();
currency.sign = $('CURRENCY_SIGN', data).text();
$('#balanceCnt').html(Math.round(user_balance/currency.rate*100)/100+' '+currency.sign);
all_purchased = new Array();
recs = $('REC', data);
for (var i=0; i<recs.length; i++){
all_purchased[recs[i].firstChild.data] = 1;
}
update_purchased();
}
function update_balance(q){
var url = "update_balance.php";
if (ub_hst){
ub_hst = false;
update_history();
if (q || !ubq) setTimeout("update_balance(1)", 15000);
return;
}
$.get(url, null, make_balance_update, 'xml');
if (q || !ubq) setTimeout("update_balance(1)", 15000);
ubq = true;
}

function update_purchased(){
if (history_records){
for (var qr_id in history_records){
var query = history_records[qr_id];
if (query.records) for (rec_id in query.records){
var record = query.records[rec_id];
var div = document.getElementById('q' + qr_id + 'r' + rec_id + '_disp');
var spans = div.getElementsByTagName('span');
span = spans[0];
if (all_purchased[record.id]==1) span.className = 'hst_record_purchased';
else span.className = 'hst_record_obsolete';
}
}
}
for (loc_id in all_purchased){
var div = document.getElementById('mp_' + loc_id);
if (div) var spans = div.getElementsByTagName('span');
if (spans) var span = spans[0];
if (span){
if (all_purchased[loc_id]==1) span.className = 'hst_record_purchased';
else span.className = 'hst_record_obsolete';
}
}
var hst = document.getElementById('reportHistory');
if (hst){
var spans = hst.getElementsByTagName('span');
if (spans) for (var i=0; i<spans.length; i++){
var span = spans[i];
for (rep_id in reports){
var report = reports[rep_id];
for (rec_id in report.records){
if (span.getAttribute('name')==('rr' + rec_id)){
if (all_purchased[rec_id] && all_purchased[rec_id]==1) span.className = 'hst_record_purchased';
else span.className = 'hst_record_obsolete';
}
}
}
}
}
}
function StartDrag (event, _this, _afteraction){
	DraggingItem.This = _this;
	DraggingItem.AfterAction = _afteraction;
	var position = new Object();
	if (isMSIE)
	{
		position.x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		position.y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	}
	if (isGecko)
	{
		position.x = event.clientX + window.scrollX;
		position.y = event.clientY + window.scrollY;
	}
	DraggingItem.cursorStartX = position.x;
	DraggingItem.cursorStartY = position.y;
	DraggingItem.StartLeft = parseInt (DraggingItem.This.style.left);
	DraggingItem.StartTop = parseInt (DraggingItem.This.style.top);
	if (isNaN (DraggingItem.StartLeft)) DraggingItem.StartLeft = 0;
	if (isNaN (DraggingItem.StartTop)) DraggingItem.StartTop = 0;
	if (isMSIE)
	{
		document.attachEvent ("onmousemove", ProceedDrag);
		document.attachEvent ("onmouseup", StopDrag);
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (isGecko)
	{
		document.addEventListener ("mousemove", ProceedDrag, true);
		document.addEventListener ("mouseup", StopDrag, true);
		event.preventDefault();
	}
}
function ProceedDrag (event){
	var position = new Object();
	if (isMSIE) {
		position.x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
		position.y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
	}
	if (isGecko)
	{
		position.x = event.clientX + window.scrollX;
		position.y = event.clientY + window.scrollY;
	}
	var nextX = DraggingItem.StartLeft + position.x - DraggingItem.cursorStartX;
	//if (nextX < -150) nextX = -150;
	DraggingItem.This.style.left = nextX + "px";
	var nextY = DraggingItem.StartTop + position.y - DraggingItem.cursorStartY;
	//if (nextY > 360) nextY = 360;
	DraggingItem.This.style.top = nextY + "px";
	if (isMSIE)
	{
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (isGecko) event.preventDefault();
}
function StopDrag (event){
	if (isMSIE)
	{
		document.detachEvent ("onmousemove", ProceedDrag);
		document.detachEvent ("onmouseup", StopDrag);
	}
	if (isGecko)
	{
		document.removeEventListener ("mousemove", ProceedDrag, true);
		document.removeEventListener ("mouseup", StopDrag, true);
	}
	if (DraggingItem.AfterAction) DraggingItem.AfterAction (DraggingItem.This);
	SaveDesktop();
}
function SaveDesktop(){
	var draggables = document.getElementsByTagName ('div');
	var desktopLayout = '';
	for (var c = 0; c != draggables.length; c++)
	{
		var current = draggables[c];
		if (current.className == 'draggable')
		{
			desktopLayout += current.id + '(' + parseInt (current.style.left) + ',' + parseInt (current.style.top) + ');';
		}
	}
var expires = new Date();
	expires = new Date (expires.getYear() + 1901, expires.getMonth(), 1);
	setCookie ('layoutN', desktopLayout, expires, '/');
	CountItems();
}
function PutBackM(item){
var oarr = checkSlogBoxOver(item).obj;
var slog = item.firstChild.data;
delete(oarr[slog]);
PutBack (item);
}
function checkSlogBoxOver(item, type){
	var sep = document.getElementById('syl_1');
	var s1lx = absPosition(sep).x;
	var s1ty = absPosition(sep).y;
	var sep = document.getElementById('syl_s_1');
var s1rx = absPosition(sep).x;
	var sep = document.getElementById('syl_s_b');
var s1by = absPosition(sep).y;
	var sep = document.getElementById('syl_2');
	var s2lx = absPosition(sep).x;
	var s2ty = absPosition(sep).y;
	var sep = document.getElementById('syl_s_2');
var s2rx = absPosition(sep).x;
	var sep = document.getElementById('syl_s_b');
var s2by = absPosition(sep).y;
	var sep = document.getElementById('syl_3');
	var s3lx = absPosition(sep).x;
	var s3ty = absPosition(sep).y;
	var sep = document.getElementById('syl_s_3');
var s3rx = absPosition(sep).x;
	var sep = document.getElementById('syl_s_b');
var s3by = absPosition(sep).y;
	var sep = document.getElementById('syl_4');
	var s4lx = absPosition(sep).x;
	var s4ty = absPosition(sep).y;
	var sep = document.getElementById('syl_s_4');
var s4rx = absPosition(sep).x;
	var sep = document.getElementById('syl_s_bb');
var s4by = absPosition(sep).y;
	var sep = document.getElementById('syl_5');
	var s5lx = absPosition(sep).x;
	var s5ty = absPosition(sep).y;
	var sep = document.getElementById('syl_s_5');
var s5rx = absPosition(sep).x;
	var sep = document.getElementById('syl_s_bb');
var s5by = absPosition(sep).y;
	var sep = document.getElementById('syl_6');
	var s6lx = absPosition(sep).x;
	var s6ty = absPosition(sep).y;
	var sep = document.getElementById('syl_s_6');
var s6rx = absPosition(sep).x;
	var sep = document.getElementById('syl_s_bb');
var s6by = absPosition(sep).y;
var dropX = absPosition(item).x;
var dropY = absPosition(item).y;
if (dropX>=s1lx && dropX<s1rx && dropY>=s1ty && dropY<s1by) {num=1; obj=slogSelect['and']['left'];}
else if (dropX>=s2lx && dropX<s2rx && dropY>=s2ty && dropY<s2by) {num=2; obj=slogSelect['and']['mid'];}
else if (dropX>=s3lx && dropX<s3rx && dropY>=s3ty && dropY<s3by) {num=3; obj=slogSelect['and']['right'];}
else if (dropX>=s4lx && dropX<s4rx && dropY>=s4ty && dropY<s4by) {num=4; obj=slogSelect['or']['left'];}
else if (dropX>=s5lx && dropX<s5rx && dropY>=s5ty && dropY<s5by) {num=5; obj=slogSelect['or']['mid'];}
else if (dropX>=s6lx && dropX<s6rx && dropY>=s6ty && dropY<s6by) {num=6; obj=slogSelect['or']['right'];}
else {num=0; obj = null;}
return {num:num, obj:obj};
//alert(s1lx + ' < ' + dropX + ' > ' + s1rx + ' : ' + s1ty + ' < ' + dropY + ' > ' + s1by);
}
function PutBack (item){
item.style.zIndex = 2;;
var pos = checkSlogBoxOver(item);
var slog = item.firstChild.data;
var sets = true;
if (!pos.num) sets = false;
if (pos.num==1 && getAssocSize(slogSelect['or']['left'])){
alert('При задании обязательного начала слова все «возможные» начала будут удалены');
slogSelect['or']['left'] = new Array();
}
if (pos.num==1 && getAssocSize(slogSelect['and']['left'])){
alert('Обязательное начало может быть только одно!');
sets = false;
}
if (pos.num==4 && getAssocSize(slogSelect['and']['left'])){
alert('Уже задано обязательное начало слова! Для задания нескольких вариантов начала поместите их в раздел «возможные»');
sets = false;
}
if (pos.num==3 && getAssocSize(slogSelect['or']['right'])){
alert('При задании обязательного окончания слова все «возможные» окончания будут удалены');
slogSelect['or']['right'] = new Array();
}
if (pos.num==3 && getAssocSize(slogSelect['and']['right'])){
alert('Обязательное окончание может быть только одно!');
sets = false;
}
if (pos.num==6 && getAssocSize(slogSelect['and']['right'])){
alert('Уже задано обязательное окончание слова! Для задания нескольких вариантов окончания поместите их в раздел «возможные»');
sets = false;
}
//alert(pos.num + ' ' + getAssocSize(slogSelect['or']['left']));
if (sets && slog){
//alert(pos.num + ' . ' + slog + ' . ' + Dump(pos.obj));
pos.obj[slog] = slog;
}
drawSlogSelection();
item.style.top = '0px';
item.style.left = '0px';
}
function getInnerSlogHTML(text, block){
var html = '<div><span onmousedown="delete(checkSlogBoxOver(this).obj[this.firstChild.data]); this.style.zIndex=10; StartDrag(event,this,PutBackM)" class="syll_in" onClick="delete(returnSlogArray(' + block + ')[\'' + text + '\']); drawSlogSelection();" style="position : relative">' + text + '</span></div>';
return html;
}
function returnSlogArray(block){
if (block==1) return slogSelect['and']['left'];
if (block==2) return slogSelect['and']['mid'];
if (block==3) return slogSelect['and']['right'];
if (block==4) return slogSelect['or']['left'];
if (block==5) return slogSelect['or']['mid'];
if (block==6) return slogSelect['or']['right'];
}
function drawSlogSelection(){
var i;
var text;
draw_syl_select();
for (z=1; z<=6; z++){
text = '';
var el = document.getElementById('syl_' + z);
for (i in returnSlogArray(z)){
text += getInnerSlogHTML(i,z);
}
if (!text) text = '&nbsp;';
el.innerHTML = text;
}
}
function setCookie (name, value, expire, path){
	document.cookie = name + '=' + escape (value)
		+ ((expire == null)? '' : ('; expires=' + expire.toGMTString()))
		+ ((path == null)? '' : ('; path=' + path));
}
function CountItems(){
	var draggables = document.getElementsByTagName ('div');
	var desktopLayout = '';
	var count = 0;
	for (var c = 0; c != draggables.length; c++)
	{
		var current = draggables[c];
		if (current.className == 'draggable')
		{
			var left = parseInt (current.style.left);
			var top = parseInt (current.style.top);
			if (left > -20 && left < 480 && top > -20 && top < 390) count++;
		}
	}
	var ItemsCounter = document.getElementById ('ItemsCounter');
	if (ItemsCounter)
	{
		var flexia = '';
		switch (count)
		{
			case 1:
				break;
			case 2:
			case 3:
			case 4:
				flexia = 'а'; break;
			default:
				flexia = 'ов'; break;
		}
		ItemsCounter.innerHTML = count ? count + ' предмет' + flexia : ' ничего нет';
	}
}
function sw_act(id, act){
if (act==1 || act==2){
var pwe = window.opener.document.getElementById('rec_' + id + '_chb');
if (act==1 && pwe.checked) pwe.click();
else if (act==2 && !pwe.checked) pwe.click(); 
}
else{
var pwe = window.opener.document.getElementById('rec_' + id + '_chb');
if (pwe.checked) pwe.click();
var pwe = window.opener.document.getElementById('dr_' + id);
pwe.click();
}
window.close();
}
function autoScroller(contentDiv, controlDiv, speed){
controlDiv = "#"+controlDiv;
contentDiv = "#"+contentDiv;
var scrollSpeed = (speed==null) ? 5 : parseInt(speed);
// double make sure the autoScroller-container has the correct css position and overflow property
$(contentDiv).parent().css({position:'relative',overflow:'hidden'});
// set contentDiv style
$(contentDiv).css({position:'absolute',top:0});
// get contentDiv height
contentDivHeight = $(contentDiv).height();
// call periodical
$(contentDiv).everyTime(100, function(i){
if (parseInt($(this).css('top'))>(contentDivHeight*(-1)+8)){
// move scroller upwards
offset = parseInt($(this).css('top'))-scrollSpeed+"px";
$(this).css({'top':offset});
}
// reset to original position
else{
// reset to original position
offset = parseInt($(this).parent().height())+8+"px";
$(this).css({'top':offset});
}
});
// on mouse over event, pause the scroller
$(controlDiv).mouseover(function (){
speed = scrollSpeed;
scrollSpeed = 0; 
});
// on mouse out event, start the scroller
$(controlDiv).mouseout(function (){
scrollSpeed = speed;
});
}

pal = new Array();
pal['0'] = new Array(' NIL', '0', ' NUL', 'ZERO');
pal['1'] = new Array('1', ' FIRST', 'ONE');
pal['2'] = new Array(' SECOND', '2', 'TWO');
pal['3'] = new Array('3', 'THREE', ' THIRD');
pal['4'] = new Array(' FOURTH', 'FOUR', '4');
pal['5'] = new Array('5', 'FIVE', ' FITH');
pal['6'] = new Array('SIX', ' SIXTH', '6');
pal['7'] = new Array('7', 'SEVEN', ' SEVENTH');
pal['8'] = new Array(' EIGHTH', 'EIGHT', '8');
pal['9'] = new Array('9', 'NINE', ' NINTH');
pal['A'] = new Array('А', 'A', 'Э', 'O', 'U');
pal['B'] = new Array('Б', 'B', 'P', 'БЬ');
pal['C'] = new Array('CK', 'СЬ', 'К', 'С', 'Ц', 'C', 'K', 'КЬ');
pal['CA'] = new Array('CA', 'КЕ');
pal['CH'] = new Array('CH', 'Ч', 'Ш');
pal['CHE'] = new Array('Ч', 'Ш', 'CHE');
pal['CK'] = new Array('CK', 'К', 'C', 'K');
pal['CS'] = new Array('CS', 'X');
pal['CU'] = new Array('CU', 'Q', 'КЬЮ', 'КВ');
pal['D'] = new Array('ТЬ', 'Д', 'Т', 'D', 'T', 'ДЬ');
pal['E'] = new Array('Е', 'И', 'E', 'I', 'Э', 'ЙЕ');
pal['EE'] = new Array('EE', 'Е', 'I');
pal['F'] = new Array('В', 'Ф', 'F', 'V', 'W', 'ВЬ');
pal['G'] = new Array('Г', 'Ж', 'К', 'G', 'J', 'ДЖ', 'ГЬ', 'ЖЬ', 'КЬ');
pal['H'] = new Array('KH', 'Х', 'H');
pal['I'] = new Array('EE', 'И', 'Й', 'E', 'I', 'АЙ');
pal['II'] = new Array('II', 'И', 'Ы');
pal['IY'] = new Array('Й', 'IY');
pal['J'] = new Array('Ж', 'Й', 'G', 'J', 'ДЖ');
pal['K'] = new Array('CK', 'К', 'C', 'K', 'Q', 'КЬ');
pal['KH'] = new Array('KH', 'Х', 'H');
pal['KS'] = new Array('KS', 'X');
pal['L'] = new Array('ЛЬ', 'РЬ', 'Л', 'Р', 'L');
pal['M'] = new Array('МЬ', 'М', 'M');
pal['MA'] = new Array('MA', 'МЕ');
pal['N'] = new Array('НЬ', 'Н', 'N');
pal['NA'] = new Array('NA', 'НЕ');
pal['NE'] = new Array('НЬ', 'Н', 'NE');
pal['O'] = new Array('О', 'A', 'O', 'U', 'OU');
pal['OO'] = new Array('О', 'У', 'OO');
pal['OU'] = new Array('О', 'O', 'OU');
pal['P'] = new Array('ПЬ', 'П', 'B', 'P');
pal['PH'] = new Array('Ф', 'PH');
pal['Q'] = new Array('CU', 'К', 'K', 'Q', 'КВА', 'КУ', 'КЬ');
pal['R'] = new Array('ЛЬ', 'РЬ', 'Л', 'Р', 'R');
pal['S'] = new Array('СЬ', 'З', 'С', 'S');
pal['SH'] = new Array('ШЬ', 'Ш', 'Щ', 'ЩЬ', 'SH');
pal['SHE'] = new Array('Ч', 'Ш', 'SHE');
pal['T'] = new Array('ТЬ', 'Д', 'Т', 'D', 'T', 'ДЬ');
pal['TS'] = new Array('Ц', 'TS');
pal['U'] = new Array('У', 'A', 'Ю', 'O', 'U');
pal['V'] = new Array('В', 'Ф', 'F', 'V', 'W', 'ВЬ');
pal['W'] = new Array('УО', 'В', 'F', 'V', 'W', 'ВЬ');
pal['X'] = new Array('КСЬ', 'CS', 'З', 'KS', 'ЭКС', 'X', 'ИКС', 'ЗЬ', 'КС');
pal['XE'] = new Array('XE', 'ЗИ', 'ЗЬИ');
pal['Y'] = new Array('И', 'Й', 'У', 'Ю', 'Y');
pal['YA'] = new Array('Я', 'YA');
pal['YO'] = new Array('Ё', 'YO');
pal['Z'] = new Array('З', 'ЗЕТ', 'Z', 'ЗЬ');
pal['ZH'] = new Array('Ж', 'ZH', 'ЖЬ');
pal['Ё'] = new Array('Ё', 'IO', 'JO', 'E', 'YO');
pal['А'] = new Array('А', 'A', 'Я', 'U');
pal['Б'] = new Array('Б', 'П', 'B', 'P', 'БЬ');
pal['БЬ'] = new Array('Б', 'БЬ');
pal['В'] = new Array('В', 'Ф', 'F', 'V', 'W', 'ВЬ');
pal['ВСТВ'] = new Array('ВСТВ', 'СТВ');
pal['ВЬ'] = new Array('В', 'ВЬ');
pal['Г'] = new Array('Г', 'G', 'J', 'K');
pal['Д'] = new Array('Д', 'Т', 'D', 'T', 'ДЬ');
pal['ДЖ'] = new Array('G', 'ДЖ');
pal['ДЬ'] = new Array('Д', 'ДЬ');
pal['Е'] = new Array('IE', 'Е', 'E', 'Э', 'I', 'YE');
pal['ЕВО'] = new Array('ЕВО', 'ЕГО');
pal['ЕГО'] = new Array('ЕВО', 'ЕГО');
pal['Ж'] = new Array('Ж', 'Ш', 'G', 'J', 'Z', 'ZH', 'ЖЬ');
pal['ЖЬ'] = new Array('Ж', 'ЖЬ');
pal['З'] = new Array('З', 'С', 'S', 'Z', 'ЗЬ');
pal['ЗДН'] = new Array('ЗДН', 'ЗН');
pal['ЗН'] = new Array('ЗДН', 'ЗН');
pal['ЗЬ'] = new Array('З', 'ЗЬ');
pal['И'] = new Array('И', 'E', 'Ы', 'I', 'Y');
pal['Й'] = new Array('Й', 'I', 'J', 'Y');
pal['К'] = new Array('CK', 'К', 'C', 'G', 'K', 'КЬ');
pal['КС'] = new Array('X', 'КС');
pal['КЬ'] = new Array('К', 'КЬ');
pal['Л'] = new Array('ЛЬ', 'Л', 'L', 'R');
pal['ЛЬ'] = new Array('ЛЬ', 'Л');
pal['М'] = new Array('МЬ', 'М', 'M');
pal['МЕ'] = new Array('MA', 'МЕ');
pal['МЬ'] = new Array('МЬ', 'М');
pal['Н'] = new Array('НЬ', 'Н', 'N');
pal['НЬ'] = new Array('НЬ', 'Н');
pal['О'] = new Array('О', 'A', 'O', 'OU');
pal['ОВО'] = new Array('ОВО', 'ОГО');
pal['ОГО'] = new Array('ОВО', 'ОГО');
pal['П'] = new Array('ПЬ', 'Б', 'П', 'B', 'P');
pal['ПЬ'] = new Array('ПЬ', 'П');
pal['Р'] = new Array('РЬ', 'Р', 'L', 'R');
pal['РЬ'] = new Array('РЬ', 'Р');
pal['С'] = new Array('СТС', 'СЬ', 'З', 'С', 'S', 'Z');
pal['СЛ'] = new Array('СТЛ', 'СЛ');
pal['СН'] = new Array('СТН', 'СН');
pal['СТВ'] = new Array('ВСТВ', 'СТВ');
pal['СТЛ'] = new Array('СТЛ', 'СЛ');
pal['СТН'] = new Array('СТН', 'СН');
pal['СТС'] = new Array('СТС', 'С');
pal['СЬ'] = new Array('СЬ', 'С');
pal['Т'] = new Array('ТЬ', 'Д', 'Т', 'D', 'T');
pal['ТЬ'] = new Array('ТЬ', 'Т');
pal['У'] = new Array('У', 'U', 'OO', 'Y');
pal['Ф'] = new Array('В', 'Ф', 'F', 'PF', 'V', 'PH');
pal['Х'] = new Array('KH', 'Х', 'H');
pal['Ц'] = new Array('Ц', 'C', 'TS');
pal['Ч'] = new Array('CH', 'ЧЬ', 'Ч', 'C', 'Щ');
pal['ЧЬ'] = new Array('ЧЬ', 'Ч');
pal['Ш'] = new Array('Ж', 'ШЬ', 'Ш', 'Щ', 'SH');
pal['ШЬ'] = new Array('ШЬ', 'Ш');
pal['Щ'] = new Array('Ч', 'Ш', 'Щ', 'ЩЬ', 'SCH');
pal['ЩЬ'] = new Array('Щ', 'ЩЬ');
pal['Ъ'] = new Array('', 'Ъ');
pal['Ы'] = new Array('И', 'Ы', 'I', 'Y');
pal['Ь'] = new Array('', 'Ь');
pal['Э'] = new Array('Е', 'A', 'E', 'Э');
pal['Ю'] = new Array('Ю', 'U', 'YU');
pal['Я'] = new Array('А', 'JA', 'A', 'Я', 'YA');
function add_record_to_selection(type, query_name, record_id, record_name){
	try
	{
		add_records_cache[record_id] = record_id;
		send_selected(query_name, type);
		add_history_line(query_name, record_id, record_name );
	}
	catch (e)
	{
		alert(e);
	}
}
function send_selected(name, type){
	var data = {};
	
	data.post = 1;
	data.type = type;
	data.name = name;
	data.token = token;
	data["add[]"] = [];
	
	//while (add_records_cache.length>0)
for (rec in add_records_cache){
	 //data.add.push(add_records_cache.pop());
	 data["add[]"].push(add_records_cache[rec]);
}	
	
	jQuery.post('/add2selection.php', data);
	
	add_records_cache = [];
	
}
var mktu_cache;
var mktubut_cache;
var store_classes;
var mktu_count;
function fill_cache(){
mktu_cache = new Array();
mktubut_cache = new Array();
for (var i=1; i<=mktu_count; i++){
mktu_cache[i] = document.getElementById("mktu_" + i);
mktubut_cache[i] = document.getElementById("mktubut_" + i);
}
}
function check_mktu_select(){
var count = 0;
if (!mktu_cache) fill_cache();
for (var i=1; i<=mktu_count; i++){
if (mktu_cache[i].value) count++;
}
if (count==0){
toggle_all_mktu(true, false);
}
if (count==mktu_count){
document.getElementById("mktu_all").checked = true;
}
return count;
}
function toggle_mktu(class_num, state){
if (!mktu_cache) fill_cache();
if (state=='toggle'){
if (check_mktu_select()==mktu_count){
toggle_all_mktu(false, false);
}
if (mktu_cache[class_num].value){
mktubut_cache[class_num].className = "passive";
mktu_cache[class_num].value = "";

}
else{
mktubut_cache[class_num].className = "";
mktu_cache[class_num].value = class_num;
//alert(class_num);

if (class_num==42){
toggle_mktu(43, 'on');
toggle_mktu(44, 'on');
toggle_mktu(45, 'on');
}
else if (class_num>42){
toggle_mktu(42, 'on');
}
}
}
else{
if (state=='on'){
mktubut_cache[class_num].className = "";
mktu_cache[class_num].value = class_num;
}
else{
mktubut_cache[class_num].className = "passive";
mktu_cache[class_num].value = "";
}
}
check_mktu_select();
if (state=='toggle') save_mktu_cookies();
}
function toggle_all_mktu(state, check){
if (!mktu_cache) fill_cache();
if (state){
for (var i=1; i<=mktu_count; i++){
mktu_cache[i].value = i;
mktubut_cache[i].className = "passive"
}
document.getElementById("mktu_all").checked = true;
}
else{
for (i=1; i<=mktu_count; i++){
mktu_cache[i].value = "";
mktubut_cache[i].className = "passive"
}
document.getElementById("mktu_all").checked = false;
}
if (check) check_mktu_select();
}
function restore_mktu_cookies(){
var i;
var cookie_val = GetCookie('classes');
if (GetCookie('store_classes')==1){
document.getElementById('mktu_store').checked = true;
store_classes = 1;
}
toggle_all_mktu(false, true);
if (!cookie_val) return false;
if (!store_classes) return false;
toggle_all_mktu(false, false);
var k;
for (i=1; i<=mktu_count; i++){
k++;
if (cookie_val.indexOf(" " + i + " ") != -1) toggle_mktu(i, 'on');
}
//if (k==mktu_count) toggle_all_mktu(false, false);
return true;
}
function save_mktu_cookies(){
if (!mktu_cache) fill_cache();
if (document.getElementById('mktu_store').checked){
store_classes = 1;
}
else{
store_classes = 0;
}
SetCookie('store_classes', store_classes);
if (!store_classes){
return;
}
var cookie_val = " ";
if (check_mktu_select()==mktu_count){
DeleteCookie('classes'); return;
}
for (i=1; i<=mktu_count; i++){
if (mktu_cache[i].value) cookie_val = cookie_val + i + " ";
}
SetCookie('classes', cookie_val);
}
function count(array){
var c = 0;
for(i in array) if(array[i] != undefined) c++;
return c;
}
function process_tree(tree, palette){
ret = new Object;
ret.untrans = 0;
newTree = new Array();
globaltrans=0;
for (left in tree){
rarr = tree[left];
for (rvar in rarr){
if (rarr[rvar]==""){
newTree[left] = true;
continue;
}
untrans = 0;
for (len=1; len<=3; len++){
rstring = rarr[rvar];
st = rstring.substr(0, len);
if (palette[st]){
for (z in palette[st]){
newLeft = left+palette[st][z];
newRight = rstring.substr(len);
if (typeof(newTree[newLeft])=='undefined'){
newTree[newLeft] = new Array();
}
newTree[newLeft][newRight] = newRight;
untrans++;
globaltrans++;
}
}
}
if (untrans==0){
rstring = rarr[rvar];
newLeft = left+rstring.substr(0, 1);
newRight = rstring.substr(1);
newTree[newLeft][newRight] = newRight;
globaltrans++;
}
}
}
ret = new Object;
ret.newTree = newTree;
if (globaltrans>0) ret.finished = false; else ret.finished = true;
return ret;
}
function compare_words(w1, w2){
if (w1.length<1 || w2.length<1) return false;
tree = new Array();
tree[""] = new Array();
tree[""][w1] = w1;
do {
t = process_tree(tree, pal);
tree = t.newTree;
for (left in tree){
if (w2.indexOf(left)!=0){
delete(tree[left]);
} 
}
} while (t.finished==false);
if (typeof(t.newTree[w2])!=='undefined'){
return true;
}
//if (w1==w2) return true;
return false;
}
function check_doubles(sstring){
sarr = explode(' ', sstring);
ret = new Object;
ret.found = false;
if (sarr.length==2){
$('#dblalert').html('Для формирования правильного поискового запроса, пожалуйста, используйте лишь одно обозначение, например "<b>'+sarr[0]+'</b>" или "<b>'+sarr[1]+'</b>"');
for (i=0; i<sarr.length; i++){
for (k=i+1; k<=sarr.length; k++){
if ( typeof(sarr[i])!='undefined' && typeof(sarr[k])!='undefined' ){
if (compare_words(sarr[i].toUpperCase(), sarr[k].toUpperCase())) ret.found = true;
}
}
}
}
ret.result = sstring;
return ret;
}
$('document').ready(function(){
$('body').append('<div id="dblalert" style="padding : 2px 5px; font-family : arial; font-size : 11px; display : none; position : absolute; top : 370px; left : 220px; width : 420px; border : 1px solid gray; background : white;"></div>');
$('#SearchField').bind("keyup", null, function(){
res = check_doubles($('#SearchField').val());
if (res.found == true){
$('#dblalert').show();
}
else{
$('#dblalert').hide();
}
//$('#SearchField').text(res.result);
});
});
function explode( delimiter, string ){
var emptyArray = { 0: '' };
if ( arguments.length != 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined' ){
return null;
}
if ( delimiter === '' || delimiter === false || delimiter === null ){
return false;
}
if ( typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object' ){
return emptyArray;
}
if ( delimiter === true ){
delimiter = '1';
}
chunks = string.toString().split(delimiter.toString());
chunks2 = new Array();
for (z in chunks){
if (chunks[z].length>0) chunks2[chunks2.length] = chunks[z];
} 
return chunks2;
}var hist_moffs = 0;
function update_history(wait_for_answer){
$('#searchHistory').html('<div style="text-align : center;">( ' + lang[act_lang]['search']['refresh_state'] + ' )</div>');
$('#reportHistory').html('<div style="text-align : center;">( ' + lang[act_lang]['search']['refresh_state'] + ' )</div>');
var url = "update_history.php?";
var post = 'post=1&token='+token+'&month=' + hist_moffs + '&type=' + document.getElementById('SearchType').value;
$.post(url, post, make_history_update, 'xml');
update_balance();
}
function add_history_line(qname, record_id, record_name){
//set_rpanel_act(2, true);
$('#lp_2').show();
draw_hst_query(qname, record_id, record_name);
for (query_id in history_records){
if (qname==history_records[query_id]['name']){
toggle_list_display('q' + query_id + '_disp', 'q' + query_id + '_open', true);
}
}
}
function draw_hst_query(query_name, record_id, record_name){
var qid = -1;
var max_qid = false;
var text = '';
record = new Array();
record['id'] = record_id;
record['name'] = record_name;
record['prc'] = all_purchased[record_id];
if (!cache_hst_qrs_blocks) var cache_hst_qrs_blocks = document.getElementById('hst_qrs_blocks');
// Находим нужную выборку
for (query_id in history_records){
query = history_records[query_id];
if (query_name == query['name']){
qid = query_id;
break;
}
if (max_qid==false || max_qid<query_id) max_qid = query_id*1;
}
// Если выборка не найдена, создаём её
if (qid==-1){
if (max_qid!==false) qid = max_qid + 1;
else qid = 0;
history_records[qid] = new Array();
history_records[qid]['name'] = query_name;
history_records[qid]['records'] = new Array();
var trg_obj = cache_hst_qrs_blocks;
text = get_hst_query_text(qid, query_name);
trg_obj.innerHTML = text + trg_obj.innerHTML;
}
var skip = 0;
var max_record_num = -1;

// Если такой записи нет - добавляем
if (skip==0){
nmn = record.id;
history_records[qid].records[nmn] = record;
var obj = document.getElementById('q' + qid + '_disp');
obj.innerHTML += get_hst_record_text(qid, nmn, record);
}
}
function draw_hst_query_2_init(query_name){
var qid = -1;
var max_qid = false;
var text = '';
// Находим нужную выборку
for (query_id in history_records){
query = history_records[query_id];
if (query_name == query['name']){
qid = query_id;
break;
}
if (max_qid==false || max_qid<query_id) max_qid = query_id*1;
}
// Если выборка не найдена, создаём её
if (qid==-1){
if (max_qid!==false) qid = max_qid + 1;
else qid = 0;
history_records[qid] = new Array();
history_records[qid]['name'] = query_name;
history_records[qid]['records'] = new Array();
var trg_obj = document.getElementById('hst_qrs_blocks');
text = get_hst_query_text(qid, query_name);
//alert(text);
trg_obj.innerHTML = text + trg_obj.innerHTML;
}
cquery_qid = qid;
cquery_obj = document.getElementById('q' + qid + '_disp');
cquery_text = cquery_obj.innerHTML;
}
function draw_hst_query_2(record_id, record_name){
var qid = cquery_qid;
//alert(cquery_qid);
var skip = 0;
var max_record_num = -1;
record = new Array();
record['id'] = record_id;
record['name'] = record_name;
record['prc'] = all_purchased[record_id];

skip = draw_hst_query_2_PRF1(record, history_records[qid]);

if (skip==0){
nmn = record.id;
history_records[qid].records[nmn] = record;
cquery_text += get_hst_record_text(qid, nmn, record);
}
}
function draw_hst_query_2_PRF1(rec, hrec){
var skip = 0;
if (hrec && hrec.records)
for (record_num in hrec){
if (record['id']==hrec[record_num]['id']) skip = 1;
}
return skip;
}
function draw_hst_query_2_update(){
cquery_obj.innerHTML = cquery_text;
}
function get_hst_query_text(qid, name){
var text = '';
text += '<div class="history_record" id="q' + qid + '_group">';
text += '<span style="cursor : pointer; font-family : Courier new, monospace;" id="q' + qid + '_open" onclick="javascript:toggle_list_display(\'q' + qid + '_disp\', \'q' + qid + '_open\');" title="' + lang[act_lang]['common']['show_contents'] + '">+</span>';
text += '<input type="checkbox" class="query_tag" id="q' + qid + '_tag" name="hselect" onclick="tag_history_record(' + qid + ', null);" \/>';
text += '<span class="history_query_name" id="query_' + qid + '_name">' + name + '</span>';
// text += '<span style="margin-left : 1ex; cursor : pointer;" onclick="delete_history_record(\'' + qid + '\')"><img src="images/rcross.gif" alt="' + lang[act_lang]['common']['delete'] + '" title="' + lang[act_lang]['common']['delete'] + '"></span>';
text += '<span style="margin-left : 1ex; cursor : pointer; color : red; font-weight : bold; font-size : 18px;" onclick="delete_history_record(\'' + qid + '\')" title="' + lang[act_lang]['common']['delete'] + '">x</span>';
text += '<div class="history_lines" style="display : none" id="q' + qid + '_disp">';
text += '<\/div>';
text += '<\/div>';
return text;
}
function get_hst_record_text(query_id, record_num, record_data){
var i = query_id;
var k = record_num;
var text = '';
record_id = record_data['id'];
record_name = record_data['name'];
text += '<div class="history_line" id="q' + query_id + 'r' + k + '_disp" style="margin-left : 2em;">';
text += '<input type="checkbox" class="record_tag" id="qr_' + i + '_tag' + record_id + '" onclick="tag_history_record(' + i + ', ' + record_id + ')">';
text += '<span onclick="javascript:generate_report(null, ' + record_id + ', \'' + addslashes(record_name) + '\');" ';
if (all_purchased[record_id]==1) text +='class="hst_record_purchased" ';
else text +='class="hst_record_obsolete" ';
text += ' onMouseOver="javascript:this.style.textDecoration=\'underline\'" onMouseOut="javascript:this.style.textDecoration=\'none\'">' + record_name + '</span>';
//text += '<span style="margin-left : 1ex; cursor : pointer;" onclick="delete_history_record(\'' + i + '\', \'' + k + '\')"><img src="images/rcross.gif" alt="' + lang[act_lang]['common']['delete'] + '" title="' + lang[act_lang]['common']['delete'] + '" /></span>';
text += '<span style="margin-left : 1ex; cursor : pointer; color : red; font-weight : bold; font-size : 15px;" onclick="delete_history_record(\'' + i + '\', \'' + k + '\')" title="' + lang[act_lang]['common']['delete'] + '" />X</span>';
text += '<\/div>';
return text;
}

function make_history_update(xmlData){
if (!xmlData || !xmlData.documentElement) return;
err_history_update = 0;
xmlRoot = xmlData.documentElement;
document.getElementById('searchHistory').innerHTML = '';
history_records = new Array();
var historyRoot = xmlRoot.getElementsByTagName("SEARCHES").item(0);
var arr = historyRoot.getElementsByTagName("ITEM");
if (arr && arr.length>0){
for (var i=0; i<arr.length; i++){
var item = arr.item(i);
			
			//console.log(item);
var history_record = new Array();
//history_record['name'] = item.getElementsByTagName('QUERY').item(0).firstChild.data;
			history_record['name'] = jQuery('QUERY', item).text();
//history_record['type'] = item.getElementsByTagName('TYPE').item(0).firstChild.data;
			history_record['type'] = jQuery('TYPE', item).text();
history_record['records'] = new Array();
var recs = item.getElementsByTagName('RC');
for (k=0; k<recs.length; k++){
//var rid = recs.item(k).getElementsByTagName('ID').item(0).firstChild.data;
//alert(rid);
var rid = k;
var rid = recs.item(k).getElementsByTagName('ID').item(0).firstChild.data;
history_record['records'][rid] = new Array();
history_record['records'][rid]['id'] = recs.item(k).getElementsByTagName('ID').item(0).firstChild.data;
history_record['records'][rid]['name'] = recs.item(k).getElementsByTagName('NM').item(0).firstChild.data;
history_record['records'][rid]['name'] = history_record['records'][rid]['name'].replace(/\"/g, '&quot;');
history_record['records'][rid]['prc'] = recs.item(k).getElementsByTagName('PRC').item(0).firstChild.data;
all_purchased[history_record['records'][rid]['id']] = history_record['records'][rid]['prc'];
}
history_records[i] = history_record;
}
}
var mname = jQuery('PERIOD > NAME', xmlData).text();
var reportRoot = xmlRoot.getElementsByTagName("REPORTS").item(0);
var arr = reportRoot.getElementsByTagName("REPORT");
reports = new Array();
if (arr && arr.length>0){
for (var i=0; i<arr.length; i++){
try{
var name = arr.item(i).getElementsByTagName('NAME').item(0).firstChild.data;
name = name.replace(/\"/g, '&quot;');
var hid = arr.item(i).getElementsByTagName('HID').item(0).firstChild.data;
reports[hid] = new Array();
reports[hid]['name'] = name;
reports[hid]['queries'] = new Array();
reports[hid]['records'] = new Array();
queries = arr.item(i).getElementsByTagName('QUERY');
for (var q=0; q<queries.length; q++){
var query = queries[q];
var query_name = query.getElementsByTagName('NAME').item(0).firstChild.data;
query_name = query_name.replace(/\"/g, '&quot;');
reports[hid]['queries'][query_name] = new Array();
reports[hid]['queries'][query_name]['name'] = query_name;
reports[hid]['queries'][query_name]['records'] = new Array();
records = query.getElementsByTagName('RECORD');
for (var r=0; r<records.length; r++){
var record = records[r];
var record_id = record.getElementsByTagName('ID').item(0).firstChild.data;
reports[hid]['queries'][query_name]['records'][record_id] = new Array();
reports[hid]['queries'][query_name]['records'][record_id]['name'] = record.getElementsByTagName('NAME').item(0).firstChild.data;
reports[hid]['queries'][query_name]['records'][record_id]['name'] = reports[hid]['queries'][query_name]['records'][record_id]['name'].replace(/\"/g, '&quot;');
reports[hid]['queries'][query_name]['records'][record_id]['id'] = record.getElementsByTagName('ID').item(0).firstChild.data;
reports[hid]['queries'][query_name]['records'][record_id]['prc'] = record.getElementsByTagName('PRC').item(0).firstChild.data;
reports[hid]['records'][record_id] = reports[hid]['queries'][query_name]['records'][record_id]['id'];
all_purchased[reports[hid]['records'][record_id]] = reports[hid]['queries'][query_name]['records'][record_id]['prc'];
}
}
}
catch(err){
}
}
}
var auto_open = last_updated_report;
add_history_records(document.getElementById('SearchType').value, history_records);
draw_reports();
if (auto_open){
generate_report(auto_open, 0, name, true);
}
last_updated_report = false;
history_update_in_progress = false;
sresults = $('RESULTS RESULT',xmlData);
shist = new Array();
for (i=0; i<sresults.length; i++){
shr = new Object;
shr.hid = $('HID', sresults[i]).text();
shr.success = $('SUCCESS', sresults[i]).text();
shr.text = $('TEXT', sresults[i]).text();
shr.start = new Date($('START', sresults[i]).text() * 1000);
		if ($('FINISH', sresults[i]).text()*1000>0) shr.finish = new Date($('FINISH', sresults[i]).text() * 1000);
shr.type = $('TYPE', sresults[i]).text();
shr.modes = $('MODES', sresults[i]).text();
shr.bases = $('BASES', sresults[i]).text();
shr.classes = $('CLASSES', sresults[i]).text();
shr.found = $('FOUND', sresults[i]).text();
shr.extime = $('EXTIME', sresults[i]).text();
shist.push(shr);
}
$('#searchList').html('');
nav_text = '<div class="shr_nav">';
if (hist_moffs<23) nav_text += '<div class="shr_nav_prev" onclick="javascript: jQuery(\'.shr_name\').text(\'(Обновляется)\'); jQuery(\'.shr_nav_next, .shr_nav_prev\').hide(); hist_moffs++; update_history(false);" title="Предыдущий месяц" >&larr;</div>';
nav_text += '<div class="shr_name">'+mname+'</div>';
if (hist_moffs>0) nav_text += '<div class="shr_nav_next" onclick="javascript: jQuery(\'.shr_name\').text(\'(Обновляется)\'); jQuery(\'.shr_nav_next, .shr_nav_prev\').hide(); hist_moffs--; update_history(false);" title="Следующий месяц">&rarr;</div>';
if (hist_moffs>24) hist_moffs = 24;
if (hist_moffs<0) hist_moffs = 0;
nav_text += '</div>';
$('#searchList').append(nav_text);
for (i=0; i<shist.length; i++){
text = '<div class="shr">';
text += '<div class="shr_text">';
		text += '<span onclick="javascipt:$(\'#SearchField\').val(\''+shist[i].text.replace(/"/, '&quot;')+'\');';
		text += 'show_wait_message(true);';
		text += 'show_wait_description(\'Восстанавливаются результаты поиска\');';
		text += '$.ajax({\'type\': \'POST\', \'url\': \'makesearch_result.php\', \'data\': \'hid='+shist[i].hid+'\', \'success\': process_search});">'+shist[i].text+'</span>';
		text += '</div>';
months = new Array('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
		
		if (shist[i].finish) text += '<div class="shr_param"><span class="key">Сформирован:</span>'+shist[i].finish.getDate()+' '+months[(shist[i].finish.getMonth())]+' '+shist[i].finish.getFullYear()+' '+shist[i].finish.getHours()+':'+shist[i].finish.getMinutes()+'</div>';
		else text += '<div class="shr_param" style="color : red; font-size : 13px; font-weight : bold;">Выполняется</div>';
		
		
		//text += '<div>'+shist[i].finish.getMonth()+'</div>';
		
if (shist[i].classes!="") text += '<div class="shr_param"><span class="key">Классы:</span> '+shist[i].classes+'</div>';
text += '<div class="shr_param"><span class="key">Категория:</span> ';
sbases = explode(', ', shist[i].bases);
rf = false;
for (k=0; k<sbases.length; k++){
if (rf) text += ', ';
text += $("label[for|='bases_"+sbases[k]+"']").text();
rf = true;
}
text += '</div>';
//modenames = new Array('in':'на вхождение','ident':'на тождество','fonet':'на сходство','slog':'по формантам');
modenames = new Array();
modenames['in'] = 'на вхождение';
modenames['ident'] = 'на тождество';
modenames['fonet'] = 'на сходство';
modenames['slog'] = 'по формантам';
text += '<div class="shr_param"><span class="key">Режимы:</span> ';
modes = explode(', ', shist[i].modes);
rf = false;
for (k=0; k<modes.length; k++){
if (rf) text += ', ';
text += modenames[modes[k]];
rf = true;
}
text += '</div>';
if (shist[i].found!=-1) text += '<div class="shr_param"><span class="key">Найдено:</span> '+shist[i].found+'</div>';
	 if (shist[i].extime){
text += '<div class="shr_param"><span class="key">Выполнение:</span> '+shist[i].extime+' сек.</div>'; 
}
text += '</div>';
$('#searchList').append($(text));
}
if (shist.length>3) $('#searchList').append($(nav_text));
else if (shist.length==0) $('#searchList').append('<div class="shr_empty">Нет поисков за указанный месяц</div>');
}
function add_history_record(type, query){
}

function add_history_records(type, queries){
var sh = '<div id="hst_qrs_blocks">';
for (i=0; i<queries.length; i++){
var query = queries[i];
var name = query.name;
var records = query.records;
text = '';
text += '<div class="history_record" id="q' + i + '_group">';
text += '<span style="cursor : pointer; font-family : Courier new, monospace;" id="q' + i + '_open" onclick="javascript:toggle_list_display(\'q' + i + '_disp\', \'q' + i + '_open\');" title="' + lang[act_lang]['common']['show_contents'] + '">+</span>';
text += '<input type="checkbox" class="query_tag" id="q' + i + '_tag" name="hselect" onclick="tag_history_record(' + i + ', null);" \/>';
text += '<span class="history_query_name" id="query_' + i+ '_name">' + name + '</span>';
text += '<span style="margin-left : 1ex; cursor : pointer; color : red; font-size : 13px; font-weight : bold;" onclick="delete_history_record(\'' + i + '\')" title="' + lang[act_lang]['common']['delete'] + '">X</span>';
//text += '<span style="margin-left : 1ex; cursor : pointer;" onclick="delete_history_record(\'' + i + '\')"><img src="images/rcross.gif" alt="' + lang[act_lang]['common']['delete'] + '"></span>';
text += '<div class="history_lines" style="display : none" id="q' + i + '_disp">';
for (k in records){
record = records[k];
var record_name = record.name;
var record_id = record.id;
text += '<div class="history_line" id="q' + i + 'r' + k + '_disp" style="margin-left : 2em;">';
text += '<input type="checkbox" class="record_tag" id="qr_' + i + '_tag' + record_id + '" onclick="tag_history_record(' + i + ', ' + record_id + ')"';
if (all_history_selected[name] && all_history_selected[name][record.id]==1) text += ' checked="checked"';
text += '>';
text += '<span name="recordName" onclick="javascript:generate_report(null, ' + record_id + ', \'' + addslashes(record_name) + '\');" ';
if (all_purchased[record_id]==1) text +='class="hst_record_purchased" ';
else text +='class="hst_record_obsolete" ';
text += ' onMouseOver="javascript:this.style.textDecoration=\'underline\'" onMouseOut="javascript:this.style.textDecoration=\'none\'">' + record_name + '</span>';
//text += '<span style="margin-left : 1ex; cursor : pointer;" onclick="delete_history_record(\'' + i + '\', \'' + k + '\')"><img src="images/rcross.gif" alt="' + lang[act_lang]['common']['delete'] + '"></span>';
text += '<span style="margin-left : 1ex; cursor : pointer; color : red; font-size : 13px; font-weight : bold;" onclick="delete_history_record(\'' + i + '\', \'' + k + '\')" title="' + lang[act_lang]['common']['delete'] + '">X</span>';
text += '<\/div>';
}
text += '<\/div>';
text += '<\/div>';
sh += text;
}
sh += '<\/div>';
sh += '<div style="margin : auto; text-align : center; margin-top : 0.4em; padding-top : 0.3em; border-top : 1px solid #cccccc;">';
sh += '<div><input type="button" id="add_to_report_but" value="' + lang[act_lang]['reports']['add_to_report'] + '" onclick="add_to_report();" disabled="disabled" style="width : 190px;" \/><\/div>';
sh += '<div id="all_reports_div" style="padding-left : 1px; margin-top : 0.3em;"><select name="report" id="all_reports" style="width : 190px;" \/><\/select><\/div>';
sh += '<\/div>';
document.getElementById('searchHistory').innerHTML = sh;
}
function clear_history_tags(){
var query_divs = getElementsByClass('history_record');
for (var i=0; i<query_divs.length; i++){
var query_name = document.getElementById('query_' + (i*1) + '_name').innerHTML;
delete(all_history_selected[query_name]);
}
}

function tag_history_record(query, record){
var record_obj;
var chk = 0;
if (record!=null){
if (history_records && history_records[query]) for (record_num in history_records[query]['records']){
record_obj = history_records[query]['records'][record_num];
if (document.getElementById('qr_' + query + '_tag' + record_obj['id']).checked) chk++;
document.getElementById('q' + query + '_tag').checked = document.getElementById('qr_' + query + '_tag' + record_obj['id']).checked;
}
if (chk>0) document.getElementById('q' + query + '_tag').checked = true;
else document.getElementById('q' + query + '_tag').checked = false;
}
else{
if (history_records && history_records[query]) for (record_num in history_records[query]['records']){
record_obj = history_records[query]['records'][record_num];
document.getElementById('qr_' + query + '_tag' + record_obj['id']).checked = document.getElementById('q' + query + '_tag').checked;
}
}
chk = 0;
all_history_selected = new Array();
if (history_records) for (query_id in history_records){
query_obj = history_records[query_id];
all_history_selected[query_obj['name']] = new Array();
for (record_num in query_obj['records']){
record_obj = history_records[query_id]['records'][record_num];
if (document.getElementById('qr_' + query_id + '_tag' + record_obj['id']).checked){
all_history_selected[query_obj['name']][record_obj['id']] = 1;
chk++;
}
else{
all_history_selected[query_obj['name']][record_obj['id']] = 0;
}
}
}
if (chk>0) document.getElementById('add_to_report_but').disabled = false;
else document.getElementById('add_to_report_but').disabled = true;
}

function tag_history_record_old(query, record){
var query_divs = getElementsByClass('history_record');
var act_cnt=0;
for (var i=0; i<query_divs.length; i++){
var query_tag = getElementsByClass('query_tag', query_divs[i])[0];
var record_tags = getElementsByClass('record_tag', query_divs[i]);
var record_id;
var query_name = document.getElementById('query_' + (i*1) + '_name').innerHTML;
if (record>0){
delete(all_history_selected[query_name]);
query_tag.checked=false;
for (var j=0; j<record_tags.length; j++){
record_id = record_tags[j].id.substring(5,record_tags[j].id.length);
if (record_tags[j].checked==true){
if (all_history_selected[query_name]==undefined) all_history_selected[query_name] = new Array();
query_tag.checked=true;
act_cnt++;
all_history_selected[query_name][record_id] = 1;
}
}
}
else{
for (var j=0; j<record_tags.length; j++){
record_id = record_tags[j].id.substring(5,record_tags[j].id.length);
if (i==query){
record_tags[j].checked = query_tag.checked;
}
if (query_tag.checked){
if (all_history_selected[query_name]==undefined) all_history_selected[query_name] = new Array();
act_cnt++;
all_history_selected[query_name][record_id] = 1;
}
else{
delete(all_history_selected[query_name]);
}
}
}
}
if (document.getElementById('add_to_report_but')){
if (act_cnt>0) document.getElementById('add_to_report_but').disabled = false;
else document.getElementById('add_to_report_but').disabled = true;
}
} 
function eli18n(o) {
	
	
	this.textdomain = function(d) {
		return this.messages[d] ? this._domain = d : this._domain;
	}
	
	o && o.messages && this.load(o.messages);
	o && o.textdomain && this.textdomain(o.textdomain);
}
eli18n.prototype = new function() {
	
	
	this.messages = {};
	
	this._domain = '';
	
	
	this.load = function(msgs) {
		if (typeof(msgs) == 'object') {
			for (var d in msgs) {
				var _msgs = msgs[d];
				if (typeof(_msgs) == 'object') {
					if (!this.messages[d]) {
						this.messages[d] = {}; 
					}
					for (var k in _msgs) {
						if (typeof(_msgs[k]) == 'string') {
							this.messages[d][k] = _msgs[k];
						}
					}
				}
			}
		}
		return this;
	}
	
	this.translate = function(msg, d) {
		var d = d && this.messages[d] ? d : this._domain;
		return this.messages[d] && this.messages[d][msg] ? this.messages[d][msg] : msg;
		
	}
	
	
	this.format = function(msg, data, d) {
		msg = this.translate(msg, d);
		if (typeof(data) == 'object') {
			for (var i in data) {
				msg = msg.replace('%'+i, this.translate(data[i], d));
			}
		}
		return msg;
	}
}

function elDialogForm(o) {
	var self = this;
	
	var defaults = {
		'class' : 'el-dialogform',
		submit : function(e, d) { window.console && window.console.log && window.console.log('submit called'); d.close(); },
		form : { action : window.location.href,	method : 'post'	},
		ajaxForm : null,
		validate : null,
		spinner : 'Loading',
		tabs : { active: 0 },
		tabPrefix : 'el-df-tab-',
		dialog : {
			title : 'dialog',
			autoOpen : false,
			modal : true,
			resizable : false,
			buttons : {
				Cancel : function() { self.close(); },
				Ok : function() { self.form.trigger('submit'); }
			}
		}
	};
	this.opts = jQuery.extend(true, defaults, o, {dialog : { autoOpen : false, close : function() { self.close(); } }});
	if (o && o.dialog && o.dialog.buttons && typeof(o.dialog.buttons) == 'object') {
		this.opts.dialog.buttons = o.dialog.buttons;
	}
	this.ul = null;
	this.tabs = {};
	this._table = null;
	this.dialog = jQuery('<div />').addClass(this.opts['class']).dialog(this.opts.dialog);
	this.message = jQuery('<div class="el-dialogform-message rounded-5" />').hide().appendTo(this.dialog);
	this.error = jQuery('<div class="el-dialogform-error rounded-5" />').hide().appendTo(this.dialog);
	this.spinner = jQuery('<div class="spinner" />').hide().appendTo(this.dialog);
	this.content = jQuery('<div class="el-dialogform-content" />').appendTo(this.dialog)
	this.form = jQuery('<form />').attr(this.opts.form).appendTo(this.content);
	if (this.opts.submit) {
		this.form.bind('submit', function(e) { self.opts.submit(e, self) })
	}
	if (this.opts.ajaxForm && jQuery.fn.ajaxForm) {
		this.form.ajaxForm(this.opts.ajaxForm);
	}
	if (this.opts.validate) {
		this.form.validate(this.opts.validate);
	}
	
	this.option = function(name, value) {
		return this.dialog.dialog('option', name, value)
	}
	
	this.showError = function(msg, hideContent) {
		this.hideMessage();
		this.hideSpinner();
		this.error.html(msg).show();
		hideContent && this.content.hide();
		return this;
	}
	
	this.hideError= function() {
		this.error.text('').hide();
		this.content.show();
		return this;		
	}
	
	this.showSpinner = function(txt) {
		this.error.hide();
		this.message.hide();
		this.content.hide();
		this.spinner.text(txt||this.opts.spinner).show();
		this.option('buttons', {});
		return this;		
	}
	
	this.hideSpinner = function() {
		this.content.show();
		this.spinner.hide();
		return this;		
	}
	
	this.showMessage = function(txt, hideContent) {
		this.hideError();
		this.hideSpinner();
		this.message.html(txt||'').show();
		hideContent && this.content.hide();
		return this;
	}
	
	this.hideMessage = function() {
		this.message.hide();
		this.content.show();
		return this;		
	}
	
	
	this.tab = function(id, title) {
		id = this.opts.tabPrefix+id;
		
		if (!this.ul) {
			this.ul = jQuery('<ul />').prependTo(this.form);
		}
		jQuery('<li />').append(jQuery('<a />').attr('href', '#'+id).html(title)).appendTo(this.ul);
		this.tabs[id] = {tab : jQuery('<div />').attr('id', id).addClass('tab').appendTo(this.form), table : null};
		return this;
	}
	
	
	this.table = function(id) {
		id = id && id.indexOf(this.opts.tabPrefix) == -1 ? this.opts.tabPrefix+id : id;
		if (id && this.tabs && this.tabs[id]) {
			this.tabs[id].table = jQuery('<table />').appendTo(this.tabs[id].tab);
		} else {
			this._table = jQuery('<table />').appendTo(this.form); 
		}
		return this;
	}
	
	
	this.append = function(data, tid, t) {
		tid = tid ? 'el-df-tab-'+tid : '';
		if (!data) {
			return this;
		}
		
		if (tid && this.tabs[tid]) {
			if (t) {
				!this.tabs[tid].table && this.table(tid);
				var tr = jQuery('<tr />').appendTo(this.tabs[tid].table);
				if (!$.isArray(data)) {
					tr.append(jQuery('<td />').append(data));
				} else {
					for (var i=0; i < data.length; i++) {
						tr.append(jQuery('<td />').append(data[i]));
					};
				}
			} else {
				if (!jQuery.isArray(data)) {
					this.tabs[tid].tab.append(data)
				} else {
					for (var i=0; i < data.length; i++) {
						this.tabs[tid].tab.append(data[i]);
					};
				}
			}
			
		} else {
			if (!t) {
				if (!jQuery.isArray(data)) {
					this.form.append(data);
				} else {
					for (var i=0; i < data.length; i++) {
						this.form.append(data[i]);
					};
				}
			} else {
				if (!this._table) {
					this.table();
				}
				var tr = jQuery('<tr />').appendTo(this._table);
				if (!jQuery.isArray(data)) {
					tr.append(jQuery('<td />').append(data));
				} else {
					for (var i=0; i < data.length; i++) {
						tr.append(jQuery('<td />').append(data[i]));
					};
				}
			}
		}
		return this;
	}
	
	
	this.separator = function(tid) {
		tid = 'el-df-tab-'+tid;
		if (this.tabs && this.tabs[tid]) {
			this.tabs[tid].tab.append(jQuery('<div />').addClass('separator'));
			this.tabs[tid].table && this.table(tid);
		} else {
			this.form.append(jQuery('<div />').addClass('separator'));
		}
		return this;
	}
	
	
	this.open = function() {
		this.ul && this.form.tabs(this.opts.tabs);
		this.form.find(':text').keyup(function(e) {
			if (e.keyCode == 13) {
				self.form.submit();
			}
		});
		this.dialog.attr('unselectable', 'on').dialog('open');
		this.form.find(':text').eq(0).focus();
		return this;
	}
	
	
	this.close = function() {
		this.dialog.dialog('destroy').remove();
	}
	
}

(function($) {
	$.fn.elColorPicker = function(o) {
		var self = this;
		var opts = $.extend({}, $.fn.elColorPicker.defaults, o);
		this.hidden = $('<input type="hidden" />').attr('name', opts.name).val(opts.color||'').appendTo(this);
		this.palette = null;
		this.preview = null;
		this.input = null;
		function setColor(c) {
			self.val(c);
			opts.change && opts.change(self.val());
			self.palette.slideUp();
		}
		function init() {
			self.palette = $('<div />').addClass(opts.paletteClass+' rounded-3');
			for (var i=0; i < opts.colors.length; i++) {
				$('<div />')
					.addClass('color')
					.css('background-color', opts.colors[i])
					.attr({title : opts.colors[i], unselectable : 'on'})
					.appendTo(self.palette)
					.mouseenter(function() {
						var v = $(this).attr('title');
						self.input.val(v);
						self.preview.css('background-color', v);
					})
					.click(function(e) {
						e.stopPropagation(); 
						setColor($(this).attr('title'));
					});
			};
			self.input = $('<input type="text" />')
				.addClass('rounded-3')
				.attr('size', 8)
				.click(function(e) {
					e.stopPropagation();
				})
				.keydown(function(e) {
					if (e.ctrlKey || e.metaKey) {
						return true;
					}
					var k = e.keyCode;
					// on esc - close palette
					if (k == 27) {
						return self.mouseleave();
					}
					// allow input only hex color value
					if (k!=8 && k != 13 && k!=46 && k!=37 && k != 39 && (k<48 || k>57) && (k<65 || k > 70)) {
						return false;
					}
					var c = $(this).val();
					if (c.length == 7 || c.length == 0) {
						if (k == 13) {
							e.stopPropagation();
							e.preventDefault();
							setColor(c);
							self.palette.slideUp();
						}
						if (e.keyCode != 8 && e.keyCode != 46 && k!=37 && k != 39) {
							return false;
						}
					}
				})
				.keyup(function(e) {
					var c = $(this).val(); 
					c.length == 7 && /^#[0-9abcdef]{6}$/i.test(c) && self.val(c);
				});
				
			self.preview = $('<div />')
				.addClass('preview rounded-3')
				.click(function(e) {
					e.stopPropagation();
					setColor(self.input.val());
				});
			
			self.palette
				.append($('<div />').addClass('clearfix'))
				.append($('<div />').addClass('panel').append(self.input).append(self.preview));
			
			if (opts.palettePosition == 'outer') {
				self.palette.hide()
					.appendTo(self.parents('body').eq(0))
					.mouseleave(function() {
						$(this).slideUp();
						self.val(self.val());
					})
				self.mouseleave(function(e) {
					if (e.relatedTarget != self.palette.get(0)) {
						self.palette.slideUp();
						self.val(self.val());
					}
				})
			} else {
				self.append(self.palette.hide())
					.mouseleave(function(e) {
						self.palette.slideUp();
						self.val(self.val());
					});
			}
			self.val(self.val());
		}
		
		this.empty().addClass(opts['class']+' rounded-3')
			.css({'position' : 'relative', 'background-color' : opts.color||''})
		.click(function(e) { 
			if (!self.hasClass('disabled')) {
				!self.palette && init();
				if (opts.palettePosition == 'outer' && self.palette.css('display') == 'none') {
					var o = $(this).offset();
					var w = self.palette.width();
					var l = self.parents('body').width() - o.left >= w ? o.left : o.left + $(this).outerWidth() - w;
					self.palette.css({left : l+'px', top : o.top+$(this).height()+1+'px'});
				}
				self.palette.slideToggle();
			}
		});
		
		this.val = function(v) {
			if (!v && v!=='') {
				return this.hidden.val();
			} else {
				this.hidden.val(v);
				if (opts.update) {
					opts.update(this.hidden.val());
				} else {
					this.css('background-color', v);
				}
				
				if (self.palette) {
					self.preview.css('background-color', v);
					self.input.val(v);
				}
			}
			return this;
		}
		
		return this;
	}
	$.fn.elColorPicker.defaults = {
		'class' : 'el-colorpicker',
		paletteClass : 'el-palette',
		palettePosition : 'inner',
		name : 'color',
		color : '',
		update : null,
		change : function(c) { window.console && window.console.log && window.console.log(c) },
		colors : [
			'#ffffff', '#cccccc', '#999999', '#666666', '#333333', '#000000', 
			'#ffcccc', '#cc9999', '#996666', '#663333', '#330000', 
			'#ff9999', '#cc6666', '#cc3333', '#993333', '#660000', 
			'#ff6666', '#ff3333', '#ff0000', '#cc0000', '#990000',
			'#ff9966', '#ff6633', '#ff3300', '#cc3300', '#993300',
			'#ffcc99', '#cc9966', '#cc6633', '#996633', '#663300',
			'#ff9933', '#ff6600', '#ff9900', '#cc6600', '#cc9933',
			'#ffcc66', '#ffcc33', '#ffcc00', '#cc9900', '#996600',
			'#ffffcc', '#cccc99', '#999966', '#666633', '#333300',
			'#ffff99', '#cccc66', '#cccc33', '#999933', '#666600',
			'#ffff66', '#ffff33', '#ffff00', '#cccc00', '#999900',
			'#ccff66', '#ccff33', '#ccff00', '#99cc00', '#669900',
			'#ccff99', '#99cc66', '#99cc33', '#669933', '#336600',
			'#99ff33', '#99ff00', '#66ff00', '#66cc00', '#66cc33',
			'#99ff66', '#66ff33', '#33ff00', '#33cc00', '#339900',
			'#ccffcc', '#99cc99', '#669966', '#336633', '#003300',
			'#99ff99', '#66cc66', '#33cc33', '#339933', '#006600',
			'#66ff66', '#33ff33', '#00ff00', '#00cc00', '#009900',
			'#66ff99', '#33ff66', '#00ff33', '#00cc33', '#009933',			
			'#99ffcc', '#66cc99', '#33cc66', '#339966', '#006633',						
			'#33ff99', '#00ff66', '#00ff99', '#00cc66', '#33cc99',						
			'#66ffcc', '#33ffcc', '#00ffcc', '#00cc99', '#009966',						
			'#ccffff', '#99cccc', '#669999', '#336666', '#003333',						
			'#99ffff', '#66cccc', '#33cccc', '#339999', '#006666',						
			'#66cccc', '#33ffff', '#00ffff', '#00cccc', '#009999',						
			'#66ccff', '#33ccff', '#00ccff', '#0099cc', '#006699',																		
			'#99ccff', '#6699cc', '#3399cc', '#336699', '#003366',						
			'#3399ff', '#0099ff', '#0066ff', '#066ccc', '#3366cc',																		
			'#6699ff', '#3366ff', '#0033ff', '#0033cc', '#003399',						
			'#ccccff', '#9999cc', '#666699', '#333366', '#000033',																		
			'#9999ff', '#6666cc', '#3333cc', '#333399', '#000066',																		
			'#6666ff', '#3333ff', '#0000ff', '#0000cc', '#009999',																		
			'#9966ff', '#6633ff', '#3300ff', '#3300cc', '#330099',																		
			'#cc99ff', '#9966cc', '#6633cc', '#663399', '#330066',
			'#9933ff', '#6600ff', '#9900ff', '#6600cc', '#9933cc',			
			'#cc66ff', '#cc33ff', '#cc00ff', '#9900cc', '#660099',
			'#ffccff', '#cc99cc', '#996699', '#663366', '#330033',			
			'#ff99ff', '#cc66cc', '#cc33cc', '#993399', '#660066',
			'#ff66ff', '#ff33ff', '#ff00ff', '#cc00cc', '#990099',			
			'#ff66cc', '#ff33cc', '#ff00cc', '#cc0099', '#990066',
			'#ff99cc', '#cc6699', '#cc3399', '#993366', '#660033',			
			'#ff3399', '#ff0099', '#ff0066', '#cc0066', '#cc3366',
			'#ff6699', '#ff3366', '#ff0033', '#cc0033', '#990033'		
			]
	};
})(jQuery);

(function($) {
	
	$.fn.elBorderSelect = function(o) {
		
		var $self = this;
		var self = this.eq(0);
		var opts = $.extend({}, $.fn.elBorderSelect.defaults, o);
		var width = $('<input type="text" />')
			.attr({'name' : opts.name+'[width]', size : 3}).css('text-align', 'right')
			.change(function() { $self.change(); });
		
		var color = $('<div />').css('position', 'relative')
			.elColorPicker({
				'class' : 'el-colorpicker ui-icon ui-icon-pencil',
				name : opts.name+'[color]', 
				palettePosition : 'outer',
				change : function() { $self.change(); }
			});
		
		
		var style = $('<div />').elSelect({
			tpl : '<div style="border-bottom:4px %val #000;width:100%;margin:7px 0"> </div>',
			tpls : { '' : '%label'},
			maxHeight : opts.styleHeight || null,
			select : function() { $self.change(); },
			src : {
				'' : 'none',
				solid : 'solid',
				dashed : 'dashed',
				dotted : 'dotted',
				'double' : 'double',
				groove : 'groove',
				ridge : 'ridge',
				inset : 'inset',
				outset : 'outset'
			}
		});
		
		self.empty()
			.addClass(opts['class'])
			.attr('name', opts.name||'')
			.append(
				$('<table />').attr('cellspacing', 0).append(
					$('<tr />')
						.append($('<td />').append(width).append(' px'))
						.append($('<td />').append(style))
						.append($('<td />').append(color))
				)
			);
		
		function rgb2hex(str) {
		 function hex(x) {
		 	hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8","9", "a", "b", "c", "d", "e", "f"];
		 return !x ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x% 16];
		 }
			var rgb = str.match(/\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/); 
			return rgb ? "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]) : '';
		}
		
		function toPixels(num) {
			var m = num.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);
			if (m) {
				num = m[1];
				unit = m[2];
			} 
			if (num[0] == '.') {
				num = '0'+num;
			}
			num = parseFloat(num);
			if (isNaN(num)) {
				return '';
			}
			var base = parseInt($(document.body).css('font-size')) || 16;
			switch (unit) {
				case 'em': return parseInt(num*base);
				case 'pt': return parseInt(num*base/12);
				case '%' : return parseInt(num*base/100);
			}
			return num;
		}
		
		this.change = function() {
			opts.change && opts.change(this.val());
		}
		
		this.val = function(v) {
			if (!v && v !== '') {
				var w = parseInt(width.val());
				return {width : !isNaN(w) ? w+'px' : '', style : style.val(), color : color.val()};
			} else {
				var m, w, s, c, b = '';
				if (v.nodeName || v.css) {
					if (!v.css) {
						v = $(v);					
					}
					var b = v.css('border')
					if ((b = v.css('border'))) {
						w = s = c = b;
					} else {
						w = v.css('border-width');
						s = v.css('border-style');
						c = v.css('border-color');
					}
				} else {
					w = v.width||'';
					s = v.style||'';
					c = v.color||'';
				}
				width.val(toPixels(w));
				var m = s.match(/(solid|dashed|dotted|double|groove|ridge|inset|outset)/i);
				style.val(m ? m[1] : '');
				color.val(rgb2hex(c));
				return this;
			}
		}
		
		this.val(opts.value);
		return this;
	}
	
	$.fn.elBorderSelect.defaults = {
		name : 'el-borderselect',
		'class' : 'el-borderselect',
		value : {},
		change : null
	}
	
})(jQuery);

(function($) {
	
	$.fn.elPaddingInput = function(o) {
		var self = this;
		var opts = $.extend({}, $.fn.elPaddingInput.defaults, {name : this.attr('name')}, o);
		this.regexps = {
			main : new RegExp(opts.type == 'padding' ? 'padding\s*:\s*([^;"]+)' : 'margin\s*:\s*([^;"]+)', 'im'),
			left : new RegExp(opts.type == 'padding' ? 'padding-left\s*:\s*([^;"]+)' : 'margin-left\s*:\s*([^;"]+)', 'im'),
			top : new RegExp(opts.type == 'padding' ? 'padding-top\s*:\s*([^;"]+)' : 'margin-top\s*:\s*([^;"]+)', 'im'),
			right : new RegExp(opts.type == 'padding' ? 'padding-right\s*:\s*([^;"]+)' : 'margin-right\s*:\s*([^;"]+)', 'im'),
			bottom : new RegExp(opts.type == 'padding' ? 'padding-bottom\s*:\s*([^;"]+)' : 'margin-bottom\s*:\s*([^;"]+)', 'im')
		};
			
		$.each(['left', 'top', 'right', 'bottom'], function() {
			self[this] = $('<input type="text" />')
				.attr('size', 3)
				.css('text-align', 'right')
				.bind('change', function() { $(this).val(parseNum($(this).val())); change(); })
				.attr('name', opts.name+'['+this+']');
		});
		$.each(['uleft', 'utop', 'uright', 'ubottom'], function() {
			self[this] = $('<select />')
				.append('<option value="px">px</option>')
				.append('<option value="em">em</option>')
				.append('<option value="pt">pt</option>')
				.bind('change', function() { change(); })
				.attr('name', opts.name+'['+this+']');
			if (opts.percents) {
				self[this].append('<option value="%">%</option>');
			}
		});
		
		this.empty().addClass(opts['class'])
			.append(this.left).append(this.uleft).append(' x ')
			.append(this.top).append(this.utop).append(' x ')
			.append(this.right).append(this.uright).append(' x ')
			.append(this.bottom).append(this.ubottom);
			
		this.val = function(v) {
			if (!v && v!=='') {
				var l = parseNum(this.left.val());
				var t = parseNum(this.top.val());
				var r = parseNum(this.right.val());
				var b = parseNum(this.bottom.val());
				var ret = {
					left : l=='auto' || l==0 ? l : (l!=='' ? l+this.uleft.val() : ''), 
					top : t=='auto' || t==0 ? t : (t!=='' ? t+this.utop.val() : ''),
					right : r=='auto' || r==0 ? r : (r!=='' ? r+this.uright.val() : ''),
					bottom : b=='auto' || b==0 ? b : (b!=='' ? b+this.ubottom.val() : ''),
					css : ''
				};
				if (ret.left!=='' && ret.right!=='' && ret.top!=='' && ret.bottom!=='') {
					if (ret.left == ret.right && ret.top == ret.bottom) {
						ret.css = ret.top+' '+ret.left;
					} else{
						ret.css = ret.top+' '+ret.right+' '+ret.bottom+' '+ret.left;
					}
				}
				
				return ret;
			} else {
				
				if (v.nodeName || v.css) {
					if (!v.css) {
						v = $(v);
					}
					var val = {left : '', top : '', right: '', bottom : ''};
					var style = (v.attr('style')||'').toLowerCase();
					if (style) {
						style = $.trim(style);
						var m = style.match(this.regexps.main);
						if (m) {
							var tmp = $.trim(m[1]).replace(/\s+/g, ' ').split(' ', 4);
							val.top = tmp[0];
							val.right = tmp[1] && tmp[1]!=='' ? tmp[1] : val.top;
							val.bottom = tmp[2] && tmp[2]!=='' ? tmp[2] : val.top;
							val.left = tmp[3] && tmp[3]!=='' ? tmp[3] : val.right;
						} else {
							$.each(['left', 'top', 'right', 'bottom'], function() {
								var name = this.toString();
								m = style.match(self.regexps[name]);
								if (m) {
									val[name] = m[1];
								}
							});
						}
					}
					var v = val;
				} 
				$.each(['left', 'top', 'right', 'bottom'], function() {
					var name = this.toString();
					if (typeof(v[name]) != 'undefined' && v[name] !== null) {
						v[name] = v[name].toString();
						var _v = parseNum(v[name]);
						self[name].val(_v);
						var m = v[name].match(/(px|em|pt|%)/i);
						self['u'+name].val(m ? m[1] : 'px');
					}
				});
				return this;
			}
		}
			
		function parseNum(num) {
			num = $.trim(num.toString());
			if (num[0] == '.') { 
				num = '0'+num;
			}
			n = parseFloat(num);
			return !isNaN(n) ? n : (num == 'auto' ? num : '');
		}
			
		function change() {
			opts.change && opts.change(self);
		}
		
		this.val(opts.value);
		
		return this;
	}
	
	$.fn.elPaddingInput.defaults = {
		name : 'el-paddinginput',
		'class' : 'el-paddinginput',
		type : 'padding',
		value : {},
		percents : true,
		change : null
	}
	
})(jQuery);

(function($) {
	
	$.fn.elSelect = function(o) {
		var $self = this;
		var self = this.eq(0);
		var opts = $.extend({}, $.fn.elSelect.defaults, o);
		var hidden = $('<input type="hidden" />').attr('name', opts.name);
		var label = $('<label />').attr({unselectable : 'on'}).addClass('rounded-left-3');
		var list = null;
		var ieWidth = null;
		if (self.get(0).nodeName == 'SELECT') {
			opts.src = {};
			self.children('option').each(function() {
				opts.src[$(this).val()] = $(this).text();
			});
			opts.value = self.val();
			opts.name = self.attr('name');
			self.replaceWith((self = $('<div />')));
		}
		
		if (!opts.value || !opts.src[opts.val]) {
			opts.value = null;
			var i = 0;
			for (var v in opts.src) {
				if (i++ == 0) {
					opts.value = v;
				}
			}
		}
		this.val = function(v) {
			if (!v && v!=='') {
				return hidden.val();
			} else {
				if (opts.src[v]) {
					hidden.val(v);
					updateLabel(v);
					if (list) {
						list.children().each(function() {
							if ($(this).attr('name') == v) {
								$(this).addClass('active');
							} else {
								$(this).removeClass('active');
							}
						});
					}
				}
				return this;
			}
		}
	
		// update label content
		function updateLabel(v) {
			var tpl = opts.labelTpl || opts.tpls[v] || opts.tpl;
			label.html(tpl.replace(/%val/g, v).replace(/%label/, opts.src[v])).children().attr({unselectable : 'on'});
		}
		
		// init "select"
		self.empty()
			.addClass(opts['class']+' rounded-3')
			.attr({unselectable : 'on'})
			.append(hidden)
			.append(label)
			.hover(
				function() { $(this).addClass('hover') },
				function() { $(this).removeClass('hover') }
			)
			.click(function(e) {
				!list && init();
				list.slideToggle();
				// stupid ie inherit width from parent
				if ($.browser.msie && !ieWidth) { 
					list.children().each(function() {
						ieWidth = Math.max(ieWidth, $(this).width());
					});
					if (ieWidth > list.width()) {
						list.width(ieWidth+40);
					}
				}
			});
			
		this.val(opts.value);
	
		// create drop-down list
		function init() {
			// not ul because of ie is stupid with mouseleave in it :(
			list = $('<div />')
				.addClass(opts.listClass+' rounded-3')
				.hide()
				.appendTo(self.mouseleave(function(e) { list.slideUp(); }));
			for (var v in opts.src) {
				var tpl = opts.tpls[v] || opts.tpl; 
				$('<div />')
					.attr('name', v)
					.append( $(tpl.replace(/%val/g, v).replace(/%label/g, opts.src[v])).attr({unselectable : 'on'}) )
					.appendTo(list)
					.hover(
						function() { $(this).addClass('hover') },
						function() { $(this).removeClass('hover') }
					)
					.click(function(e) {
						e.stopPropagation();
						e.preventDefault();
						
						var v = $(this).attr('name');
						$self.val(v);
						opts.select(v);
						list.slideUp();
					});
			};
			
			var w = self.outerWidth();
			if (list.width() < w) {
				list.width(w);
			}
			
			var h = list.height();
			if (opts.maxHeight>0 && h>opts.maxHeight) {
				list.height(opts.maxHeight);
			}
			
			$self.val(hidden.val());
		}
		
		return this;
	}
	
	$.fn.elSelect.defaults = {
		name : 'el-select',
		'class' : 'el-select',
		listClass : 'list',
		labelTpl : null,
		tpl : '<%val>%label</%val>',
		tpls : {},
		value : null,
		src : {},
		select : function(v) { window.console && window.console.log && window.console.log('selected: '+v); },
		maxHeight : 310
	}
	
})(jQuery);

(function($) {
elRTE = function(target, opts) {
	if (!target || !target.nodeName) {
		return alert('elRTE: argument "target" is not DOM Element');
	}
	var self = this, html;
	this.version = '1.0 RC3';
	this.build = '20100311';
	this.options = $.extend(true, {}, this.options, opts);
	this.browser = $.browser;
	this.target = $(target);
	
	
	this.toolbar = $('<div class="toolbar"/>');
	this.iframe = document.createElement('iframe');
	// this.source = $('<textarea />').hide();
	this.workzone = $('<div class="workzone"/>').append(this.iframe).append(this.source);
	this.statusbar = $('<div class="statusbar"/>');
	this.tabsbar = $('<div class="tabsbar"/>');
	this.editor = $('<div class="'+this.options.cssClass+'" />').append(this.toolbar).append(this.workzone).append(this.statusbar).append(this.tabsbar);
	
	this.doc = null;
	this.$doc = null;
	this.window = null;
	
	this.utils = new this.utils(this);
	this.dom = new this.dom(this);
	this._i18n = new eli18n({textdomain : 'rte', messages : { rte : this.i18Messages[this.options.lang] || {}} });	
	
	
	this.editor.insertAfter(target);
	
	if (target.nodeName == 'TEXTAREA') {
		this.source = this.target.remove()
		this.source.insertAfter(this.iframe).hide()
	} else {
		this.source = $('<textarea />').insertAfter(this.iframe).hide()
		this.source.val(this.target.hide().html()).attr('name', this.target.attr('id')||this.target.attr('name'));
		this.target.html('')
	}
	
	this.source.val(this.filter(this.source.val(), true));
	
	
	if (this.options.allowSource) {
		this.tabsbar.append('<div class="tab editor rounded-bottom-7 active">'+self.i18n('Editor')+'</div><div class="tab source rounded-bottom-7">'+self.i18n('Source')+'</div><div class="clearfix" style="clear:both"/>')
			.children('.tab').click(function(e) {
				if (!$(this).hasClass('active')) {
					self.tabsbar.children('.tab').toggleClass('active');
					self.workzone.children().toggle();
					if ($(this).hasClass('editor')) {
						self.val(self.source.val()||'&nbsp;');
						self.window.focus();
						self.ui.update(true);
						// self.selection.select(self.doc.body.firstChild).collapse(true);
					} else {
						self.updateSource();
						self.source.focus();
						if ($.browser.msie) {
							// @todo
						} else {
							self.source[0].setSelectionRange(0, 0);
						}
						self.ui.disable();
						self.statusbar.empty();
						
					}
				}
				
			});
	}
	
	this.window = this.iframe.contentWindow;
	this.doc = this.iframe.contentWindow.document;
	this.$doc = $(this.doc);
	
	
	html = '<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
	$.each(self.options.cssfiles, function() {
		html += '<link rel="stylesheet" type="text/css" href="'+this+'" />';
	});
	this.doc.open();
	this.doc.write(self.options.doctype+html+'</head><body>'+(this.source.val()||'&nbsp;')+'</body></html>');
	// this.doc.write(self.options.doctype+html+'</head><body>&nbsp;</body></html>');
	this.doc.close();
	
	
	if ($.browser.msie) {
		this.doc.body.contentEditable = true;
	} else {
		try { this.doc.designMode = "on"; } 
		catch(e) { }
		this.doc.execCommand('styleWithCSS', false, this.options.styleWithCSS);
	}
	
	if (this.options.height>0) {
		this.workzone.height(this.options.height);
		$(this.iframe).height(this.options.height);
	}
	
	this.window.focus();
	
	this.history = new this.history(this)
	
	
	this.selection = new this.selection(this);
	
	this.ui = new this.ui(this);
	
	// $(window).load(function() {
		var n = document.createElement('span');
		$(n).addClass('elrte-swf-placeholder').appendTo(self.statusbar);
		if (typeof n.currentStyle != "undefined") {
			url = n.currentStyle['backgroundImage'];
		} else {
			url = document.defaultView.getComputedStyle(n, null).getPropertyValue('background-image');
		}
		self.swfPlaceholder = url ? url.replace(/^url\("?([^"]+)"?\)$/, "$1") : '';
		$(self.doc).find('img.elrte-swf-placeholder').attr('src', self.swfPlaceholder);
	// })
	
	// this.history.add()
	
	
	
	this.target.parents('form').bind('submit', function() {
		self.source.is(':hidden') && self.updateSource();
		self.toolbar.find(':hidden').remove();
		
	});
	
	
	this.$doc.bind('mouseup', function() {
		self.ui.update();
	}).bind('keyup', function(e) {
		if ((e.keyCode >= 8 && e.keyCode <= 13) || (e.keyCode>=32 && e.keyCode<= 40) || e.keyCode == 46 || (e.keyCode >=96 && e.keyCode <= 111)) {
			// self.log('keyup '+e.keyCode)
			self.ui.update();
		}
	}).bind('keydown', function(e) {
		if ((e.metaKey || e.ctrlKey) && e.keyCode == 65) {
			self.ui.update();
		} else if (e.keyCode == 13) {
			var n = self.selection.getNode();
			// self.log(n)
			if (self.dom.selfOrParent(n, /^PRE$/)) {
				self.selection.insertNode(self.doc.createTextNode("\r\n"));
				return false;
			} else if ($.browser.safari && e.shiftKey) {
				self.selection.insertNode(self.doc.createElement('br'))
				return false;
			}
		}
	})
	
	this.typing = false;
	this.lastKey = null;
	
	this.$doc.bind('keydown', function(e) {
		//@todo shortcuts
		
		if ((e.keyCode>=48 && e.keyCode <=57) || e.keyCode==61 || e.keyCode == 109 || (e.keyCode>=65 && e.keyCode<=90) || e.keyCode==188 ||e.keyCode==190 || e.keyCode==191 || (e.keyCode>=219 && e.keyCode<=222)) {
			if (!self.typing) {
				self.history.add(true);
			}
			self.typing = true;
			self.lastKey = null;
		} else if (e.keyCode == 8 || e.keyCode == 46 || e.keyCode == 32 || e.keyCode == 13) {
			if (e.keyCode != self.lastKey) {
				self.history.add(true)
			}
			self.lastKey = e.keyCode
			self.typing = false
		}
	}).bind('mouseup', function() {
		self.typing = false;
		self.lastKey = null;
	})
	
}

elRTE.prototype.i18n = function(msg) {
	return this._i18n.translate(msg);
}

elRTE.prototype.open = function() {
	this.editor.show();
}

elRTE.prototype.close = function() {
	this.editor.hide();
}
elRTE.prototype.updateSource = function() {
	this.source.val(this.filter($(this.doc.body).html()));
}

elRTE.prototype.val = function(v) {
	if (typeof(v) == 'string') {
		$(this.doc.body).html(this.filter(v, true));
		// this.source.val(v);
	} else {
		this.updateSource();
		return this.source.val();
	}
}

elRTE.prototype.save = function() {
	this.editor.parents('form').submit();
}
elRTE.prototype.filter = function(v, input) {
	var html = '';
	var self = this;
	var node = $('<span />');
	if (!v.nodeType) {
		html = $.trim(v);
	} else {
		html = $.trim(v.nodeType == 1 ? $(v).html() : v.nodeValue);
	}
	var sw = this.options.stripWhiteSpace;
	$.each(this.filters.html, function() {
		html = this(html, sw);
	});
	
	node.html(html);
	if (input) {
		node.find('a').each(function() {
			if ($(this).attr('name')) {
				$(this).addClass('el-rte-anchor');
			}
		});
		
		node.find('object[classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"]').each(function() {
			
			var t = $(this),
				url = t.children('param[name="'+($.browser.msie ? 'Movie' : 'movie')+'"]').attr('value'),
				st = t.attr('style')||'',
				w = parseInt(t.css('width')||0) || parseInt(t.attr('width')||0) || '',
				h = parseInt(t.css('height')||0) || parseInt(t.attr('height')||0) || '',
				f = t.css('float') || t.attr('align'),
				a = t.css('vertical-align'),
				wrap = $('<span />'),
				img = $('<img src="'+self.swfPlaceholder+'" class="elrte-swf-placeholder" rel="'+url+'" />').appendTo(wrap);
				 
			
			img.attr('style', st).css({
				width : w?(w+'px'):'auto',
				height : h?h+'px':'auto',
				'float' : f,
				'vertical-align' : a
			});
			$(this).replaceWith(wrap.html());
		});
		
	} else {
		node.find('a.el-rte-anchor').each(function() {
			if ($.trim($(this).attr('class')) == 'el-rte-anchor') {
				$(this).removeAttr('class');
			} else {
				$(this).removeClass('el-rte-anchor');
			}
		});
		node.find('img.elrte-swf-placeholder').each(function() {
			var t = $(this),
				obj = '<object style="'+(t.attr('style')||'')+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="movie" value="'+$(this).attr('rel')+'" /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src="'+$(this).attr('rel')+'" type="application/x-shockwave-flash"></embed></object>';
			t.replaceWith(obj);
		});
	}
	$.each(this.filters.dom, function() {
		node = this(node);
	});
	
	html = node.html();
	if ($.browser.msie || $.browser.opera) {
		
		html = html.replace(/\<([a-z1-6]+)([^\>]*)\>/ig, function(s, tag, arg) { 
			arg = arg.replace(/([a-z\-]+)\:/ig, function(s, a) { return a.toLowerCase()+':' });
			arg = arg.replace(/([a-z\-]+)="/ig, function(s, a) { return a.toLowerCase()+'="' });
			return '<'+tag.toLowerCase()+arg+'>';
		});
		html = html.replace(/\<\/([a-z1-6]+)\>/ig, function(s, tag) { return '</'+tag.toLowerCase()+'>';});
	}
	
	return html;
}
elRTE.prototype.filters = {
	dom : [
		function(n) { 
			n.find('[align]').not('tbody,tr').each(function() {
				var a = ($(this).attr('align')||'').toLowerCase();
				if ((this.nodeName != 'TD' && this.nodeName != 'TH') || a != 'left') {
					$(this).css('text-align', a).removeAttr('align');
				}
			})
			.end().end().find('[border],[bordercolor]').each(function() {
				var w = parseInt($(this).attr('border')) || 1,
					c = $(this).attr('bordercolor') || '#000';
				$(this).css('border', w+'px solid '+c).removeAttr('border').removeAttr('bordercolor');
			})
			.end().find('[bgcolor]').each(function() {
				$(this).css('background-color', $(this).attr('bgcolor')).removeAttr('bgcolor');
			}).end().find('[background]').each(function() {
				$(this).css('background', 'url('+$(this).attr('background')+')' ).removeAttr('background');
			})
			.end().find('img[hspace],[vspace]').each(function() {
				var v = parseInt($(this).attr('vspace'))||0,
					h = parseInt($(this).attr('hspace'))||0;
				if (v>0 || h>0) {
					$(this).css('margin', (v>0?v:0)+'px '+(h>0?h:0)+'px');
				}
				$(this).removeAttr('hspace').removeAttr('vspace');
			})
			.end().find('[clear]').each(function() {
				var c = ($(this).attr('clear')||"").toLowerCase();
				$(this).css('clear', c == 'all' ? 'both' : c);
			});
			
			if ($.browser.safari) {
				n.find('.Apple-style-span').removeClass('Apple-style-span');
			}
			return n;
		}
	],
	html : [
		function(html, stripWhiteSpace) { 
			var fsize = {
				1 : 'xx-small',
				2 : 'x-small',
				3 : 'small',
				4 : 'medium',
				5 : 'large',
				6 : 'x-large',
				7 : 'xx-large'
			}
			
			html = html.replace(/<font([^>]*)/i, function(str, attr) {
				var css = '', m = attr.match(/size=('|")(\d)/i);
				if (m && m[2] && fsize[m[2]]) {
					css = 'font-size: '+fsize[m[2]]+'; ';
				}
				m = attr.match(/face=('|")([a-z0-9\s,]+)/i);
				if (m && m[2]) {
					css += 'font-family: '+m[2];
				}
				return '<span'+(css ? ' style="'+css+'"' : '');
			})
			.replace(/<\/font/i, '</span')
			.replace(/<b(\s[^>]*)?>/i, '<strong$1>')
			.replace(/<\/b\s*>/i, '</strong>')
			.replace(/<i(\s[^>]*)?>/i, '<em$1>')
			.replace(/<\/i\s*>/i, '</em>')
			.replace(/((class|style)="")/i, '');
			
			
			
			if (stripWhiteSpace) {
				html = html.replace(/\r?\n(\s)*/mg, "\n");
			}
			
			return html;
		}
	]
}
elRTE.prototype.log = function(msg) {
	if (window.console && window.console.log) {
		window.console.log(msg);
	}
}
elRTE.prototype.i18Messages = {};
$.fn.elrte = function(o) { 
	var cmd = typeof(o) == 'string' ? o : '', ret;
	
	this.each(function() {
		if (!this.elrte) {
			this.elrte = new elRTE(this, typeof(o) == 'object' ? o : {});
		}
		switch (cmd) {
			case 'open':
			case 'show':
				this.elrte.open();
				break;
			case 'close':
			case 'hide':
				this.elrte.close();
				break;
			case 'updateSource':
				this.elrte.updateSource();
				break;
		}
	});
	
	if (cmd == 'val') {
		if (!this.length) {
			return '';
		} else if (this.length == 1) {
			return this[0].elrte.val();
		} else {
			ret = {}
			this.each(function() {
				ret[this.elrte.source.attr('name')] = this.elrte.val();
			});
			return ret;
		}
	}
	return this;
}
})(jQuery);

(function($) {
elRTE.prototype.dom = function(rte) {
	this.rte = rte;
	var self = this;
	this.regExp = {
		textNodes : /^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TD|TH|TT|VAR)$/,
		textContainsNodes : /^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DL|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|OL|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|TT|UL|VAR)$/,
		block : /^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|UL)$/,
		selectionBlock : /^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TD|TH|TR|UL)$/,		
		header : /^H[1-6]$/,
		formElement : /^(FORM|INPUT|HIDDEN|TEXTAREA|SELECT|BUTTON)$/
	};
	
	
	
		
	
	
	this.root = function() {
		return this.rte.body;
	}
	this.create = function(t) {
		return this.rte.doc.createElement(t);
	}
	
	this.indexOf = function(n) {
		var ndx = 0;
		n = $(n);
		while ((n = n.prev()) && n.length) {
			ndx++;
		}
		return ndx;
	}
	
	
	this.attr = function(n, attr) {
		var v = '';
		if (n.nodeType == 1) {
			v = $(n).attr(attr);
			if (v && attr != 'src' && attr != 'href') {
				v = v.toString().toLowerCase();
			}
		} 
		return v||'';
	}
	
	
	this.findCommonAncestor = function(n1, n2) {
		if (!n1 || !n2) {
			return this.rte.log('dom.findCommonAncestor invalid arguments');
		}
		if (n1 == n2) {
			return n1;
		} else if (n1.nodeName == 'BODY' || n2.nodeName == 'BODY') {
			return this.rte.doc.body;
		}
		var p1 = $(n1).parents(), p2 = $(n2).parents(), l = p2.length-1, c = p2[l];
		for (var i = p1.length - 1; i >= 0; i--, l--){
			if (p1[i] == p2[l]) {
				c = p1[i];
			} else {
				break;
			}
		};
		return c;
	}
	
	this.isEmpty = function(n) {
		if (n.nodeType == 1) {
			return this.regExp.textNodes.test(n.nodeName) ? $.trim($(n).text()).length == 0 : false;
		} else if (n.nodeType == 3) {
			return /^(TABLE|THEAD|TFOOT|TBODY|TR|UL|OL|DL)$/.test(n.parentNode.nodeName)
				|| n.nodeValue == ''
				|| ($.trim(n.nodeValue).length== 0 && !(n.nextSibling && n.previousSibling && n.nextSibling.nodeType==1 && n.previousSibling.nodeType==1 && !this.regExp.block.test(n.nextSibling.nodeName) && !this.regExp.block.test(n.previousSibling.nodeName) ));
		}
		return true;
	}
	
	
	
	
	this.next = function(n) {
		while (n.nextSibling && (n = n.nextSibling)) {
			if (n.nodeType == 1 || (n.nodeType == 3 && !this.isEmpty(n))) {
				return n;
			}
		}
		return null;
	}
	
	this.prev = function(n) {
		while (n.previousSibling && (n = n.previousSibling)) {
			if (n.nodeType == 1 || (n.nodeType ==3 && !this.isEmpty(n))) {
				return n;
			}
		}
		return null;
	}
	this.isPrev = function(n, prev) {
		while ((n = this.prev(n))) {
			if (n == prev) {
				return true;
			}
		}
		return false;
	}
	
	this.nextAll = function(n) {
		var ret = [];
		while ((n = this.next(n))) {
			ret.push(n);
		}
		return ret;
	}
	
	
	this.prevAll = function(n) {
		var ret = [];
		while ((n = this.prev(n))) {
			ret.push(n);
		}
		return ret;
	}
	
	
	this.toLineEnd = function(n) {
		var ret = [];
		while ((n = this.next(n)) && n.nodeName != 'BR' && n.nodeName != 'HR' && this.isInline(n)) {
			ret.push(n);
		}
		return ret;
	}
	
	
	this.toLineStart = function(n) {
		var ret = [];
		while ((n = this.prev(n)) && n.nodeName != 'BR' && n.nodeName != 'HR' && this.isInline(n) ) {
			ret.unshift(n);
		}
		return ret;
	}
	
	
	this.isFirstNotEmpty = function(n) {
		while ((n = this.prev(n))) {
			if (n.nodeType == 1 || (n.nodeType == 3 && $.trim(n.nodeValue)!='' ) ) {
				return false;
			}
		}
		return true;
	}
	
	
	this.isLastNotEmpty = function(n) {
		while ((n = this.next(n))) {
			if (!this.isEmpty(n)) {
				return false;
			}
		}
		return true;
	}
	
	
	this.isOnlyNotEmpty = function(n) {
		return this.isFirstNotEmpty(n) && this.isLastNotEmpty(n);
	}
	
	
	this.findLastNotEmpty = function(n) {
		this.rte.log('findLastNotEmpty Who is here 0_o');
		if (n.nodeType == 1 && (l = n.lastChild)) {
			if (!this.isEmpty(l)) {
				return l;
			}
			while (l.previousSibling && (l = l.previousSibling)) {
				if (!this.isEmpty(l)) {
					return l;
				}
			}
		}
		return false;
	}
	
	
	this.isInline = function(n) {
		if (n.nodeType == 3) {
			return true;
		} else if (n.nodeType == 1) {
			n = $(n);
			var d = n.css('display');
			var f = n.css('float');
			return d == 'inline' || d == 'inline-block' || f == 'left' || f == 'right';
		}
		return true;
	}
	
	
	
	
	
	
	
	this.filter = function(n, filter) {
		var t = typeof(filter), ret=[], i;
		if (t=='object' || t == 'string') {
			filter = this.regExp[filter] || filter;
			if (!n.push) {
				return n.nodeName && filter.test(n.nodeName) ? n : null;
			}
			for (i=0; i < n.length; i++) {
				if (n[i].nodeName && n[i].nodeName && filter.test(n[i].nodeName)) {
					ret.push(n[i]);
				}
			};
			return ret;
		}
		return null;
	}
	
	
	
	this.parents = function(n, filter) {
		var t = typeof(filter), ret = [];
		if (t=='object' || t == 'string') {
			filter = filter == '*' ? /.?/ : (this.regExp[filter] || filter);
			while (n && (n = n.parentNode) && n.nodeName != 'BODY' && n.nodeName != 'HTML') {
				if (filter.test(n.nodeName)) {
					ret.push(n);
				}
			}
		}
		return ret;
	}
	
	
	this.parent = function(n, f) { 
		return this.parents(n, f)[0] || null; 
	}
	
	
	this.selfOrParent = function(n, sf, pf) {
		return this.filter(n, sf) || this.parent(n, pf||sf);
	}
	
	
	this.selfOrParentLink = function(n) {
		n = this.selfOrParent(n, /^A$/);
		return n && n.href ? n : null;
	}
	
	this.selfOrParentAnchor = function(n) {
		n = this.selfOrParent(n, /^A$/);
		return n && !n.href && n.name ? n : null;
	}
	
	this.childLinks = function(n) {
		var res = [];
		$('a[href]', n).each(function() { res.push(this); });
		return res;
	}
	
	
	
	
	
	
	
	this.wrap = function(n, w) {
		n = n.length ? n : [n];
		w = w.nodeName ? w : this.create(w);
		w = n[0].parentNode.insertBefore(w, n[0]);
		$(n).each(function() {
			if (this!=w) {
				w.appendChild(this);
			}
		})
		return w;
	}
	
	
	this.wrapContents = function(n, w) {
		w = w.nodeName ? w : this.create(w);
		for (var i=0; i < n.childNodes.length; i++) {
			w.appendChild(n.childNodes[i]);
		};
		n.appendChild(w);
		return w;
	}
	
	this.cleanNode = function(n) {
		if (n.nodeType != 1) {
			return;
		}
		if (/^(P|LI)$/.test(n.nodeName) && (l = this.findLastNotEmpty(n)) && l.nodeName == 'BR') {
			$(l).remove();
		}
		$n = $(n);
		$n.children().each(function() {
			this.cleanNode(this);
		});
		if (n.nodeName != 'BODY' && !/^(TABLE|TR|TD)$/.test(n) && this.isEmpty(n)) {
			return $n.remove();
		}
		if ($n.attr('style') === '') {
			$n.removeAttr('style');
		}
		if (this.rte.browser.safari && $n.hasClass('Apple-span')) {
			$n.removeClass('Apple-span');
		}
		if (n.nodeName == 'SPAN' && !$n.attr('style') && !$n.attr('class') && !$n.attr('id')) {
			$n.replaceWith($n.html());
		}
	}
	
	this.cleanChildNodes = function(n) {
		var cmd = this.cleanNode;
		$(n).children().each(function() { cmd(this); });
	}
	
	
	
	
	
	this.tableMatrix = function(n) {
		var mx = [];
		if (n && n.nodeName == 'TABLE') {
			var max = 0;
			function _pos(r) {
				for (var i=0; i<=max; i++) {
					if (!mx[r][i]) {
						return i;
					}
				};
			}
			
			$(n).find('tr').each(function(r) {
				if (!$.isArray(mx[r])) {
					mx[r] = [];
				}
				
				$(this).children('td,th').each(function() {
					var w = parseInt($(this).attr('colspan')||1);
					var h = parseInt($(this).attr('rowspan')||1);
					var i = _pos(r);
					for (var y=0; y<h; y++) {
						for (var x=0; x<w; x++) {
							var _y = r+y;
							if (!$.isArray(mx[_y])) {
								mx[_y] = [];
							}
							var d = x==0 && y==0 ? this : (y==0 ? x : "-");
							mx[_y][i+x] = d;
						}
					};
					max= Math.max(max, mx[r].length);
				});
			});
		}
		return mx;
	}
	
	this.indexesOfCell = function(n, tbm) {
		for (var rnum=0; rnum < tbm.length; rnum++) {
			for (var cnum=0; cnum < tbm[rnum].length; cnum++) {
				if (tbm[rnum][cnum] == n) {
					return [rnum, cnum];
				}
				
			};
		};
	}
	
	this.fixTable = function(n) {
		if (n && n.nodeName == 'TABLE') {
			var tb = $(n);
			//tb.find('tr:empty').remove();
			var mx = this.tableMatrix(n);
			var x = 0;
			$.each(mx, function() {
				x = Math.max(x, this.length);
			});
			if (x==0) {
				return tb.remove();
			}
			// for (var i=0; i<mx.length; i++) {
			// 	this.rte.log(mx[i]);
			// }
			
			for (var r=0; r<mx.length; r++) {
				var l = mx[r].length;
				//this.rte.log(r+' : '+l)
				
				if (l==0) {
					//this.rte.log('remove: '+tb.find('tr').eq(r))
					tb.find('tr').eq(r).remove();
//					tb.find('tr').eq(r).append('<td>remove</td>')
				} else if (l<x) {
					var cnt = x-l;
					var row = tb.find('tr').eq(r);
					for (i=0; i<cnt; i++) {
						row.append('<td>&nbsp;</td>');
					}
				}
			}
			
		}
	}
	
	this.tableColumn = function(n, ext, fix) {
		n = this.selfOrParent(n, /^TD|TH$/);
		var tb = this.selfOrParent(n, /^TABLE$/);
		ret = [];
		info = {offset : [], delta : []};
		if (n && tb) {
			fix && this.fixTable(tb);
			var mx = this.tableMatrix(tb);
			var _s = false;
			var x;
			for (var r=0; r<mx.length; r++) {
				for (var _x=0; _x<mx[r].length; _x++) {
					if (mx[r][_x] == n) {
						x = _x;
						_s = true;
						break;
					}
				}
				if (_s) {
					break;
				}
			}
			
			// this.rte.log('matrix');
			// for (var i=0; i<mx.length; i++) {
			// 	this.rte.log(mx[i]);
			// }
			if (x>=0) {
				for(var r=0; r<mx.length; r++) {
					var tmp = mx[r][x]||null;
					if (tmp) {
						if (tmp.nodeName) {
							ret.push(tmp);
							if (ext) {
								info.delta.push(0);
								info.offset.push(x);
							}
						} else {
							var d = parseInt(tmp);
							if (!isNaN(d) && mx[r][x-d] && mx[r][x-d].nodeName) {
								ret.push(mx[r][x-d]);
								if (ext) {
									info.delta.push(d);
									info.offset.push(x);
								}
							}
						}
					}
				}
			}
		}
		return !ext ? ret : {column : ret, info : info};
	}
}
})(jQuery);(function($) {
elRTE.prototype.history = function(rte) {
	this.rte = rte;
	this._prev = []
	this._next = [];
	
	this.add = function() {
		if (this.rte.options.historyLength>0 && this._prev.length>= this.rte.options.historyLength) {
			this._prev.slice(this.rte.options.historyLength);
		}
		this._prev.push($(this.rte.doc.body).html());
		this._next = [];
	}
	
	this.back = function() {
		
		if (this._prev.length) {
			this._next.push($(this.rte.doc.body).html());
			$(this.rte.doc.body).html(this._prev.pop());
		}
	}
	this.fwd = function() {
		if (this._next.length) {
			this._prev.push($(this.rte.doc.body).html());
			$(this.rte.doc.body).html(this._next.pop());
			
		}
	}
	
	this.canBack = function() {
		return this._prev.length;
	}
	
	this.canFwd = function() {
		return this._next.length;
	}
}
})(jQuery);
(function($) {
elRTE.prototype.options = {
	doctype : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
	cssClass : 'el-rte',
	cssfiles : [],
	height : null,
	lang : 'en',
	toolbar : 'normal',
	absoluteURLs : true,
	allowSource : true,
	stripWhiteSpace : false,
	styleWithCSS : false,
	fmAllow : true,
	fmOpen : null,
	buttons : {
		'save' : 'Save',
		'copy' : 'Copy',
		'cut' : 'Cut',
		'paste' : 'Paste',
		'pastetext' : 'Paste only text',
		'pasteformattext' : 'Paste formatted text',
		'removeformat' : 'Clean format', 
		'undo' : 'Undo last action',
		'redo' : 'Redo previous action',
		'bold' : 'Bold',
		'italic' : 'Italic',
		'underline' : 'Underline',
		'strikethrough' : 'Strikethrough',
		'superscript' : 'Superscript',
		'subscript' : 'Subscript',
		'justifyleft' : 'Align left',
		'justifyright' : 'Ailgn right',
		'justifycenter' : 'Align center',
		'justifyfull' : 'Align full',
		'indent' : 'Indent',
		'outdent' : 'Outdent',
		'forecolor' : 'Font color',
		'hilitecolor' : 'Background color',
		'formatblock' : 'Format',
		'fontsize' : 'Font size',
		'fontname' : 'Font',
		'insertorderedlist' : 'Ordered list',
		'insertunorderedlist' : 'Unordered list',
		'horizontalrule' : 'Horizontal rule',
		'blockquote' : 'Blockquote',
		'div' : 'Block element (DIV)',
		'link' : 'Link',
		'unlink' : 'Delete link',
		'anchor' : 'Bookmark',
		'image' : 'Image',
		'flash' : 'Flash',
		'table' : 'Table',
		'tablerm' : 'Delete table',
		'tableprops' : 'Table properties',
		'tbcellprops' : 'Table cell properties',
		'tbrowbefore' : 'Insert row before',
		'tbrowafter' : 'Insert row after',
		'tbrowrm' : 'Delete row',
		'tbcolbefore' : 'Insert column before',
		'tbcolafter' : 'Insert column after',
		'tbcolrm' : 'Delete column',
		'tbcellsmerge' : 'Merge table cells',
		'tbcellsplit' : 'Split table cell',
		'docstructure' : 'Toggle display document structure',
		'elfinder' : 'Open file manager',
		'fullscreen' : 'Toggle full screen mode',
		'nbsp' : 'Non breakable space',
		'stopfloat' : 'Stop element floating'
	},
	panels : {
		save : ['save'],
		copypaste : ['copy', 'cut', 'paste', 'pastetext', 'pasteformattext', 'removeformat', 'docstructure'],
		undoredo : ['undo', 'redo'],
		style : ['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript'],
		colors : ['forecolor', 'hilitecolor'],
		alignment : ['justifyleft', 'justifycenter', 'justifyright', 'justifyfull'],
		indent : ['outdent', 'indent'],
		format : ['formatblock', 'fontsize', 'fontname'],
		format2 : ['formatblock'],
		lists : ['insertorderedlist', 'insertunorderedlist'],
		elements : ['horizontalrule', 'blockquote', 'div', 'stopfloat', 'nbsp'],
		elements2 : ['horizontalrule', 'nbsp'],
		links : ['link', 'unlink', 'anchor'],
		images : ['image'],
		media : ['image', 'flash'],		
		tables : ['table', 'tableprops', 'tablerm', 'tbrowbefore', 'tbrowafter', 'tbrowrm', 'tbcolbefore', 'tbcolafter', 'tbcolrm', 'tbcellprops', 'tbcellsmerge', 'tbcellsplit'],
		elfinder : ['elfinder'],
		fullscreen : ['fullscreen']
	},
	toolbars : {
		tiny : ['style'],
		compact : ['save', 'undoredo', 'style', 'alignment', 'lists', 'links', 'fullscreen'],
		normal : ['save', 'copypaste', 'undoredo', 'style', 'alignment', 'colors', 'indent', 'lists', 'links', 'elements', 'images', 'fullscreen'],
		complete : ['save', 'copypaste', 'undoredo', 'style', 'alignment', 'colors', 'format', 'indent', 'lists', 'links', 'elements', 'media', 'fullscreen'],
		maxi : ['save', 'copypaste', 'undoredo', 'style', 'alignment', 'colors', 'format', 'indent', 'lists', 'links', 'elements', 'media', 'tables', 'fullscreen'],
		pz : ['save', 'copypaste', 'undoredo', 'style', 'alignment', 'format2', 'lists', 'links', 'elements2'],
		eldorado : ['save', 'copypaste', 'elfinder', 'undoredo', 'style', 'alignment', 'colors', 'format', 'indent', 'lists', 'links', 'elements', 'media', 'tables', 'fullscreen']
		
	},
	panelNames : {
		save : 'Save',
		copypaste : 'Copy/Pase',
		undoredo : 'Undo/Redo',
		style : 'Text styles',
		colors : 'Colors',
		alignment : 'Alignment',
		indent : 'Indent/Outdent',
		format : 'Text format',
		lists : 'Lists',
		elements : 'Misc elements',
		links : 'Links',
		images : 'Images',
		media : 'Media',
		tables : 'Tables',
		elfinder : 'File manager (elFinder)'
	}
};
})(jQuery);

(function($) {
elRTE.prototype.selection = function(rte) {
	this.rte = rte;
	var self = this;
	this.w3cRange = null;
	var start, end, node, bm;
	
	$(this.rte.doc)
		.keyup(function(e) {
			if (e.ctrlKey || e.metaKey || (e.keyCode >= 8 && e.keyCode <= 13) || (e.keyCode>=32 && e.keyCode<= 40) || e.keyCode == 46 || (e.keyCode >=96 && e.keyCode <= 111)) {
				self.cleanCache();
			}
		})
		.mousedown(function(e) {
			// self.rte.log(e)
			if (e.target.nodeName == 'HTML') {
				start = self.rte.doc.body;
			} else {
				start = e.target;
			}
			end = node = null;
		})
		.mouseup(function(e) {
			if (e.target.nodeName == 'HTML') {
				end = self.rte.doc.body;
			} else {
				end = e.target;
			}
			end = e.target;
			node = null;
		}).click();
		
	
	function selection() {
		return self.rte.window.getSelection ? self.rte.window.getSelection() : self.rte.window.document.selection;
	}
	
	
	function realSelected(n, p, s) {
		while (n.nodeName != 'BODY' && n.parentNode && n.parentNode.nodeName != 'BODY' && (p ? n!== p && n.parentNode != p : 1) && ((s=='left' && self.rte.dom.isFirstNotEmpty(n)) || (s=='right' && self.rte.dom.isLastNotEmpty(n)) || (self.rte.dom.isFirstNotEmpty(n) && self.rte.dom.isLastNotEmpty(n))) ) {
			n = n.parentNode;
		}
		return n;
	}
	
	
	this.collapsed = function() {
		return this.getRangeAt().isCollapsed();
	}
	
	
	this.collapse = function(toStart) {
		this.getRangeAt().collapse(toStart ? true : false);
	}
	
	
	this.getRangeAt = function(updateW3cRange) {
		if (this.rte.browser.msie) {
			if (!this.w3cRange) {
				this.w3cRange = new this.rte.w3cRange(this.rte);
			}
			updateW3cRange && this.w3cRange.update();
			return this.w3cRange;
		}
		
		var s = selection();
		var r = s.rangeCount > 0 ? s.getRangeAt(0) : this.rte.doc.createRange();
		r.getStart = function() {
			return this.startContainer.nodeType==1 
				? this.startContainer.childNodes[Math.min(this.startOffset, this.startContainer.childNodes.length-1)] 
				: this.startContainer;
		}
		
		r.getEnd = function() {
			return this.endContainer.nodeType==1 
				? this.endContainer.childNodes[ Math.min(this.startOffset == this.endOffset ? this.endOffset : this.endOffset-1, this.endContainer.childNodes.length-1)] 
				: this.endContainer;
		}
		r.isCollapsed = function() {
			return this.collapsed;
		}
		return r;
	}
	
	this.saveIERange = function() {
		if ($.browser.msie) {
			bm = this.getRangeAt().getBookmark();
		}
	}
	
	this.restoreIERange = function() {
		$.browser.msie && bm && this.getRangeAt().moveToBookmark(bm);
	}
	
	
	this.select = function(s, e) {
		e = e||s;
		var r = this.getRangeAt();
		r.setStartBefore(s);
		r.setEndAfter(e);
		if (this.rte.browser.msie) {
			r.select();
		} else {
			var s = selection();
			s.removeAllRanges();
			s.addRange(r);
		}
		return this.cleanCache();
	}
	
	
	this.selectContents = function(n) {
		var r = this.getRangeAt();
		if (n && n.nodeType == 1) {
			if (this.rte.browser.msie) {
				r.range();
				r.r.moveToElementText(n.parentNode);
				r.r.select();
			} else {
				try {
					r.selectNodeContents(n);
				} catch (e) {
					return this.rte.log('unable select node contents '+n);
				}
				var s = selection();
				s.removeAllRanges();
				s.addRange(r);
			}
		}
		return this;
	}
	
	
	this.insertNode = function(n, collapse) {
		if (collapse && !this.collapsed()) {
			this.collapse();
		}
		if (this.rte.browser.msie) {
			var html = n.nodeType == 3 ? n.nodeValue : $(this.rte.dom.create('span')).append($(n)).html();
			 var r = this.getRangeAt();
			r.insertNode(html);
		} else {
			var r = this.getRangeAt();
			r.insertNode(n);
			r.setStartAfter(n);
			r.setEndAfter(n);
			var s = selection();
			s.removeAllRanges();
			s.addRange(r);
		}
		return this.cleanCache();
	}
	
	this.insertHtml = function(html, collapse) {
		if (collapse && !this.collapsed()) {
			this.collapse();
		}
		
		if (this.rte.browser.msie) {
			this.getRangeAt().range().pasteHTML(html);
		} else {
			var n = $(this.rte.dom.create('span')).html(html||'').get(0);
			this.insertNode(n);
			$(n).replaceWith($(n).html());
		}
		return this.cleanCache();
	}
	
	this.insertText = function(text, collapse) {
		var n = this.rte.doc.createTextNode(text);
		return this.insertHtml(n.nodeValue);
	}
	
	this.cleanCache = function() {
		start = end = node = null;
		return this;
	}
	
	
	this.getStart = function() {
		if (!start) {
			var r = this.getRangeAt();
			start = r.getStart();
		}
		return start;
	}
	
	
	this.getEnd = function() {
		if (!end) {
			var r = this.getRangeAt();
			end = r.getEnd();
		}
		return end;
	}
	
	this.getNode = function() {
		if (!node) {
			node = this.rte.dom.findCommonAncestor(this.getStart(), this.getEnd());
			// self.rte.log(node)
		}
		return node;
	}
	
	
	this.selected = function(o) {
		var opts = {
			collapsed : false, // РІРµСЂРЅСѓС‚СЊ РІС‹РґРµР»РµРЅРёРµ, РґР°Р¶Рµ РµСЃР»Рё РѕРЅРѕ СЃС…Р»РѕРїРЅСѓС‚Рѕ
			blocks : false, // Р±Р»РѕС‡РЅРѕРµ РІС‹РґРµР»РµРЅРёРµ
			filter : false, // С„РёР»СЊС‚СЂ СЂРµР·СѓР»СЊС‚Р°С‚РѕРІ
			wrap : 'text', // С‡С‚Рѕ РѕР±РѕСЂР°С‡РёРІР°РµРј
			tag : 'span' // РІРѕ С‡С‚Рѕ РѕР±РѕСЂР°С‡РёРІР°РµРј
		}
		opts = $.extend({}, opts, o);
		
		// Р±Р»РѕС‡РЅРѕРµ РІС‹РґРµР»РµРЅРёРµ - РёС‰РµРј Р±Р»РѕС‡РЅСѓСЋ РЅРѕРґСѓ, РЅРѕ РЅРµ С‚Р°Р±Р»РёС†Сѓ
		if (opts.blocks) {
			var n = this.getNode(), _n = null;
			if (_n = this.rte.dom.selfOrParent(n, 'selectionBlock') ) {
				return [_n];
			} 
		}
		var sel = this.selectedRaw(opts.collapsed, opts.blocks);
		var ret = [];
		var buffer = [];
		var ndx = null;
		// РѕР±РѕСЂР°С‡РёРІР°РµРј РЅРѕРґС‹ РІ Р±СѓС„С„РµСЂРµ
		function wrap() {
			
			function allowParagraph() {
				for (var i=0; i < buffer.length; i++) {
					if (buffer[i].nodeType == 1 && (self.rte.dom.selfOrParent(buffer[i], /^P$/) || $(buffer[i]).find('p').length>0)) {
						return false;
					}
				};
				return true;
			} 
			
			if (buffer.length>0) {
				var tag = opts.tag == 'p' && !allowParagraph() ? 'div' : opts.tag;
				var n = self.rte.dom.wrap(buffer, tag);
				ret[ndx] = n;
				ndx = null;
				buffer = [];
			}
		}
		
		// РґРѕР±Р°РІР»СЏРµРј РЅРѕРґС‹ РІ Р±СѓС„С„РµСЂ
		function addToBuffer(n) {
			if (n.nodeType == 1) {
				if (/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(n.nodeName)) {
					$(n).find('td,th').each(function() {
						var tag = opts.tag == 'p' && $(this).find('p').length>0 ? 'div' : opts.tag;
						var n = self.rte.dom.wrapContents(this, tag);
						return ret.push(n);
					})
				} else if (/^(CAPTION|TD|TH|LI|DT|DD)$/.test(n.nodeName)) {
					var tag = opts.tag == 'p' && $(n).find('p').length>0 ? 'div' : opts.tag;
					var n = self.rte.dom.wrapContents(n, tag);
					return ret.push(n);
				} 
			} 
			var prev = buffer.length>0 ? buffer[buffer.length-1] : null;
			if (prev && prev != self.rte.dom.prev(n)) {
				wrap();
			}
			buffer.push(n); 
			if (ndx === null) {
				ndx = ret.length;
				ret.push('dummy'); // Р·Р°РіР»СѓС€РєР° РґР»СЏ РѕР±РѕСЂР°С‡РёРІР°РµРјС‹С… СЌР»РµРјРµРЅС‚РѕРІ
			}
		}
		
		if (sel.nodes.length>0) {
			
			for (var i=0; i < sel.nodes.length; i++) {
				var n = sel.nodes[i];
					// РїРµСЂРІСѓСЋ Рё РїРѕСЃР» С‚РµРєСЃС‚РѕРІС‹Рµ РЅРѕРґС‹ СЂР°Р·СЂРµР·Р°РµРј, РµСЃР»Рё РЅРµРѕР±С…РѕРґРёРјРѕ
					 if (n.nodeType == 3 && (i==0 || i == sel.nodes.length-1) && $.trim(n.nodeValue).length>0) {
						if (i==0 && sel.so>0) {
							n = n.splitText(sel.so);
						}
						if (i == sel.nodes.length-1 && sel.eo>0) {
							n.splitText(i==0 && sel.so>0 ? sel.eo - sel.so : sel.eo);
						}
					}
					switch (opts.wrap) {
						// РѕР±РѕСЂР°С‡РёРІР°РµРј С‚РѕР»СЊРєРѕ С‚РµРєСЃС‚РѕРІС‹Рµ РЅРѕРґС‹ СЃ br
						case 'text':
							if ((n.nodeType == 1 && n.nodeName == 'BR') || (n.nodeType == 3 && $.trim(n.nodeValue).length>0)) {
								addToBuffer(n);
							} else if (n.nodeType == 1) {
								ret.push(n);
							}
							break;
						// РѕР±РѕСЂР°С‡РёРІР°РµРј РІСЃРµ РёРЅР»Р°Р№РЅ СЌР»РµРјРµРЅС‚С‹	
						case 'inline':
							if (this.rte.dom.isInline(n)) {
								addToBuffer(n);
							} else if (n.nodeType == 1) {
								
								ret.push(n);
							}
							break;
						// РѕР±РѕСЂР°С‡РёРІР°РµРј РІСЃРµ	
						case 'all':
							if (n.nodeType == 1 || !this.rte.dom.isEmpty(n)) {
								addToBuffer(n);
							}
							break;
						// РЅРёС‡РµРіРѕ РЅРµ РѕР±РѕСЂР°С‡РёРІР°РµРј
						default:
							if (n.nodeType == 1 || !this.rte.dom.isEmpty(n)) {
								ret.push(n);
							}
					}
			};
			wrap();
		}
		// this.rte.log('buffer')
		// this.rte.log(buffer)
		// this.rte.log('ret')
		// this.rte.log(ret)		
		return opts.filter ? this.rte.dom.filter(ret, opts.filter) : ret;
	}
	this.dump = function(ca, s, e, so, eo) {
		var r = this.getRangeAt();
		this.rte.log('commonAncestorContainer');
		this.rte.log(ca || r.commonAncestorContainer);
		// this.rte.log('commonAncestorContainer childs num')
		// this/rte.log((ca||r.commonAncestorContainer).childNodes.length)
		this.rte.log('startContainer');
		this.rte.log(s || r.startContainer);
		this.rte.log('startOffset: '+(so>=0 ? so : r.startOffset));
		this.rte.log('endContainer');
		this.rte.log(e||r.endContainer);
		this.rte.log('endOffset: '+(eo>=0 ? eo : r.endOffset));
	}
	
	this.selectedRaw = function(collapsed, blocks) {
		var res = {so : null, eo : null, nodes : []};
		var r = this.getRangeAt(true);
		var ca = r.commonAncestorContainer;
		var s, e; // start & end nodes
		var sf = false; // start node fully selected
		var ef = false; // end node fully selected
		
		// РІРѕР·РІСЂР°С‰Р°РµС‚ true, РµСЃР»Рё РЅРѕРґР° РЅРµ С‚РµРєСЃС‚РѕРІР°СЏ РёР»Рё РІС‹РґРµР»РµРЅР° РїРѕР»РЅРѕСЃС‚СЊСЋ
		function isFullySelected(n, s, e) {
			if (n.nodeType == 3) {
				e = e>=0 ? e : n.nodeValue.length;
				return (s==0 && e==n.nodeValue.length) || $.trim(n.nodeValue).length == $.trim(n.nodeValue.substring(s, e)).length;
			} 
			return true;
		}
		
		// РІРѕР·РІСЂР°С‰Р°РµС‚ true, РµСЃР»Рё РЅРѕРґР° РїСѓСЃС‚Р°СЏ РёР»Рё РІ РЅРµР№ РЅРµ РІС‹РґРµР»РµРЅРѕ РЅРё РѕРґРЅРѕРіРѕ РЅРµРїСЂРѕР±РµР»СЊРЅРѕРіРѕ СЃРёРјРІРѕР»Р°
		function isEmptySelected(n, s, e) {
			if (n.nodeType == 1) {
				return self.rte.dom.isEmpty(n);
			} else if (n.nodeType == 3) {
				return $.trim(n.nodeValue.substring(s||0, e>=0 ? e : n.nodeValue.length)).length == 0;
			} 
			return true;
		}
		
		
		//this.dump()
		// РЅР°С‡Р°Р»СЊРЅР°СЏ РЅРѕРґР°
		if (r.startContainer.nodeType == 1) {
			if (r.startOffset<r.startContainer.childNodes.length) {
				s = r.startContainer.childNodes[r.startOffset];
				res.so = s.nodeType == 1 ? null : 0;
			} else {
				s = r.startContainer.childNodes[r.startOffset-1];
				res.so = s.nodeType == 1 ? null : s.nodeValue.length;
			}
		} else {
			s = r.startContainer;
			res.so = r.startOffset;
		} 
		
		// РІС‹РґРµР»РµРЅРёРµ СЃС…Р»РѕРїРЅСѓС‚Рѕ
		if (r.collapsed) {
			if (collapsed) {
				// Р±Р»РѕС‡РЅРѕРµ РІС‹РґРµР»РµРЅРёРµ
				if (blocks) {
					s = realSelected(s);
					if (!this.rte.dom.isEmpty(s) || (s = this.rte.dom.next(s))) {
						res.nodes = [s];
					} 
					
					// РґРѕР±Р°РІР»СЏРµРј РёРЅР»Р°Р№РЅ СЃРѕСЃРµРґРµР№ 
					if (this.rte.dom.isInline(s)) {
						res.nodes = this.rte.dom.toLineStart(s).concat(res.nodes, this.rte.dom.toLineEnd(s));
					}
					
					// offset РґР»СЏ С‚РµРєСЃС‚РѕРІС‹С… РЅРѕРґ
					if (res.nodes.length>0) {
						res.so = res.nodes[0].nodeType == 1 ? null : 0;
						res.eo = res.nodes[res.nodes.length-1].nodeType == 1 ? null : res.nodes[res.nodes.length-1].nodeValue.length;
					}
					
				} else if (!this.rte.dom.isEmpty(s)) {
					res.nodes = [s];
				}
				
			}
			return res;
		}
		
		// РєРѕРЅРµС‡РЅР°СЏ РЅРѕРґР°
		if (r.endContainer.nodeType == 1) {
			e = r.endContainer.childNodes[r.endOffset-1];
			res.eo = e.nodeType == 1 ? null : e.nodeValue.length;
		} else {
			e = r.endContainer;
			res.eo = r.endOffset;
		} 
		// this.rte.log('select 1')
		//this.dump(ca, s, e, res.so, res.eo)
		
		// РЅР°С‡Р°Р»СЊРЅР°СЏ РЅРѕРґР° РІС‹РґРµР»РµРЅР° РїРѕР»РЅРѕСЃС‚СЊСЋ - РїРѕРґРЅРёРјР°РµРјСЃСЏ РЅР°РІРµСЂС… РїРѕ Р»РµРІРѕР№ СЃС‚РѕСЂРѕРЅРµ
		if (s.nodeType == 1 || blocks || isFullySelected(s, res.so, s.nodeValue.length)) {
//			this.rte.log('start text node is fully selected')
			s = realSelected(s, ca, 'left');
			sf = true;
			res.so = s.nodeType == 1 ? null : 0;
		}
		// РєРѕРЅРµС‡РЅР°СЏ РЅРѕРґР° РІС‹РґРµР»РµРЅР° РїРѕР»РЅРѕСЃС‚СЊСЋ - РїРѕРґРЅРёРјР°РµРјСЃСЏ РЅР°РІРµСЂС… РїРѕ РїСЂР°РІРѕР№ СЃС‚РѕСЂРѕРЅРµ
		if (e.nodeType == 1 || blocks || isFullySelected(e, 0, res.eo)) {
//			this.rte.log('end text node is fully selected')
			e = realSelected(e, ca, 'right');
			ef = true;
			res.eo = e.nodeType == 1 ? null : e.nodeValue.length;
		}
		// Р±Р»РѕС‡РЅРѕРµ РІС‹РґРµР»РµРЅРёРµ - РµСЃР»Рё РЅРѕРґС‹ РЅРµ СЌР»РµРјРµРЅС‚С‹ - РїРѕРґРЅРёРјР°РµРјСЃСЏ Рє СЂРѕРґРёС‚РµР»СЋ, РЅРѕ РЅРёР¶Рµ РєРѕРЅС‚РµР№РЅРµСЂР°
		if (blocks) {
			if (s.nodeType != 1 && s.parentNode != ca && s.parentNode.nodeName != 'BODY') {
				s = s.parentNode;
				res.so = null;
			}
			if (e.nodeType != 1 && e.parentNode != ca && e.parentNode.nodeName != 'BODY') {
				e = e.parentNode;
				res.eo = null;
			}
		}
		// РµСЃР»Рё РєРѕРЅС‚РµРЅРµСЂ РІС‹РґРµР»РµРЅ РїРѕР»РЅРѕСЃС‚СЊСЋ, РїРѕРґРЅРёРјР°РµРјСЃСЏ РЅР°РІРµСЂС… РЅР°СЃРєРѕР»СЊРєРѕ РјРѕР¶РЅРѕ
		if (s.parentNode == e.parentNode && s.parentNode.nodeName != 'BODY' && (sf && this.rte.dom.isFirstNotEmpty(s)) && (ef && this.rte.dom.isLastNotEmpty(e))) {
//			this.rte.log('common parent')
			s = e = s.parentNode;
			res.so = s.nodeType == 1 ? null : 0;
			res.eo = e.nodeType == 1 ? null : e.nodeValue.length;
		}
		// РЅР°С‡Р°Р»СЊРЅР°СЏ РЅРѕРґР° == РєРѕРЅРµС‡РЅРѕР№ РЅРѕРґРµ
		if (s == e) {
//			this.rte.log('start is end')
			if (!this.rte.dom.isEmpty(s)) {
				res.nodes.push(s);
			}
			return res;
		}
		 // this.rte.log('start 2')
		 //this.dump(ca, s, e, res.so, res.eo)
		
		// РЅР°С…РѕРґРёРј РЅР°С‡Р°Р»СЊРЅСѓСЋ Рё РєРѕРЅРµС‡РЅСѓСЋ С‚РѕС‡РєРё - РЅРѕРґС‹ РёР· РёРµСЂР°СЂС…РёРё СЂРѕРґРёС‚РµР»РµР№ РЅР°С‡Р°Р»СЊРЅРѕР№ Рё РєРѕРЅРµС‡РЅРѕ РЅРѕРґС‹, Сѓ РєРѕС‚РѕСЂС‹С… СЂРѕРґРёС‚РµР»СЊ - РєРѕРЅС‚РµР№РЅРµСЂ
		var sp = s;
		while (sp.nodeName != 'BODY' && sp.parentNode !== ca && sp.parentNode.nodeName != 'BODY') {
			sp = sp.parentNode;
		}
		//this.rte.log(s.nodeName)
		// this.rte.log('start point')
		// this.rte.log(sp)
		
		var ep = e;
//		this.rte.log(ep)
		while (ep.nodeName != 'BODY' && ep.parentNode !== ca && ep.parentNode.nodeName != 'BODY') {
			this.rte.log(ep)
			ep = ep.parentNode;
		}
		// this.rte.log('end point')
		// this.rte.log(ep)
		
		
		// РµСЃР»Рё РЅР°С‡Р°Р»СЊРЅР°СЏ РЅРѕРґР° РЅРµ РїСѓСЃС‚Р°СЏ - РґРѕР±Р°РІР»СЏРµРј РµРµ
		if (!isEmptySelected(s, res.so, s.nodeType==3 ? s.nodeValue.length : null)) {
			res.nodes.push(s);
		}
		// РїРѕРґРЅРёРјР°РµРјСЃСЏ РѕС‚ РЅР°С‡Р°Р»СЊРЅРѕР№ РЅРѕРґС‹ РґРѕ РЅР°С‡Р°Р»СЊРЅРѕР№ С‚РѕС‡РєРё
		var n = s;
		while (n !== sp) {
			var _n = n;
			while ((_n = this.rte.dom.next(_n))) {
					res.nodes.push(_n);
			}
			n = n.parentNode;
		}
		// РѕС‚ РЅР°С‡Р°Р»СЊРЅРѕР№ С‚РѕС‡РєРё РґРѕ РєРѕРЅРµС‡РЅРѕР№ С‚РѕС‡РєРё
		n = sp;
		while ((n = this.rte.dom.next(n)) && n!= ep ) {
//			this.rte.log(n)
			res.nodes.push(n);
		}
		// РїРѕРґРЅРёРјР°РµРјСЃСЏ РѕС‚ РєРѕРЅРµС‡РЅРѕР№ РЅРѕРґС‹ РґРѕ РєРѕРЅРµС‡РЅРѕР№ С‚РѕС‡РєРё, СЂРµР·СѓР»СЊС‚Р°С‚ РїРµСЂРµРІРѕСЂР°С‡РёРІР°РµРј
		var tmp = [];
		n = e;
		while (n !== ep) {
			var _n = n;
			while ((_n = this.rte.dom.prev(_n))) {
				tmp.push(_n);
			}
			n = n.parentNode;
		}
		if (tmp.length) {
			res.nodes = res.nodes.concat(tmp.reverse());
		}
		// РµСЃР»Рё РєРѕРЅРµС‡РЅР°СЏ РЅРѕРґР° РЅРµ РїСѓСЃС‚Р°СЏ Рё != РЅР°С‡Р°Р»СЊРЅРѕР№ - РґРѕР±Р°РІР»СЏРµРј РµРµ
		if (!isEmptySelected(e, 0, e.nodeType==3 ? res.eo : null)) {
			res.nodes.push(e);
		}
		
		if (blocks) {
			// РґРѕР±Р°РІР»СЏРµРј РёРЅР»Р°Р№РЅ СЃРѕСЃРµРґРµР№ СЃР»РµРІР°
			if (this.rte.dom.isInline(s)) {
				res.nodes = this.rte.dom.toLineStart(s).concat(res.nodes);
				res.so = res.nodes[0].nodeType == 1 ? null : 0;
			}
			// РґРѕР±Р°РІР»СЏРµРј РёРЅР»Р°Р№РЅ СЃРѕСЃРµРґРµР№ СЃРїСЂР°РІР°
			if (this.rte.dom.isInline(e)) {
				res.nodes = res.nodes.concat(this.rte.dom.toLineEnd(e));
				res.eo = res.nodes[res.nodes.length-1].nodeType == 1 ? null : res.nodes[res.nodes.length-1].nodeValue.length;
			}
		}
		
		// РІСЃРµ СЂР°РґСѓСЋС‚СЃСЏ! :)
		return res;
	}
	
}
})(jQuery);
(function($) {
elRTE.prototype.ui = function(rte) {
	this.rte = rte;
	this._buttons = [];
	var self = this,
		tb = this.rte.options.toolbars[rte.options.toolbar && rte.options.toolbars[rte.options.toolbar] ? rte.options.toolbar : 'normal'],
		tbl = tb.length,
		p, pname, pl, n, c, b, i;
	
	// add prototype to all buttons
	for (i in this.buttons) {
		if (this.buttons.hasOwnProperty(i) && i != 'button') {
			this.buttons[i].prototype = this.buttons.button.prototype;
		}
	}
	
	// create buttons and put on toolbar
	while (tbl--) {
		pname = tb[tbl];
		p = $('<ul class="panel-'+pname+(tbl == 0 ? ' first' : '')+'" />').prependTo(this.rte.toolbar);
		pl = this.rte.options.panels[pname].length;
		while (pl--) {
			n = this.rte.options.panels[pname][pl];
			c = this.buttons[n] || this.buttons.button;
			this._buttons.push((b = new c(this.rte, n)));
			p.prepend(b.domElem);
		}
	}
	
	
	// this.rte.tabsbar.children('.tab').click(function(e) {
	// 
	// 	if (!$(e.target).hasClass('active')) {
	// 		self.rte.tabsbar.children('.tab').toggleClass('active');
	// 		self.rte.workzone.children().toggle();
	// 		if ($(e.target).hasClass('editor')) {
	// 			self.rte.updateEditor();
	// 		} else {
	// 			self.rte.updateSource();
	// 			$.each(self._buttons, function() {
	// 				!this.active && this.domElem.addClass('disabled');
	// 			});
	// 			self.rte.source.focus();
	// 		}
	// 	}
	// });
	this.update();
	
	this.disable = function() {
		$.each(self._buttons, function() {
			!this.active && this.domElem.addClass('disabled');
		});
	}
	
}

elRTE.prototype.ui.prototype.update = function(cleanCache) {
	cleanCache && this.rte.selection.cleanCache();
	var n = this.rte.selection.getNode(),
		p = this.rte.dom.parents(n, '*'),
		path = '';
	if (p.length) {
		$.each(p.reverse(), function() {
			path += ' &raquo; '+ this.nodeName.toLowerCase();
		});
	}
	if (n && n.nodeType == 1 && n.nodeName != 'BODY') {
		path += ' &raquo; '+ n.nodeName.toLowerCase();
	}
	this.rte.statusbar.html(path)
	$.each(this._buttons, function() {
		this.update();
	});
	this.rte.window.focus();
}
elRTE.prototype.ui.prototype.buttons = {
	
	
	button : function(rte, name) {
		var self = this;
		this.rte = rte;
		this.active = false;
		this.name = name;
		this.val = null;
		this.domElem = $('<li style="-moz-user-select:-moz-none" class="'+name+' rounded-3" name="'+name+'" title="'+this.rte.i18n(this.rte.options.buttons[name] || name)+'" unselectable="on" />')
			.hover(
				function() { $(this).addClass('hover'); },
				function() { $(this).removeClass('hover'); }
			)
			.click( function(e) {
				e.stopPropagation();
				e.preventDefault();
				if (!$(this).hasClass('disabled')) {
					self.command();
				}
				self.rte.window.focus();
			});
	}
}

elRTE.prototype.ui.prototype.buttons.button.prototype.command = function() {
	this.rte.history.add();
	try {
		this.rte.doc.execCommand(this.name, false, this.val);
	} catch(e) {
		return this.rte.log('commands failed: '+this.name);
	}
	
	this.rte.ui.update(true);
}

elRTE.prototype.ui.prototype.buttons.button.prototype.update = function() {
	try {
		if (!this.rte.doc.queryCommandEnabled(this.name)) {
			return this.domElem.addClass('disabled');
		} else {
			this.domElem.removeClass('disabled');
		}
	} catch (e) {
		return;
	}
	try {
		if (this.rte.doc.queryCommandState(this.name)) {
			this.domElem.addClass('active');
		} else {
			this.domElem.removeClass('active');
		}
	} catch (e) { }
}
})(jQuery);
(function($) {
elRTE.prototype.utils = function(rte) {
	this.rte = rte;
	this.url = null;
	// domo arigato, Steave, http://blog.stevenlevithan.com/archives/parseuri
	this.reg = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
	this.baseURL = '';
	this.path = '';
	var self = this;
	
	this.rgb2hex = function(str) {
	 function hex(x) {
	 	hexDigits = ["0", "1", "2", "3", "4", "5", "6", "7", "8","9", "a", "b", "c", "d", "e", "f"];
	 return !x ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x% 16];
	 }
		var rgb = str.match(/\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/); 
		return rgb ? "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]) : '';
	}
	
	this.toPixels = function(num) {
		var m = num.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);
		if (m) {
			num = m[1];
			unit = m[2];
		} 
		if (num[0] == '.') {
			num = '0'+num;
		}
		num = parseFloat(num);
		if (isNaN(num)) {
			return '';
		}
		var base = parseInt($(document.body).css('font-size')) || 16;
		switch (unit) {
			case 'em': return parseInt(num*base);
			case 'pt': return parseInt(num*base/12);
			case '%' : return parseInt(num*base/100);
		}
		return num;
	}
	
	// TODO: add parse rel path ../../etc
	this.absoluteURL = function(url) {
		!this.url && this._url();
		url = $.trim(url);
		if (!url) {
			return '';
		}
		// СЃСЃС‹Р»РєРё РЅР° СЏРєРѕСЂСЏ РЅРµ РїРµСЂРµРІРѕРґРёРј РІ Р°Р±СЃ
		if (url[0] == '#') {
			return url;
		}
		var u = this.parseURL(url);
		if (!u.host && !u.path && !u.anchor) {
			//this.rte.log('Invalid URL: '+url)
			return '';
		}
		if (!this.rte.options.absoluteURLs) { 
			return url;
		}
		if (u.protocol) {
			//this.rte.log('url already absolute: '+url);
			return url;
		}
		if (u.host && (u.host.indexOf('.')!=-1 || u.host == 'localhost')) {
			//this.rte.log('no protocol');
			return this.url.protocol+'://'+url;
		}
		if (url[0] == '/') {
			url = this.baseURL+url;
		} else {
			if (url.indexOf('./') == 0) {
				url = url.substring(2);
			}
			url = this.baseURL+this.path+url;
		}
		return url;
	}
	
	this.parseURL = function(url) {
		var u = url.match(this.reg);
		var ret = {};
		$.each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(i) {
			ret[this] = u[i];
		});
		if (!ret.host.match(/[a-z0-9]/i)) {
			ret.host = '';
		}
		return ret;
	}
	
	this.trimEventCallback = function(c) {
		c = c ? c.toString() : '';
		return $.trim(c.replace(/\r*\n/mg, '').replace(/^function\s*on[a-z]+\s*\(\s*event\s*\)\s*\{(.+)\}$/igm, '$1'));
	}
	
	this._url = function() {
		this.url = this.parseURL(window.location.href);
		this.baseURL = this.url.protocol+'://'+(this.url.userInfo ? parts.userInfo+'@' : '')+this.url.host+(this.url.port ? ':'+this.url.port : '');
		this.path = !this.url.file ? this.url.path : this.url.path.substring(0, this.url.path.length - this.url.file.length);
	}
	
}
})(jQuery);
(function($) {
elRTE.prototype.w3cRange = function(rte) {
	var self = this;
	this.rte = rte;
	this.r = null;
	this.collapsed = true;
	this.startContainer = null;
	this.endContainer = null;
	this.startOffset = 0;
	this.endOffset = 0;
	this.commonAncestorContainer = null;
	
	this.range = function() {
		try { 
			this.r = this.rte.window.document.selection.createRange(); 
		} catch(e) { 
			this.r = this.rte.doc.body.createTextRange(); 
		}
		return this.r;
	}
	
	this.insertNode = function(html) {
		this.range();
		self.r.collapse(false)
		var r = self.r.duplicate();
		r.pasteHTML(html);
	}
	
	this.getBookmark = function() {
		this.range();
		if (this.r.item) {
			var n = this.r.item(0);
			this.r = this.rte.doc.body.createTextRange();
			this.r.moveToElementText(n);
		}
		return this.r.getBookmark();
	}
	
	this.moveToBookmark = function(bm) {
		this.rte.window.focus();
		this.range().moveToBookmark(bm);
		this.r.select();
	}
	
	
	this.update = function() {
		function _findPos(start) {
			var marker = '\uFEFF';
			var ndx = offset = 0;
			var r = self.r.duplicate();
			r.collapse(start);
			var p = r.parentElement();
			if (!p || p.nodeName == 'HTML') {
				return {parent : self.rte.doc.body, ndx : ndx, offset : offset};
			}
			r.pasteHTML(marker);
			
			childs = p.childNodes;
			for (var i=0; i < childs.length; i++) {
				var n = childs[i];
				if (i>0 && (n.nodeType!==3 || childs[i-1].nodeType !==3)) {
					ndx++;
				}
				if (n.nodeType !== 3) {
					offset = 0;
				} else {
					var pos = n.nodeValue.indexOf(marker);
					if (pos !== -1) {
						offset += pos;
						break;
					}
					offset += n.nodeValue.length;
				}
			};
			r.moveStart('character', -1);
			r.text = '';
			return {parent : p, ndx : Math.min(ndx, p.childNodes.length-1), offset : offset};
		}
		this.range();
		this.startContainer = this.endContainer = null;
		if (this.r.item) {
			this.collapsed = false;
			var i = this.r.item(0);
			this.setStart(i.parentNode, this.rte.dom.indexOf(i));
			this.setEnd(i.parentNode, this.startOffset+1);
		} else {
			this.collapsed = this.r.boundingWidth == 0;
			var start = _findPos(true); 
			var end = _findPos(false);
			
			start.parent.normalize();
			end.parent.normalize();
			start.ndx = Math.min(start.ndx, start.parent.childNodes.length-1);
			end.ndx = Math.min(end.ndx, end.parent.childNodes.length-1);
			if (start.parent.childNodes[start.ndx].nodeType && start.parent.childNodes[start.ndx].nodeType == 1) {
				this.setStart(start.parent, start.ndx);
			} else {
				this.setStart(start.parent.childNodes[start.ndx], start.offset);
			}
			if (end.parent.childNodes[end.ndx].nodeType && end.parent.childNodes[end.ndx].nodeType == 1) {
				this.setEnd(end.parent, end.ndx);
			} else {
				this.setEnd(end.parent.childNodes[end.ndx], end.offset);
			}
			// this.dump();
			this.select();
		}
		return this;
	}
	
	this.isCollapsed = function() {
		this.range();
		this.collapsed = this.r.item ? false : this.r.boundingWidth == 0;
		return this.collapsed;
	}
	
	
	this.collapse = function(toStart) {
		this.range();
		if (this.r.item) {
			var n = this.r.item(0);
			this.r = this.rte.doc.body.createTextRange();
			this.r.moveToElementText(n);
		}
		this.r.collapse(toStart);
		this.r.select();
		this.collapsed = true;
	}
	this.getStart = function() {
		this.range();
		if (this.r.item) {
			return this.r.item(0);
		}
		var r = this.r.duplicate();
		r.collapse(true);
		var s = r.parentElement();
		return s && s.nodeName == 'BODY' ? s.firstChild : s;
	}
	
	
	this.getEnd = function() {
		this.range();
		if (this.r.item) {
			return this.r.item(0);
		}
		var r = this.r.duplicate();
		r.collapse(false);
		var e = r.parentElement();
		return e && e.nodeName == 'BODY' ? e.lastChild : e;
	}
	
	
	this.setStart = function(node, offset) {
		this.startContainer = node;
		this.startOffset = offset;
		if (this.endContainer) {
			this.commonAncestorContainer = this.rte.dom.findCommonAncestor(this.startContainer, this.endContainer);
		}
	}
	
	
	this.setEnd = function(node, offset) {
		this.endContainer = node;
		this.endOffset = offset;
		if (this.startContainer) {
			this.commonAncestorContainer = this.rte.dom.findCommonAncestor(this.startContainer, this.endContainer);
		}
	}
	
	
	this.setStartBefore = function(n) {
		if (n.parentNode) {
			this.setStart(n.parentNode, this.rte.dom.indexOf(n));
		}
	}
	
	
	this.setStartAfter = function(n) {
		if (n.parentNode) {
			this.setStart(n.parentNode, this.rte.dom.indexOf(n)+1);
		}
	}
	
	
	this.setEndBefore = function(n) {
		if (n.parentNode) {
			this.setEnd(n.parentNode, this.rte.dom.indexOf(n));
		}
	}
	
	
	this.setEndAfter = function(n) {
		if (n.parentNode) {
			this.setEnd(n.parentNode, this.rte.dom.indexOf(n)+1);
		}
	}
	
	
	this.select = function() {
		// thanks tinymice authors
		function getPos(n, o) {
			if (n.nodeType != 3) {
				return -1;
			}
			var c ='\uFEFF';
			var val = n.nodeValue;
			var r = self.rte.doc.body.createTextRange();
			n.nodeValue = val.substring(0, o) + c + val.substring(o);
			r.moveToElementText(n.parentNode);
			r.findText(c);
			var p = Math.abs(r.moveStart('character', -0xFFFFF));
			n.nodeValue = val;
			return p;
		};
		
		this.r = this.rte.doc.body.createTextRange(); 
		var so = this.startOffset;
		var eo = this.endOffset;
		var s = this.startContainer.nodeType == 1 
			? this.startContainer.childNodes[Math.min(so, this.startContainer.childNodes.length - 1)]
			: this.startContainer;
		var e = this.endContainer.nodeType == 1 
			? this.endContainer.childNodes[Math.min(so == eo ? eo : eo - 1, this.endContainer.childNodes.length - 1)]
			: this.endContainer;
		if (this.collapsed) {
			if (s.nodeType == 3) {
				var p = getPos(s, so);
				this.r.move('character', p);
			} else {
				this.r.moveToElementText(s);
				this.r.collapse(true);
			}
		} else {
			var r = this.rte.doc.body.createTextRange(); 
			var sp = getPos(s, so);
			var ep = getPos(e, eo);
			if (s.nodeType == 3) {
				this.r.move('character', sp);
			} else {
				this.r.moveToElementText(s);
			}
			if (e.nodeType == 3) {
				r.move('character', ep);
			} else {
				r.moveToElementText(e);
			}
			this.r.setEndPoint('EndToEnd', r);
		}
		
		try {
			this.r.select();
		} catch(e) {
			
		}
		if (r) {
			r = null;
		}
	}
	
	this.dump = function() {
		this.rte.log('collapsed: '+this.collapsed);
		//this.rte.log('commonAncestorContainer: '+this.commonAncestorContainer.nodeName||'#text')
		this.rte.log('startContainer: '+(this.startContainer ? this.startContainer.nodeName : 'non'));
		this.rte.log('startOffset: '+this.startOffset);
		this.rte.log('endContainer: '+(this.endContainer ? this.endContainer.nodeName : 'none'));
		this.rte.log('endOffset: '+this.endOffset);
	}
	
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.anchor = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.input = $('<input type="text" />').attr('name', 'anchor').attr('size', '16')
	var self = this;
	
	this.command = function() {
		var opts = {
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); d.close(); self.set(); },
			dialog : {
				title : this.rte.i18n('Bookmark')
			}
		}
		this.anchor = this.rte.dom.selfOrParentAnchor(this.rte.selection.getEnd()) || rte.dom.create('a');
		!this.rte.selection.collapsed() && this.rte.selection.collapse(false);
		this.input.val($(this.anchor).addClass('el-rte-anchor').attr('name'));
		this.rte.selection.saveIERange();
		var d = new elDialogForm(opts);
		d.append([this.rte.i18n('Bookmark name'), this.input], null, true).open();
	}
	
	this.update = function() {
		var n = this.rte.selection.getNode();
		if (this.rte.dom.selfOrParentLink(n)) {
			this.domElem.addClass('disabled');
		} else if (this.rte.dom.selfOrParentAnchor(n)) {
			this.domElem.removeClass('disabled').addClass('active');
		} else {
			this.domElem.removeClass('disabled').removeClass('active');
		}
	}
	
	this.set = function() {
		var n = $.trim(this.input.val());
		this.rte.selection.restoreIERange();
		if (n) {
			this.rte.history.add()
			if (!this.anchor.parentNode) {
				this.rte.selection.insertHtml('<a name="'+n+'" title="'+this.rte.i18n('Bookmark')+': '+n+'" class="el-rte-anchor"></a>');
			} else {
				this.anchor.name = n;
				this.anchor.title = this.rte.i18n('Bookmark')+': '+n;
			}
		} else if (this.anchor.parentNode) {
			this.rte.history.add()
			this.anchor.parentNode.removeChild(this.anchor);
		}
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.blockquote = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		var n, nodes;
		if (this.rte.selection.collapsed() && (n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^BLOCKQUOTE$/))) {
			$(n).replaceWith($(n).html());
		} else {
			nodes = this.rte.selection.selected({wrap : 'all', tag : 'blockquote'});
			nodes.length && this.rte.selection.select(nodes[0], nodes[nodes.length-1]);
		}
		this.rte.ui.update(true);
	}
	
	this.update = function() {
		if (this.rte.selection.collapsed()) {
			if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^BLOCKQUOTE$/)) {
				this.domElem.removeClass('disabled').addClass('active');
			} else {
				this.domElem.addClass('disabled').removeClass('active');
			}
		} else {
			this.domElem.removeClass('disabled').removeClass('active');
		}
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.copy = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		
		if (this.rte.browser.mozilla) {
			try {
				this.rte.doc.execCommand(this.name, false, null);
			} catch (e) {
				var s = ' Ctl + C';
				if (this.name == 'cut') {
					s = ' Ctl + X';
				} else if (this.name == 'paste') {
					s = ' Ctl + V';
				}
				var opts = {
					dialog : {
						title : this.rte.i18n('Warning'),
						buttons : { Ok : function() { $(this).dialog('close'); } }
					}
				}
				var d = new elDialogForm(opts);
				d.append(this.rte.i18n('This operation is disabled in your browser on security reason. Use shortcut instead.')+': '+s).open();
			}
		} else {
			this.constructor.prototype.command.call(this);
		}
	}
}
elRTE.prototype.ui.prototype.buttons.cut = elRTE.prototype.ui.prototype.buttons.copy;
elRTE.prototype.ui.prototype.buttons.paste = elRTE.prototype.ui.prototype.buttons.copy;
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.div = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		var n, nodes;
		this.rte.history.add();
		if (this.rte.selection.collapsed() && (n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^DIV$/))) {
			$(n).replaceWith($(n).html());
		} else {
			nodes = this.rte.selection.selected({wrap : 'all', tag : 'div'});
			nodes.length && this.rte.selection.select(nodes[0], nodes[nodes.length-1]);
		}
		this.rte.ui.update(true);
	}
	
	this.update = function() {
		if (this.rte.selection.collapsed()) {
			if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^DIV$/)) {
				this.domElem.removeClass('disabled').addClass('active');
			} else {
				this.domElem.addClass('disabled').removeClass('active');
			}
		} else {
			this.domElem.removeClass('disabled').removeClass('active');
		}
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.docstructure = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		this.domElem.toggleClass('active');
		$(this.rte.doc.body).toggleClass('el-rte-structure');
	}
	this.command();
	
	this.update = function() {	
		this.domElem.removeClass('disabled');
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.elfinder = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.command = function() {
		if (self.rte.options.fmAllow && typeof(self.rte.options.fmOpen) == 'function') {
			self.rte.options.fmOpen( function(url) { self.rte.log(url) } );
		}
	}
	
	this.update = function() {
		if (self.rte.options.fmAllow && typeof(self.rte.options.fmOpen) == 'function') {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
})(jQuery);(function($) {
	
	elRTE.prototype.ui.prototype.buttons.flash = function(rte, name) {
		this.constructor.prototype.constructor.call(this, rte, name);
		var self = this;
		this.swf = null;
		this.placeholder = null;
		this.src = {
			url : $('<input type="text" name="url" />').css('width', '99%'),
			width : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
			height : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
			align : $('<select />').css('width', '100%')
						.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
						.append($('<option />').val('left' ).text(this.rte.i18n('Left')))
						.append($('<option />').val('right' ).text(this.rte.i18n('Right')))
						.append($('<option />').val('top' ).text(this.rte.i18n('Top')))
						.append($('<option />').val('text-top' ).text(this.rte.i18n('Text top')))
						.append($('<option />').val('middle' ).text(this.rte.i18n('middle')))
						.append($('<option />').val('baseline' ).text(this.rte.i18n('Baseline')))
						.append($('<option />').val('bottom' ).text(this.rte.i18n('Bottom')))
						.append($('<option />').val('text-bottom').text(this.rte.i18n('Text bottom'))),
			margin : $('<div />')
		}
		
		this.command = function() {
			var n = this.rte.selection.getEnd(), opts, url='', w='', h='', f, a, d;
			this.src.margin.elPaddingInput({ type : 'margin' });
			this.placeholder = null;
			this.swf = null;
			if ($(n).hasClass('elrte-swf-placeholder')) {
				this.placeholder = $(n);
				url = $(n).attr('rel');
				w = parseInt($(n).css('width'))||'';
				h = parseInt($(n).css('height'))||'';
				f = $(n).css('float');
				a = $(n).css('vertical-align');
				this.src.margin.val(n);
			} 
			this.src.url.val(url);
			this.src.width.val(w);
			this.src.height.val(h);
			this.src.align.val(f||a);
			
			var opts = {
				submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
				dialog : {
					width : 550,
					position : 'top',
					title : this.rte.i18n('Flash')
				}
			}
			var d = new elDialogForm(opts);
			
			if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
				var src = $('<span />').append(this.src.url.css('width', '85%'))
						.append(
							$('<span />').addClass('ui-state-default ui-corner-all')
								.css({'float' : 'right', 'margin-right' : '3px'})
								.attr('title', self.rte.i18n('Open file manger'))
								.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
									.click( function() {
										self.rte.options.fmOpen( function(url) { self.src.url(url).change(); } );
									})
									.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
							);
			} else {
				var src = this.src.url;
			}
			
			d.append([this.rte.i18n('URL'), src], null, true);
			d.append([this.rte.i18n('Size'), $('<span />').append(this.src.width).append(' x ').append(this.src.height).append(' px')], null, true)
			d.append([this.rte.i18n('Alignment'), this.src.align], null, true);
			d.append([this.rte.i18n('Margins'), this.src.margin], null, true);
			
			
			
			d.open();
			setTimeout( function() {self.src.url.focus()}, 100)
			
			
			var fs = $('<fieldset />').append($('<legend />').text(this.rte.i18n('Preview')))
			d.append(fs, 'main');
			var frame = document.createElement('iframe');
			$(frame).attr('src', '#').addClass('el-rte-preview').appendTo(fs);
			html = this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin</body></html>';
			frame.contentWindow.document.open();
			frame.contentWindow.document.write(html);
			frame.contentWindow.document.close();
			this.frame = frame.contentWindow.document;
			this.preview = $(frame.contentWindow.document.body);
			 				 
			this.src.width.change(function() {
				if (self.swf) {
					var w = parseInt($(this).val())||'';
					$(this).val(w);
					self.swf.css('width', w);
					self.swf.children('embed').css('width', w);
				} else {
					$(this).val('');
				}
			});
			this.src.height.change(function() {
				if (self.swf) {
					var h = parseInt($(this).val())||'';
					$(this).val(h);
					self.swf.css('height', w);
					self.swf.children('embed').css('height', h);
				} else {
					$(this).val('');
				}
			});
			
			this.src.align.change(function() {
				var v = $(this).val(), f = v=='left' || v=='right';
				if (self.swf) {
					self.swf.css({
						'float' : f ? v : '',
						'vertical-align' : f ? '' : v
					});
				} else {
					$(this).val('');
				}
			});
			
			this.src.margin.change(function() {
				if (self.swf) {
					var m = self.src.margin.val();
					if (m.css) {
						self.swf.css('margin', m.css);
					} else {
						self.swf.css('margin-top', m.top);
						self.swf.css('margin-right', m.right);
						self.swf.css('margin-bottom', m.bottom);
						self.swf.css('margin-left', m.left);						
					}
				}
				
			});
			
			this.src.url.change(function() {
				var url = self.rte.utils.absoluteURL($(this).val());
				if (url) {
					var swf = '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" style="border:1px solid #111"><param name="quality" value="high" /><param name="movie" value="'+url+'" /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src="'+url+'" type="application/x-shockwave-flash"></embed></object>';
					self.preview.prepend(swf)
					self.swf = self.preview.children('object').eq(0)
				} else if (self.swf){
					self.swf.remove();
					self.swf = null;
				}
				self.src.width.trigger('change');
				self.src.height.trigger('change');
				self.src.align.trigger('change');
			}).trigger('change');
		}
		
		this.set = function() {
			self.swf = null
			var url = this.rte.utils.absoluteURL(this.src.url.val()),
				w = parseInt(this.src.width.val()) || '',
				h = parseInt(this.src.height.val()) || ''
				a = this.src.align.val(),
				f = a == 'left' || a == 'right' ? a : '';
			if (url) {
				var m = this.src.margin.val(),
					css = {
						width : w,
						height : h,
						'float' : f,
						'vertical-align' : f ? '' : a 
					};
				if (m.css) {
					css['margin'] = m.css;
				} else {
					css['margin-top'] = m.top;
					css['margin-right'] = m.right;
					css['margin-bottom'] = m.bottom;
					css['margin-left'] = m.left;
				}
				if (self.placeholder) {
					self.placeholder.css(css).attr('rel', url);
				} else {
					this.placeholder = $(this.rte.dom.create('img'))
						.attr('src', this.rte.swfPlaceholder)
						.attr('rel', url)
						.css(css)
						.addClass('elrte-swf-placeholder')
					this.rte.selection.insertNode(this.placeholder.get(0));
				}
			} else {
				if (self.placeholder) {
					self.placeholder.remove();
				}
			}
			
			
		}
		
		
		this.update = function() {
			this.domElem.removeClass('disabled');
			var n = this.rte.selection.getNode();
			this.domElem.toggleClass('active', n.nodeName == 'IMG' && $(n).hasClass('elrte-swf-placeholder'))
			
		}
		
		
	}
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.fontname = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	var opts = {
		tpl : '<span style="font-family:%val">%label</span>',
		select : function(v) { self.set(v); },
		src : {
			'' : this.rte.i18n('Font'),
			'andale mono,sans-serif' : 'Andale Mono',
			'arial,helvetica,sans-serif' : 'Arial',
			'arial black,gadget,sans-serif' : 'Arial Black',
			'book antiqua,palatino,sans-serif' : 'Book Antiqua',
			'comic sans ms,cursive' : 'Comic Sans MS',
			'courier new,courier,monospace' : 'Courier New',
			'georgia,palatino,serif' : 'Georgia',
			'helvetica,sans-serif' : 'Helvetica',
			'impact,sans-serif' : 'Impact',
			'lucida console,monaco,monospace' : 'Lucida console',
			'lucida sans unicode,lucida grande,sans-serif' : 'Lucida grande',
			'tahoma,sans-serif' : 'Tahoma',
			'times new roman,times,serif' : 'Times New Roman',
			'trebuchet ms,lucida grande,verdana,sans-serif' : 'Trebuchet MS',
			'verdana,geneva,sans-serif' : 'Verdana'
		}
	}
	
	this.select = this.domElem.elSelect(opts);
	
	this.command = function() {
	}
	
	this.set = function(size) {
		this.rte.history.add();
		var nodes = this.rte.selection.selected({filter : 'textContainsNodes'});
		$.each(nodes, function() {
			$this = /^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName) ? $(this).find('td,th') : $(this);
			$(this).css('font-family', size).find('[style]').css('font-family', '');
		});
		this.rte.ui.update();
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled'); 
		var n = this.rte.selection.getNode();
		if (n.nodeType != 1) {
			n = n.parentNode;
		}
		var v = $(n).css('font-family');
		v = v ? v.toString().toLowerCase().replace(/,\s+/g, ',').replace(/'|"/g, '') : '';
		this.select.val(opts.src[v] ? v : '');
	}
}
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.fontsize = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	var opts = {
		labelTpl : '%label',
		tpl : '<span style="font-size:%val;line-height:1.2em">%label</span>',
		select : function(v) { self.set(v); },
		src : {
			'' : this.rte.i18n('Font size'),
			'xx-small' : this.rte.i18n('Small (8pt)'), 
			'x-small' : this.rte.i18n('Small (10px)'), 
			'small' : this.rte.i18n('Small (12pt)'), 
			'medium' : this.rte.i18n('Normal (14pt)'),
			'large' : this.rte.i18n('Large (18pt)'),
			'x-large' : this.rte.i18n('Large (24pt)'),
			'xx-large' : this.rte.i18n('Large (36pt)')
		}
	}
	
	this.select = this.domElem.elSelect(opts);
	
	this.command = function() {
	}
	
	this.set = function(size) {
		this.rte.history.add();
		var nodes = this.rte.selection.selected({filter : 'textContainsNodes'});
		$.each(nodes, function() {
			$this = /^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName) ? $(this).find('td,th') : $(this);
			$this.css('font-size', size).find("[style]").css('font-size', '');
		});
		this.rte.ui.update();
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
		var n = this.rte.selection.getNode();
		this.select.val((m = this.rte.dom.attr(n, 'style').match(/font-size:\s*([^;]+)/i)) ? m[1] : '');
	}
}
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.forecolor = function(rte, name) {
	var self = this;
	this.constructor.prototype.constructor.call(this, rte, name);
	var opts = {
		'class' : '',
		color : this.defaultColor,
		update : function(c) { self.indicator.css('background-color', c); },
		change : function(c) { self.set(c) }
	}
	
	this.defaultColor = this.rte.utils.rgb2hex( $(this.rte.doc.body).css(this.name=='forecolor' ? 'color' : 'background-color') );
	this.picker = this.domElem.elColorPicker(opts);
	this.indicator = $('<div />').addClass('color-indicator').prependTo(this.domElem);
	
	this.command = function() {
	}
	
	this.set = function(c) {
		if (!this.rte.selection.collapsed()) {
			this.rte.history.add();
			var nodes = this.rte.selection.selected({collapse : false, wrap : 'text'}),
				css = this.name == 'forecolor' ? 'color' : 'background-color';			
			$.each(nodes, function() {
				if (/^(THEAD|TBODY|TFOOT|TR)$/.test(this.nodeName)) {
					$(this).find('td,th').each(function() {
						$(this).css(css, c).find('*').css(css, '');
					})
				} else {
					$(this).css(css, c).find('*').css(css, '');
				}
			});
			this.rte.ui.update(true);
		}
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
		var n = this.rte.selection.getNode();
		if (n.nodeType != 1) {
			n = n.parentNode;
		}
		var v = $(n).css(this.name == 'forecolor' ? 'color' : 'background-color');
		this.picker.val(v && v!='transparent' ? this.rte.utils.rgb2hex(v): this.defaultColor);
	}
}
elRTE.prototype.ui.prototype.buttons.hilitecolor = elRTE.prototype.ui.prototype.buttons.forecolor;
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.formatblock = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var cmd = this.rte.browser.msie 
		? function(v) { self.val = v; self.constructor.prototype.command.call(self); }
		: function(v) { self.ieCommand(v); } 
	var self = this;
	var opts = {
		labelTpl : '%label',
		tpls : {'' : '%label'},
		select : function(v) { self.formatBlock(v); },
		src : {
			'span' : this.rte.i18n('Format'),
			'h1' : this.rte.i18n('Heading 1'),
			'h2' : this.rte.i18n('Heading 2'),
			'h3' : this.rte.i18n('Heading 3'),
			'h4' : this.rte.i18n('Heading 4'),
			'h5' : this.rte.i18n('Heading 5'),
			'h6' : this.rte.i18n('Heading 6'),
			'p' : this.rte.i18n('Paragraph'),
			'address' : this.rte.i18n('Address'),
			'pre' : this.rte.i18n('Preformatted'),
			'div' : this.rte.i18n('Normal (DIV)')
		}
	}
	this.select = this.domElem.elSelect(opts);
	
	this.command = function() {
	}
	
	this.formatBlock = function(v) {
		function format(n, tag) {
			
			function replaceChilds(p) {
				$(p).find('h1,h2,h3,h4,h5,h6,p,address,pre').each(function() {
					$(this).replaceWith($(this).html());
				});
				return p;
			}
			
			if (/^(LI|DT|DD|TD|TH|CAPTION)$/.test(n.nodeName)) {
				!self.rte.dom.isEmpty(n) && self.rte.dom.wrapContents(replaceChilds(n), tag);
			} else if (/^(UL|OL|DL|TABLE)$/.test(n.nodeName)) {
				self.rte.dom.wrap(n, tag);
				// var html = '';
				// $(n).children().each(function() {
				// 	replaceChilds(this);
				// 	html += $(this).html();
				// });
				// $(n).replaceWith($(self.rte.dom.create(tag)).html(html||''));
				
			} else {
				!self.rte.dom.isEmpty(n) && $(replaceChilds(n)).replaceWith( $(self.rte.dom.create(tag)).html($(n).html()));
			}
			
		}
		this.rte.history.add();
		var tag = v.toUpperCase(),
			i, n, $n,
			c = this.rte.selection.collapsed(),
			nodes = this.rte.selection.selected({
				collapsed : true,
				blocks : true,
				filter : 'textContainsNodes',
				wrap : 'inline',
				tag : 'span'
			})
			l = nodes.length,
			s = $(nodes[0]).prev(),
			e = $(nodes[nodes.length-1]).next();
			// s = $(this.rte.dom.create('span')).insertBefore(nodes[0]), 
			// e = $(this.rte.dom.create('span')).insertAfter(nodes[nodes.length-1]);
		
		while (l--) {
			n = nodes[l];
			$n = $(n);
			if (tag == 'DIV' || tag == 'SPAN') {
				if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)) {
					$n.replaceWith($(this.rte.dom.create('div')).html($n.html()||''));
				}
			} else {
				if (/^(THEAD|TBODY|TFOOT|TR)$/.test(n.nodeName)) {
					$n.find('td,th').each(function() { format(this, tag); });
				} else if (n.nodeName != tag) {
					format(n, tag);
				}
			}
		}
		if (s.length && e.length) {
			self.rte.selection.select(s.next()[0], e.prev()[0]);
		}
		// self.rte.selection.select(s.next()[0], e.prev()[0]);
		// s.add(e).remove();
		// c && self.rte.selection.collapse(true);
		this.rte.ui.update(true);
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(H[1-6]|P|ADDRESS|PRE)$/);
		this.select.val(n ? n.nodeName.toLowerCase() : 'span');
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.fullscreen = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.active = true;
	this.parents = [];
	this.height = 0;
	var self = this;
	
	this.command = function() {
		
		if (this.rte.editor.hasClass('el-fullscreen')) {
			for (var i=0; i < this.parents.length; i++) {
				$(this.parents[i]).css('position', 'relative');
			};
			this.parents = [];
			this.rte.editor.removeClass('el-fullscreen');
			this.rte.workzone.add(this.rte.iframe).height(this.height);
			this.domElem.removeClass('active');
		} else {
			this.parents = [];
			var p = this.rte.editor.parents().each(function() {
				
				if (this.nodeName != 'BODY' && this.name != 'HTML' && $(this).css('position') == 'relative') {
					self.parents.push(this);
					$(this).css('position', 'static');
				}
			});
			this.height = this.rte.workzone.height();
			this.rte.editor.addClass('el-fullscreen');
			var h = parseInt(this.rte.editor.height() - this.rte.toolbar.height() - this.rte.statusbar.height() - this.rte.tabsbar.height() - 17);
			h>0 && this.rte.workzone.add(this.rte.iframe).height(h);
			this.domElem.addClass('active');
		}
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.horizontalrule = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.src = {
		width : $('<input type="text" />').attr({'name' : 'width', 'size' : 4}).css('text-align', 'right'),
		wunit : $('<select />').attr('name', 'wunit')
					.append($('<option />').val('%').text('%'))
					.append($('<option />').val('px').text('px'))
					.val('%'),
		height : $('<input type="text" />').attr({'name' : 'height', 'size' : 4}).css('text-align', 'right'),
		bg : $('<div />'),
		border : $('<div />'),
		'class' : $('<input type="text" />').css('width', '100%'),
		style : $('<input type="text" />').css('width', '100%')
	}
	
	this.command = function() {
		this.src.bg.elColorPicker({palettePosition : 'outer', 'class' : 'el-colorpicker ui-icon ui-icon-pencil'});
		
		var n = this.rte.selection.getEnd();
		this.hr = n.nodeName == 'HR' ? $(n) : $(rte.doc.createElement('hr')).css({width : '100%', height : '1px'});
		this.src.border.elBorderSelect({styleHeight : 73, value : this.hr});
		
		var _w = this.hr.css('width') || this.hr.attr('width');
		this.src.width.val(parseInt(_w) || 100);
		this.src.wunit.val(_w.indexOf('px') != -1 ? 'px' : '%');
		
		this.src.height.val( this.rte.utils.toPixels(this.hr.css('height') || this.hr.attr('height')) || 1) ;
		this.src.bg.val(this.rte.utils.rgb2hex(this.hr.css('background-color')) || '');
		this.src['class'].val(this.rte.dom.attr(this.hr, 'class'));
		this.src.style.val(this.rte.dom.attr(this.hr, 'style'));
		
		var opts = {
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
			dialog : {
				title : this.rte.i18n('Horizontal rule')
			}
		}
		var d = new elDialogForm(opts);
		d.append([this.rte.i18n('Width'), $('<span />').append(this.src.width).append(this.src.wunit) ], null, true)
			.append([this.rte.i18n('Height'), $('<span />').append(this.src.height).append(' px')], null, true)
			.append([this.rte.i18n('Border'), this.src.border], null, true)
			.append([this.rte.i18n('Background'), this.src.bg], null, true)
			.append([this.rte.i18n('Css class'), this.src['class']], null, true)
			.append([this.rte.i18n('Css style'), this.src.style], null, true)
			.open();
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
		if (this.rte.selection.getEnd().nodeName == 'HR') {
			this.domElem.addClass('active');
		} else {
			this.domElem.removeClass('active');
		}
	}
	
	this.set = function() {
		this.rte.history.add();
		!this.hr.parentNode && this.rte.selection.insertNode(this.hr.get(0));
		var attr = {
			noshade : true,
			style : this.src.style.val()
		}
		var b = this.src.border.val();
		var css = {
			width : (parseInt(this.src.width.val()) || 100)+this.src.wunit.val(),
			height : parseInt(this.src.height.val()) || 1,
			'background-color' : this.src.bg.val(),
			border : b.width && b.style ? b.width+' '+b.style+' '+b.color : ''
		}
		this.hr.removeAttr('class')
			.removeAttr('style')
			.removeAttr('width')
			.removeAttr('height')
			.removeAttr('align')
			.attr(attr)
			.css(css);
		
		if (this.src['class'].val()) {
			this.hr.attr('class', this.src['class'].val());	
		}
		this.rte.ui.update()
	}
	
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.image = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.img = null
	this.init = function() {
		
		this.labels = {
			main : 'Properies',
			link : 'Link',
			adv : 'Advanced',
			events : 'Events',
			id : 'ID',
			'class' : 'Css class',
			style : 'Css style',
			longdesc : 'Detail description URL',
			href : 'URL',
			target : 'Open in',
			title : 'Title'
		}
		
		this.src = {
			main : {
				src : $('<input type="text" />').css('width', '100%'),
				title : $('<input type="text" />').css('width', '100%'),
				alt : $('<input type="text" />').css('width', '100%'),
				width : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
				height : $('<input type="text" />').attr('size', 5).css('text-align', 'right'),
				margin : $('<div />'),
				align : $('<select />').css('width', '100%')
							.append($('<option />').val('').text(this.rte.i18n('Not set', 'dialogs')))
							.append($('<option />').val('left' ).text(this.rte.i18n('Left')))
							.append($('<option />').val('right' ).text(this.rte.i18n('Right')))
							.append($('<option />').val('top' ).text(this.rte.i18n('Top')))
							.append($('<option />').val('text-top' ).text(this.rte.i18n('Text top')))
							.append($('<option />').val('middle' ).text(this.rte.i18n('middle')))
							.append($('<option />').val('baseline' ).text(this.rte.i18n('Baseline')))
							.append($('<option />').val('bottom' ).text(this.rte.i18n('Bottom')))
							.append($('<option />').val('text-bottom').text(this.rte.i18n('Text bottom'))),
				border : $('<div />')
			},
			adv : {
				id : $('<input type="text" />').css('width', '100%'),
				'class' : $('<input type="text" />').css('width', '100%'),
				style : $('<input type="text" />').css('width', '100%'),
				longdesc : $('<input type="text" />').css('width', '100%')
			},
			// link : {
			// 	href : $('<input type="text" />').css('width', '100%'),
			// 	title : $('<input type="text" />').css('width', '100%')
			// },
			
			events : {}
		}
		
		$.each(
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'], 
			function() {
				self.src.events[this] = $('<input type="text" />').css('width', '100%');
		});
		
		$.each(self.src, function() {
			for (var n in this) {
				this[n].attr('name', n);
			}
		});
		
	}
	
	this.command = function() {
		!this.src && this.init();
		this.rte.browser.msie && this.rte.selection.saveIERange();
		this.src.main.border.elBorderSelect({ change : function() { self.updateImg(); }, name : 'border' });
		this.src.main.margin.elPaddingInput({ type : 'margin' });
		this.cleanValues();
		this.src.main.src.val('');
		
		var n = this.rte.selection.getEnd();
		this.preview = null;
		this.prevImg = null;
		this.link = null;
		if (n.nodeName == 'IMG' && !$(n).hasClass('elrte-swf-placeholder')) {
			this.img = $(n);
		} else {
			this.img = $(this.rte.doc.createElement('img'));
			
		}
		
		var opts = {
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
			dialog : {
				width : 520,
				position : 'top',
				title : this.rte.i18n('Image')
			}
		}
		var d = new elDialogForm(opts);
		
		if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
			var src = $('<span />').append(this.src.main.src.css('width', '88%'))
					.append(
						$('<span />').addClass('ui-state-default ui-corner-all')
							.css({'float' : 'right', 'margin-right' : '3px'})
							.attr('title', self.rte.i18n('Open file manger'))
							.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
								.click( function() {
									self.rte.options.fmOpen( function(url) { self.src.main.src.val(url).change() } );
								})
								.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
						);
		} else {
			var src = this.src.main.src;
		}
		
		d.tab('main', this.rte.i18n('Properies'))
			.append([this.rte.i18n('Image URL'), src], 'main', true)
			.append([this.rte.i18n('Title'), this.src.main.title], 'main', true)
			.append([this.rte.i18n('Alt text'), this.src.main.alt], 'main', true)
			.append([this.rte.i18n('Size'), $('<span />').append(this.src.main.width).append(' x ').append(this.src.main.height).append(' px')], 'main', true)
			.append([this.rte.i18n('Alignment'), this.src.main.align], 'main', true)
			.append([this.rte.i18n('Margins'), this.src.main.margin], 'main', true)
			.append([this.rte.i18n('Border'), this.src.main.border], 'main', true)
		for (var tab in this.src) {
			if (tab != 'main') {
				d.tab(tab, this.rte.i18n(this.labels[tab]));
				for (var name in this.src[tab]) {
					var l = this.rte.i18n(this.labels[name] ? this.labels[name] : name);
					if (tab == 'events') {
						this.src[tab][name].val(this.rte.utils.trimEventCallback(this.img.attr(name)));
					} else if (tab == 'link') {
						if (this.link) {
							this.src[tab][name].val(name == 'href' ? this.rte.utils.absoluteURL(this.link.attr(name)) : this.link.attr(name));
						}
					} else {
						this.src[tab][name].val(this.img.attr(name)||'');
					}
					d.append([l, this.src[tab][name]], tab, true);
				}
			}
		};
				
		d.open();
		
		var fs = $('<fieldset />').append($('<legend />').text(this.rte.i18n('Preview')))
		d.append(fs, 'main');
		var frame = document.createElement('iframe');
		$(frame).attr('src', '#').addClass('el-rte-preview').appendTo(fs);
		html = this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> </body></html>';
		frame.contentWindow.document.open();
		frame.contentWindow.document.write(html);
		frame.contentWindow.document.close();
		this.frame = frame.contentWindow.document
		this.preview = $(frame.contentWindow.document.body)
		 				 .text('Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin');
		
		if (this.img.attr('src')) {
			
			this.prevImg = $(this.frame.createElement('img'))
				.attr('src', this.rte.utils.absoluteURL(this.img.attr('src')))
				
			this.prevImg.attr('width', this.img.attr('width'))
				.attr('height', this.img.attr('height'))
				.attr('title', this.img.attr('title')||'')
				.attr('alt', this.img.attr('alt')||'')
				.attr('style', this.img.attr('style')||'')
			for (var n in this.src.adv) {
				var a = this.img.attr(n);
				if (a) {
					this.prevImg.attr(n, a)
				}
			}	
				
			this.preview.prepend(this.prevImg);
			this.updateValues();
		}
		
		$.each(this.src, function() {
			$.each(this, function() {
				if (this === self.src.main.src) {
					this.bind('change', function() { self.updatePreview(); });
				} else if (this == self.src.main.width || this == self.src.main.height) {
					this.bind('change', function(e) {self.updateDimesions(e);});
				} else {
					this.bind('change', function() { self.updateImg(); });
				}
			});
		});
		
		// this.src.link.href.change(function() {
		// 	var $this = $(this);
		// 	$this.val(self.rte.utils.absoluteURL($this.val()));
		// });
		
	}
	
	
	
	this.updateValues = function() {
		
		var i = this.prevImg.get(0);
		
		this.origW = this.prevImg.attr('width'); 
		this.origH = this.prevImg.attr('height');
		
		this.src.main.src.val(this.rte.dom.attr(i, 'src'));
		this.src.main.title.val(this.rte.dom.attr(i, 'title'));		
		this.src.main.alt.val(this.rte.dom.attr(i, 'alt'));
		this.src.main.width.val(this.origW);
		this.src.main.height.val(this.origH);
		this.src.adv['class'].val(this.rte.dom.attr(i, 'class'));
		this.src.main.margin.val(this.prevImg)
		var f = this.prevImg.css('float');
		this.src.main.align.val(f == 'left' || f == 'right' ? f : (this.prevImg.css('vertical-align')||''));
		this.src.main.border.val(this.prevImg)
		this.src.adv.style.val(this.rte.dom.attr(i, 'style'));
	}
	
	
	this.cleanValues = function() {
		$.each(this.src, function() {
			$.each(this, function() {
				var $this = $(this);
				if ($this.attr('name') != 'src') {
					$this.val('');
				}
			});
		});
	}
	
	
	this.updateImg = function() {
		this.prevImg.attr({
				style : $.trim(this.src.adv.style.val()),
				title : $.trim(this.src.main.title.val()),
				alt : $.trim(this.src.main.alt.val()),
				width : parseInt(this.src.main.width.val()),
				height : parseInt(this.src.main.height.val())
			});
		var a = this.src.main.align.val();
		var f = a == 'left' || a == 'right' ? a : '';
		
		var b = this.src.main.border.val(); 
		var m = this.src.main.margin.val();
		this.prevImg.css('float', f);
		this.prevImg.css('vertical-align', f ? '' : a);
		this.prevImg.css('border', $.trim(b.width+' '+b.style+' '+b.color));
		if (m.css) {
			this.prevImg.css('margin', m.css);
		} else {
			this.prevImg.css('margin-top', m.top);
			this.prevImg.css('margin-right', m.right);
			this.prevImg.css('margin-bottom', m.bottom);
			this.prevImg.css('margin-left', m.left);						
		}
		$.each([this.src.events, this.src.adv], function() {
			$.each(this, function() {
				var $this = $(this);
				var n = $this.attr('name');
				if (n != 'style') {
					var v = $.trim($this.val());
					if (v) {
						self.prevImg.attr(n, v);
					} else {
						self.prevImg.removeAttr(n);
					}
				}
			});
		});
		
	}
	
	
	this.updatePreview = function() {
		
		var imgsrc = this.prevImg ? this.prevImg.attr('src') : '';
		var src = $.trim(this.src.main.src.val());
		if (!src || src !=imgsrc) { // new image or empty src
			if (this.prevImg) {
				this.prevImg.remove();
				this.prevImg = null;
			}
			this.cleanValues();
			if (src) { // new image
				
				this.prevImg = $(this.frame.createElement('img'))
					.attr('src', this.rte.utils.absoluteURL(src))
					.bind('load', function() {
						self.updateValues();
					})
				this.preview.prepend(this.prevImg);
				self.updateValues();
			}
		} else { // update existsed image
			this.updateImg();
		}
	}
	
	this.updateDimesions = function(e) {
		
		var w = parseInt(this.src.main.width.val()) || 0;
		var h = parseInt(this.src.main.height.val()) || 0;
		if (w > 0 && h > 0) {
			if (e.currentTarget == this.src.main.width.get(0)) {
				
				this.src.main.height.val(parseInt(w*this.origH/this.origW));
			} else {
				this.src.main.width.val(parseInt(h*this.origW/this.origH));
			}	
		} else {
			this.src.main.width.val(this.origW);
			this.src.main.height.val(this.origH);			
		}
		this.updateImg();
	}
	
	this.set = function() {
		this.rte.history.add();
		if (!this.prevImg || !this.prevImg.attr('width')) {
			this.img && this.img.remove();
			this.link && this.rte.doc.execCommand('unlink', false, null);
		} else {
			if (!this.img.parents().length) {
				this.rte.browser.msie && this.rte.selection.restoreIERange();
				this.img = $(this.rte.doc.createElement('img'));
			}
			this.img.attr({
					src : this.rte.utils.absoluteURL($.trim(this.src.main.src.val())),
					style : $.trim(this.rte.dom.attr(this.prevImg.get(0), 'style')),
					title : $.trim(this.src.main.title.val()),
					alt : $.trim(this.src.main.alt.val()),
					width : parseInt(this.src.main.width.val()),
					height : parseInt(this.src.main.height.val())
				});
				
			for (var _n in this.src.adv) {
				if (_n != 'style') {
					var val = this.src.adv[_n].val();
					if (val) {
						this.img.attr(_n, val);
					} else {
						this.img.removeAttr(_n)
					}
					
				}
			}
			for (var _n in this.src.events) {
				var val = this.src.events[_n].val();
				if (val) {
					this.img.attr(_n, val);
				} else {
					this.img.removeAttr(_n)
				}
			}
				
			if (!this.img.parents().length) {
				this.rte.selection.insertNode(this.img.get(0))
			}
			// Link
			// var href = this.rte.utils.absoluteURL(this.src.link.href.val());
			// var title = $.trim(this.src.link.title.val());
			// if (!href) {
			// 	if (this.link) {
			// 		this.link.replaceWith(this.prevImg);
			// 	}
			// } else {
			// 	if (this.link) {
			// 		this.link.attr('href', href).removeAttr('target').removeAttr('title');
			// 		title && this.alink.attr('title', title);
			// 	} else {
			// 		this.link = $(this.rte.doc.createElement('a')).attr('href', href);
			// 		title && this.link.attr('title', title);
			// 		this.prevImg.wrap(this.link);
			// 	}
			// }
		}
		this.rte.ui.update();
	}
	this.update = function() {
		this.domElem.removeClass('disabled');
		var n = this.rte.selection.getEnd();
		if (n.nodeName == 'IMG' && !$(n).hasClass('elrte-swf-placeholder')) {
			this.domElem.addClass('active');
		} else {
			this.domElem.removeClass('active');
		}
	}
	
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.indent = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	
	this.command = function() {
		this.rte.history.add();
		var nodes = this.rte.selection.selected({collapsed : true, blocks : true, wrap : 'inline', tag : 'p'});
		function indent(n) {
			var css = /(IMG|HR|TABLE|EMBED|OBJECT)/.test(n.nodeName) ? 'margin-left' : 'padding-left';
			var val = self.rte.dom.attr(n, 'style').indexOf(css) != -1 ? parseInt($(n).css(css))||0 : 0;
			$(n).css(css, val+40+'px');
		}
		
		for (var i=0; i < nodes.length; i++) {
			if (/^(TABLE|THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(nodes[i].nodeName)) {
				$(nodes[i]).find('td,th').each(function() {
					indent(this);
				});
			} else if (/^LI$/.test(nodes[i].nodeName)) {
				var n = $(nodes[i]);
				$(this.rte.dom.create(nodes[i].parentNode.nodeName))
					.append($(this.rte.dom.create('li')).html(n.html()||'')).appendTo(n.html('&nbsp;'));
			} else {
				indent(nodes[i]);
			}
		};
		this.rte.ui.update();
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.justifyleft = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.align = this.name == 'justifyfull' ? 'justify' : this.name.replace('justify', '');
	this.command = function() {
		var s = this.rte.selection.selected({collapsed:true, blocks : true, tag : 'div'}),
			l = s.length;
		l && this.rte.history.add();
		while (l--) {
			this.rte.dom.filter(s[l], 'textNodes') && $(s[l]).css('text-align', this.align);
		}
		this.rte.ui.update();
	}
	
	this.update = function() {
		var s = this.rte.selection.getNode(), 
			n = s.nodeName == 'BODY' ? s : this.rte.dom.selfOrParent(s, 'textNodes')||(s.parentNode && s.parentNode.nodeName == 'BODY' ? s.parentNode : null);
		if (n) {
			this.domElem.removeClass('disabled').toggleClass('active', $(n).css('text-align') == this.align);
		} else {
			this.domElem.addClass('disabled');
		}
	}
	
}
elRTE.prototype.ui.prototype.buttons.justifycenter = elRTE.prototype.ui.prototype.buttons.justifyleft;
elRTE.prototype.ui.prototype.buttons.justifyright = elRTE.prototype.ui.prototype.buttons.justifyleft;
elRTE.prototype.ui.prototype.buttons.justifyfull = elRTE.prototype.ui.prototype.buttons.justifyleft;
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.link = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	
	function init() {
		self.labels = {
			id : 'ID',
			'class' : 'Css class',
			style : 'Css style',
			dir : 'Script direction',
			lang : 'Language',
			charset : 'Charset',
			type : 'Target MIME type',
			rel : 'Relationship page to target (rel)',
			rev : 'Relationship target to page (rev)',
			tabindex : 'Tab index',
			accesskey : 'Access key'
		}
		self.src = {
			main : {
				href : $('<input type="text" />'),
				title : $('<input type="text" />'),
				anchor : $('<select />').attr('name', 'anchor')//,
				// target : $('<select />')
				// 	.append($('<option />').text(self.rte.i18n('In this window')).val(''))
				// 	.append($('<option />').text(self.rte.i18n('In new window (_blank)')).val('_blank'))
				// 	.append($('<option />').text(self.rte.i18n('In new parent window (_parent)')).val('_parent'))
				// 	.append($('<option />').text(self.rte.i18n('In top frame (_top)')).val('_top'))
			},
			popup : {
				use : $('<input type="checkbox />"'),
				url : $('<input type="text" />' ).val('http://'),
				name : $('<input type="text" />' ),
				width : $('<input type="text" />' ).attr({size : 6, title : self.rte.i18n('Width')} ).css('text-align', 'right'),
				height : $('<input type="text" />' ).attr({size : 6, title : self.rte.i18n('Height')}).css('text-align', 'right'),
				left : $('<input type="text" />' ).attr({size : 6, title : self.rte.i18n('Left')} ).css('text-align', 'right'),
				top : $('<input type="text" />' ).attr({size : 6, title : self.rte.i18n('Top')} ).css('text-align', 'right'),
				location : $('<input type="checkbox" />'),				
				menubar : $('<input type="checkbox" />'),
				toolbar : $('<input type="checkbox" />'),
				scrollbars : $('<input type="checkbox" />'),
				status : $('<input type="checkbox" />'),
				resizable : $('<input type="checkbox" />'),
				dependent : $('<input type="checkbox" />'),
				retfalse : $('<input type="checkbox" />').attr('checked', true)
			},
			adv : {
				id : $('<input type="text" />'),
				'class' : $('<input type="text" />'),
				style : $('<input type="text" />'),
				dir : $('<select />')
							.append($('<option />').text(self.rte.i18n('Not set')).val(''))
							.append($('<option />').text(self.rte.i18n('Left to right')).val('ltr'))
							.append($('<option />').text(self.rte.i18n('Right to left')).val('rtl')),
				lang : $('<input type="text" />'),
				charset : $('<input type="text" />'),
				type : $('<input type="text" />'),
				rel : $('<input type="text" />'),
				rev : $('<input type="text" />'),
				tabindex : $('<input type="text" />'),
				accesskey : $('<input type="text" />')
			},
			events : {}
		}
		$.each(
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'], 
			function() {
				self.src.events[this] = $('<input type="text" />');
		});
		$.each(self.src, function() {
			for (var n in this) {
				this[n].attr('name', n);
				var t = this[n].attr('type');
				if (!t || (t == 'text' && !this[n].attr('size')) ) {
					this[n].css('width', '100%');
				}
			}
		});
		
	}
	
	this.command = function() {
		!this.src && init();
		this.rte.browser.msie && this.rte.selection.saveIERange();
		
		var n = this.rte.selection.getNode();
		var l;
		if ((n.nodeName == "A") && (l = this.rte.dom.selfOrParentLink(n))){
		 this.link = l;
		 } else {
		 this.link = null;
		 }
		// if ((l = this.rte.dom.selfOrParentLink(n))) {
		// 	this.link = l;
		// } else if ((l = this.rte.dom.childLinks(n))) {
		// 	this.link = l[0];
		// }
		this.link = this.link ? $(this.link) : $(this.rte.doc.createElement('a'));
		this.updatePopup();
		
		this.src.main.anchor.empty();
		$('a[href!=""][name]', this.rte.doc).each(function() {
			var n = $(this).attr('name');
			self.src.main.anchor.append($('<option />').val(n).text(n));
		});
		if (this.src.main.anchor.children().length) {
			this.src.main.anchor.prepend($('<option />').val('').text(this.rte.i18n('Select bookmark')) )
				.change(function() {
					var v = $(this).val();
					if (v) {
						self.src.main.href.val('#'+v);
					}
				});
		}
		
		var opts = {
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
			tabs : { show : function(e, ui) { if (ui.index==3) { self.updateOnclick(); } } },
			dialog : {
				width : 'auto',
				width : 430,
				title : this.rte.i18n('Link')
			}
		}
		var d = new elDialogForm(opts);
		
		var l = $('<div />')
			.append( $('<label />').append(this.src.popup.location).append(this.rte.i18n('Location bar')))
			.append( $('<label />').append(this.src.popup.menubar).append(this.rte.i18n('Menu bar')))
			.append( $('<label />').append(this.src.popup.toolbar).append(this.rte.i18n('Toolbar')))				
			.append( $('<label />').append(this.src.popup.scrollbars).append(this.rte.i18n('Scrollbars')));
		var r = $('<div />')
			.append( $('<label />').append(this.src.popup.status).append(this.rte.i18n('Status bar')))
			.append( $('<label />').append(this.src.popup.resizable).append(this.rte.i18n('Resizable')))
			.append( $('<label />').append(this.src.popup.dependent).append(this.rte.i18n('Depedent')))				
			.append( $('<label />').append(this.src.popup.retfalse).append(this.rte.i18n('Add return false')));
		
		d.tab('main', this.rte.i18n('Properies'))
			.tab('popup', this.rte.i18n('Popup'))
			.tab('adv', this.rte.i18n('Advanced'))
			.tab('events', this.rte.i18n('Events'))
			.append($('<label />').append(this.src.popup.use).append(this.rte.i18n('Open link in popup window')), 'popup')
			.separator('popup')
			.append([this.rte.i18n('URL'), this.src.popup.url], 'popup', true)
			.append([this.rte.i18n('Window name'), this.src.popup.name], 'popup', true)
			.append([this.rte.i18n('Window size'), $('<span />').append(this.src.popup.width).append(' x ').append(this.src.popup.height).append(' px')], 'popup', true)
			.append([this.rte.i18n('Window position'), $('<span />').append(this.src.popup.left).append(' x ').append(this.src.popup.top).append(' px')], 'popup', true)				
			.separator('popup')
			.append([l, r], 'popup', true);
		var link = this.link.get(0);
		var href = this.rte.dom.attr(link, 'href');
		this.src.main.href.val(href).change(function() {
			$(this).val(self.rte.utils.absoluteURL($(this).val()));
		});
		
		if (this.rte.options.fmAllow && this.rte.options.fmOpen) {
			var s = $('<span />').append(this.src.main.href.css('width', '87%'))
				.append(
					$('<span />').addClass('ui-state-default ui-corner-all')
						.css({'float' : 'right', 'margin-right' : '3px'})
						.attr('title', self.rte.i18n('Open file manger'))
						.append($('<span />').addClass('ui-icon ui-icon-folder-open'))
							.click( function() {
								self.rte.options.fmOpen( function(url) { self.src.main.href.val(url).change(); } );
							})
							.hover(function() {$(this).addClass('ui-state-hover')}, function() { $(this).removeClass('ui-state-hover')})
				);
			d.append([this.rte.i18n('Link URL'), s], 'main', true);
		} else {
			d.append([this.rte.i18n('Link URL'), this.src.main.href], 'main', true);
		}
		this.src.main.href.change();
		
		d.append([this.rte.i18n('Title'), this.src.main.title.val(this.rte.dom.attr(link, 'title'))], 'main', true);
		if (this.src.main.anchor.children().length) {
			d.append([this.rte.i18n('Bookmark'), this.src.main.anchor.val(href)], 'main', true)
		}
		for (var n in this.src.adv) {
			this.src.adv[n].val(this.rte.dom.attr(link, n));
			d.append([this.rte.i18n(this.labels[n] ? this.labels[n] : n), this.src.adv[n]], 'adv', true);
		}
		for (var n in this.src.events) {
			var v = this.rte.utils.trimEventCallback(this.rte.dom.attr(link, n));
			this.src.events[n].val(v);
			d.append([this.rte.i18n(this.labels[n] ? this.labels[n] : n), this.src.events[n]], 'events', true);
		}
		
		this.src.popup.use.change(function() {
			var c = $(this).attr('checked');
			$.each(self.src.popup, function() {
				if ($(this).attr('name') != 'use') {
					if (c) {
						$(this).removeAttr('disabled');
					} else {
						$(this).attr('disabled', true);
					}
				}
			})
		});
		this.src.popup.use.change();
		d.open();
	}
	
	this.update = function() {
		var n = this.rte.selection.getNode();
		if (this.rte.dom.selfOrParentAnchor(n)) {
			this.domElem.addClass('disabled');	
		} 
		else if ((n.nodeName == "A") && (l = this.rte.dom.selfOrParentLink(n))) {
			this.domElem.removeClass('disabled').addClass('active');
		}
		// else if (this.rte.dom.selfOrParentLink(n) || this.rte.dom.childLinks(n).length) {
		// 	this.domElem.removeClass('disabled').addClass('active');
		// } 
		else {
			this.domElem.removeClass('active');
			if (!this.rte.selection.collapsed() || (n.nodeType == 1 && /^(IMG|EMBED|OBJECT)$/.test(n.nodeName))) {
				this.domElem.removeClass('disabled');
			} else {
				this.domElem.addClass('disabled');
			}
		}
	}
	
	this.updatePopup = function() {
		var onclick = this.rte.dom.attr(this.link.get(0), 'onclick');
		onclick = onclick ? $.trim(onclick.toString()) : ''
		if ( onclick.length>0 && (m = onclick.match(/window.open\("([^"]+)",\s*"([^"]*)",\s*"([^"]*)"\s*.*\);\s*(return\s+false)?/))) {
			this.src.popup.use.attr('checked', 'on')
			this.src.popup.url.val(m[1]);
			this.src.popup.name.val(m[2]);
			if ( /location=yes/.test(m[3]) ) {
				this.src.popup.location.attr('checked', true);
			}
			if ( /menubar=yes/.test(m[3]) ) {
				this.src.popup.menubar.attr('checked', true);
			}
			if ( /toolbar=yes/.test(m[3]) ) {
				this.src.popup.toolbar.attr('checked', true);
			}
			if ( /scrollbars=yes/.test(m[3]) ) {
				this.src.popup.scrollbars.attr('checked', true);
			}
			if ( /status=yes/.test(m[3]) ) {
				this.src.popup.status.attr('checked', true);
			}
			if ( /resizable=yes/.test(m[3]) ) {
				this.src.popup.resizable.attr('checked', true);
			}
			if ( /dependent=yes/.test(m[3]) ) {
				this.src.popup.dependent.attr('checked', true);
			}
			if ((_m = m[3].match(/width=([^,]+)/))) {
				this.src.popup.width.val(_m[1]);
			}
			if ((_m = m[3].match(/height=([^,]+)/))) {
				this.src.popup.height.val(_m[1]);
			}
			if ((_m = m[3].match(/left=([^,]+)/))) {
				this.src.popup.left.val(_m[1]);
			}
			if ((_m = m[3].match(/top=([^,]+)/))) {
				this.src.popup.top.val(_m[1]);
			}
			if (m[4]) {
				this.src.popup.retfalse.attr('checked', true);
			}
		} else {
			$.each(this.src.popup, function() {
				var $this = $(this);
				if ($this.attr('type') == 'text') {
					$this.val($this.attr('name') == 'url' ? 'http://' : '');
				} else {
					if ($this.attr('name') == 'retfalse') {
						this.attr('checked', true);
					} else {
						$this.removeAttr('checked');
					}
				}
			});
		}
		
	}
	
	this.updateOnclick = function () {
		var url = this.src.popup.url.val();
		if (this.src.popup.use.attr('checked') && url) {
			var params = '';
			if (this.src.popup.location.attr('checked')) {
				params += 'location=yes,';
			}
			if (this.src.popup.menubar.attr('checked')) {
				params += 'menubar=yes,';
			}
			if (this.src.popup.toolbar.attr('checked')) {
				params += 'toolbar=yes,';
			}
			if (this.src.popup.scrollbars.attr('checked')) {
				params += 'scrollbars=yes,';
			}
			if (this.src.popup.status.attr('checked')) {
				params += 'status=yes,';
			}
			if (this.src.popup.resizable.attr('checked')) {
				params += 'resizable=yes,';
			}
			if (this.src.popup.dependent.attr('checked')) {
				params += 'dependent=yes,';
			}
			if (this.src.popup.width.val()) {
				params += 'width='+this.src.popup.width.val()+',';
			}
			if (this.src.popup.height.val()) {
				params += 'height='+this.src.popup.height.val()+',';
			}
			if (this.src.popup.left.val()) {
				params += 'left='+this.src.popup.left.val()+',';
			}
			if (this.src.popup.top.val()) {
				params += 'top='+this.src.popup.top.val()+',';
			}
			if (params.length>0) {
				params = params.substring(0, params.length-1)
			}
			var retfalse = this.src.popup.retfalse.attr('checked') ? 'return false;' : '';
			var onclick = 'window.open("'+url+'", "'+$.trim(this.src.popup.name.val())+'", "'+params+'");'+retfalse;
			this.src.events.onclick.val(onclick);
			if (!this.src.main.href.val()) {
				this.src.main.href.val('#');
			}
		} else {
			var v = this.src.events.onclick.val();
			v = v.replace(/window\.open\([^\)]+\)\s*;?\s*return\s*false\s*;?/i, '');
			this.src.events.onclick.val(v);
		}
	}
	
	this.set = function() {
		this.updateOnclick();
		this.rte.browser.msie && this.rte.selection.restoreIERange();
		this.rte.history.add();
		var href = this.rte.utils.absoluteURL(this.src.main.href.val());
		if (!href) {
			this.link.parents().length && this.rte.doc.execCommand('unlink', false, null);
		} else {
			if (!this.link.parents().length) {
				
				var fakeURL = '#--el-editor---'+Math.random();
				var r =this.rte.doc.execCommand('createLink', false, fakeURL);
				// self.rte.log(r)
				this.link = $('a[href="'+fakeURL+'"]', this.rte.doc);
				this.link.each(function() {
					var $this = $(this);
					// СѓРґР°Р»СЏРµРј СЃСЃС‹Р»РєРё РІРѕРєСЂСѓРі РїСѓСЃС‚С‹С… СЌР»РµРјРµРЅС‚РѕРІ
					if (!$.trim($this.html()) && !$.trim($this.text())) {
						$this.replaceWith($this.text()); // СЃРѕС…СЂР°РЅСЏРµРј РїСЂРѕР±РµР»С‹ :)
					}
				});
			}
			this.src.main.href.val(href);
			for (var tab in this.src) {
				if (tab != 'popup') {
					for (var n in this.src[tab]) {
						if (n != 'anchors') {
							var v = $.trim(this.src[tab][n].val());
							if (v) {
								this.link.attr(n, v);
							} else {
								this.link.removeAttr(n);
							}
						}
					}
				}
			};
		}
		this.rte.ui.update(true);
	}
	
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.nbsp = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		this.rte.history.add();
		this.rte.selection.insertHtml('&nbsp;', true);
		this.rte.window.focus();
		this.rte.ui.update();
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.outdent = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.command = function() {
		var v = this.find();
		if (v.node) {
			this.rte.history.add();
			$(v.node).css(v.type, (v.val>40 ? v.val-40 : 0)+'px');
			this.rte.ui.update();
		}
	}
	
	this.find = function(n) {
		function checkNode(n) {
			var ret = {type : '', val : 0};
			var s;
			if ((s = self.rte.dom.attr(n, 'style'))) {
				ret.type = s.indexOf('padding-left') != -1
					? 'padding-left'
					: (s.indexOf('margin-left') != -1 ? 'margin-left' : '');
				ret.val = ret.type ? parseInt($(n).css(ret.type))||0 : 0;
			}
			return ret;
		}
		
		var n = this.rte.selection.getNode();
		var ret = checkNode(n);
		if (ret.val) {
			ret.node = n;
		} else {
			$.each(this.rte.dom.parents(n, '*'), function() {
				ret = checkNode(this);
				if (ret.val) {
					ret.node = this;
					return ret;
				}
			})
		}
		return ret;
	}
	
	this.update = function() {
		var v = this.find();
		if (v.node) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
	
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.pasteformattext = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.iframe = $(document.createElement('iframe')).addClass('el-rte-paste-input')
	this.doc = null;
	var self = this;
	
	this.command = function() {
		this.rte.browser.msie && this.rte.selection.saveIERange();
		var opts = {
			submit : function(e, d) {
				e.stopPropagation();
				e.preventDefault();
				self.paste();
				d.close();
			},
			dialog : {
				width : 500,
				title : this.rte.i18n('Paste formatted text')
			}
		}
		var d = new elDialogForm(opts);
		d.append(this.iframe).open();
		this.doc = this.iframe.get(0).contentWindow.document;
		html = this.rte.options.doctype
			+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
		if (this.rte.options.cssfiles.length) {
			$.each(this.rte.options.cssfiles, function() {
				html += '<link rel="stylesheet" type="text/css" href="'+this+'" />';
			});
		}
		html += '</head><body> </body></html>';	
		
		this.doc.open();
		this.doc.write(html);
		this.doc.close();
		if (!this.rte.browser.msie) {
			try { this.doc.designMode = "on"; } 
			catch(e) { }
		} else {
			this.doc.body.contentEditable = true;
		}
		this.iframe.get(0).contentWindow.focus();
	}
	
	this.paste = function() {
		var html = $.trim($(this.doc.body).html());
		if (html) {
			this.rte.history.add();
			this.rte.browser.msie && this.rte.selection.restoreIERange();
			this.rte.selection.insertHtml(this.rte.filter(html), true);
			this.rte.ui.update(true);
		}
	}
	this.update = function() {
		this.domElem.removeClass('disabled');
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.pastetext = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.input = $('<textarea />').addClass('el-rte-paste-input');
	var self = this;
	
	this.command = function() {
		this.rte.browser.msie && this.rte.selection.saveIERange();
		var opts = {
			submit : function(e, d) {
				e.stopPropagation();
				e.preventDefault();
				self.paste();
				d.close();
			},
			dialog : {
				width : 500,
				title : this.rte.i18n('Paste only text')
			}
		}
		var d = new elDialogForm(opts);
		d.append(this.input).open();
	}
	
	this.paste = function() {
		var txt = $.trim(this.input.val());
		if (txt) {
			this.rte.history.add();
			this.rte.browser.msie && this.rte.selection.restoreIERange();
			this.rte.selection.insertText(txt.replace(/\r?\n/g, '<br />'), true);
			this.rte.ui.update(true);
		}
		this.input.val('');
	}
	this.update = function() {
		this.domElem.removeClass('disabled');
	}
	
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.save = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.active = true;
	
	this.command = function() {
		this.rte.save();
	}
	
	this.update = function() { }
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.stopfloat = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	this.find = function() {
		if (this.rte.selection.collapsed()) {
			var n = this.rte.dom.selfOrParent(this.rte.selection.getEnd(), /^DIV$/);
			if (n && (this.rte.dom.attr(n, 'clear') || $(n).css('clear') != 'none')) {
				return n;
			}
		}
	}
	
	this.command = function() {
		var n;
		if ((n = this.find())) {
			var n = $(n);
			this.rte.history.add();
			if (!n.children().length && !$.trim(n.text()).length) {
				n.remove();
			} else {
				n.removeAttr('clear').css('clear', '');
			}
		} else {
			this.rte.history.add();
			this.rte.selection.insertNode($(this.rte.dom.create('div')).css('clear', 'both').get(0), true);
		}
		this.rte.ui.update(true);
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
		if (this.find()) {
			this.domElem.addClass('active');
		} else {
			this.domElem.removeClass('active');
		}
	}
}
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.table = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.src = null;
	this.labels = null;
	
	function init() {
		self.labels = {
			main : 'Properies',
			adv : 'Advanced',
			events : 'Events',
			id : 'ID',
			'class' : 'Css class',
			style : 'Css style',
			dir : 'Script direction',
			summary : 'Summary',
			lang : 'Language',
			href : 'URL'
		}
		
		self.src = {
			main : {
				caption : $('<input type="text" />'),
				rows : $('<input type="text" />').attr('size', 5).val(2),
				cols : $('<input type="text" />').attr('size', 5).val(2),
				width : $('<input type="text" />').attr('size', 5),
				wunit : $('<select />')
							.append($('<option />').val('%').text('%'))
							.append($('<option />').val('px').text('px')),				
				height : $('<input type="text" />').attr('size', 5),	
				hunit : $('<select />')
							.append($('<option />').val('%').text('%'))
							.append($('<option />').val('px').text('px')),	
				align : $('<select />')
							.append($('<option />').val('').text(self.rte.i18n('Not set')))
							.append($('<option />').val('left').text(self.rte.i18n('Left')))
							.append($('<option />').val('center').text(self.rte.i18n('Center')))	
							.append($('<option />').val('right').text(self.rte.i18n('Right'))),	
				spacing : $('<input type="text" />').attr('size', 5),	
				padding : $('<input type="text" />').attr('size', 5),
				border : $('<div />'),
				// frame : $('<select />')
				// 			.append($('<option />').val('void').text(self.rte.i18n('No')))
				// 			.append($('<option />').val('border').text(self.rte.i18n('Yes'))),
				rules : $('<select />')
							.append($('<option />').val('none').text(self.rte.i18n('No')))
							.append($('<option />').val('all').text(self.rte.i18n('Cells')))
							.append($('<option />').val('groups').text(self.rte.i18n('Groups')))
							.append($('<option />').val('rows').text(self.rte.i18n('Rows')))
							.append($('<option />').val('cols').text(self.rte.i18n('Columns'))),
				margin : $('<div />'),
				bg : $('<div />'),
				bgimg : $('<input type="text" />').css('width', '90%')
			},
			
			adv : {
				id : $('<input type="text" />'),
				summary : $('<input type="text" />'),
				'class' : $('<input type="text" />'),
				style : $('<input type="text" />'),
				dir : $('<select />')
								.append($('<option />').text(self.rte.i18n('Not set')).val(''))
								.append($('<option />').text(self.rte.i18n('Left to right')).val('ltr'))
								.append($('<option />').text(self.rte.i18n('Right to left')).val('rtl')),
				lang : $('<input type="text" />')
			},
			
			events : {}
		}
		
		$.each(self.src, function() {
			for (var n in this) {
				this[n].attr('name', n);
				var t = this[n].get(0).nodeName; 
				if (t == 'INPUT' && n != 'bgimg') {
					this[n].css(this[n].attr('size') ? {'text-align' : 'right'} : {width : '100%'});
				} else if (t == 'SELECT' && n!='wunit' && n!='hunit') {
					this[n].css('width', '100%');
				}
			}
		});
		
		$.each(
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'], 
			function() {
				self.src.events[this] = $('<input type="text" />').attr('name', this).css('width', '100%');
		});
		
		self.src.main.align.change(function() {
			var v = $(this).val();
			if (v == 'center') {
				self.src.main.margin.val({left : 'auto', right : 'auto'});
			} else {
				var m = self.src.main.margin.val();
				if (m.left == 'auto' && m.right == 'auto') {
					self.src.main.margin.val({left : '', right : ''});
				}
			}
		});
		
		self.src.main.bgimg.change(function() {
			var t = $(this);
			t.val(self.rte.utils.absoluteURL(t.val()));
		})
		
	}
	
	this.command = function() {
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TABLE$/);
		
		if (this.name == 'table') {
			this.table = $(this.rte.doc.createElement('table'));	
		} else {
			this.table = n ? $(n) : $(this.rte.doc.createElement('table'));					
		}
		
		!this.src && init();
		this.src.main.border.elBorderSelect({styleHeight : 117});
		this.src.main.bg.elColorPicker({palettePosition : 'outer', 'class' : 'el-colorpicker ui-icon ui-icon-pencil'});
		this.src.main.margin.elPaddingInput({ type : 'margin', value : this.table});
		
		if (this.table.parents().length) {
			this.src.main.rows.val('').attr('disabled', true);
			this.src.main.cols.val('').attr('disabled', true);
		} else {
			this.src.main.rows.val(2).removeAttr('disabled');
			this.src.main.cols.val(2).removeAttr('disabled');
		}
		
		var w = this.table.css('width') || this.table.attr('width');
		this.src.main.width.val(parseInt(w)||'');
		this.src.main.wunit.val(w.indexOf('px') != -1 ? 'px' : '%');
		
		var h = this.table.css('height') || this.table.attr('height');	
		this.src.main.height.val(parseInt(h)||'');
		this.src.main.hunit.val(h && h.indexOf('px') != -1 ? 'px' : '%');
		var f = this.table.css('float');
		this.src.main.align.val('');
		if (f == 'left' || f == 'right') {
			this.src.main.align.val(f);
		} else {
			var ml = this.table.css('margin-left');
			var mr = this.table.css('margin-right');
			if (ml == 'auto' && mr == 'auto') {
				this.src.main.align.val('center');
			}
		}
		this.src.main.border.val(this.table);
		//this.src.main.frame.val(this.table.attr('frame'));
		this.src.main.rules.val(this.rte.dom.attr(this.table.get(0), 'rules'));
		this.src.main.bg.val(this.table.css('background-color'));
		var bgimg = this.table.css('background-image').replace(/url\(([^\)]+)\)/i, "$1");
		this.src.main.bgimg.val(bgimg!='none' ? bgimg : '');
		var opts = {
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
			dialog : {
				width : 530,
				title : this.rte.i18n('Table')
			}
		}
		var d = new elDialogForm(opts);
		
		for (var tab in this.src) {
			d.tab(tab, this.rte.i18n(this.labels[tab]));
			if (tab == 'main') {
				var t1 = $('<table />')
					.append($('<tr />').append('<td>'+this.rte.i18n('Rows')+'</td>').append($('<td />').append(this.src.main.rows)))
					.append($('<tr />').append('<td>'+this.rte.i18n('Columns')+'</td>').append($('<td />').append(this.src.main.cols)));
				var t2 = $('<table />')
					.append($('<tr />').append('<td>'+this.rte.i18n('Width')+'</td>').append($('<td />').append(this.src.main.width).append(this.src.main.wunit)))
					.append($('<tr />').append('<td>'+this.rte.i18n('Height')+'</td>').append($('<td />').append(this.src.main.height).append(this.src.main.hunit)));
				var t3 = $('<table />')
					.append($('<tr />').append('<td>'+this.rte.i18n('Spacing')+'</td>').append($('<td />').append(this.src.main.spacing.val(this.table.attr('cellspacing')||''))))
					.append($('<tr />').append('<td>'+this.rte.i18n('Padding')+'</td>').append($('<td />').append(this.src.main.padding.val(this.table.attr('cellpadding')||''))));
				
				d.append([this.rte.i18n('Caption'), this.src.main.caption.val(this.table.find('caption').eq(0).text() || '')], 'main', true)
					.separator('main')
					.append([t1, t2, t3], 'main', true)
					.separator('main')
					.append([this.rte.i18n('Border'), this.src.main.border], 'main', true)
					//.append([this.rte.i18n('Frame'), this.src.main.frame], 'main', true)
					.append([this.rte.i18n('Inner borders'), this.src.main.rules], 'main', true)
					.append([this.rte.i18n('Alignment'), this.src.main.align], 'main', true)
					.append([this.rte.i18n('Margins'), this.src.main.margin], 'main', true)
					.append([this.rte.i18n('Background'), $('<span />').append($('<span />').css({'float' : 'left', 'margin-right' : '3px'}).append(this.src.main.bg)).append(this.src.main.bgimg)], 'main', true)
			} else {
				for (var name in this.src[tab]) {
					var v = this.rte.dom.attr(this.table, name);
					if (tab == 'events') {
						v = this.rte.utils.trimEventCallback(v);
					} 
					d.append([this.rte.i18n(this.labels[name] ? this.labels[name] : name), this.src[tab][name].val(v)], tab, true);
				}
			}
		}
		
		d.open();
	}
	
	this.set = function() {
		
		if (!this.table.parents().length) {
			var r = parseInt(this.src.main.rows.val()) || 0;
			var c = parseInt(this.src.main.cols.val()) || 0;
			if (r<=0 || c<=0) {
				return;
			}
			this.rte.history.add();
			var b = $(this.rte.doc.createElement('tbody')).appendTo(this.table);
			var tr = $('<tr />');
			for (var i=0; i < c; i++) {
				tr.append($('<td />').html('&nbsp;'));
			};
			for (var i=0; i<r; i++) {
				b.append(tr.clone(true))
			};
			this.rte.selection.insertNode(this.table.get(0), true);
		} else {
			this.table
				.removeAttr('width')
				.removeAttr('height')
				.removeAttr('border')
				.removeAttr('align')
				.removeAttr('bordercolor')
				.removeAttr('bgcolor')
				.removeAttr('cellspacing')
				.removeAttr('cellpadding')
				.removeAttr('frame')
				.removeAttr('rules')
				.removeAttr('style');
		}
		
		var cap = $.trim(this.src.main.caption.val());
		if (cap) {
			if (!this.table.children('caption').length) {
				this.table.prepend($('<caption />'));
			}
			this.table.children('caption').text(cap)
		} else {
			this.table.children('caption').remove();
		}
		
		for (var tab in this.src) {
			if (tab != 'main') {
				for (var n in this.src[tab]) {
					var v = $.trim(this.src[tab][n].val());
					if (v) {
						this.table.attr(n, v);
					} else {
						this.table.removeAttr(n);
					}
				}
			}
		}
		var spacing, padding, rules;
		if ((spacing = parseInt(this.src.main.spacing.val())) && spacing>=0) {
			this.table.attr('cellspacing', spacing);
		} 
		if ((padding = parseInt(this.src.main.padding.val())) && padding>=0) {
			this.table.attr('cellpadding', padding);
		} 
		
		if ((rules = this.src.main.rules.val())) {
			this.table.attr('rules', rules);
		}
		
		var
			w = parseInt(this.src.main.width.val()) || '',
			h = parseInt(this.src.main.height.val()) || '',
			i = $.trim(this.src.main.bgimg.val()),
			b = this.src.main.border.val(),
			m = this.src.main.margin.val(),
			f = this.src.main.align.val();
		this.table.css({
			width : w ? w+this.src.main.wunit.val() : '',
			height : h ? h+this.src.main.hunit.val() : '',
			border : $.trim(b.width+' '+b.style+' '+b.color),
			'background-color' : this.src.main.bg.val(),
			'background-image' : i ? 'url('+i+')' : ''
		});	
		if (m.css) {
			this.table.css('margin', m.css);
		} else {
			this.table.css({
				'margin-top' : m.top,
				'margin-right' : m.right,
				'margin-bottom' : m.bottom,
				'margin-left' : m.left
			});
		}
		if ((f=='left' || f=='right') && this.table.css('margin-left')!='auto' && this.table.css('margin-right')!='auto') {
			this.table.css('float', f);
		}
		if (!this.table.attr('style')) {
			this.table.removeAttr('style');
		}
		
		this.rte.ui.update();
	}
	
	this.update = function() {
		this.domElem.removeClass('disabled');
		if (this.name == 'tableprops' && !this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TABLE$/)) {
			this.domElem.addClass('disabled').removeClass('active');
		}
	}
	
}
elRTE.prototype.ui.prototype.buttons.tableprops = elRTE.prototype.ui.prototype.buttons.table;
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.tablerm = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		var t = this.rte.dom.parent(this.rte.selection.getNode(), /^TABLE$/);
		// t && $(t).remove();
		if (t) {
			this.rte.history.add();
			$(t).remove();
		}
		this.rte.ui.update(true);
	}
	
	this.update = function() {
		if (this.rte.dom.parent(this.rte.selection.getNode(), /^TABLE$/)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.tbcellprops = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.src = null;
	this.labels = null;
	
	function init() {
		self.labels = {
			main : 'Properies',
			adv : 'Advanced',
			events : 'Events',
			id : 'ID',
			'class' : 'Css class',
			style : 'Css style',
			dir : 'Script direction',
			lang : 'Language'
		}
		
		self.src = {
			main : {
				type : $('<select />').css('width', '100%')
							.append($('<option />').val('td').text(self.rte.i18n('Data')))
							.append($('<option />').val('th').text(self.rte.i18n('Header'))),
				width : $('<input type="text" />').attr('size', 4),
				wunit : $('<select />')
							.append($('<option />').val('%').text('%'))
							.append($('<option />').val('px').text('px')),				
				height : $('<input type="text" />').attr('size', 4),	
				hunit : $('<select />')
							.append($('<option />').val('%').text('%'))
							.append($('<option />').val('px').text('px')),	
				align : $('<select />').css('width', '100%')
							.append($('<option />').val('').text(self.rte.i18n('Not set')))
							.append($('<option />').val('left').text(self.rte.i18n('Left')))
							.append($('<option />').val('center').text(self.rte.i18n('Center')))	
							.append($('<option />').val('right').text(self.rte.i18n('Right')))
							.append($('<option />').val('justify').text(self.rte.i18n('Justify'))),	
				border : $('<div />'),
				padding : $('<div />'),
				bg : $('<div />'),
				bgimg : $('<input type="text" />').css('width', '90%'),
				apply : $('<select />').css('width', '100%')
							.append($('<option />').val('').text(self.rte.i18n('Current cell')))
							.append($('<option />').val('row').text(self.rte.i18n('All cells in row')))
							.append($('<option />').val('column').text(self.rte.i18n('All cells in column')))	
							.append($('<option />').val('table').text(self.rte.i18n('All cells in table')))
			},
			
			adv : {
				id : $('<input type="text" />'),
				'class' : $('<input type="text" />'),
				style : $('<input type="text" />'),
				dir : $('<select />').css('width', '100%')
								.append($('<option />').text(self.rte.i18n('Not set')).val(''))
								.append($('<option />').text(self.rte.i18n('Left to right')).val('ltr'))
								.append($('<option />').text(self.rte.i18n('Right to left')).val('rtl')),
				lang : $('<input type="text" />')
			},
			
			events : {}
		}
		
		$.each(self.src, function() {
			for (var n in this) {
				this[n].attr('name', n);
				if (this[n].attr('type') == 'text' && !this[n].attr('size') && n!='bgimg') {
					this[n].css('width', '100%')
				}
			}
		});
		
		$.each(
			['onblur', 'onfocus', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmouseout', 'onmouseleave', 'onkeydown', 'onkeypress', 'onkeyup'], 
			function() {
				self.src.events[this] = $('<input type="text" />').attr('name', this).css('width', '100%');
		});
		
	}
	
	this.command = function() {
		!this.src && init();
		this.cell = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/);
		if (!this.cell) {
			return;
		}
		this.src.main.type.val(this.cell.nodeName.toLowerCase());
		this.cell = $(this.cell);
		this.src.main.border.elBorderSelect({styleHeight : 117, value : this.cell});
		this.src.main.bg.elColorPicker({palettePosition : 'outer', 'class' : 'el-colorpicker ui-icon ui-icon-pencil'});
		this.src.main.padding.elPaddingInput({ value : this.cell});
		
		var w = this.cell.css('width') || this.cell.attr('width');
		this.src.main.width.val(parseInt(w)||'');
		this.src.main.wunit.val(w.indexOf('px') != -1 ? 'px' : '%');
		
		var h = this.cell.css('height') || this.cell.attr('height');	
		this.src.main.height.val(parseInt(h)||'');
		this.src.main.hunit.val(h.indexOf('px') != -1 ? 'px' : '%');
		
		this.src.main.align.val(this.cell.attr('align') || this.cell.css('text-align'));
		this.src.main.bg.val(this.cell.css('background-color'));
		var bgimg = this.cell.css('background-image');
		this.src.main.bgimg.val(bgimg && bgimg!='none' ? bgimg.replace(/url\(([^\)]+)\)/i, "$1") : '');
		this.src.main.apply.val('');
		
		var opts = {
			submit : function(e, d) { e.stopPropagation(); e.preventDefault(); self.set(); d.close(); },
			dialog : {
//				width : 471,
				width : 'auto',
				title : this.rte.i18n('Table cell properties')
			}
		}
		var d = new elDialogForm(opts);
		for (var tab in this.src) {
			d.tab(tab, this.rte.i18n(this.labels[tab]));
			
			if (tab == 'main') {
				d.append([this.rte.i18n('Width'), $('<span />').append(this.src.main.width).append(this.src.main.wunit)], 'main', true)
					.append([this.rte.i18n('Height'), $('<span />').append(this.src.main.height).append(this.src.main.hunit)], 'main', true)
					.append([this.rte.i18n('Table cell type'), this.src.main.type], 'main', true)
					.append([this.rte.i18n('Border'), this.src.main.border], 'main', true)
					.append([this.rte.i18n('Alignment'), this.src.main.align], 'main', true)
					.append([this.rte.i18n('Paddings'), this.src.main.padding], 'main', true)
					.append([this.rte.i18n('Background'), $('<span />').append($('<span />').css({'float' : 'left', 'margin-right' : '3px'}).append(this.src.main.bg)).append(this.src.main.bgimg)], 'main', true)
					.append([this.rte.i18n('Apply to'), this.src.main.apply], 'main', true);
			} else {
				for (var name in this.src[tab]) {
					var v = this.cell.attr(name) || '';
					if (tab == 'events') {
						v = this.rte.utils.trimEventCallback(v);
					} 
					d.append([this.rte.i18n(this.labels[name] ? this.labels[name] : name), this.src[tab][name].val(v)], tab, true);
				}
			}
		}
		d.open()
	}
	
	this.set = function() {
		$(t).remove();
		var target = this.cell,
			apply = this.src.main.apply.val();
		switch (this.src.main.apply.val()) {
			case 'row':
				target = this.cell.parent('tr').children('td,th');
				break;
				
			case 'column':
				target = $(this.rte.dom.tableColumn(this.cell.get(0)));
				break;
				
			case 'table':
				target = this.cell.parents('table').find('td,th');
				break;
		}
		for (var tab in this.src) {
			if (tab != 'main') {
				for (var n in this.src[tab]) {
					var v = $.trim(this.src[tab][n].val());
					if (v) {
						target.attr(n, v);
					} else {
						target.removeAttr(n);
					}
				}
			}
		}
		
		target.removeAttr('width')
			.removeAttr('height')
			.removeAttr('border')
			.removeAttr('align')
			.removeAttr('bordercolor')
			.removeAttr('bgcolor');
			
		var t = this.src.main.type.val();
		var w = parseInt(this.src.main.width.val()) || '';
		var h = parseInt(this.src.main.height.val()) || '';
		var i = $.trim(this.src.main.bgimg.val());
		var b = this.src.main.border.val();
		var css = {
			'width' : w ? w+this.src.main.wunit.val() : '',
			'height' : h ? h+this.src.main.hunit.val() : '',
			'background-color' : this.src.main.bg.val(),
			'background-image' : i ? 'url('+i+')' : '',
			'border' : $.trim(b.width+' '+b.style+' '+b.color),
			'text-align' : this.src.main.align.val() || ''
		};
		var p = this.src.main.padding.val();
		if (p.css) {
			css.padding = p.css;
		} else {
			css['padding-top'] = p.top;
			css['padding-right'] = p.right;
			css['padding-bottom'] = p.bottom;
			css['padding-left'] = p.left;
		}
		
		target = target.get();
		$.each(target, function() {
			var type = this.nodeName.toLowerCase();
			var $this = $(this);
			if (type != t) {
				
				var attr = {}
				for (var i in self.src.adv) {
					var v = $this.attr(i)
					if (v) {
						attr[i] = v.toString();
					}
				}
				for (var i in self.src.events) {
					var v = $this.attr(i)
					if (v) {
						attr[i] = v.toString();
					}
				}
				var colspan = $this.attr('colspan')||1;
				var rowspan = $this.attr('rowspan')||1;
				if (colspan>1) {
					attr.colspan = colspan;
				}
				if (rowspan>1) {
					attr.rowspan = rowspan;
				}
				
				$this.replaceWith($('<'+t+' />').html($this.html()).attr(attr).css(css) );
				
			} else {
				$this.css(css);
			}
		});
		this.rte.ui.update();
	}
	
	this.update = function() {
		if (this.rte.dom.parent(this.rte.selection.getNode(), /^TABLE$/)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
	
}
})(jQuery);
(function($) {
elRTE.prototype.ui.prototype.buttons.tbcellsmerge = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	
	function selectedCells() {
		var c1 = self.rte.dom.selfOrParent(self.rte.selection.getStart(), /^(TD|TH)$/);
		var c2 = self.rte.dom.selfOrParent(self.rte.selection.getEnd(), /^(TD|TH)$/);		
		if (c1 && c2 && c1!=c2 && $(c1).parents('table').get(0) == $(c2).parents('table').get(0)) {
			return [c1, c2];
		}
		return null;
	}
	
	this.command = function() {
		var cells = selectedCells();
		if (cells) {
			
			var _s = this.rte.dom.indexOf($(cells[0]).parent('tr').get(0));
			var _e = this.rte.dom.indexOf($(cells[1]).parent('tr').get(0));
			var ro = Math.min(_s, _e); // row offset
			var rl = Math.max(_s, _e) - ro + 1; // row length
			var _c1 = this.rte.dom.tableColumn(cells[0], true, true); 
			var _c2 = this.rte.dom.tableColumn(cells[1], true);
			var _i1 = $.inArray(cells[0], _c1.column); 
			var _i2 = $.inArray(cells[1], _c2.column);
			
			var colBegin = _c1.info.offset[_i1] < _c2.info.offset[_i2] ? _c1 : _c2;
			var colEnd = _c1.info.offset[_i1] >= _c2.info.offset[_i2] ? _c1 : _c2;
			var length = 0;
			var target = null;
			var html = '';
			this.rte.history.add();
			var rows = $($(cells[0]).parents('table').eq(0).find('tr').get().slice(ro, ro+rl))
				.each( function(i) {
					var _l = html.length;
					var accept = false;
					$(this).children('td,th').each(function() {
						var $this = $(this);
						var inBegin = $.inArray(this, colBegin.column);
						var inEnd = $.inArray(this, colEnd.column);
						
						if (inBegin!=-1 || inEnd!=-1) {
							accept = inBegin!=-1 && inEnd==-1;
							var len = parseInt($this.attr('colspan')||1)
							if (i == 0) {
								length += len;
							}
							
							if (inBegin!=-1 && i>0) {
								var delta = colBegin.info.delta[inBegin];
								if (delta>0) {
									if ($this.css('text-align') == 'left') {
										var cell = $this.clone(true);
										$this.html('&nbsp;');
									} else {
										var cell = $this.clone().html('&nbsp;');
									}
									cell.removeAttr('colspan').removeAttr('id').insertBefore(this);
									if (delta>1) {
										cell.attr('colspan', delta);
									}
								}
							}
							
							if (inEnd!=-1) {
								var delta = colEnd.info.delta[inEnd];
								if (len-delta>1) {
									var cp = len-delta-1;
									if ($this.css('text-align') == 'right') {
										var cell = $this.clone(true);
										$this.html('&nbsp;');
									} else {
										var cell = $this.clone().html('&nbsp;');
									}
									cell.removeAttr('colspan').removeAttr('id').insertAfter(this);
									if (cp>1) {
										cell.attr('colspan', cp);
									}
								}
							}
							if (!target) {
								target = $this;
							} else {
								html += $this.html();
								$this.remove();
							}
						} else if (accept) {
							if (i == 0) {
								length += parseInt($this.attr('colspan')||1);
							}
							html += $this.html();
							$this.remove();
							
						}
					})
					html += _l!=html.length ? '<br />' : '';
				});
			target.removeAttr('colspan').removeAttr('rowspan').html(target.html()+html)
			if (length>1) {
				target.attr('colspan', length);
			}
			if (rl>1) {
				target.attr('rowspan', rl);
			}
			// sometimes when merge cells with different rowspans we get "lost" cells in rows 
			// this add cells if needed
			this.rte.dom.fixTable($(cells[0]).parents('table').get(0));
		}
	}
	
	this.update = function() {
		if (selectedCells()) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.tbcellsplit = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/);
		if (n) {
			this.rte.history.add();
			var colspan = parseInt(this.rte.dom.attr(n, 'colspan'));
			var rowspan = parseInt(this.rte.dom.attr(n, 'rowspan'));
			if (colspan>1 || rowspan>1) {
				var cnum = colspan-1;
				var rnum = rowspan-1;
				var tb = this.rte.dom.parent(n, /^TABLE$/);
				var tbm = this.rte.dom.tableMatrix(tb);
				
				// СЏС‡РµР№РєРё РІ С‚РµРєСѓС‰РµРј СЂСЏРґСѓ
				if (cnum) {
					for (var i=0; i<cnum; i++) {
						$(this.rte.dom.create(n.nodeName)).html('&nbsp;').insertAfter(n);
					}
				}
				if (rnum) {
					var ndx = this.rte.dom.indexesOfCell(n, tbm)
					var rndx = ndx[0];
					var cndx = ndx[1];
					// СЏС‡РµР№РєРё РІ СЃР»РµРґСѓС‰РёС… СЂСЏРґР°С…
					for (var r=rndx+1; r < rndx+rnum+1; r++) {
						var cell;
						
						if (!tbm[r][cndx].nodeName) {
							if (tbm[r][cndx-1].nodeName) {
								cell = tbm[r][cndx-1];
							} else {
								for (var i=cndx-1; i>=0; i--) {
									if (tbm[r][i].nodeName) {
										cell =tbm[r][i];
										break;
									}
								}
							}
							if (cell) {
								for (var i=0; i<= cnum; i++) {
									$(this.rte.dom.create(cell.nodeName)).html('&nbsp;').insertAfter(cell);
								}
							}
						}
					};
				}
				$(n).removeAttr('colspan').removeAttr('rowspan');
				this.rte.dom.fixTable(tb);
			}
		}
		this.rte.ui.update(true);
	}
	
	this.update = function() {
		var n = this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/);
		if (n && (parseInt(this.rte.dom.attr(n, 'colspan'))>1 || parseInt(this.rte.dom.attr(n, 'rowspan'))>1)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.tbcolbefore = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	
	this.command = function() {
		var cells = this.rte.dom.tableColumn(this.rte.selection.getNode(), false, true);
		if (cells.length) {
			this.rte.history.add();
			$.each(cells, function() {
				var $this = $(this);
				var cp = parseInt($this.attr('colspan')||1)
				if (cp >1) {
					$this.attr('colspan', cp+1);
				} else {
					var c = $this.clone().html('&nbsp;').removeAttr('colspan').removeAttr('width').removeAttr('id');
					if (self.name == 'tbcolbefore') {
						c.insertBefore(this);
					} else {
						c.insertAfter(this);
					}
				}
			});
			this.rte.ui.update();
		}
	}
	
	this.update = function() {
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
elRTE.prototype.ui.prototype.buttons.tbcolafter = elRTE.prototype.ui.prototype.buttons.tbcolbefore;
})(jQuery);

(function($) {
elRTE.prototype.ui.prototype.buttons.tbcolrm = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	
	this.command = function() {
		var n = this.rte.selection.getNode();
		var c = this.rte.dom.selfOrParent(n, /^(TD|TH)$/);
		var prev = $(c).prev('td,th').get(0);
		var next = $(c).next('td,th').get(0);			
		var tb = this.rte.dom.parent(n, /^TABLE$/);
		var cells = this.rte.dom.tableColumn(n, false, true);
		if (cells.length) {
			this.rte.history.add();
			$.each(cells, function() {
				var $this = $(this);
				var cp = parseInt($this.attr('colspan')||1);
				if ( cp>1 ) {
					$this.attr('colspan', cp-1);
				} else {
					$this.remove();
				}
			});
			this.rte.dom.fixTable(tb);
			if (prev || next) {
				this.rte.selection.selectContents(prev ? prev : next).collapse(true);
			}
			this.rte.ui.update(true);
		}
	}
	
	this.update = function() {
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^(TD|TH)$/)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
})(jQuery);

elRTE.prototype.ui.prototype.buttons.tbrowbefore = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	
	this.command = function() {
		var n = this.rte.selection.getNode();
		var c = this.rte.dom.selfOrParent(n, /^(TD|TH)$/);
		var r = this.rte.dom.selfOrParent(c, /^TR$/);
		var mx = this.rte.dom.tableMatrix(this.rte.dom.selfOrParent(c, /^TABLE$/));
		if (c && r && mx) {
			this.rte.history.add();
			var before = this.name == 'tbrowbefore';
			var ro = $(r).prevAll('tr').length;
			var cnt = 0;
			var mdf = [];
			
			function _find(x, y) {
				while (y>0) {
					y--;
					if (mx[y] && mx[y][x] && mx[y][x].nodeName) {
						return mx[y][x];
					}
				}
			}
			
			for (var i=0; i<mx[ro].length; i++) {
				if (mx[ro][i] && mx[ro][i].nodeName) {
					var cell = $(mx[ro][i]);
					var colspan = parseInt(cell.attr('colspan')||1);
					if (parseInt(cell.attr('rowspan')||1) > 1) {
						if (before) {
							cnt += colspan;
						} else {
							mdf.push(cell);
						}
					} else {
						cnt += colspan;
					}
				} else if (mx[ro][i] == '-') {
					cell = _find(i, ro);
					cell && mdf.push($(cell));
				}
			}
			var row = $('<tr />');
			for (var i=0; i<cnt; i++) {
				row.append('<td>&nbsp;</td>');
			}
			if (before) {
				row.insertBefore(r);
			} else {
				row.insertAfter(r);
			}
			$.each(mdf, function() {
				$(this).attr('rowspan', parseInt($(this).attr('rowspan')||1)+1);
			});
			this.rte.ui.update();
		}
	}
	
	this.update = function() {
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TR$/)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
elRTE.prototype.ui.prototype.buttons.tbrowafter = elRTE.prototype.ui.prototype.buttons.tbrowbefore;

(function($) {
elRTE.prototype.ui.prototype.buttons.tbrowrm = function(rte, name) {
	this.constructor.prototype.constructor.call(this, rte, name);
	var self = this;
	this.command = function() {
		
		var n = this.rte.selection.getNode(),
			c = this.rte.dom.selfOrParent(n, /^(TD|TH)$/),
			r = this.rte.dom.selfOrParent(c, /^TR$/),
			tb = this.rte.dom.selfOrParent(c, /^TABLE$/),
			mx = this.rte.dom.tableMatrix(tb);
		
		if (c && r && mx.length) {
			this.rte.history.add();
			if (mx.length==1) {
				$(tb).remove();
				return this.rte.ui.update();
			}
			var mdf = [];
			var ro = $(r).prevAll('tr').length;
			
			function _find(x, y) {
				while (y>0) {
					y--;
					if (mx[y] && mx[y][x] && mx[y][x].nodeName) {
						return mx[y][x];
					}
				}
			}
			
			// move cell with rowspan>1 to next row
			function _move(cell, x) {
				y = ro+1;
				var sibling= null;
				if (mx[y]) {
					for (var _x=0; _x<x; _x++) {
						if (mx[y][_x] && mx[y][_x].nodeName) {
							sibling = mx[y][_x];
						}
					};
					
					cell = cell.remove();
					if (sibling) {
						cell.insertAfter(sibling);
					} else {
						cell.prependTo($(r).next('tr').eq(0));
					}
				}
			}
			
			function _cursorPos(column) {
				for (var i = 0; i<column.length; i++) {
					if (column[i] == c) {
						return i<column.length-1 ? column[i+1] : column[i-1];
					}
				}
			}
			
			for (var i=0; i<mx[ro].length; i++) {
				var cell = null;
				var move = false;
				if (mx[ro][i] && mx[ro][i].nodeName) {
					cell = mx[ro][i];
					move = true;
				} else if (mx[ro][i] == '-' && (cell = _find(i, ro))) {
					move = false;
				}
				if (cell) {
					cell = $(cell);
					var rowspan = parseInt(cell.attr('rowspan')||1);
					if (rowspan>1) {
						cell.attr('rowspan', rowspan-1);
						move && _move(cell, i, ro);
					} 
				}
			};
			
			var _c = _cursorPos(this.rte.dom.tableColumn(c));
			if (_c) {
				this.rte.selection.selectContents(_c).collapse(true);
			}
			$(r).remove();
		}
		this.rte.ui.update();
	}
	
	this.update = function() {
		if (this.rte.dom.selfOrParent(this.rte.selection.getNode(), /^TR$/)) {
			this.domElem.removeClass('disabled');
		} else {
			this.domElem.addClass('disabled');
		}
	}
}
})(jQuery);
(function($) {
	elRTE.prototype.ui.prototype.buttons.undo = function(rte, name) {
		this.constructor.prototype.constructor.call(this, rte, name);
	
		this.command = function() {
			if (this.name == 'undo' && this.rte.history.canBack()) {
				this.rte.history.back();
				this.rte.ui.update();
			} else if (this.name == 'redo' && this.rte.history.canFwd()) {
				this.rte.history.fwd();
				this.rte.ui.update();
			}
		}
	
		this.update = function() {
			this.domElem.toggleClass('disabled', this.name == 'undo' ? !this.rte.history.canBack() : !this.rte.history.canFwd());
		}
	}
	elRTE.prototype.ui.prototype.buttons.redo = elRTE.prototype.ui.prototype.buttons.undo;
})(jQuery);
(function($) {
	elRTE.prototype.ui.prototype.buttons.unlink = function(rte, name) {
		this.constructor.prototype.constructor.call(this, rte, name);
		this.command = function() {
			var n = this.rte.selection.getNode();
			var l, link;
			if ((n.nodeName == "A") && (l = this.rte.dom.selfOrParentLink(n))){
			 this.link = l;
			 } else {
			 this.link = null;
			 }
			// if ((l = this.rte.dom.selfOrParentLink(n))) {
			// 	link = l;
			// } else if ((l = this.rte.dom.childLinks(n))) {
			// 	link = l[0];
			// }
			if (link) {
				this.rte.history.add();
				this.rte.selection.select(link);
				this.rte.doc.execCommand('unlink', false, null);
				this.rte.ui.update(true);
			}
		
		}
	
		this.update = function() {
			var n = this.rte.selection.getNode();
			// if (this.rte.dom.selfOrParentLink(n) || this.rte.dom.childLinks(n).length) {
			// 	this.domElem.removeClass('disabled').addClass('active');
			// } 
			if ((n.nodeName == "A") && (l = this.rte.dom.selfOrParentLink(n))) {
				this.domElem.removeClass('disabled').addClass('active');
			}
			else {
				this.domElem.removeClass('active').addClass('disabled');
			}
		}
	}
})(jQuery);
function tag_all_searched(state){
var nstype = document.getElementById("SearchType").value;
var i = 0;
$('#lp_2').show();
draw_hst_query_2_init(addslashes(curr_qname));
for (i=0; i<results.length; i++){
if (state){
add_records_cache[results[i]['id']] = results[i]['id'];
draw_hst_query_2(results[i]['id'], addslashes(results[i]['name']));
for (query_id in history_records){
if (addslashes(curr_qname)==history_records[query_id]['name']){
toggle_list_display('q' + query_id + '_disp', 'q' + query_id + '_open', true);
}
}
document.getElementById('rec_' + results[i]['id'] + '_chb').checked = true;
}
else{
delete_history_record2(addslashes(curr_qname), results[i]['id']);
document.getElementById('rec_' + results[i]['id'] + '_chb').checked = false;
}
}
send_selected(addslashes(curr_qname), nstype);
draw_hst_query_2_update();
}
var result_rows = new Array();

function get_row_html(record, show_siml, nstype, curr_qname, tagged, innersearch){
row_data = '<tr id="row_' + record['id'] + '" style="display : none;">';
row_data += '<td class="checkbox">';
row_data += '<input type="checkbox" id="rec_' + record['id'] + '_chb" onclick="if (this.checked) {add_record_to_selection(' + nstype + ',\'' + addslashes(curr_qname) + '\', \'' + record['id'] + '\', \'' + addslashes(record['name']) + '\');} else {delete_history_record2(\'' + addslashes(curr_qname) + '\', \'' + record['id'] + '\');}" style="width : 4ex;" value="&rarr;" ';
if (tagged){
row_data += ' checked="checked"';
}
row_data += '/>';
row_data += '</td>';

if (allow_innersearch){
innersearch.value += " " + record['id'];
}
if (last_search_type==4){
row_data += '<td class="orid">';
row_data += record['orid'];
row_data += '</td>';
}
row_data += '<td class="flag"><img src="/flags/'+record['flag']+'.png" alt="'+record['flag']+'" /></td>';

row_data += '<td class="name">';
if (record['disabled']) row_data += '<span class="app_disabled">';
row_data += '<span ';
if (1==record['prc']) row_data += 'class="purchased_line"';
//else if (1==selected["c_" + results[i]['id']]) row_data += 'class="unpurchased_line"';
else row_data += 'class="common_line"';
row_data += '><span onclick="javascript:generate_report(null,' + record['id'] + ',\'new\', false, true);">' + record['name'] + '</a><\/span>';
if (record['disabled']) row_data += '<br /><span class="app_disabled_info">(недействительно)</span></span>';
row_data += '<\/td>';

row_data += '<td class="classes">';
for (x=0; x<record['classes'].length; x++){
row_data += '<a href="showclasses.php?id=' + record['classes'][x] + '&rid=' + record['id'] + '#c' +record['classes'][x]+ '" target="_blank">' + record['classes'][x] + '<\/a> ';
}
row_data += '<\/td>';

if (show_siml>0){
row_data += '<td class="siml">' + record['siml'] + '%<\/td>';
}

for (b in afields){
if (record['addfields'] && record['addfields'][b]){
var aft = record['addfields'][b];
}
else{
var aft = '';
}
row_data += '<td class="afield">' + aft + '<\/td>';
}

if (record['type']=='tm') row_data += '<td class="image" style="margin : auto; display : none;" id="im4row_' + record['id'] + '" onmouseover="getImgPreview('+record['id']+')" onmouseout="hideImgPreview()" >pic/' + record['id'] + '/box.jpg<\/td>';
else row_data += '<td class="image" style="margin : auto;" id="im4row_' + record['id'] + '"><img src="/whois.gif" alt="whois" onmouseover="getWhois('+record['id']+')" onmouseout="hideImgPreview()" /></td>';

row_data += '<td id="dr_' + record['id'] + '" style="padding-left : 6px; padding-right : 6px; cursor : pointer; color : red; font-size : 9px;" onclick="javascript:delete_from_result('+record['id']+')">'+lang[act_lang]['common']['delete']+'<\/td>';
row_data += '<\/tr>';
return row_data;
}
function draw_results(sort_mode, filter, show_page){
$('#results').show('');
$('#results_nav_top').show();
$('#results_nav_bot').show();
$('#savedoc').show();
$('#forprint').show('');
$('#forprint2').show('');
show_wait_description(lang[act_lang]['common']['report_gen_prc']);
search_rows_cache = new Array();

var innersearch = document.getElementById('innersearch');
var show_siml;
show_siml = last_search_siml;

var nstype = document.getElementById("SearchType").value;

if (sort_mode!=cur_sort_mode && last_search_type!=4){
if (sort_mode=='siml') results.sort(sort_by_siml);
else results.sort(sort_by_name);
cur_sort_mode = sort_mode;
}
else if (last_search_type==4){
results.sort(sort_by_orid);
}

if (results.length>5){
allow_innersearch = true;
document.getElementById('show_innersearch').style.display = '';
}
else{
allow_innersearch = false;
document.getElementById('show_innersearch').style.display = 'none';
}

document.getElementById('forprint').style.display = '';
if (document.getElementById('forprint2')) document.getElementById('forprint2').style.display = '';
var head_text = '<table class="search_results" id="search_results_table" style="width : 100%;">';
var col_count=5;
if (show_siml) col_count++;
if (last_search_type==4) col_count++;
for (z in afields){
col_count++;
}
var len = results.length;
var out_len;
var text='';
var selected_cnt = 0;
for (i in history_records){
if (history_records[i].name==curr_qname){
var act_hst_q = history_records[i];
}
}
result_rows = new Array();

for (i=0; i<len; i++){
if (act_hst_q && act_hst_q['records'][results[i]['id']]) tagged = true;
else tagged = false;
row_data = get_row_html(results[i], show_siml, nstype, curr_qname, tagged, innersearch);
result_rows[i] = results[i]['id'];
text += row_data;
}

//if (len>=3000)
if (typeof(search_limited)!='undefined'){
head_text += '<tr><td colspan="' + col_count + '" class="top">' + lang[act_lang]['search']['search_results'] + ': <b style="font-size : 110%">' + len + '<\/b> <span style="text-transform: lowercase">' + lang[act_lang]['search']['found'] + '<\/span><div style="color : red; font-weight : bold;">' + lang[act_lang]['common']['many_results'] + '<\/div><\/td><\/tr>';
}
else{
head_text += '<tr><td colspan="' + col_count + '" class="top">' + lang[act_lang]['search']['search_results'] + ': <b style="font-size : 110%">' + len + '<\/b> <span style="text-transform: lowercase">' + lang[act_lang]['search']['found'] + '<\/span><\/td><\/tr>';
}
head_text += '<tr><th><input type="checkbox" onclick="javascript:tag_all_searched(this.checked);"><\/th>';
head_text += '<th></th>';
if (last_search_type==4) head_text += '<th>' + lang[1]['search']['app_col'] + '<\/th>';
head_text += '<th>' + lang[act_lang]['search']['wdesc_col'] + '<\/th><th>' + lang[act_lang]['search']['mktu_col'] + '<\/th>';
if (show_siml) head_text += '<th>' + lang[act_lang]['search']['siml_col'] + '<\/th>';
for (b in afields){
head_text += '<th>' + afields[b] + '</th>';
}
head_text += '<th>' + lang[act_lang]['common']['image'] + '<\/th><th></th><\/tr>';
bottom_text = '</table>';

text = head_text + text + bottom_text;

document.getElementById('results').innerHTML = text;

draw_page(show_page, Math.min(current_page_size, 100) );

for (query_id in history_records){
if (curr_qname==history_records[query_id]['name']){
	 $('#lp_2').show();
//set_rpanel_act(2, true);
toggle_list_display('q' + query_id + '_disp', 'q' + query_id + '_open', true);
}
else{
toggle_list_display('q' + query_id + '_disp', 'q' + query_id + '_open', false);
}
}
$('#savedoc').show();
}
function delete_from_result(row_id){
for (i=0; i<results.length; i++){
if (results[i]['id']==row_id){
delete(results[i]);
delete(result_rows[i]);
$('#row_'+row_id).remove();
draw_page(cur_page, current_page_size);
return;
}
}
}
var cur_page_size = 10;
var shown_rows = new Array();
function draw_page(page, page_size){
var new_results = new Array();
var new_result_rows = new Array();
var rl = 0;
for (i=0; i<results.length; i++){
if (results[i]){
new_results[rl] = results[i];
new_result_rows[rl] = result_rows[i];
rl++;
}
}
results = new_results;
result_rows = new_result_rows;
if (!rl || rl==0) return false; 
// Прячем текущие
for (i=0; i<shown_rows.length; i++){
row_id = result_rows[i];
if (row_id>0) $('#row_'+row_id).hide();
}
// Показываем нужные
k=0;
shown_rows = new Array();
if (page_size!=99999999){
start_num = page*page_size;
end_num = start_num + page_size;
}
else{
start_num = 0;
end_num = rl;
}
shown = 0;
for (i=0; i<result_rows.length; i++){
row_id = result_rows[i];
if (k>=start_num && k<end_num){
$('#row_'+row_id).show();
shown_rows[k]=i;
if (results_key[row_id].type=='tm'){
var imgr = document.getElementById('im4row_' + row_id);
if (imgr.style.display == 'none'){
imgr.innerHTML = '<img src="'+imgr.firstChild.data+'" height="22" alt="" />';
}
imgr.style.display = '';
}
shown++;
}
k++;
}
if (shown==0){
if (page>0) draw_page(page-1, page_size);
return;
}
cur_page = page;
current_page_size = page_size;
pages_count = Math.ceil(rl/page_size);
text = '<table style="width : 100%" class="nav"><tr><td style="text-align : center;">';
var show_controls = 0;
show_controls = 1;
text += '<div style="float : left;">';
text += '<input type="button" value="Новый поиск" style="font-size : 11px; width : 80px; margin-bottom : 4px;" onclick="document.location=document.location;"><br\/>';
text += '<input type="button" value="Выбрать всё" style="font-size : 11px; width : 80px;" onclick="javascript:tag_all_searched(true);">';
text += '<\/div>';

if (rl>page_size){
if (pages_count>1){
show_controls = 1;
text += lang[act_lang]['common']['pages_cnt'] + ': ';
for (i=0; i<pages_count; i++){
if (i==page){
text += '<span onclick="javascript:change_page(' + i + ');" style="margin-right : 1ex; color : black;">' + (i+1) + '</span> ';
}
else{
text += '<span onclick="javascript:change_page(' + i + ');" style="margin-right : 1ex;" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + (i+1) + '</span> ';
}
}
}
}

if (rl>10){
show_controls = 1;
text += '<br/>' + lang[act_lang]['common']['page_size'] + ': ';
var sizes = new Array(10,20,50,100);
for (i=0; i<sizes.length; i++){
if (sizes[i]<=rl){
if (current_page_size==sizes[i]) text += '<span style="color : black; margin-right : 1ex;">' + sizes[i] + '</span>';
else text += '<span style="margin-right : 1ex;" onclick="javascript:change_page_size(' + sizes[i] + ');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + sizes[i] + '</span>';
}
}
if (current_page_size==99999999) text += lang[act_lang]['common']['all_records'];
else text += '<span style="margin-right : 1ex;" onclick="javascript:change_page_size(' + 99999999 + ');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + lang[act_lang]['common']['all_records'] + '</span>';
}

if (rl>5){
show_controls = 1;
text += '<br\/>' + lang[act_lang]['common']['sort_by'] + ': ';
if (cur_sort_mode=='siml') text += lang[act_lang]['common']['sort_sim'];
else text += '<span onclick="javascript:change_sort(\'siml\');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + lang[act_lang]['common']['sort_sim'] + '</span>';
text += '&nbsp;/&nbsp;';
if (cur_sort_mode=='name') text += lang[act_lang]['common']['sort_alp'];
else text += '<span onclick="javascript:change_sort(\'name\');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + lang[act_lang]['common']['sort_alp'] + '</span>';
}
text += '<\/td><\/tr><\/table>';
var nav_top = document.getElementById('results_nav_top');
var nav_bot = document.getElementById('results_nav_bot');
nav_top.innerHTML = text;
nav_bot.innerHTML = text;
if (show_controls==1){
nav_top.style.display = 'block';
nav_bot.style.display = 'block';
}
else{
nav_top.style.display = 'none';
nav_bot.style.display = 'none';
}
cur_page_size = page_size;
show_wait_message(false);
}

function draw_page_old(page, page_size){
var rl = results.length;
if (!rl || rl==0) return false;
if (page_size!=current_page_size){
for (var i = 0; i<rl; i++){
if (!search_rows_cache[i]) search_rows_cache[i] = document.getElementById('row_' + i);
search_rows_cache[i].style.display = 'none';
}
}
current_page_size = page_size;
var start_num = cur_page*page_size;
var end_num = (start_num*1) + (page_size*1);
if (end_num>rl) end_num = rl;
for (var i = start_num; i<end_num; i++){
if (!search_rows_cache[i]) search_rows_cache[i] = document.getElementById('row_' + i);
search_rows_cache[i].style.display = 'none';
}
var start_num = page*page_size;
var end_num = (start_num*1) + (page_size*1);
if (end_num>rl) end_num = rl;
for (var i = start_num; i<end_num; i++){
if (!search_rows_cache[i]) search_rows_cache[i] = document.getElementById('row_' + i);
search_rows_cache[i].style.display = '';
var rowd = document.getElementById('im4row_' + i);
if (rowd.style.display=='none'){
rowd.innerHTML = '<img src="' + rowd.firstChild.data + '" width="22" height="22" alt="">';
rowd.style.display = '';
}
}
cur_page = page;
pages_count = Math.ceil(rl/page_size);
text = '<table style="width : 100%" class="nav"><tr><td style="text-align : center;">';
var show_controls = 0;
show_controls = 1;
text += '<div style="float : left;">';
text += '<input type="button" value="Новый поиск" style="font-size : 11px; width : 80px; margin-bottom : 4px;" onclick="document.location=document.location;"><br\/>';
text += '<input type="button" value="Выбрать всё" style="font-size : 11px; width : 80px;" onclick="javascript:tag_all_searched(true);">';
text += '<\/div>';

if (rl>page_size){
if (pages_count>1){
show_controls = 1;
text += lang[act_lang]['common']['pages_cnt'] + ': ';
for (i=0; i<pages_count; i++){
if (i==page){
text += '<span onclick="javascript:change_page(' + i + ');" style="margin-right : 1ex; color : black;">' + (i+1) + '</span> ';
}
else{
text += '<span onclick="javascript:change_page(' + i + ');" style="margin-right : 1ex;" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + (i+1) + '</span> ';
}
}
}
}

if (rl>10){
show_controls = 1;
text += '<br/>' + lang[act_lang]['common']['page_size'] + ': ';
var sizes = new Array(10,20,50,100);
for (i=0; i<sizes.length; i++){
if (sizes[i]<=rl){
if (current_page_size==sizes[i]) text += '<span style="color : black; margin-right : 1ex;">' + sizes[i] + '</span>';
else text += '<span style="margin-right : 1ex;" onclick="javascript:change_page_size(' + sizes[i] + ');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + sizes[i] + '</span>';
}
}
if (current_page_size==99999999) text += lang[act_lang]['common']['all_records'];
else text += '<span style="margin-right : 1ex;" onclick="javascript:change_page_size(' + 99999999 + ');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + lang[act_lang]['common']['all_records'] + '</span>';
}

if (rl>5){
show_controls = 1;
text += '<br\/>' + lang[act_lang]['common']['sort_by'] + ': ';
if (cur_sort_mode=='siml') text += lang[act_lang]['common']['sort_sim'];
else text += '<span onclick="javascript:change_sort(\'siml\');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + lang[act_lang]['common']['sort_sim'] + '</span>';
text += '&nbsp;/&nbsp;';
if (cur_sort_mode=='name') text += lang[act_lang]['common']['sort_alp'];
else text += '<span onclick="javascript:change_sort(\'name\');" onmouseover="javascript:this.style.color=\'#FF0000\'" onmouseout="javascript:this.style.color=\'\'">' + lang[act_lang]['common']['sort_alp'] + '</span>';
}
text += '<\/td><\/tr><\/table>';
var nav_top = document.getElementById('results_nav_top');
var nav_bot = document.getElementById('results_nav_bot');
nav_top.innerHTML = text;
nav_bot.innerHTML = text;
if (show_controls==1){
nav_top.style.display = 'block';
nav_bot.style.display = 'block';
}
else{
nav_top.style.display = 'none';
nav_bot.style.display = 'none';
}
show_wait_message(false);
return true;
}

function select_all_c(value){
if (value) var sel = 1; else sel = 0;
var list = document.getElementsByName("c[]");
for (i=0; i<list.length; i++){
list[i].checked = value;
}
}

function mark_c(id, value){
//if (value) selected[id] = 1;
//else selected[id] = 0;
}

function change_page(page){
if (results.length>100){
setTimeout("draw_page(" + page + ", " + current_page_size + ")", 25);
}
else{
draw_page(page,current_page_size);
}
}

function sort_by_siml(a, b){
if (a['siml']*1>b['siml']*1) return -1;
if (a['siml']*1<b['siml']*1) return 1;
if (a['name']>b['name']) return 1;
if (a['name']<b['name']) return -1;
return 0;
}

function sort_by_name(a, b){
if (a['name']>b['name']) return 1;
if (a['name']<b['name']) return -1;
return 0;
}

function sort_by_orid(a, b){
if (a['orid']>b['orid']) return 1;
if (a['orid']<b['orid']) return -1;
return 0;
}

function change_page_size(page_size){
setTimeout("draw_page(0, " + page_size + ")",10);
show_wait_message(true);
show_wait_description(lang[act_lang]['states']['recompose']);
var time = new Date();
time.setTime(time.getTime() + 3600000 * 24 * 365);
SetCookie('page_size', page_size, time);
}

function change_sort(sort_type){
show_wait_message(true);
show_wait_description(lang[act_lang]['states']['sorting']);
setTimeout("draw_results('" + sort_type + "', null, 0)", 10);
}

function onSearchFieldChange(){
var value = document.getElementById("SearchField").value;
var z, z1;
if (document.getElementById('sbyIdent')){
if (!document.getElementById('sbyIdent').checked && !document.getElementById('sbyIn').checked && !document.getElementById('sbyLike').checked && !document.getElementById('sbySlog').checked) document.getElementById('sbyIdent').checked = true;
}
if (document.getElementById('sbyLike')){
		var chrr = /[^a-zA-ZА-Яа-я0-9]/g
		var cs = value.replace(chrr, '');
		if (cs.length>=3 || (cs.length>=2 && !document.getElementById('sbyLike').checked) ){
$('#submit_button').attr({'disabled':''});
$('#short_warning').css({'visibility':'hidden'});
}
else{
$('#submit_button').attr({'disabled':'disabled'});
$('#short_warning').css({'visibility':'visible'});
}
}
check_field_width();
if (document.getElementById('sbySlog')){
if (document.getElementById('sbySlog').checked) set_display('slog_div_view', true);
else set_display('slog_div_view', false);
}
if (document.getElementById('searchLimitView')){
if (document.getElementById('sbyLike').checked || document.getElementById('sbyIn').checked || document.getElementById('sbyIdent').checked){
document.getElementById('searchLimitView').style.display='block';
}
else{
document.getElementById('searchLimitView').style.display='none';
}
}
if ($('#sbyLike').attr('checked')) $('#searchLimitViewLike').show();
else $('#searchLimitViewLike').hide();
if ($('#sbyIn').attr('checked') && !$('#sbyLike').attr('checked')) $('#searchLimitViewIn').show();
else $('#searchLimitViewIn').hide();
if ($('#sbyIdent').attr('checked') && !$('#sbyLike').attr('checked') && !$('#sbyIn').attr('checked')) $('#searchLimitViewIdent').show();
else $('#searchLimitViewIdent').hide();
if (document.getElementById("SearchType") && document.getElementById("SearchType").value==1){
var st = document.getElementById("SearchType").value;
init_wordbreak();
}
if (z=document.getElementById('slog_descr')) if (z1=document.getElementById('slog_descr_n')){
if (value){
z1.style.display = 'none';
z.style.display = '';
}
else{
z.style.display = 'none';
z1.style.display = '';
}
}
	
	ons = setTimeout('onSearchFieldChange("");', 1000);
}
function init_wordbreak(){
	return false;
	
wordbreak_points = new Array();
syllab_arr = new Array();
make_wordbreak();
}
function show_wordbreak(no_clear){
	return false;
	
if (!no_clear){
slogSelect['and'] = new Array();
slogSelect['or'] = new Array();
slogSelect['and']['left'] = new Array();
slogSelect['and']['mid'] = new Array();
slogSelect['and']['right'] = new Array();
slogSelect['or']['left'] = new Array();
slogSelect['or']['mid'] = new Array();
slogSelect['or']['right'] = new Array();
}
var value = document.getElementById("SearchField").value.toUpperCase();
value = value.replace(/[^A-Za-zА-Яа-яЁё]/g, " ");
value = value.replace(/^[ ]+/g, "");
value = value.replace(/[ ]+/g, " ");
var text = '';
if (!value || value==''){
var cb;
cb = document.getElementById("slog_words");
cb.innerHTML = '';
cb.style.display = 'none';
cb = document.getElementById("slog_select");
cb.innerHTML = '';
cb.style.display = 'none';
cb = document.getElementById("slog_descr");
cb.style.display = 'none';
cb = document.getElementById("slog_break_descr");
cb.style.display = 'none';
cb = document.getElementById("slog_drag_descr");
cb.style.display = 'none';
cb = document.getElementById("slog_drag");
cb.style.display = 'none';
return;
}
else{
cb = document.getElementById("slog_words");
cb.style.display = 'block';
cb = document.getElementById("slog_select");
cb.style.display = 'block';
cb = document.getElementById("slog_descr");
cb.style.display = 'block';
cb = document.getElementById("slog_break_descr");
cb.style.display = 'block';
cb = document.getElementById("slog_drag_descr");
cb.style.display = 'block';
cb = document.getElementById("slog_drag");
cb.style.display = 'block';
}
var o = document.getElementById("slog_words");
text += '<div style="font-weight : bold; font-size : 120%;">';
for(var i=0; i<value.length; i++){
var chr = value.charAt(i);
if (i>0){
if (value.charAt(i-1) != ' ' && chr != ' '){
if (wordbreak_points[i]){
text += '&nbsp;&nbsp;<span onclick="syllab_arr = new Array(); remove_breakpoint(' + i + ');" style="color : red;" onmouseover="javascript:this.style.fontWeight=\'bold\'" onmouseout="javascript:this.style.fontWeight=\'\'"><span style="cursor : pointer;">&times;</span></span>&nbsp;&nbsp;';
}
else{
text += '&nbsp;<span onclick="syllab_arr = new Array(); add_breakpoint(' + i + ');" style="color : green; cursor : pointer;" onmouseover="javascript:this.style.fontWeight=\'bold\'" onmouseout="javascript:this.style.fontWeight=\'\'" >&times;</span>&nbsp;';
}
}
else{
text += '<br/>';
}
}
text += '<span" >' + chr + '</span>';
}
text += '<\/div>';
o.innerHTML = text;
var word_syl = new Array();
value = value + ' ';
var slog = '';
var si='';
var ci=0;
var pi=0;
for(var i=0; i<value.length; i++){
chr = value.charAt(i);
if (chr != ' '){
slog += chr;
if (!word_syl[ci]) word_syl[ci] = new Array();
word_syl[ci]['text'] = slog;
word_syl[ci]['state'] = 0;
if (wordbreak_points[i+1]){
si+=slog;
slog = '';
ci++;
}
}
else if (chr==' '){
pi++;
if (slog){
var state = 0;
if (!word_syl[ci]) word_syl[ci] = new Array();
word_syl[ci]['text'] = slog;
word_syl[ci]['state'] = 0;
syllab_arr[si+pi] = new Array();
syllab_arr[si+pi] = word_syl;
slog = '';
si='';
ci=0;
}
slog = '';
word_syl = new Array();
}
}
drawSlogSelection();
}
function draw_syl_select(){
sl_div = document.getElementById('slog_select');
sl_div.innerHTML = '';
var locarr = new Array();
var text = '';
for (var word_id in syllab_arr){
var word = syllab_arr[word_id];
for (var slog_id in word){
var slog = word[slog_id]['text'];
locarr[slog] = 1;
}
}
var a=0;
for (slog in locarr){
if (a) text += '&nbsp;|&nbsp';
text += '<span onmousedown="this.style.zIndex=10; StartDrag(event,this,PutBack)" class="syll_out">' + slog + '</span>';
a++;
}
text += '<table cellpadding="0" cellspacing="0" style="width : 700px;" id="sltab">';
text += '<tr>';
text += '<td wtyle="width : 120ex;"></td>';
text += '<td style="text-align : center;">' + lang[act_lang]['search']['syl_colname1'] + '</td><td></td>';
text += '<td style="text-align : center;">' + lang[act_lang]['search']['syl_colname2'] + '</td><td></td>';
text += '<td style="text-align : center;">' + lang[act_lang]['search']['syl_colname3'] + '</td><td></td>';
text += '</tr>';
text += '<tr>';
text += '<td style="padding-right : 6px; text-align : right; white-space : nowrap;">' + lang[act_lang]['search']['syl_rowname1'] + ' (<span class="search_info"><a href="#" onmouseout="javascript:popUp(event,\'syls_tip1\')" onmouseover="javascript:popUp(event,\'syls_tip1\')"><b>?</b></a></span>)</td>';
text += '<td id="syl_1" class="sylBlockTD">&nbsp;</td>';
text += '<td id="syl_s_1" class="sylBlockTDs"><img src="images/blank8.gif" width="1" /></td>';
text += '<td id="syl_2" class="sylBlockTD">&nbsp;</td>';
text += '<td id="syl_s_2" class="sylBlockTDs"><img src="images/blank8.gif" width="1" /></td>';
text += '<td id="syl_3" class="sylBlockTD">&nbsp;</td>';
text += '<td id="syl_s_3" class="sylBlockTDs"></td>';
text += '</tr>';
text += '<tr><td colspan="7" id="syl_s_b"><img src="images/blank8.gif" height="1"></td></tr>';
text += '<tr>';
text += '<td style="padding-right : 6px; text-align : right; white-space : nowrap;">' + lang[act_lang]['search']['syl_rowname2'] + ' (<span class="search_info"><a href="#" onmouseout="javascript:popUp(event,\'syls_tip2\')" onmouseover="javascript:popUp(event,\'syls_tip2\')"><b>?</b></a></span>)</td>';
text += '<td id="syl_4" class="sylBlockTD">&nbsp;</td>';
text += '<td id="syl_s_4" class="sylBlockTDs"><img src="images/blank8.gif" width="1" /></td>';
text += '<td id="syl_5" class="sylBlockTD">&nbsp;</td>';
text += '<td id="syl_s_5" class="sylBlockTDs"><img src="images/blank8.gif" width="1" /></td>';
text += '<td id="syl_6" class="sylBlockTD">&nbsp;</td>';
text += '<td id="syl_s_6" class="sylBlockTDs"></td>';
text += '</tr>';
text += '<tr><td colspan="7" id="syl_s_bb"><img src="images/blank8.gif" height="1"></td></tr>';
text += '</table>';
sl_div.innerHTML = text;
text = '<div style="clear : both;">';
text += '<input type="text" id="amorf" name="amorf" style="width : 10em;" />';
text += '<input type="button" value="' + lang[act_lang]['search']['add_formant'] + '" onclick="add_syllable();">';
text += '<\/div>';
document.getElementById('slog_drag').innerHTML = text;
}
function add_syllable(){
if (!syllab_arr['custom syl']) syllab_arr['custom syl'] = new Array();
var k = syllab_arr['custom syl'].length;
var syllable = document.getElementById('amorf').value.toUpperCase();
var s = syllable.replace(/[^A-Za-zА-Яа-яЁё]/g, " ");
s = s.replace(/^[ ]+/g, "");
s = s.replace(/[ ]+/g, " ");
var ss = s.split(' ');
for (var i=0; i<ss.length; i++){
if (ss[i].length>=1){
if (!syllab_arr['custom syl'][k]) syllab_arr['custom syl'][k] = new Array();
syllab_arr['custom syl'][k]['text'] = ss[i];
k++;
}
}
show_wordbreak(true);
}
function add_amorf(chr){
var inp = document.getElementById('amorf');
inp.value += chr;
}
function add_breakpoint(pos){
wordbreak_points[pos] = 1;
show_wordbreak();
}
function remove_breakpoint(pos){
wordbreak_points[pos] = 0;
show_wordbreak();
}
function make_wordbreak(xml){
var org = document.getElementById("SearchField").value.toUpperCase();
var word = '';
var str = '';
var k = org.replace(/[^A-Za-zА-Яа-яЁё]/g, " ");
var k = k.replace(/^[ ]+/g, "");
var k = k.replace(/[ ]+/g, " ");
var z = k.split(' ');
for (var l=0; l<z.length; l++){
word = z[l];
if (word) str += getSeparatedString(word) + ' ';
word='';
}
org = str;
var k = 0;
for (i=0; i<str.length; i++){
if (str.charAt(i)=='-'){
wordbreak_points[i-k] = 1;
k++;
}
else if (str.charAt(i)==' '){
//k++;
}
}
show_wordbreak();
return;
}
function savedoc(){
if (!search_hid) return;
w = window.open("/searcharch.php?sh=" + search_hid, "savedoc");
}
function replace_wait_msg(data){
jQuery('#wait_ad').html(data);
}
function show_wait_message(state){
jQuery('#wait_ad').html('');
jQuery.get('/wait_msg.php?i='+Math.random(), {}, replace_wait_msg, 'text');
var element = document.getElementById('wait_message');
if (!element) return;
//var limPanel = document.getElementById('searchLimitView');
if (state){
//if (limPanel) oldLimPanelState = limPanel.style.display;
//if (limPanel) limPanel.style.display = 'none';
element.style.display = 'block';
var new_x = (getClientCenterX() - element.offsetWidth/2);
var new_y = (getClientCenterY() - element.offsetHeight/2);
element.style.top = new_y + 'px';
element.style.left = new_x + 'px';
}
else{

element.style.display = 'none';
document.getElementById('wait_message_description').style.display = 'none';
}
}

function show_wait_description(text){
document.getElementById('wait_message_description').style.display = 'block';
document.getElementById('wait_message_description').innerHTML = text;
}

function check_field_width(){
var element = document.getElementById('SearchField');
var length = element.value.length;
var min_length = 27;
var max_length = document.body.clientWidth - document.getElementById('account_panel').clientWidth - 75;
if (length<min_length) length = min_length;
var new_length = (length*1.3);
element.style.width = new_length + 'ex';
//alert(element.clientWidth + '/ ' + max_length);
if (element.clientWidth>max_length) element.style.width = max_length + 'px';
}

function fix_panels(){
var tb = document.getElementById('right_panel_table');
var scroll = getBodyScrollTop();
//var offset = getBodyScrollTop();
if (document.getElementById("SearchType") && (document.getElementById("SearchType").value=='3'||document.getElementById("SearchType").value=='4')){
var low_pos = 350;
}
else if (document.getElementById("SearchType") && document.getElementById("SearchType").value=='2'){
var low_pos = 280;
}
else{
var low_pos = 570;
}
if (scroll>(low_pos-100)) offset = low_pos;
if (scroll<(low_pos-100)) offset = 0;
if (!document.getElementById('search_results_table')) offset=0;
tb.style.marginTop = offset + 'px';
}

function shed(){
fix_panels();
setTimeout('shed()', 500);
}

function reset_options(){
if (document.getElementById('sbyIdent')) document.getElementById('sbyIdent').checked = true;
if (document.getElementById('sbyIn')) document.getElementById('sbyIn').checked = false;
if (document.getElementById('sbyLike')) document.getElementById('sbyLike').checked = false;
if (document.getElementById('sbySlog')) document.getElementById('sbySlog').checked = false;
if (document.getElementById('slog_div')) document.getElementById('slog_div').style.display = 'none';
if (document.getElementById('SimMenu')) document.getElementById('SimMenu').style.display = 'none';
}
function eli18n(b){this.textdomain=function(c){return this.messages[c]?this._domain=c:this._domain};b&&b.messages&&this.load(b.messages);b&&b.textdomain&&this.textdomain(b.textdomain)}eli18n.prototype=new function(){this.messages={};this._domain="";this.load=function(g){if(typeof(g)=="object"){for(var h in g){var c=g[h];if(typeof(c)=="object"){if(!this.messages[h]){this.messages[h]={}}for(var b in c){if(typeof(c[b])=="string"){this.messages[h][b]=c[b]}}}}}return this};this.translate=function(c,b){var b=b&&this.messages[b]?b:this._domain;return this.messages[b]&&this.messages[b][c]?this.messages[b][c]:c};this.format=function(h,c,g){h=this.translate(h,g);if(typeof(c)=="object"){for(var b in c){h=h.replace("%"+b,this.translate(c[b],g))}}return h}};function elDialogForm(d){var b=this;var c={"class":"el-dialogform",submit:function(g,h){window.console&&window.console.log&&window.console.log("submit called");h.close()},form:{action:window.location.href,method:"post"},ajaxForm:null,validate:null,spinner:"Loading",tabs:{active:0},tabPrefix:"el-df-tab-",dialog:{title:"dialog",autoOpen:false,modal:true,resizable:false,buttons:{Cancel:function(){b.close()},Ok:function(){b.form.trigger("submit")}}}};this.opts=jQuery.extend(true,c,d,{dialog:{autoOpen:false,close:function(){b.close()}}});if(d&&d.dialog&&d.dialog.buttons&&typeof(d.dialog.buttons)=="object"){this.opts.dialog.buttons=d.dialog.buttons}this.ul=null;this.tabs={};this._table=null;this.dialog=jQuery("<div />").addClass(this.opts["class"]).dialog(this.opts.dialog);this.message=jQuery('<div class="el-dialogform-message rounded-5" />').hide().appendTo(this.dialog);this.error=jQuery('<div class="el-dialogform-error rounded-5" />').hide().appendTo(this.dialog);this.spinner=jQuery('<div class="spinner" />').hide().appendTo(this.dialog);this.content=jQuery('<div class="el-dialogform-content" />').appendTo(this.dialog);this.form=jQuery("<form />").attr(this.opts.form).appendTo(this.content);if(this.opts.submit){this.form.bind("submit",function(g){b.opts.submit(g,b)})}if(this.opts.ajaxForm&&jQuery.fn.ajaxForm){this.form.ajaxForm(this.opts.ajaxForm)}if(this.opts.validate){this.form.validate(this.opts.validate)}this.option=function(g,h){return this.dialog.dialog("option",g,h)};this.showError=function(g,h){this.hideMessage();this.hideSpinner();this.error.html(g).show();h&&this.content.hide();return this};this.hideError=function(){this.error.text("").hide();this.content.show();return this};this.showSpinner=function(g){this.error.hide();this.message.hide();this.content.hide();this.spinner.text(g||this.opts.spinner).show();this.option("buttons",{});return this};this.hideSpinner=function(){this.content.show();this.spinner.hide();return this};this.showMessage=function(g,h){this.hideError();this.hideSpinner();this.message.html(g||"").show();h&&this.content.hide();return this};this.hideMessage=function(){this.message.hide();this.content.show();return this};this.tab=function(h,g){h=this.opts.tabPrefix+h;if(!this.ul){this.ul=jQuery("<ul />").prependTo(this.form)}jQuery("<li />").append(jQuery("<a />").attr("href","#"+h).html(g)).appendTo(this.ul);this.tabs[h]={tab:jQuery("<div />").attr("id",h).addClass("tab").appendTo(this.form),table:null};return this};this.table=function(g){g=g&&g.indexOf(this.opts.tabPrefix)==-1?this.opts.tabPrefix+g:g;if(g&&this.tabs&&this.tabs[g]){this.tabs[g].table=jQuery("<table />").appendTo(this.tabs[g].tab)}else{this._table=jQuery("<table />").appendTo(this.form)}return this};this.append=function(k,o,h){o=o?"el-df-tab-"+o:"";if(!k){return this}if(o&&this.tabs[o]){if(h){!this.tabs[o].table&&this.table(o);var j=jQuery("<tr />").appendTo(this.tabs[o].table);if(!$.isArray(k)){j.append(jQuery("<td />").append(k))}else{for(var g=0;g<k.length;g++){j.append(jQuery("<td />").append(k[g]))}}}else{if(!jQuery.isArray(k)){this.tabs[o].tab.append(k)}else{for(var g=0;g<k.length;g++){this.tabs[o].tab.append(k[g])}}}}else{if(!h){if(!jQuery.isArray(k)){this.form.append(k)}else{for(var g=0;g<k.length;g++){this.form.append(k[g])}}}else{if(!this._table){this.table()}var j=jQuery("<tr />").appendTo(this._table);if(!jQuery.isArray(k)){j.append(jQuery("<td />").append(k))}else{for(var g=0;g<k.length;g++){j.append(jQuery("<td />").append(k[g]))}}}}return this};this.separator=function(g){g="el-df-tab-"+g;if(this.tabs&&this.tabs[g]){this.tabs[g].tab.append(jQuery("<div />").addClass("separator"));this.tabs[g].table&&this.table(g)}else{this.form.append(jQuery("<div />").addClass("separator"))}return this};this.open=function(){this.ul&&this.form.tabs(this.opts.tabs);this.form.find(":text").keyup(function(g){if(g.keyCode==13){b.form.submit()}});this.dialog.attr("unselectable","on").dialog("open");this.form.find(":text").eq(0).focus();return this};this.close=function(){this.dialog.dialog("destroy").remove()}}(function(b){b.fn.elColorPicker=function(j){var c=this;var g=b.extend({},b.fn.elColorPicker.defaults,j);this.hidden=b('<input type="hidden" />').attr("name",g.name).val(g.color||"").appendTo(this);this.palette=null;this.preview=null;this.input=null;function d(k){c.val(k);g.change&&g.change(c.val());c.palette.slideUp()}function h(){c.palette=b("<div />").addClass(g.paletteClass+" rounded-3");for(var k=0;k<g.colors.length;k++){b("<div />").addClass("color").css("background-color",g.colors[k]).attr({title:g.colors[k],unselectable:"on"}).appendTo(c.palette).mouseenter(function(){var o=b(this).attr("title");c.input.val(o);c.preview.css("background-color",o)}).click(function(o){o.stopPropagation();d(b(this).attr("title"))})}c.input=b('<input type="text" />').addClass("rounded-3").attr("size",8).click(function(o){o.stopPropagation()}).keydown(function(p){if(p.ctrlKey||p.metaKey){return true}var o=p.keyCode;if(o==27){return c.mouseleave()}if(o!=8&&o!=13&&o!=46&&o!=37&&o!=39&&(o<48||o>57)&&(o<65||o>70)){return false}var q=b(this).val();if(q.length==7||q.length==0){if(o==13){p.stopPropagation();p.preventDefault();d(q);c.palette.slideUp()}if(p.keyCode!=8&&p.keyCode!=46&&o!=37&&o!=39){return false}}}).keyup(function(o){var p=b(this).val();p.length==7&&/^#[0-9abcdef]{6}$/i.test(p)&&c.val(p)});c.preview=b("<div />").addClass("preview rounded-3").click(function(o){o.stopPropagation();d(c.input.val())});c.palette.append(b("<div />").addClass("clearfix")).append(b("<div />").addClass("panel").append(c.input).append(c.preview));if(g.palettePosition=="outer"){c.palette.hide().appendTo(c.parents("body").eq(0)).mouseleave(function(){b(this).slideUp();c.val(c.val())});c.mouseleave(function(o){if(o.relatedTarget!=c.palette.get(0)){c.palette.slideUp();c.val(c.val())}})}else{c.append(c.palette.hide()).mouseleave(function(o){c.palette.slideUp();c.val(c.val())})}c.val(c.val())}this.empty().addClass(g["class"]+" rounded-3").css({position:"relative","background-color":g.color||""}).click(function(q){if(!c.hasClass("disabled")){!c.palette&&h();if(g.palettePosition=="outer"&&c.palette.css("display")=="none"){var r=b(this).offset();var p=c.palette.width();var k=c.parents("body").width()-r.left>=p?r.left:r.left+b(this).outerWidth()-p;c.palette.css({left:k+"px",top:r.top+b(this).height()+1+"px"})}c.palette.slideToggle()}});this.val=function(k){if(!k&&k!==""){return this.hidden.val()}else{this.hidden.val(k);if(g.update){g.update(this.hidden.val())}else{this.css("background-color",k)}if(c.palette){c.preview.css("background-color",k);c.input.val(k)}}return this};return this};b.fn.elColorPicker.defaults={"class":"el-colorpicker",paletteClass:"el-palette",palettePosition:"inner",name:"color",color:"",update:null,change:function(d){window.console&&window.console.log&&window.console.log(d)},colors:["#ffffff","#cccccc","#999999","#666666","#333333","#000000","#ffcccc","#cc9999","#996666","#663333","#330000","#ff9999","#cc6666","#cc3333","#993333","#660000","#ff6666","#ff3333","#ff0000","#cc0000","#990000","#ff9966","#ff6633","#ff3300","#cc3300","#993300","#ffcc99","#cc9966","#cc6633","#996633","#663300","#ff9933","#ff6600","#ff9900","#cc6600","#cc9933","#ffcc66","#ffcc33","#ffcc00","#cc9900","#996600","#ffffcc","#cccc99","#999966","#666633","#333300","#ffff99","#cccc66","#cccc33","#999933","#666600","#ffff66","#ffff33","#ffff00","#cccc00","#999900","#ccff66","#ccff33","#ccff00","#99cc00","#669900","#ccff99","#99cc66","#99cc33","#669933","#336600","#99ff33","#99ff00","#66ff00","#66cc00","#66cc33","#99ff66","#66ff33","#33ff00","#33cc00","#339900","#ccffcc","#99cc99","#669966","#336633","#003300","#99ff99","#66cc66","#33cc33","#339933","#006600","#66ff66","#33ff33","#00ff00","#00cc00","#009900","#66ff99","#33ff66","#00ff33","#00cc33","#009933","#99ffcc","#66cc99","#33cc66","#339966","#006633","#33ff99","#00ff66","#00ff99","#00cc66","#33cc99","#66ffcc","#33ffcc","#00ffcc","#00cc99","#009966","#ccffff","#99cccc","#669999","#336666","#003333","#99ffff","#66cccc","#33cccc","#339999","#006666","#66cccc","#33ffff","#00ffff","#00cccc","#009999","#66ccff","#33ccff","#00ccff","#0099cc","#006699","#99ccff","#6699cc","#3399cc","#336699","#003366","#3399ff","#0099ff","#0066ff","#066ccc","#3366cc","#6699ff","#3366ff","#0033ff","#0033cc","#003399","#ccccff","#9999cc","#666699","#333366","#000033","#9999ff","#6666cc","#3333cc","#333399","#000066","#6666ff","#3333ff","#0000ff","#0000cc","#009999","#9966ff","#6633ff","#3300ff","#3300cc","#330099","#cc99ff","#9966cc","#6633cc","#663399","#330066","#9933ff","#6600ff","#9900ff","#6600cc","#9933cc","#cc66ff","#cc33ff","#cc00ff","#9900cc","#660099","#ffccff","#cc99cc","#996699","#663366","#330033","#ff99ff","#cc66cc","#cc33cc","#993399","#660066","#ff66ff","#ff33ff","#ff00ff","#cc00cc","#990099","#ff66cc","#ff33cc","#ff00cc","#cc0099","#990066","#ff99cc","#cc6699","#cc3399","#993366","#660033","#ff3399","#ff0099","#ff0066","#cc0066","#cc3366","#ff6699","#ff3366","#ff0033","#cc0033","#990033"]}})(jQuery);(function(b){b.fn.elBorderSelect=function(j){var p=this;var r=this.eq(0);var c=b.extend({},b.fn.elBorderSelect.defaults,j);var g=b('<input type="text" />').attr({name:c.name+"[width]",size:3}).css("text-align","right").change(function(){p.change()});var k=b("<div />").css("position","relative").elColorPicker({"class":"el-colorpicker ui-icon ui-icon-pencil",name:c.name+"[color]",palettePosition:"outer",change:function(){p.change()}});var d=b("<div />").elSelect({tpl:'<div style="border-bottom:4px %val #000;width:100%;margin:7px 0"> </div>',tpls:{"":"%label"},maxHeight:c.styleHeight||null,select:function(){p.change()},src:{"":"none",solid:"solid",dashed:"dashed",dotted:"dotted","double":"double",groove:"groove",ridge:"ridge",inset:"inset",outset:"outset"}});r.empty().addClass(c["class"]).attr("name",c.name||"").append(b("<table />").attr("cellspacing",0).append(b("<tr />").append(b("<td />").append(g).append(" px")).append(b("<td />").append(d)).append(b("<td />").append(k))));function h(u){function t(v){hexDigits=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return !v?"00":hexDigits[(v-v%16)/16]+hexDigits[v%16]}var o=u.match(/\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/);return o?"#"+t(o[1])+t(o[2])+t(o[3]):""}function q(t){var o=t.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);if(o){t=o[1];unit=o[2]}if(t[0]=="."){t="0"+t}t=parseFloat(t);if(isNaN(t)){return""}var u=parseInt(b(document.body).css("font-size"))||16;switch(unit){case"em":return parseInt(t*u);case"pt":return parseInt(t*u/12);case"%":return parseInt(t*u/100)}return t}this.change=function(){c.change&&c.change(this.val())};this.val=function(x){if(!x&&x!==""){var u=parseInt(g.val());return{width:!isNaN(u)?u+"px":"",style:d.val(),color:k.val()}}else{var t,u,z,A,o="";if(x.nodeName||x.css){if(!x.css){x=b(x)}var o=x.css("border");if((o=x.css("border"))){u=z=A=o}else{u=x.css("border-width");z=x.css("border-style");A=x.css("border-color")}}else{u=x.width||"";z=x.style||"";A=x.color||""}g.val(q(u));var t=z.match(/(solid|dashed|dotted|double|groove|ridge|inset|outset)/i);d.val(t?t[1]:"");k.val(h(A));return this}};this.val(c.value);return this};b.fn.elBorderSelect.defaults={name:"el-borderselect","class":"el-borderselect",value:{},change:null}})(jQuery);(function(b){b.fn.elPaddingInput=function(h){var d=this;var g=b.extend({},b.fn.elPaddingInput.defaults,{name:this.attr("name")},h);this.regexps={main:new RegExp(g.type=="padding"?'paddings*:s*([^;"]+)':'margins*:s*([^;"]+)',"im"),left:new RegExp(g.type=="padding"?'padding-lefts*:s*([^;"]+)':'margin-lefts*:s*([^;"]+)',"im"),top:new RegExp(g.type=="padding"?'padding-tops*:s*([^;"]+)':'margin-tops*:s*([^;"]+)',"im"),right:new RegExp(g.type=="padding"?'padding-rights*:s*([^;"]+)':'margin-rights*:s*([^;"]+)',"im"),bottom:new RegExp(g.type=="padding"?'padding-bottoms*:s*([^;"]+)':'margin-bottoms*:s*([^;"]+)',"im")};b.each(["left","top","right","bottom"],function(){d[this]=b('<input type="text" />').attr("size",3).css("text-align","right").bind("change",function(){b(this).val(c(b(this).val()));j()}).attr("name",g.name+"["+this+"]")});b.each(["uleft","utop","uright","ubottom"],function(){d[this]=b("<select />").append('<option value="px">px</option>').append('<option value="em">em</option>').append('<option value="pt">pt</option>').bind("change",function(){j()}).attr("name",g.name+"["+this+"]");if(g.percents){d[this].append('<option value="%">%</option>')}});this.empty().addClass(g["class"]).append(this.left).append(this.uleft).append(" x ").append(this.top).append(this.utop).append(" x ").append(this.right).append(this.uright).append(" x ").append(this.bottom).append(this.ubottom);this.val=function(A){if(!A&&A!==""){var u=c(this.left.val());var B=c(this.top.val());var k=c(this.right.val());var z=c(this.bottom.val());var x={left:u=="auto"||u==0?u:(u!==""?u+this.uleft.val():""),top:B=="auto"||B==0?B:(B!==""?B+this.utop.val():""),right:k=="auto"||k==0?k:(k!==""?k+this.uright.val():""),bottom:z=="auto"||z==0?z:(z!==""?z+this.ubottom.val():""),css:""};if(x.left!==""&&x.right!==""&&x.top!==""&&x.bottom!==""){if(x.left==x.right&&x.top==x.bottom){x.css=x.top+" "+x.left}else{x.css=x.top+" "+x.right+" "+x.bottom+" "+x.left}}return x}else{if(A.nodeName||A.css){if(!A.css){A=b(A)}var p={left:"",top:"",right:"",bottom:""};var o=(A.attr("style")||"").toLowerCase();if(o){o=b.trim(o);var q=o.match(this.regexps.main);if(q){var w=b.trim(q[1]).replace(/\s+/g," ").split(" ",4);p.top=w[0];p.right=w[1]&&w[1]!==""?w[1]:p.top;p.bottom=w[2]&&w[2]!==""?w[2]:p.top;p.left=w[3]&&w[3]!==""?w[3]:p.right}else{b.each(["left","top","right","bottom"],function(){var r=this.toString();q=o.match(d.regexps[r]);if(q){p[r]=q[1]}})}}var A=p}b.each(["left","top","right","bottom"],function(){var t=this.toString();if(typeof(A[t])!="undefined"&&A[t]!==null){A[t]=A[t].toString();var v=c(A[t]);d[t].val(v);var r=A[t].match(/(px|em|pt|%)/i);d["u"+t].val(r?r[1]:"px")}});return this}};function c(k){k=b.trim(k.toString());if(k[0]=="."){k="0"+k}n=parseFloat(k);return !isNaN(n)?n:(k=="auto"?k:"")}function j(){g.change&&g.change(d)}this.val(g.value);return this};b.fn.elPaddingInput.defaults={name:"el-paddinginput","class":"el-paddinginput",type:"padding",value:{},percents:true,change:null}})(jQuery);(function(b){b.fn.elSelect=function(d){var r=this;var w=this.eq(0);var c=b.extend({},b.fn.elSelect.defaults,d);var h=b('<input type="hidden" />').attr("name",c.name);var q=b("<label />").attr({unselectable:"on"}).addClass("rounded-left-3");var j=null;var p=null;if(w.get(0).nodeName=="SELECT"){c.src={};w.children("option").each(function(){c.src[b(this).val()]=b(this).text()});c.value=w.val();c.name=w.attr("name");w.replaceWith((w=b("<div />")))}if(!c.value||!c.src[c.val]){c.value=null;var g=0;for(var t in c.src){if(g++==0){c.value=t}}}this.val=function(o){if(!o&&o!==""){return h.val()}else{if(c.src[o]){h.val(o);k(o);if(j){j.children().each(function(){if(b(this).attr("name")==o){b(this).addClass("active")}else{b(this).removeClass("active")}})}}return this}};function k(o){var x=c.labelTpl||c.tpls[o]||c.tpl;q.html(x.replace(/%val/g,o).replace(/%label/,c.src[o])).children().attr({unselectable:"on"})}w.empty().addClass(c["class"]+" rounded-3").attr({unselectable:"on"}).append(h).append(q).hover(function(){b(this).addClass("hover")},function(){b(this).removeClass("hover")}).click(function(o){!j&&u();j.slideToggle();if(b.browser.msie&&!p){j.children().each(function(){p=Math.max(p,b(this).width())});if(p>j.width()){j.width(p+40)}}});this.val(c.value);function u(){j=b("<div />").addClass(c.listClass+" rounded-3").hide().appendTo(w.mouseleave(function(v){j.slideUp()}));for(var x in c.src){var z=c.tpls[x]||c.tpl;b("<div />").attr("name",x).append(b(z.replace(/%val/g,x).replace(/%label/g,c.src[x])).attr({unselectable:"on"})).appendTo(j).hover(function(){b(this).addClass("hover")},function(){b(this).removeClass("hover")}).click(function(C){C.stopPropagation();C.preventDefault();var B=b(this).attr("name");r.val(B);c.select(B);j.slideUp()})}var o=w.outerWidth();if(j.width()<o){j.width(o)}var A=j.height();if(c.maxHeight>0&&A>c.maxHeight){j.height(c.maxHeight)}r.val(h.val())}return this};b.fn.elSelect.defaults={name:"el-select","class":"el-select",listClass:"list",labelTpl:null,tpl:"<%val>%label</%val>",tpls:{},value:null,src:{},select:function(c){window.console&&window.console.log&&window.console.log("selected: "+c)},maxHeight:310}})(jQuery);(function(b){elRTE=function(j,g){if(!j||!j.nodeName){return alert('elRTE: argument "target" is not DOM Element')}var c=this,d;this.version="1.0 RC3";this.build="20100311";this.options=b.extend(true,{},this.options,g);this.browser=b.browser;this.target=b(j);this.toolbar=b('<div class="toolbar"/>');this.iframe=document.createElement("iframe");this.workzone=b('<div class="workzone"/>').append(this.iframe).append(this.source);this.statusbar=b('<div class="statusbar"/>');this.tabsbar=b('<div class="tabsbar"/>');this.editor=b('<div class="'+this.options.cssClass+'" />').append(this.toolbar).append(this.workzone).append(this.statusbar).append(this.tabsbar);this.doc=null;this.$doc=null;this.window=null;this.utils=new this.utils(this);this.dom=new this.dom(this);this._i18n=new eli18n({textdomain:"rte",messages:{rte:this.i18Messages[this.options.lang]||{}}});this.editor.insertAfter(j);if(j.nodeName=="TEXTAREA"){this.source=this.target.remove();this.source.insertAfter(this.iframe).hide()}else{this.source=b("<textarea />").insertAfter(this.iframe).hide();this.source.val(this.target.hide().html()).attr("name",this.target.attr("id")||this.target.attr("name"));this.target.html("")}this.source.val(this.filter(this.source.val(),true));if(this.options.allowSource){this.tabsbar.append('<div class="tab editor rounded-bottom-7 active">'+c.i18n("Editor")+'</div><div class="tab source rounded-bottom-7">'+c.i18n("Source")+'</div><div class="clearfix" style="clear:both"/>').children(".tab").click(function(o){if(!b(this).hasClass("active")){c.tabsbar.children(".tab").toggleClass("active");c.workzone.children().toggle();if(b(this).hasClass("editor")){c.val(c.source.val()||"&nbsp;");c.window.focus();c.ui.update(true)}else{c.updateSource();c.source.focus();if(b.browser.msie){}else{c.source[0].setSelectionRange(0,0)}c.ui.disable();c.statusbar.empty()}}})}this.window=this.iframe.contentWindow;this.doc=this.iframe.contentWindow.document;this.$doc=b(this.doc);d='<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';b.each(c.options.cssfiles,function(){d+='<link rel="stylesheet" type="text/css" href="'+this+'" />'});this.doc.open();this.doc.write(c.options.doctype+d+"</head><body>"+(this.source.val()||"&nbsp;")+"</body></html>");this.doc.close();if(b.browser.msie){this.doc.body.contentEditable=true}else{try{this.doc.designMode="on"}catch(h){}this.doc.execCommand("styleWithCSS",false,this.options.styleWithCSS)}if(this.options.height>0){this.workzone.height(this.options.height);b(this.iframe).height(this.options.height)}this.window.focus();this.history=new this.history(this);this.selection=new this.selection(this);this.ui=new this.ui(this);var k=document.createElement("span");b(k).addClass("elrte-swf-placeholder").appendTo(c.statusbar);if(typeof k.currentStyle!="undefined"){url=k.currentStyle.backgroundImage}else{url=document.defaultView.getComputedStyle(k,null).getPropertyValue("background-image")}c.swfPlaceholder=url?url.replace(/^url\("?([^"]+)"?\)$/,"$1"):"";b(c.doc).find("img.elrte-swf-placeholder").attr("src",c.swfPlaceholder);this.target.parents("form").bind("submit",function(){c.source.is(":hidden")&&c.updateSource();c.toolbar.find(":hidden").remove()});this.$doc.bind("mouseup",function(){c.ui.update()}).bind("keyup",function(o){if((o.keyCode>=8&&o.keyCode<=13)||(o.keyCode>=32&&o.keyCode<=40)||o.keyCode==46||(o.keyCode>=96&&o.keyCode<=111)){c.ui.update()}}).bind("keydown",function(o){if((o.metaKey||o.ctrlKey)&&o.keyCode==65){c.ui.update()}else{if(o.keyCode==13){var p=c.selection.getNode();if(c.dom.selfOrParent(p,/^PRE$/)){c.selection.insertNode(c.doc.createTextNode("\r\n"));return false}else{if(b.browser.safari&&o.shiftKey){c.selection.insertNode(c.doc.createElement("br"));return false}}}}});this.typing=false;this.lastKey=null;this.$doc.bind("keydown",function(o){if((o.keyCode>=48&&o.keyCode<=57)||o.keyCode==61||o.keyCode==109||(o.keyCode>=65&&o.keyCode<=90)||o.keyCode==188||o.keyCode==190||o.keyCode==191||(o.keyCode>=219&&o.keyCode<=222)){if(!c.typing){c.history.add(true)}c.typing=true;c.lastKey=null}else{if(o.keyCode==8||o.keyCode==46||o.keyCode==32||o.keyCode==13){if(o.keyCode!=c.lastKey){c.history.add(true)}c.lastKey=o.keyCode;c.typing=false}}}).bind("mouseup",function(){c.typing=false;c.lastKey=null})};elRTE.prototype.i18n=function(c){return this._i18n.translate(c)};elRTE.prototype.open=function(){this.editor.show()};elRTE.prototype.close=function(){this.editor.hide()};elRTE.prototype.updateSource=function(){this.source.val(this.filter(b(this.doc.body).html()))};elRTE.prototype.val=function(c){if(typeof(c)=="string"){b(this.doc.body).html(this.filter(c,true))}else{this.updateSource();return this.source.val()}};elRTE.prototype.save=function(){this.editor.parents("form").submit()};elRTE.prototype.filter=function(h,g){var j="";var d=this;var k=b("<span />");if(!h.nodeType){j=b.trim(h)}else{j=b.trim(h.nodeType==1?b(h).html():h.nodeValue)}var c=this.options.stripWhiteSpace;b.each(this.filters.html,function(){j=this(j,c)});k.html(j);if(g){k.find("a").each(function(){if(b(this).attr("name")){b(this).addClass("el-rte-anchor")}});k.find('object[classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"]').each(function(){var z=b(this),o=z.children('param[name="'+(b.browser.msie?"Movie":"movie")+'"]').attr("value"),A=z.attr("style")||"",x=parseInt(z.css("width")||0)||parseInt(z.attr("width")||0)||"",r=parseInt(z.css("height")||0)||parseInt(z.attr("height")||0)||"",u=z.css("float")||z.attr("align"),v=z.css("vertical-align"),p=b("<span />"),q=b('<img src="'+d.swfPlaceholder+'" class="elrte-swf-placeholder" rel="'+o+'" />').appendTo(p);q.attr("style",A).css({width:x?(x+"px"):"auto",height:r?r+"px":"auto","float":u,"vertical-align":v});b(this).replaceWith(p.html())})}else{k.find("a.el-rte-anchor").each(function(){if(b.trim(b(this).attr("class"))=="el-rte-anchor"){b(this).removeAttr("class")}else{b(this).removeClass("el-rte-anchor")}});k.find("img.elrte-swf-placeholder").each(function(){var o=b(this),p='<object style="'+(o.attr("style")||"")+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="movie" value="'+b(this).attr("rel")+'" /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src="'+b(this).attr("rel")+'" type="application/x-shockwave-flash"></embed></object>';o.replaceWith(p)})}b.each(this.filters.dom,function(){k=this(k)});j=k.html();if(b.browser.msie||b.browser.opera){j=j.replace(/\<([a-z1-6]+)([^\>]*)\>/ig,function(q,p,o){o=o.replace(/([a-z\-]+)\:/ig,function(t,r){return r.toLowerCase()+":"});o=o.replace(/([a-z\-]+)="/ig,function(t,r){return r.toLowerCase()+'="'});return"<"+p.toLowerCase()+o+">"});j=j.replace(/\<\/([a-z1-6]+)\>/ig,function(p,o){return"</"+o.toLowerCase()+">"})}return j};elRTE.prototype.filters={dom:[function(c){c.find("[align]").not("tbody,tr").each(function(){var d=(b(this).attr("align")||"").toLowerCase();if((this.nodeName!="TD"&&this.nodeName!="TH")||d!="left"){b(this).css("text-align",d).removeAttr("align")}}).end().end().find("[border],[bordercolor]").each(function(){var d=parseInt(b(this).attr("border"))||1,g=b(this).attr("bordercolor")||"#000";b(this).css("border",d+"px solid "+g).removeAttr("border").removeAttr("bordercolor")}).end().find("[bgcolor]").each(function(){b(this).css("background-color",b(this).attr("bgcolor")).removeAttr("bgcolor")}).end().find("[background]").each(function(){b(this).css("background","url("+b(this).attr("background")+")").removeAttr("background")}).end().find("img[hspace],[vspace]").each(function(){var d=parseInt(b(this).attr("vspace"))||0,g=parseInt(b(this).attr("hspace"))||0;if(d>0||g>0){b(this).css("margin",(d>0?d:0)+"px "+(g>0?g:0)+"px")}b(this).removeAttr("hspace").removeAttr("vspace")}).end().find("[clear]").each(function(){var d=(b(this).attr("clear")||"").toLowerCase();b(this).css("clear",d=="all"?"both":d)});if(b.browser.safari){c.find(".Apple-style-span").removeClass("Apple-style-span")}return c}],html:[function(d,g){var c={1:"xx-small",2:"x-small",3:"small",4:"medium",5:"large",6:"x-large",7:"xx-large"};d=d.replace(/<font([^>]*)/i,function(o,j){var k="",h=j.match(/size=('|")(\d)/i);if(h&&h[2]&&c[h[2]]){k="font-size: "+c[h[2]]+"; "}h=j.match(/face=('|")([a-z0-9\s,]+)/i);if(h&&h[2]){k+="font-family: "+h[2]}return"<span"+(k?' style="'+k+'"':"")}).replace(/<\/font/i,"</span").replace(/<b(\s[^>]*)?>/i,"<strong$1>").replace(/<\/b\s*>/i,"</strong>").replace(/<i(\s[^>]*)?>/i,"<em$1>").replace(/<\/i\s*>/i,"</em>").replace(/((class|style)="")/i,"");if(g){d=d.replace(/\r?\n(\s)*/mg,"\n")}return d}]};elRTE.prototype.log=function(c){if(window.console&&window.console.log){window.console.log(c)}};elRTE.prototype.i18Messages={};b.fn.elrte=function(g){var d=typeof(g)=="string"?g:"",c;this.each(function(){if(!this.elrte){this.elrte=new elRTE(this,typeof(g)=="object"?g:{})}switch(d){case"open":case"show":this.elrte.open();break;case"close":case"hide":this.elrte.close();break;case"updateSource":this.elrte.updateSource();break}});if(d=="val"){if(!this.length){return""}else{if(this.length==1){return this[0].elrte.val()}else{c={};this.each(function(){c[this.elrte.source.attr("name")]=this.elrte.val()});return c}}}return this}})(jQuery);(function(b){elRTE.prototype.dom=function(d){this.rte=d;var c=this;this.regExp={textNodes:/^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TD|TH|TT|VAR)$/,textContainsNodes:/^(A|ABBR|ACRONYM|ADDRESS|B|BDO|BIG|BLOCKQUOTE|CAPTION|CENTER|CITE|CODE|DD|DEL|DFN|DIV|DL|DT|EM|FIELDSET|FONT|H[1-6]|I|INS|KBD|LABEL|LEGEND|LI|MARQUEE|NOBR|NOEMBED|OL|P|PRE|Q|SAMP|SMALL|SPAN|STRIKE|STRONG|SUB|SUP|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|TT|UL|VAR)$/,block:/^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TABLE|THEAD|TBODY|TFOOT|TD|TH|TR|UL)$/,selectionBlock:/^(APPLET|BLOCKQUOTE|BR|CAPTION|CENTER|COL|COLGROUP|DD|DIV|DL|DT|H[1-6]|EMBED|FIELDSET|LI|MARQUEE|NOBR|OBJECT|OL|P|PRE|TD|TH|TR|UL)$/,header:/^H[1-6]$/,formElement:/^(FORM|INPUT|HIDDEN|TEXTAREA|SELECT|BUTTON)$/};this.root=function(){return this.rte.body};this.create=function(g){return this.rte.doc.createElement(g)};this.indexOf=function(h){var g=0;h=b(h);while((h=h.prev())&&h.length){g++}return g};this.attr=function(j,g){var h="";if(j.nodeType==1){h=b(j).attr(g);if(h&&g!="src"&&g!="href"){h=h.toString().toLowerCase()}}return h||""};this.findCommonAncestor=function(k,j){if(!k||!j){return this.rte.log("dom.findCommonAncestor invalid arguments")}if(k==j){return k}else{if(k.nodeName=="BODY"||j.nodeName=="BODY"){return this.rte.doc.body}}var p=b(k).parents(),o=b(j).parents(),g=o.length-1,q=o[g];for(var h=p.length-1;h>=0;h--,g--){if(p[h]==o[g]){q=p[h]}else{break}}return q};this.isEmpty=function(g){if(g.nodeType==1){return this.regExp.textNodes.test(g.nodeName)?b.trim(b(g).text()).length==0:false}else{if(g.nodeType==3){return/^(TABLE|THEAD|TFOOT|TBODY|TR|UL|OL|DL)$/.test(g.parentNode.nodeName)||g.nodeValue==""||(b.trim(g.nodeValue).length==0&&!(g.nextSibling&&g.previousSibling&&g.nextSibling.nodeType==1&&g.previousSibling.nodeType==1&&!this.regExp.block.test(g.nextSibling.nodeName)&&!this.regExp.block.test(g.previousSibling.nodeName)))}}return true};this.next=function(g){while(g.nextSibling&&(g=g.nextSibling)){if(g.nodeType==1||(g.nodeType==3&&!this.isEmpty(g))){return g}}return null};this.prev=function(g){while(g.previousSibling&&(g=g.previousSibling)){if(g.nodeType==1||(g.nodeType==3&&!this.isEmpty(g))){return g}}return null};this.isPrev=function(h,g){while((h=this.prev(h))){if(h==g){return true}}return false};this.nextAll=function(h){var g=[];while((h=this.next(h))){g.push(h)}return g};this.prevAll=function(h){var g=[];while((h=this.prev(h))){g.push(h)}return g};this.toLineEnd=function(h){var g=[];while((h=this.next(h))&&h.nodeName!="BR"&&h.nodeName!="HR"&&this.isInline(h)){g.push(h)}return g};this.toLineStart=function(h){var g=[];while((h=this.prev(h))&&h.nodeName!="BR"&&h.nodeName!="HR"&&this.isInline(h)){g.unshift(h)}return g};this.isFirstNotEmpty=function(g){while((g=this.prev(g))){if(g.nodeType==1||(g.nodeType==3&&b.trim(g.nodeValue)!="")){return false}}return true};this.isLastNotEmpty=function(g){while((g=this.next(g))){if(!this.isEmpty(g)){return false}}return true};this.isOnlyNotEmpty=function(g){return this.isFirstNotEmpty(g)&&this.isLastNotEmpty(g)};this.findLastNotEmpty=function(g){this.rte.log("findLastNotEmpty Who is here 0_o");if(g.nodeType==1&&(l=g.lastChild)){if(!this.isEmpty(l)){return l}while(l.previousSibling&&(l=l.previousSibling)){if(!this.isEmpty(l)){return l}}}return false};this.isInline=function(j){if(j.nodeType==3){return true}else{if(j.nodeType==1){j=b(j);var h=j.css("display");var g=j.css("float");return h=="inline"||h=="inline-block"||g=="left"||g=="right"}}return true};this.filter=function(o,k){var j=typeof(k),g=[],h;if(j=="object"||j=="string"){k=this.regExp[k]||k;if(!o.push){return o.nodeName&&k.test(o.nodeName)?o:null}for(h=0;h<o.length;h++){if(o[h].nodeName&&o[h].nodeName&&k.test(o[h].nodeName)){g.push(o[h])}}return g}return null};this.parents=function(k,j){var h=typeof(j),g=[];if(h=="object"||h=="string"){j=j=="*"?/.?/:(this.regExp[j]||j);while(k&&(k=k.parentNode)&&k.nodeName!="BODY"&&k.nodeName!="HTML"){if(j.test(k.nodeName)){g.push(k)}}}return g};this.parent=function(h,g){return this.parents(h,g)[0]||null};this.selfOrParent=function(j,h,g){return this.filter(j,h)||this.parent(j,g||h)};this.selfOrParentLink=function(g){g=this.selfOrParent(g,/^A$/);return g&&g.href?g:null};this.selfOrParentAnchor=function(g){g=this.selfOrParent(g,/^A$/);return g&&!g.href&&g.name?g:null};this.childLinks=function(h){var g=[];b("a[href]",h).each(function(){g.push(this)});return g};this.wrap=function(h,g){h=h.length?h:[h];g=g.nodeName?g:this.create(g);g=h[0].parentNode.insertBefore(g,h[0]);b(h).each(function(){if(this!=g){g.appendChild(this)}});return g};this.wrapContents=function(j,g){g=g.nodeName?g:this.create(g);for(var h=0;h<j.childNodes.length;h++){g.appendChild(j.childNodes[h])}j.appendChild(g);return g};this.cleanNode=function(g){if(g.nodeType!=1){return}if(/^(P|LI)$/.test(g.nodeName)&&(l=this.findLastNotEmpty(g))&&l.nodeName=="BR"){b(l).remove()}$n=b(g);$n.children().each(function(){this.cleanNode(this)});if(g.nodeName!="BODY"&&!/^(TABLE|TR|TD)$/.test(g)&&this.isEmpty(g)){return $n.remove()}if($n.attr("style")===""){$n.removeAttr("style")}if(this.rte.browser.safari&&$n.hasClass("Apple-span")){$n.removeClass("Apple-span")}if(g.nodeName=="SPAN"&&!$n.attr("style")&&!$n.attr("class")&&!$n.attr("id")){$n.replaceWith($n.html())}};this.cleanChildNodes=function(h){var g=this.cleanNode;b(h).children().each(function(){g(this)})};this.tableMatrix=function(k){var j=[];if(k&&k.nodeName=="TABLE"){var h=0;function g(p){for(var o=0;o<=h;o++){if(!j[p][o]){return o}}}b(k).find("tr").each(function(o){if(!b.isArray(j[o])){j[o]=[]}b(this).children("td,th").each(function(){var q=parseInt(b(this).attr("colspan")||1);var u=parseInt(b(this).attr("rowspan")||1);var t=g(o);for(var z=0;z<u;z++){for(var p=0;p<q;p++){var r=o+z;if(!b.isArray(j[r])){j[r]=[]}var v=p==0&&z==0?this:(z==0?p:"-");j[r][t+p]=v}}h=Math.max(h,j[o].length)})})}return j};this.indexesOfCell=function(k,j){for(var g=0;g<j.length;g++){for(var h=0;h<j[g].length;h++){if(j[g][h]==k){return[g,h]}}}};this.fixTable=function(t){if(t&&t.nodeName=="TABLE"){var j=b(t);var q=this.tableMatrix(t);var g=0;b.each(q,function(){g=Math.max(g,this.length)});if(g==0){return j.remove()}for(var o=0;o<q.length;o++){var h=q[o].length;if(h==0){j.find("tr").eq(o).remove()}else{if(h<g){var k=g-h;var p=j.find("tr").eq(o);for(i=0;i<k;i++){p.append("<td>&nbsp;</td>")}}}}}};this.tableColumn=function(j,h,p){j=this.selfOrParent(j,/^TD|TH$/);var k=this.selfOrParent(j,/^TABLE$/);ret=[];info={offset:[],delta:[]};if(j&&k){p&&this.fixTable(k);var v=this.tableMatrix(k);var w=false;var u;for(var g=0;g<v.length;g++){for(var t=0;t<v[g].length;t++){if(v[g][t]==j){u=t;w=true;break}}if(w){break}}if(u>=0){for(var g=0;g<v.length;g++){var o=v[g][u]||null;if(o){if(o.nodeName){ret.push(o);if(h){info.delta.push(0);info.offset.push(u)}}else{var q=parseInt(o);if(!isNaN(q)&&v[g][u-q]&&v[g][u-q].nodeName){ret.push(v[g][u-q]);if(h){info.delta.push(q);info.offset.push(u)}}}}}}}return !h?ret:{column:ret,info:info}}}})(jQuery);(function(b){elRTE.prototype.history=function(c){this.rte=c;this._prev=[];this._next=[];this.add=function(){if(this.rte.options.historyLength>0&&this._prev.length>=this.rte.options.historyLength){this._prev.slice(this.rte.options.historyLength)}this._prev.push(b(this.rte.doc.body).html());this._next=[]};this.back=function(){if(this._prev.length){this._next.push(b(this.rte.doc.body).html());b(this.rte.doc.body).html(this._prev.pop())}};this.fwd=function(){if(this._next.length){this._prev.push(b(this.rte.doc.body).html());b(this.rte.doc.body).html(this._next.pop())}};this.canBack=function(){return this._prev.length};this.canFwd=function(){return this._next.length}}})(jQuery);(function(b){elRTE.prototype.options={doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',cssClass:"el-rte",cssfiles:[],height:null,lang:"en",toolbar:"normal",absoluteURLs:true,allowSource:true,stripWhiteSpace:false,styleWithCSS:false,fmAllow:true,fmOpen:null,buttons:{save:"Save",copy:"Copy",cut:"Cut",paste:"Paste",pastetext:"Paste only text",pasteformattext:"Paste formatted text",removeformat:"Clean format",undo:"Undo last action",redo:"Redo previous action",bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",superscript:"Superscript",subscript:"Subscript",justifyleft:"Align left",justifyright:"Ailgn right",justifycenter:"Align center",justifyfull:"Align full",indent:"Indent",outdent:"Outdent",forecolor:"Font color",hilitecolor:"Background color",formatblock:"Format",fontsize:"Font size",fontname:"Font",insertorderedlist:"Ordered list",insertunorderedlist:"Unordered list",horizontalrule:"Horizontal rule",blockquote:"Blockquote",div:"Block element (DIV)",link:"Link",unlink:"Delete link",anchor:"Bookmark",image:"Image",flash:"Flash",table:"Table",tablerm:"Delete table",tableprops:"Table properties",tbcellprops:"Table cell properties",tbrowbefore:"Insert row before",tbrowafter:"Insert row after",tbrowrm:"Delete row",tbcolbefore:"Insert column before",tbcolafter:"Insert column after",tbcolrm:"Delete column",tbcellsmerge:"Merge table cells",tbcellsplit:"Split table cell",docstructure:"Toggle display document structure",elfinder:"Open file manager",fullscreen:"Toggle full screen mode",nbsp:"Non breakable space",stopfloat:"Stop element floating"},panels:{save:["save"],copypaste:["copy","cut","paste","pastetext","pasteformattext","removeformat","docstructure"],undoredo:["undo","redo"],style:["bold","italic","underline","strikethrough","subscript","superscript"],colors:["forecolor","hilitecolor"],alignment:["justifyleft","justifycenter","justifyright","justifyfull"],indent:["outdent","indent"],format:["formatblock","fontsize","fontname"],lists:["insertorderedlist","insertunorderedlist"],elements:["horizontalrule","blockquote","div","stopfloat","nbsp"],links:["link","unlink","anchor"],images:["image"],media:["image","flash"],tables:["table","tableprops","tablerm","tbrowbefore","tbrowafter","tbrowrm","tbcolbefore","tbcolafter","tbcolrm","tbcellprops","tbcellsmerge","tbcellsplit"],elfinder:["elfinder"],fullscreen:["fullscreen"]},toolbars:{tiny:["style"],compact:["save","undoredo","style","alignment","lists","links","fullscreen"],normal:["save","copypaste","undoredo","style","alignment","colors","indent","lists","links","elements","images","fullscreen"],complete:["save","copypaste","undoredo","style","alignment","colors","format","indent","lists","links","elements","media","fullscreen"],maxi:["save","copypaste","undoredo","style","alignment","colors","format","indent","lists","links","elements","media","tables","fullscreen"],eldorado:["save","copypaste","elfinder","undoredo","style","alignment","colors","format","indent","lists","links","elements","media","tables","fullscreen"]},panelNames:{save:"Save",copypaste:"Copy/Pase",undoredo:"Undo/Redo",style:"Text styles",colors:"Colors",alignment:"Alignment",indent:"Indent/Outdent",format:"Text format",lists:"Lists",elements:"Misc elements",links:"Links",images:"Images",media:"Media",tables:"Tables",elfinder:"File manager (elFinder)"}}})(jQuery);(function(b){elRTE.prototype.selection=function(h){this.rte=h;var d=this;this.w3cRange=null;var p,c,k,o;b(this.rte.doc).keyup(function(q){if(q.ctrlKey||q.metaKey||(q.keyCode>=8&&q.keyCode<=13)||(q.keyCode>=32&&q.keyCode<=40)||q.keyCode==46||(q.keyCode>=96&&q.keyCode<=111)){d.cleanCache()}}).mousedown(function(q){if(q.target.nodeName=="HTML"){p=d.rte.doc.body}else{p=q.target}c=k=null}).mouseup(function(q){if(q.target.nodeName=="HTML"){c=d.rte.doc.body}else{c=q.target}c=q.target;k=null}).click();function j(){return d.rte.window.getSelection?d.rte.window.getSelection():d.rte.window.document.selection}function g(t,r,q){while(t.nodeName!="BODY"&&t.parentNode&&t.parentNode.nodeName!="BODY"&&(r?t!==r&&t.parentNode!=r:1)&&((q=="left"&&d.rte.dom.isFirstNotEmpty(t))||(q=="right"&&d.rte.dom.isLastNotEmpty(t))||(d.rte.dom.isFirstNotEmpty(t)&&d.rte.dom.isLastNotEmpty(t)))){t=t.parentNode}return t}this.collapsed=function(){return this.getRangeAt().isCollapsed()};this.collapse=function(q){this.getRangeAt().collapse(q?true:false)};this.getRangeAt=function(u){if(this.rte.browser.msie){if(!this.w3cRange){this.w3cRange=new this.rte.w3cRange(this.rte)}u&&this.w3cRange.update();return this.w3cRange}var q=j();var t=q.rangeCount>0?q.getRangeAt(0):this.rte.doc.createRange();t.getStart=function(){return this.startContainer.nodeType==1?this.startContainer.childNodes[Math.min(this.startOffset,this.startContainer.childNodes.length-1)]:this.startContainer};t.getEnd=function(){return this.endContainer.nodeType==1?this.endContainer.childNodes[Math.min(this.startOffset==this.endOffset?this.endOffset:this.endOffset-1,this.endContainer.childNodes.length-1)]:this.endContainer};t.isCollapsed=function(){return this.collapsed};return t};this.saveIERange=function(){if(b.browser.msie){o=this.getRangeAt().getBookmark()}};this.restoreIERange=function(){b.browser.msie&&o&&this.getRangeAt().moveToBookmark(o)};this.select=function(q,u){u=u||q;var t=this.getRangeAt();t.setStartBefore(q);t.setEndAfter(u);if(this.rte.browser.msie){t.select()}else{var q=j();q.removeAllRanges();q.addRange(t)}return this.cleanCache()};this.selectContents=function(v){var t=this.getRangeAt();if(v&&v.nodeType==1){if(this.rte.browser.msie){t.range();t.r.moveToElementText(v.parentNode);t.r.select()}else{try{t.selectNodeContents(v)}catch(u){return this.rte.log("unable select node contents "+v)}var q=j();q.removeAllRanges();q.addRange(t)}}return this};this.insertNode=function(w,v){if(v&&!this.collapsed()){this.collapse()}if(this.rte.browser.msie){var q=w.nodeType==3?w.nodeValue:b(this.rte.dom.create("span")).append(b(w)).html();var u=this.getRangeAt();u.insertNode(q)}else{var u=this.getRangeAt();u.insertNode(w);u.setStartAfter(w);u.setEndAfter(w);var t=j();t.removeAllRanges();t.addRange(u)}return this.cleanCache()};this.insertHtml=function(q,r){if(r&&!this.collapsed()){this.collapse()}if(this.rte.browser.msie){this.getRangeAt().range().pasteHTML(q)}else{var t=b(this.rte.dom.create("span")).html(q||"").get(0);this.insertNode(t);b(t).replaceWith(b(t).html())}return this.cleanCache()};this.insertText=function(r,q){var t=this.rte.doc.createTextNode(r);return this.insertHtml(t.nodeValue)};this.cleanCache=function(){p=c=k=null;return this};this.getStart=function(){if(!p){var q=this.getRangeAt();p=q.getStart()}return p};this.getEnd=function(){if(!c){var q=this.getRangeAt();c=q.getEnd()}return c};this.getNode=function(){if(!k){k=this.rte.dom.findCommonAncestor(this.getStart(),this.getEnd())}return k};this.selected=function(t){var q={collapsed:false,blocks:false,filter:false,wrap:"text",tag:"span"};q=b.extend({},q,t);if(q.blocks){var w=this.getNode(),v=null;if(v=this.rte.dom.selfOrParent(w,"selectionBlock")){return[v]}}var u=this.selectedRaw(q.collapsed,q.blocks);var B=[];var x=[];var C=null;function r(){function E(){for(var G=0;G<x.length;G++){if(x[G].nodeType==1&&(d.rte.dom.selfOrParent(x[G],/^P$/)||b(x[G]).find("p").length>0)){return false}}return true}if(x.length>0){var D=q.tag=="p"&&!E()?"div":q.tag;var F=d.rte.dom.wrap(x,D);B[C]=F;C=null;x=[]}}function A(F){if(F.nodeType==1){if(/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(F.nodeName)){b(F).find("td,th").each(function(){var G=q.tag=="p"&&b(this).find("p").length>0?"div":q.tag;var H=d.rte.dom.wrapContents(this,G);return B.push(H)})}else{if(/^(CAPTION|TD|TH|LI|DT|DD)$/.test(F.nodeName)){var D=q.tag=="p"&&b(F).find("p").length>0?"div":q.tag;var F=d.rte.dom.wrapContents(F,D);return B.push(F)}}}var E=x.length>0?x[x.length-1]:null;if(E&&E!=d.rte.dom.prev(F)){r()}x.push(F);if(C===null){C=B.length;B.push("dummy")}}if(u.nodes.length>0){for(var z=0;z<u.nodes.length;z++){var w=u.nodes[z];if(w.nodeType==3&&(z==0||z==u.nodes.length-1)&&b.trim(w.nodeValue).length>0){if(z==0&&u.so>0){w=w.splitText(u.so)}if(z==u.nodes.length-1&&u.eo>0){w.splitText(z==0&&u.so>0?u.eo-u.so:u.eo)}}switch(q.wrap){case"text":if((w.nodeType==1&&w.nodeName=="BR")||(w.nodeType==3&&b.trim(w.nodeValue).length>0)){A(w)}else{if(w.nodeType==1){B.push(w)}}break;case"inline":if(this.rte.dom.isInline(w)){A(w)}else{if(w.nodeType==1){B.push(w)}}break;case"all":if(w.nodeType==1||!this.rte.dom.isEmpty(w)){A(w)}break;default:if(w.nodeType==1||!this.rte.dom.isEmpty(w)){B.push(w)}}}r()}return q.filter?this.rte.dom.filter(B,q.filter):B};this.dump=function(q,u,x,w,t){var v=this.getRangeAt();this.rte.log("commonAncestorContainer");this.rte.log(q||v.commonAncestorContainer);this.rte.log("startContainer");this.rte.log(u||v.startContainer);this.rte.log("startOffset: "+(w>=0?w:v.startOffset));this.rte.log("endContainer");this.rte.log(x||v.endContainer);this.rte.log("endOffset: "+(t>=0?t:v.endOffset))};this.selectedRaw=function(A,q){var G={so:null,eo:null,nodes:[]};var t=this.getRangeAt(true);var x=t.commonAncestorContainer;var I,F;var E=false;var C=false;function D(K,r,J){if(K.nodeType==3){J=J>=0?J:K.nodeValue.length;return(r==0&&J==K.nodeValue.length)||b.trim(K.nodeValue).length==b.trim(K.nodeValue.substring(r,J)).length}return true}function z(K,r,J){if(K.nodeType==1){return d.rte.dom.isEmpty(K)}else{if(K.nodeType==3){return b.trim(K.nodeValue.substring(r||0,J>=0?J:K.nodeValue.length)).length==0}}return true}if(t.startContainer.nodeType==1){if(t.startOffset<t.startContainer.childNodes.length){I=t.startContainer.childNodes[t.startOffset];G.so=I.nodeType==1?null:0}else{I=t.startContainer.childNodes[t.startOffset-1];G.so=I.nodeType==1?null:I.nodeValue.length}}else{I=t.startContainer;G.so=t.startOffset}if(t.collapsed){if(A){if(q){I=g(I);if(!this.rte.dom.isEmpty(I)||(I=this.rte.dom.next(I))){G.nodes=[I]}if(this.rte.dom.isInline(I)){G.nodes=this.rte.dom.toLineStart(I).concat(G.nodes,this.rte.dom.toLineEnd(I))}if(G.nodes.length>0){G.so=G.nodes[0].nodeType==1?null:0;G.eo=G.nodes[G.nodes.length-1].nodeType==1?null:G.nodes[G.nodes.length-1].nodeValue.length}}else{if(!this.rte.dom.isEmpty(I)){G.nodes=[I]}}}return G}if(t.endContainer.nodeType==1){F=t.endContainer.childNodes[t.endOffset-1];G.eo=F.nodeType==1?null:F.nodeValue.length}else{F=t.endContainer;G.eo=t.endOffset}if(I.nodeType==1||q||D(I,G.so,I.nodeValue.length)){I=g(I,x,"left");E=true;G.so=I.nodeType==1?null:0}if(F.nodeType==1||q||D(F,0,G.eo)){F=g(F,x,"right");C=true;G.eo=F.nodeType==1?null:F.nodeValue.length}if(q){if(I.nodeType!=1&&I.parentNode!=x&&I.parentNode.nodeName!="BODY"){I=I.parentNode;G.so=null}if(F.nodeType!=1&&F.parentNode!=x&&F.parentNode.nodeName!="BODY"){F=F.parentNode;G.eo=null}}if(I.parentNode==F.parentNode&&I.parentNode.nodeName!="BODY"&&(E&&this.rte.dom.isFirstNotEmpty(I))&&(C&&this.rte.dom.isLastNotEmpty(F))){I=F=I.parentNode;G.so=I.nodeType==1?null:0;G.eo=F.nodeType==1?null:F.nodeValue.length}if(I==F){if(!this.rte.dom.isEmpty(I)){G.nodes.push(I)}return G}var u=I;while(u.nodeName!="BODY"&&u.parentNode!==x&&u.parentNode.nodeName!="BODY"){u=u.parentNode}var H=F;while(H.nodeName!="BODY"&&H.parentNode!==x&&H.parentNode.nodeName!="BODY"){this.rte.log(H);H=H.parentNode}if(!z(I,G.so,I.nodeType==3?I.nodeValue.length:null)){G.nodes.push(I)}var w=I;while(w!==u){var v=w;while((v=this.rte.dom.next(v))){G.nodes.push(v)}w=w.parentNode}w=u;while((w=this.rte.dom.next(w))&&w!=H){G.nodes.push(w)}var B=[];w=F;while(w!==H){var v=w;while((v=this.rte.dom.prev(v))){B.push(v)}w=w.parentNode}if(B.length){G.nodes=G.nodes.concat(B.reverse())}if(!z(F,0,F.nodeType==3?G.eo:null)){G.nodes.push(F)}if(q){if(this.rte.dom.isInline(I)){G.nodes=this.rte.dom.toLineStart(I).concat(G.nodes);G.so=G.nodes[0].nodeType==1?null:0}if(this.rte.dom.isInline(F)){G.nodes=G.nodes.concat(this.rte.dom.toLineEnd(F));G.eo=G.nodes[G.nodes.length-1].nodeType==1?null:G.nodes[G.nodes.length-1].nodeValue.length}}return G}}})(jQuery);(function(b){elRTE.prototype.ui=function(d){this.rte=d;this._buttons=[];var v=this,o=this.rte.options.toolbars[d.options.toolbar&&d.options.toolbars[d.options.toolbar]?d.options.toolbar:"normal"],r=o.length,g,k,j,h,t,u,q;for(q in this.buttons){if(this.buttons.hasOwnProperty(q)&&q!="button"){this.buttons[q].prototype=this.buttons.button.prototype}}while(r--){k=o[r];g=b('<ul class="panel-'+k+(r==0?" first":"")+'" />').prependTo(this.rte.toolbar);j=this.rte.options.panels[k].length;while(j--){h=this.rte.options.panels[k][j];t=this.buttons[h]||this.buttons.button;this._buttons.push((u=new t(this.rte,h)));g.prepend(u.domElem)}}this.update();this.disable=function(){b.each(v._buttons,function(){!this.active&&this.domElem.addClass("disabled")})}};elRTE.prototype.ui.prototype.update=function(c){c&&this.rte.selection.cleanCache();var h=this.rte.selection.getNode(),g=this.rte.dom.parents(h,"*"),d="";if(g.length){b.each(g.reverse(),function(){d+=" &raquo; "+this.nodeName.toLowerCase()})}if(h&&h.nodeType==1&&h.nodeName!="BODY"){d+=" &raquo; "+h.nodeName.toLowerCase()}this.rte.statusbar.html(d);b.each(this._buttons,function(){this.update()});this.rte.window.focus()};elRTE.prototype.ui.prototype.buttons={button:function(g,d){var c=this;this.rte=g;this.active=false;this.name=d;this.val=null;this.domElem=b('<li style="-moz-user-select:-moz-none" class="'+d+' rounded-3" name="'+d+'" title="'+this.rte.i18n(this.rte.options.buttons[d]||d)+'" unselectable="on" />').hover(function(){b(this).addClass("hover")},function(){b(this).removeClass("hover")}).click(function(h){h.stopPropagation();h.preventDefault();if(!b(this).hasClass("disabled")){c.command()}c.rte.window.focus()})}};elRTE.prototype.ui.prototype.buttons.button.prototype.command=function(){this.rte.history.add();try{this.rte.doc.execCommand(this.name,false,this.val)}catch(c){return this.rte.log("commands failed: "+this.name)}this.rte.ui.update(true)};elRTE.prototype.ui.prototype.buttons.button.prototype.update=function(){try{if(!this.rte.doc.queryCommandEnabled(this.name)){return this.domElem.addClass("disabled")}else{this.domElem.removeClass("disabled")}}catch(c){return}try{if(this.rte.doc.queryCommandState(this.name)){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}catch(c){}}})(jQuery);(function(b){elRTE.prototype.utils=function(d){this.rte=d;this.url=null;this.reg=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;this.baseURL="";this.path="";var c=this;this.rgb2hex=function(j){function h(k){hexDigits=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];return !k?"00":hexDigits[(k-k%16)/16]+hexDigits[k%16]}var g=j.match(/\(([0-9]{1,3}),\s*([0-9]{1,3}),\s*([0-9]{1,3})\)/);return g?"#"+h(g[1])+h(g[2])+h(g[3]):""};this.toPixels=function(h){var g=h.match(/([0-9]+\.?[0-9]*)\s*(px|pt|em|%)/);if(g){h=g[1];unit=g[2]}if(h[0]=="."){h="0"+h}h=parseFloat(h);if(isNaN(h)){return""}var j=parseInt(b(document.body).css("font-size"))||16;switch(unit){case"em":return parseInt(h*j);case"pt":return parseInt(h*j/12);case"%":return parseInt(h*j/100)}return h};this.absoluteURL=function(h){!this.url&&this._url();h=b.trim(h);if(!h){return""}if(h[0]=="#"){return h}var g=this.parseURL(h);if(!g.host&&!g.path&&!g.anchor){return""}if(!this.rte.options.absoluteURLs){return h}if(g.protocol){return h}if(g.host&&(g.host.indexOf(".")!=-1||g.host=="localhost")){return this.url.protocol+"://"+h}if(h[0]=="/"){h=this.baseURL+h}else{if(h.indexOf("./")==0){h=h.substring(2)}h=this.baseURL+this.path+h}return h};this.parseURL=function(j){var h=j.match(this.reg);var g={};b.each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(k){g[this]=h[k]});if(!g.host.match(/[a-z0-9]/i)){g.host=""}return g};this.trimEventCallback=function(g){g=g?g.toString():"";return b.trim(g.replace(/\r*\n/mg,"").replace(/^function\s*on[a-z]+\s*\(\s*event\s*\)\s*\{(.+)\}$/igm,"$1"))};this._url=function(){this.url=this.parseURL(window.location.href);this.baseURL=this.url.protocol+"://"+(this.url.userInfo?parts.userInfo+"@":"")+this.url.host+(this.url.port?":"+this.url.port:"");this.path=!this.url.file?this.url.path:this.url.path.substring(0,this.url.path.length-this.url.file.length)}}})(jQuery);(function(b){elRTE.prototype.w3cRange=function(d){var c=this;this.rte=d;this.r=null;this.collapsed=true;this.startContainer=null;this.endContainer=null;this.startOffset=0;this.endOffset=0;this.commonAncestorContainer=null;this.range=function(){try{this.r=this.rte.window.document.selection.createRange()}catch(g){this.r=this.rte.doc.body.createTextRange()}return this.r};this.insertNode=function(g){this.range();c.r.collapse(false);var h=c.r.duplicate();h.pasteHTML(g)};this.getBookmark=function(){this.range();if(this.r.item){var g=this.r.item(0);this.r=this.rte.doc.body.createTextRange();this.r.moveToElementText(g)}return this.r.getBookmark()};this.moveToBookmark=function(g){this.rte.window.focus();this.range().moveToBookmark(g);this.r.select()};this.update=function(){function j(z){var o="\uFEFF";var q=offset=0;var u=c.r.duplicate();u.collapse(z);var v=u.parentElement();if(!v||v.nodeName=="HTML"){return{parent:c.rte.doc.body,ndx:q,offset:offset}}u.pasteHTML(o);childs=v.childNodes;for(var t=0;t<childs.length;t++){var x=childs[t];if(t>0&&(x.nodeType!==3||childs[t-1].nodeType!==3)){q++}if(x.nodeType!==3){offset=0}else{var w=x.nodeValue.indexOf(o);if(w!==-1){offset+=w;break}offset+=x.nodeValue.length}}u.moveStart("character",-1);u.text="";return{parent:v,ndx:Math.min(q,v.childNodes.length-1),offset:offset}}this.range();this.startContainer=this.endContainer=null;if(this.r.item){this.collapsed=false;var h=this.r.item(0);this.setStart(h.parentNode,this.rte.dom.indexOf(h));this.setEnd(h.parentNode,this.startOffset+1)}else{this.collapsed=this.r.boundingWidth==0;var k=j(true);var g=j(false);k.parent.normalize();g.parent.normalize();k.ndx=Math.min(k.ndx,k.parent.childNodes.length-1);g.ndx=Math.min(g.ndx,g.parent.childNodes.length-1);if(k.parent.childNodes[k.ndx].nodeType&&k.parent.childNodes[k.ndx].nodeType==1){this.setStart(k.parent,k.ndx)}else{this.setStart(k.parent.childNodes[k.ndx],k.offset)}if(g.parent.childNodes[g.ndx].nodeType&&g.parent.childNodes[g.ndx].nodeType==1){this.setEnd(g.parent,g.ndx)}else{this.setEnd(g.parent.childNodes[g.ndx],g.offset)}this.select()}return this};this.isCollapsed=function(){this.range();this.collapsed=this.r.item?false:this.r.boundingWidth==0;return this.collapsed};this.collapse=function(g){this.range();if(this.r.item){var h=this.r.item(0);this.r=this.rte.doc.body.createTextRange();this.r.moveToElementText(h)}this.r.collapse(g);this.r.select();this.collapsed=true};this.getStart=function(){this.range();if(this.r.item){return this.r.item(0)}var h=this.r.duplicate();h.collapse(true);var g=h.parentElement();return g&&g.nodeName=="BODY"?g.firstChild:g};this.getEnd=function(){this.range();if(this.r.item){return this.r.item(0)}var g=this.r.duplicate();g.collapse(false);var h=g.parentElement();return h&&h.nodeName=="BODY"?h.lastChild:h};this.setStart=function(g,h){this.startContainer=g;this.startOffset=h;if(this.endContainer){this.commonAncestorContainer=this.rte.dom.findCommonAncestor(this.startContainer,this.endContainer)}};this.setEnd=function(g,h){this.endContainer=g;this.endOffset=h;if(this.startContainer){this.commonAncestorContainer=this.rte.dom.findCommonAncestor(this.startContainer,this.endContainer)}};this.setStartBefore=function(g){if(g.parentNode){this.setStart(g.parentNode,this.rte.dom.indexOf(g))}};this.setStartAfter=function(g){if(g.parentNode){this.setStart(g.parentNode,this.rte.dom.indexOf(g)+1)}};this.setEndBefore=function(g){if(g.parentNode){this.setEnd(g.parentNode,this.rte.dom.indexOf(g))}};this.setEndAfter=function(g){if(g.parentNode){this.setEnd(g.parentNode,this.rte.dom.indexOf(g)+1)}};this.select=function(){function q(C,A){if(C.nodeType!=3){return -1}var B="\uFEFF";var z=C.nodeValue;var w=c.rte.doc.body.createTextRange();C.nodeValue=z.substring(0,A)+B+z.substring(A);w.moveToElementText(C.parentNode);w.findText(B);var x=Math.abs(w.moveStart("character",-1048575));C.nodeValue=z;return x}this.r=this.rte.doc.body.createTextRange();var o=this.startOffset;var h=this.endOffset;var v=this.startContainer.nodeType==1?this.startContainer.childNodes[Math.min(o,this.startContainer.childNodes.length-1)]:this.startContainer;var t=this.endContainer.nodeType==1?this.endContainer.childNodes[Math.min(o==h?h:h-1,this.endContainer.childNodes.length-1)]:this.endContainer;if(this.collapsed){if(v.nodeType==3){var j=q(v,o);this.r.move("character",j)}else{this.r.moveToElementText(v);this.r.collapse(true)}}else{var g=this.rte.doc.body.createTextRange();var k=q(v,o);var u=q(t,h);if(v.nodeType==3){this.r.move("character",k)}else{this.r.moveToElementText(v)}if(t.nodeType==3){g.move("character",u)}else{g.moveToElementText(t)}this.r.setEndPoint("EndToEnd",g)}try{this.r.select()}catch(t){}if(g){g=null}};this.dump=function(){this.rte.log("collapsed: "+this.collapsed);this.rte.log("startContainer: "+(this.startContainer?this.startContainer.nodeName:"non"));this.rte.log("startOffset: "+this.startOffset);this.rte.log("endContainer: "+(this.endContainer?this.endContainer.nodeName:"none"));this.rte.log("endOffset: "+this.endOffset)}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.anchor=function(g,d){this.constructor.prototype.constructor.call(this,g,d);this.input=b('<input type="text" />').attr("name","anchor").attr("size","16");var c=this;this.command=function(){var h={submit:function(k,o){k.stopPropagation();k.preventDefault();o.close();c.set()},dialog:{title:this.rte.i18n("Bookmark")}};this.anchor=this.rte.dom.selfOrParentAnchor(this.rte.selection.getEnd())||g.dom.create("a");!this.rte.selection.collapsed()&&this.rte.selection.collapse(false);this.input.val(b(this.anchor).addClass("el-rte-anchor").attr("name"));this.rte.selection.saveIERange();var j=new elDialogForm(h);j.append([this.rte.i18n("Bookmark name"),this.input],null,true).open()};this.update=function(){var h=this.rte.selection.getNode();if(this.rte.dom.selfOrParentLink(h)){this.domElem.addClass("disabled")}else{if(this.rte.dom.selfOrParentAnchor(h)){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.removeClass("disabled").removeClass("active")}}};this.set=function(){var h=b.trim(this.input.val());this.rte.selection.restoreIERange();if(h){this.rte.history.add();if(!this.anchor.parentNode){this.rte.selection.insertHtml('<a name="'+h+'" title="'+this.rte.i18n("Bookmark")+": "+h+'" class="el-rte-anchor"></a>')}else{this.anchor.name=h;this.anchor.title=this.rte.i18n("Bookmark")+": "+h}}else{if(this.anchor.parentNode){this.rte.history.add();this.anchor.parentNode.removeChild(this.anchor)}}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.blockquote=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){var h,g;if(this.rte.selection.collapsed()&&(h=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^BLOCKQUOTE$/))){b(h).replaceWith(b(h).html())}else{g=this.rte.selection.selected({wrap:"all",tag:"blockquote"});g.length&&this.rte.selection.select(g[0],g[g.length-1])}this.rte.ui.update(true)};this.update=function(){if(this.rte.selection.collapsed()){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^BLOCKQUOTE$/)){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.addClass("disabled").removeClass("active")}}else{this.domElem.removeClass("disabled").removeClass("active")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.copy=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){if(this.rte.browser.mozilla){try{this.rte.doc.execCommand(this.name,false,null)}catch(j){var g=" Ctl + C";if(this.name=="cut"){g=" Ctl + X"}else{if(this.name=="paste"){g=" Ctl + V"}}var h={dialog:{title:this.rte.i18n("Warning"),buttons:{Ok:function(){b(this).dialog("close")}}}};var k=new elDialogForm(h);k.append(this.rte.i18n("This operation is disabled in your browser on security reason. Use shortcut instead.")+": "+g).open()}}else{this.constructor.prototype.command.call(this)}}};elRTE.prototype.ui.prototype.buttons.cut=elRTE.prototype.ui.prototype.buttons.copy;elRTE.prototype.ui.prototype.buttons.paste=elRTE.prototype.ui.prototype.buttons.copy})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.div=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){var h,g;this.rte.history.add();if(this.rte.selection.collapsed()&&(h=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^DIV$/))){b(h).replaceWith(b(h).html())}else{g=this.rte.selection.selected({wrap:"all",tag:"div"});g.length&&this.rte.selection.select(g[0],g[g.length-1])}this.rte.ui.update(true)};this.update=function(){if(this.rte.selection.collapsed()){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^DIV$/)){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.addClass("disabled").removeClass("active")}}else{this.domElem.removeClass("disabled").removeClass("active")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.docstructure=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){this.domElem.toggleClass("active");b(this.rte.doc.body).toggleClass("el-rte-structure")};this.command();this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.elfinder=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.command=function(){if(c.rte.options.fmAllow&&typeof(c.rte.options.fmOpen)=="function"){c.rte.options.fmOpen(function(h){c.rte.log(h)})}};this.update=function(){if(c.rte.options.fmAllow&&typeof(c.rte.options.fmOpen)=="function"){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.flash=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.swf=null;this.placeholder=null;this.src={url:b('<input type="text" name="url" />').css("width","99%"),width:b('<input type="text" />').attr("size",5).css("text-align","right"),height:b('<input type="text" />').attr("size",5).css("text-align","right"),align:b("<select />").css("width","100%").append(b("<option />").val("").text(this.rte.i18n("Not set","dialogs"))).append(b("<option />").val("left").text(this.rte.i18n("Left"))).append(b("<option />").val("right").text(this.rte.i18n("Right"))).append(b("<option />").val("top").text(this.rte.i18n("Top"))).append(b("<option />").val("text-top").text(this.rte.i18n("Text top"))).append(b("<option />").val("middle").text(this.rte.i18n("middle"))).append(b("<option />").val("baseline").text(this.rte.i18n("Baseline"))).append(b("<option />").val("bottom").text(this.rte.i18n("Bottom"))).append(b("<option />").val("text-bottom").text(this.rte.i18n("Text bottom"))),margin:b("<div />")};this.command=function(){var q=this.rte.selection.getEnd(),k,o="",z="",r="",u,x,v;this.src.margin.elPaddingInput({type:"margin"});this.placeholder=null;this.swf=null;if(b(q).hasClass("elrte-swf-placeholder")){this.placeholder=b(q);o=b(q).attr("rel");z=parseInt(b(q).css("width"))||"";r=parseInt(b(q).css("height"))||"";u=b(q).css("float");x=b(q).css("vertical-align");this.src.margin.val(q)}this.src.url.val(o);this.src.width.val(z);this.src.height.val(r);this.src.align.val(u||x);var k={submit:function(h,w){h.stopPropagation();h.preventDefault();c.set();w.close()},dialog:{width:550,position:"top",title:this.rte.i18n("Flash")}};var v=new elDialogForm(k);if(this.rte.options.fmAllow&&this.rte.options.fmOpen){var j=b("<span />").append(this.src.url.css("width","85%")).append(b("<span />").addClass("ui-state-default ui-corner-all").css({"float":"right","margin-right":"3px"}).attr("title",c.rte.i18n("Open file manger")).append(b("<span />").addClass("ui-icon ui-icon-folder-open")).click(function(){c.rte.options.fmOpen(function(h){c.src.url(h).change()})}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}))}else{var j=this.src.url}v.append([this.rte.i18n("URL"),j],null,true);v.append([this.rte.i18n("Size"),b("<span />").append(this.src.width).append(" x ").append(this.src.height).append(" px")],null,true);v.append([this.rte.i18n("Alignment"),this.src.align],null,true);v.append([this.rte.i18n("Margins"),this.src.margin],null,true);v.open();setTimeout(function(){c.src.url.focus()},100);var t=b("<fieldset />").append(b("<legend />").text(this.rte.i18n("Preview")));v.append(t,"main");var p=document.createElement("iframe");b(p).attr("src","#").addClass("el-rte-preview").appendTo(t);html=this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin</body></html>';p.contentWindow.document.open();p.contentWindow.document.write(html);p.contentWindow.document.close();this.frame=p.contentWindow.document;this.preview=b(p.contentWindow.document.body);this.src.width.change(function(){if(c.swf){var h=parseInt(b(this).val())||"";b(this).val(h);c.swf.css("width",h);c.swf.children("embed").css("width",h)}else{b(this).val("")}});this.src.height.change(function(){if(c.swf){var w=parseInt(b(this).val())||"";b(this).val(w);c.swf.css("height",z);c.swf.children("embed").css("height",w)}else{b(this).val("")}});this.src.align.change(function(){var h=b(this).val(),w=h=="left"||h=="right";if(c.swf){c.swf.css({"float":w?h:"","vertical-align":w?"":h})}else{b(this).val("")}});this.src.margin.change(function(){if(c.swf){var h=c.src.margin.val();if(h.css){c.swf.css("margin",h.css)}else{c.swf.css("margin-top",h.top);c.swf.css("margin-right",h.right);c.swf.css("margin-bottom",h.bottom);c.swf.css("margin-left",h.left)}}});this.src.url.change(function(){var h=c.rte.utils.absoluteURL(b(this).val());if(h){var w='<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" style="border:1px solid #111"><param name="quality" value="high" /><param name="movie" value="'+h+'" /><embed pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src="'+h+'" type="application/x-shockwave-flash"></embed></object>';c.preview.prepend(w);c.swf=c.preview.children("object").eq(0)}else{if(c.swf){c.swf.remove();c.swf=null}}c.src.width.trigger("change");c.src.height.trigger("change");c.src.align.trigger("change")}).trigger("change")};this.set=function(){c.swf=null;var o=this.rte.utils.absoluteURL(this.src.url.val()),k=parseInt(this.src.width.val())||"",q=parseInt(this.src.height.val())||"";a=this.src.align.val(),f=a=="left"||a=="right"?a:"";if(o){var j=this.src.margin.val(),p={width:k,height:q,"float":f,"vertical-align":f?"":a};if(j.css){p.margin=j.css}else{p["margin-top"]=j.top;p["margin-right"]=j.right;p["margin-bottom"]=j.bottom;p["margin-left"]=j.left}if(c.placeholder){c.placeholder.css(p).attr("rel",o)}else{this.placeholder=b(this.rte.dom.create("img")).attr("src",this.rte.swfPlaceholder).attr("rel",o).css(p).addClass("elrte-swf-placeholder");this.rte.selection.insertNode(this.placeholder.get(0))}}else{if(c.placeholder){c.placeholder.remove()}}};this.update=function(){this.domElem.removeClass("disabled");var h=this.rte.selection.getNode();this.domElem.toggleClass("active",h.nodeName=="IMG"&&b(h).hasClass("elrte-swf-placeholder"))}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.fontname=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;var h={tpl:'<span style="font-family:%val">%label</span>',select:function(j){c.set(j)},src:{"":this.rte.i18n("Font"),"andale mono,sans-serif":"Andale Mono","arial,helvetica,sans-serif":"Arial","arial black,gadget,sans-serif":"Arial Black","book antiqua,palatino,sans-serif":"Book Antiqua","comic sans ms,cursive":"Comic Sans MS","courier new,courier,monospace":"Courier New","georgia,palatino,serif":"Georgia","helvetica,sans-serif":"Helvetica","impact,sans-serif":"Impact","lucida console,monaco,monospace":"Lucida console","lucida sans unicode,lucida grande,sans-serif":"Lucida grande","tahoma,sans-serif":"Tahoma","times new roman,times,serif":"Times New Roman","trebuchet ms,lucida grande,verdana,sans-serif":"Trebuchet MS","verdana,geneva,sans-serif":"Verdana"}};this.select=this.domElem.elSelect(h);this.command=function(){};this.set=function(k){this.rte.history.add();var j=this.rte.selection.selected({filter:"textContainsNodes"});b.each(j,function(){$this=/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName)?b(this).find("td,th"):b(this);b(this).css("font-family",k).find("[style]").css("font-family","")});this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");var k=this.rte.selection.getNode();if(k.nodeType!=1){k=k.parentNode}var j=b(k).css("font-family");j=j?j.toString().toLowerCase().replace(/,\s+/g,",").replace(/'|"/g,""):"";this.select.val(h.src[j]?j:"")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.fontsize=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;var h={labelTpl:"%label",tpl:'<span style="font-size:%val;line-height:1.2em">%label</span>',select:function(j){c.set(j)},src:{"":this.rte.i18n("Font size"),"xx-small":this.rte.i18n("Small (8pt)"),"x-small":this.rte.i18n("Small (10px)"),small:this.rte.i18n("Small (12pt)"),medium:this.rte.i18n("Normal (14pt)"),large:this.rte.i18n("Large (18pt)"),"x-large":this.rte.i18n("Large (24pt)"),"xx-large":this.rte.i18n("Large (36pt)")}};this.select=this.domElem.elSelect(h);this.command=function(){};this.set=function(k){this.rte.history.add();var j=this.rte.selection.selected({filter:"textContainsNodes"});b.each(j,function(){$this=/^(THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(this.nodeName)?b(this).find("td,th"):b(this);$this.css("font-size",k).find("[style]").css("font-size","")});this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");var j=this.rte.selection.getNode();this.select.val((m=this.rte.dom.attr(j,"style").match(/font-size:\s*([^;]+)/i))?m[1]:"")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.forecolor=function(g,d){var c=this;this.constructor.prototype.constructor.call(this,g,d);var h={"class":"",color:this.defaultColor,update:function(j){c.indicator.css("background-color",j)},change:function(j){c.set(j)}};this.defaultColor=this.rte.utils.rgb2hex(b(this.rte.doc.body).css(this.name=="forecolor"?"color":"background-color"));this.picker=this.domElem.elColorPicker(h);this.indicator=b("<div />").addClass("color-indicator").prependTo(this.domElem);this.command=function(){};this.set=function(o){if(!this.rte.selection.collapsed()){this.rte.history.add();var j=this.rte.selection.selected({collapse:false,wrap:"text"}),k=this.name=="forecolor"?"color":"background-color";b.each(j,function(){if(/^(THEAD|TBODY|TFOOT|TR)$/.test(this.nodeName)){b(this).find("td,th").each(function(){b(this).css(k,o).find("*").css(k,"")})}else{b(this).css(k,o).find("*").css(k,"")}});this.rte.ui.update(true)}};this.update=function(){this.domElem.removeClass("disabled");var k=this.rte.selection.getNode();if(k.nodeType!=1){k=k.parentNode}var j=b(k).css(this.name=="forecolor"?"color":"background-color");this.picker.val(j&&j!="transparent"?this.rte.utils.rgb2hex(j):this.defaultColor)}};elRTE.prototype.ui.prototype.buttons.hilitecolor=elRTE.prototype.ui.prototype.buttons.forecolor})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.formatblock=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var j=this.rte.browser.msie?function(k){c.val=k;c.constructor.prototype.command.call(c)}:function(k){c.ieCommand(k)};var c=this;var h={labelTpl:"%label",tpls:{"":"%label"},select:function(k){c.formatBlock(k)},src:{span:this.rte.i18n("Format"),h1:this.rte.i18n("Heading 1"),h2:this.rte.i18n("Heading 2"),h3:this.rte.i18n("Heading 3"),h4:this.rte.i18n("Heading 4"),h5:this.rte.i18n("Heading 5"),h6:this.rte.i18n("Heading 6"),p:this.rte.i18n("Paragraph"),address:this.rte.i18n("Address"),pre:this.rte.i18n("Preformatted"),div:this.rte.i18n("Normal (DIV)")}};this.select=this.domElem.elSelect(h);this.command=function(){};this.formatBlock=function(p){function t(z,v){function x(A){b(A).find("h1,h2,h3,h4,h5,h6,p,address,pre").each(function(){b(this).replaceWith(b(this).html())});return A}if(/^(LI|DT|DD|TD|TH|CAPTION)$/.test(z.nodeName)){!c.rte.dom.isEmpty(z)&&c.rte.dom.wrapContents(x(z),v)}else{if(/^(UL|OL|DL|TABLE)$/.test(z.nodeName)){c.rte.dom.wrap(z,v)}else{!c.rte.dom.isEmpty(z)&&b(x(z)).replaceWith(b(c.rte.dom.create(v)).html(b(z).html()))}}}this.rte.history.add();var k=p.toUpperCase(),q,w,r,u=this.rte.selection.collapsed(),o=this.rte.selection.selected({collapsed:true,blocks:true,filter:"textContainsNodes",wrap:"inline",tag:"span"});l=o.length,s=b(o[0]).prev(),e=b(o[o.length-1]).next();while(l--){w=o[l];r=b(w);if(k=="DIV"||k=="SPAN"){if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(w.nodeName)){r.replaceWith(b(this.rte.dom.create("div")).html(r.html()||""))}}else{if(/^(THEAD|TBODY|TFOOT|TR)$/.test(w.nodeName)){r.find("td,th").each(function(){t(this,k)})}else{if(w.nodeName!=k){t(w,k)}}}}if(s.length&&e.length){c.rte.selection.select(s.next()[0],e.prev()[0])}this.rte.ui.update(true)};this.update=function(){this.domElem.removeClass("disabled");var k=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(H[1-6]|P|ADDRESS|PRE)$/);this.select.val(k?k.nodeName.toLowerCase():"span")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.fullscreen=function(g,d){this.constructor.prototype.constructor.call(this,g,d);this.active=true;this.parents=[];this.height=0;var c=this;this.command=function(){if(this.rte.editor.hasClass("el-fullscreen")){for(var j=0;j<this.parents.length;j++){b(this.parents[j]).css("position","relative")}this.parents=[];this.rte.editor.removeClass("el-fullscreen");this.rte.workzone.add(this.rte.iframe).height(this.height);this.domElem.removeClass("active")}else{this.parents=[];var o=this.rte.editor.parents().each(function(){if(this.nodeName!="BODY"&&this.name!="HTML"&&b(this).css("position")=="relative"){c.parents.push(this);b(this).css("position","static")}});this.height=this.rte.workzone.height();this.rte.editor.addClass("el-fullscreen");var k=parseInt(this.rte.editor.height()-this.rte.toolbar.height()-this.rte.statusbar.height()-this.rte.tabsbar.height()-17);k>0&&this.rte.workzone.add(this.rte.iframe).height(k);this.domElem.addClass("active")}};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.horizontalrule=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.src={width:b('<input type="text" />').attr({name:"width",size:4}).css("text-align","right"),wunit:b("<select />").attr("name","wunit").append(b("<option />").val("%").text("%")).append(b("<option />").val("px").text("px")).val("%"),height:b('<input type="text" />').attr({name:"height",size:4}).css("text-align","right"),bg:b("<div />"),border:b("<div />"),"class":b('<input type="text" />').css("width","100%"),style:b('<input type="text" />').css("width","100%")};this.command=function(){this.src.bg.elColorPicker({palettePosition:"outer","class":"el-colorpicker ui-icon ui-icon-pencil"});var o=this.rte.selection.getEnd();this.hr=o.nodeName=="HR"?b(o):b(g.doc.createElement("hr")).css({width:"100%",height:"1px"});this.src.border.elBorderSelect({styleHeight:73,value:this.hr});var h=this.hr.css("width")||this.hr.attr("width");this.src.width.val(parseInt(h)||100);this.src.wunit.val(h.indexOf("px")!=-1?"px":"%");this.src.height.val(this.rte.utils.toPixels(this.hr.css("height")||this.hr.attr("height"))||1);this.src.bg.val(this.rte.utils.rgb2hex(this.hr.css("background-color"))||"");this.src["class"].val(this.rte.dom.attr(this.hr,"class"));this.src.style.val(this.rte.dom.attr(this.hr,"style"));var j={submit:function(p,q){p.stopPropagation();p.preventDefault();c.set();q.close()},dialog:{title:this.rte.i18n("Horizontal rule")}};var k=new elDialogForm(j);k.append([this.rte.i18n("Width"),b("<span />").append(this.src.width).append(this.src.wunit)],null,true).append([this.rte.i18n("Height"),b("<span />").append(this.src.height).append(" px")],null,true).append([this.rte.i18n("Border"),this.src.border],null,true).append([this.rte.i18n("Background"),this.src.bg],null,true).append([this.rte.i18n("Css class"),this.src["class"]],null,true).append([this.rte.i18n("Css style"),this.src.style],null,true).open()};this.update=function(){this.domElem.removeClass("disabled");if(this.rte.selection.getEnd().nodeName=="HR"){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}};this.set=function(){this.rte.history.add();!this.hr.parentNode&&this.rte.selection.insertNode(this.hr.get(0));var j={noshade:true,style:this.src.style.val()};var h=this.src.border.val();var k={width:(parseInt(this.src.width.val())||100)+this.src.wunit.val(),height:parseInt(this.src.height.val())||1,"background-color":this.src.bg.val(),border:h.width&&h.style?h.width+" "+h.style+" "+h.color:""};this.hr.removeAttr("class").removeAttr("style").removeAttr("width").removeAttr("height").removeAttr("align").attr(j).css(k);if(this.src["class"].val()){this.hr.attr("class",this.src["class"].val())}this.rte.ui.update()}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.image=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.img=null;this.init=function(){this.labels={main:"Properies",link:"Link",adv:"Advanced",events:"Events",id:"ID","class":"Css class",style:"Css style",longdesc:"Detail description URL",href:"URL",target:"Open in",title:"Title"};this.src={main:{src:b('<input type="text" />').css("width","100%"),title:b('<input type="text" />').css("width","100%"),alt:b('<input type="text" />').css("width","100%"),width:b('<input type="text" />').attr("size",5).css("text-align","right"),height:b('<input type="text" />').attr("size",5).css("text-align","right"),margin:b("<div />"),align:b("<select />").css("width","100%").append(b("<option />").val("").text(this.rte.i18n("Not set","dialogs"))).append(b("<option />").val("left").text(this.rte.i18n("Left"))).append(b("<option />").val("right").text(this.rte.i18n("Right"))).append(b("<option />").val("top").text(this.rte.i18n("Top"))).append(b("<option />").val("text-top").text(this.rte.i18n("Text top"))).append(b("<option />").val("middle").text(this.rte.i18n("middle"))).append(b("<option />").val("baseline").text(this.rte.i18n("Baseline"))).append(b("<option />").val("bottom").text(this.rte.i18n("Bottom"))).append(b("<option />").val("text-bottom").text(this.rte.i18n("Text bottom"))),border:b("<div />")},adv:{id:b('<input type="text" />').css("width","100%"),"class":b('<input type="text" />').css("width","100%"),style:b('<input type="text" />').css("width","100%"),longdesc:b('<input type="text" />').css("width","100%")},events:{}};b.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){c.src.events[this]=b('<input type="text" />').css("width","100%")});b.each(c.src,function(){for(var h in this){this[h].attr("name",h)}})};this.command=function(){!this.src&&this.init();this.rte.browser.msie&&this.rte.selection.saveIERange();this.src.main.border.elBorderSelect({change:function(){c.updateImg()},name:"border"});this.src.main.margin.elPaddingInput({type:"margin"});this.cleanValues();this.src.main.src.val("");var p=this.rte.selection.getEnd();this.preview=null;this.prevImg=null;this.link=null;if(p.nodeName=="IMG"&&!b(p).hasClass("elrte-swf-placeholder")){this.img=b(p)}else{this.img=b(this.rte.doc.createElement("img"))}var j={submit:function(w,x){w.stopPropagation();w.preventDefault();c.set();x.close()},dialog:{width:520,position:"top",title:this.rte.i18n("Image")}};var u=new elDialogForm(j);if(this.rte.options.fmAllow&&this.rte.options.fmOpen){var h=b("<span />").append(this.src.main.src.css("width","88%")).append(b("<span />").addClass("ui-state-default ui-corner-all").css({"float":"right","margin-right":"3px"}).attr("title",c.rte.i18n("Open file manger")).append(b("<span />").addClass("ui-icon ui-icon-folder-open")).click(function(){c.rte.options.fmOpen(function(w){c.src.main.src.val(w).change()})}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}))}else{var h=this.src.main.src}u.tab("main",this.rte.i18n("Properies")).append([this.rte.i18n("Image URL"),h],"main",true).append([this.rte.i18n("Title"),this.src.main.title],"main",true).append([this.rte.i18n("Alt text"),this.src.main.alt],"main",true).append([this.rte.i18n("Size"),b("<span />").append(this.src.main.width).append(" x ").append(this.src.main.height).append(" px")],"main",true).append([this.rte.i18n("Alignment"),this.src.main.align],"main",true).append([this.rte.i18n("Margins"),this.src.main.margin],"main",true).append([this.rte.i18n("Border"),this.src.main.border],"main",true);for(var q in this.src){if(q!="main"){u.tab(q,this.rte.i18n(this.labels[q]));for(var k in this.src[q]){var r=this.rte.i18n(this.labels[k]?this.labels[k]:k);if(q=="events"){this.src[q][k].val(this.rte.utils.trimEventCallback(this.img.attr(k)))}else{if(q=="link"){if(this.link){this.src[q][k].val(k=="href"?this.rte.utils.absoluteURL(this.link.attr(k)):this.link.attr(k))}}else{this.src[q][k].val(this.img.attr(k)||"")}}u.append([r,this.src[q][k]],q,true)}}}u.open();var t=b("<fieldset />").append(b("<legend />").text(this.rte.i18n("Preview")));u.append(t,"main");var o=document.createElement("iframe");b(o).attr("src","#").addClass("el-rte-preview").appendTo(t);html=this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style="padding:0;margin:0;font-size:9px"> </body></html>';o.contentWindow.document.open();o.contentWindow.document.write(html);o.contentWindow.document.close();this.frame=o.contentWindow.document;this.preview=b(o.contentWindow.document.body).text("Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin");if(this.img.attr("src")){this.prevImg=b(this.frame.createElement("img")).attr("src",this.rte.utils.absoluteURL(this.img.attr("src")));this.prevImg.attr("width",this.img.attr("width")).attr("height",this.img.attr("height")).attr("title",this.img.attr("title")||"").attr("alt",this.img.attr("alt")||"").attr("style",this.img.attr("style")||"");for(var p in this.src.adv){var v=this.img.attr(p);if(v){this.prevImg.attr(p,v)}}this.preview.prepend(this.prevImg);this.updateValues()}b.each(this.src,function(){b.each(this,function(){if(this===c.src.main.src){this.bind("change",function(){c.updatePreview()})}else{if(this==c.src.main.width||this==c.src.main.height){this.bind("change",function(w){c.updateDimesions(w)})}else{this.bind("change",function(){c.updateImg()})}}})})};this.updateValues=function(){var h=this.prevImg.get(0);this.origW=this.prevImg.attr("width");this.origH=this.prevImg.attr("height");this.src.main.src.val(this.rte.dom.attr(h,"src"));this.src.main.title.val(this.rte.dom.attr(h,"title"));this.src.main.alt.val(this.rte.dom.attr(h,"alt"));this.src.main.width.val(this.origW);this.src.main.height.val(this.origH);this.src.adv["class"].val(this.rte.dom.attr(h,"class"));this.src.main.margin.val(this.prevImg);var j=this.prevImg.css("float");this.src.main.align.val(j=="left"||j=="right"?j:(this.prevImg.css("vertical-align")||""));this.src.main.border.val(this.prevImg);this.src.adv.style.val(this.rte.dom.attr(h,"style"))};this.cleanValues=function(){b.each(this.src,function(){b.each(this,function(){var h=b(this);if(h.attr("name")!="src"){h.val("")}})})};this.updateImg=function(){this.prevImg.attr({style:b.trim(this.src.adv.style.val()),title:b.trim(this.src.main.title.val()),alt:b.trim(this.src.main.alt.val()),width:parseInt(this.src.main.width.val()),height:parseInt(this.src.main.height.val())});var k=this.src.main.align.val();var o=k=="left"||k=="right"?k:"";var j=this.src.main.border.val();var h=this.src.main.margin.val();this.prevImg.css("float",o);this.prevImg.css("vertical-align",o?"":k);this.prevImg.css("border",b.trim(j.width+" "+j.style+" "+j.color));if(h.css){this.prevImg.css("margin",h.css)}else{this.prevImg.css("margin-top",h.top);this.prevImg.css("margin-right",h.right);this.prevImg.css("margin-bottom",h.bottom);this.prevImg.css("margin-left",h.left)}b.each([this.src.events,this.src.adv],function(){b.each(this,function(){var q=b(this);var r=q.attr("name");if(r!="style"){var p=b.trim(q.val());if(p){c.prevImg.attr(r,p)}else{c.prevImg.removeAttr(r)}}})})};this.updatePreview=function(){var j=this.prevImg?this.prevImg.attr("src"):"";var h=b.trim(this.src.main.src.val());if(!h||h!=j){if(this.prevImg){this.prevImg.remove();this.prevImg=null}this.cleanValues();if(h){this.prevImg=b(this.frame.createElement("img")).attr("src",this.rte.utils.absoluteURL(h)).bind("load",function(){c.updateValues()});this.preview.prepend(this.prevImg);c.updateValues()}}else{this.updateImg()}};this.updateDimesions=function(o){var j=parseInt(this.src.main.width.val())||0;var k=parseInt(this.src.main.height.val())||0;if(j>0&&k>0){if(o.currentTarget==this.src.main.width.get(0)){this.src.main.height.val(parseInt(j*this.origH/this.origW))}else{this.src.main.width.val(parseInt(k*this.origW/this.origH))}}else{this.src.main.width.val(this.origW);this.src.main.height.val(this.origH)}this.updateImg()};this.set=function(){this.rte.history.add();if(!this.prevImg||!this.prevImg.attr("width")){this.img&&this.img.remove();this.link&&this.rte.doc.execCommand("unlink",false,null)}else{if(!this.img.parents().length){this.rte.browser.msie&&this.rte.selection.restoreIERange();this.img=b(this.rte.doc.createElement("img"))}this.img.attr({src:this.rte.utils.absoluteURL(b.trim(this.src.main.src.val())),style:b.trim(this.rte.dom.attr(this.prevImg.get(0),"style")),title:b.trim(this.src.main.title.val()),alt:b.trim(this.src.main.alt.val()),width:parseInt(this.src.main.width.val()),height:parseInt(this.src.main.height.val())});for(var h in this.src.adv){if(h!="style"){var j=this.src.adv[h].val();if(j){this.img.attr(h,j)}else{this.img.removeAttr(h)}}}for(var h in this.src.events){var j=this.src.events[h].val();if(j){this.img.attr(h,j)}else{this.img.removeAttr(h)}}if(!this.img.parents().length){this.rte.selection.insertNode(this.img.get(0))}}this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");var h=this.rte.selection.getEnd();if(h.nodeName=="IMG"&&!b(h).hasClass("elrte-swf-placeholder")){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.indent=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.command=function(){this.rte.history.add();var j=this.rte.selection.selected({collapsed:true,blocks:true,wrap:"inline",tag:"p"});function h(r){var p=/(IMG|HR|TABLE|EMBED|OBJECT)/.test(r.nodeName)?"margin-left":"padding-left";var q=c.rte.dom.attr(r,"style").indexOf(p)!=-1?parseInt(b(r).css(p))||0:0;b(r).css(p,q+40+"px")}for(var k=0;k<j.length;k++){if(/^(TABLE|THEAD|TFOOT|TBODY|COL|COLGROUP|TR)$/.test(j[k].nodeName)){b(j[k]).find("td,th").each(function(){h(this)})}else{if(/^LI$/.test(j[k].nodeName)){var o=b(j[k]);b(this.rte.dom.create(j[k].parentNode.nodeName)).append(b(this.rte.dom.create("li")).html(o.html()||"")).appendTo(o.html("&nbsp;"))}else{h(j[k])}}}this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.justifyleft=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.align=this.name=="justifyfull"?"justify":this.name.replace("justify","");this.command=function(){var h=this.rte.selection.selected({collapsed:true,blocks:true,tag:"div"}),g=h.length;g&&this.rte.history.add();while(g--){this.rte.dom.filter(h[g],"textNodes")&&b(h[g]).css("text-align",this.align)}this.rte.ui.update()};this.update=function(){var g=this.rte.selection.getNode(),h=g.nodeName=="BODY"?g:this.rte.dom.selfOrParent(g,"textNodes")||(g.parentNode&&g.parentNode.nodeName=="BODY"?g.parentNode:null);if(h){this.domElem.removeClass("disabled").toggleClass("active",b(h).css("text-align")==this.align)}else{this.domElem.addClass("disabled")}}};elRTE.prototype.ui.prototype.buttons.justifycenter=elRTE.prototype.ui.prototype.buttons.justifyleft;elRTE.prototype.ui.prototype.buttons.justifyright=elRTE.prototype.ui.prototype.buttons.justifyleft;elRTE.prototype.ui.prototype.buttons.justifyfull=elRTE.prototype.ui.prototype.buttons.justifyleft})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.link=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;function h(){c.labels={id:"ID","class":"Css class",style:"Css style",dir:"Script direction",lang:"Language",charset:"Charset",type:"Target MIME type",rel:"Relationship page to target (rel)",rev:"Relationship target to page (rev)",tabindex:"Tab index",accesskey:"Access key"};c.src={main:{href:b('<input type="text" />'),title:b('<input type="text" />'),anchor:b("<select />").attr("name","anchor")},popup:{use:b('<input type="checkbox />"'),url:b('<input type="text" />').val("http://"),name:b('<input type="text" />'),width:b('<input type="text" />').attr({size:6,title:c.rte.i18n("Width")}).css("text-align","right"),height:b('<input type="text" />').attr({size:6,title:c.rte.i18n("Height")}).css("text-align","right"),left:b('<input type="text" />').attr({size:6,title:c.rte.i18n("Left")}).css("text-align","right"),top:b('<input type="text" />').attr({size:6,title:c.rte.i18n("Top")}).css("text-align","right"),location:b('<input type="checkbox" />'),menubar:b('<input type="checkbox" />'),toolbar:b('<input type="checkbox" />'),scrollbars:b('<input type="checkbox" />'),status:b('<input type="checkbox" />'),resizable:b('<input type="checkbox" />'),dependent:b('<input type="checkbox" />'),retfalse:b('<input type="checkbox" />').attr("checked",true)},adv:{id:b('<input type="text" />'),"class":b('<input type="text" />'),style:b('<input type="text" />'),dir:b("<select />").append(b("<option />").text(c.rte.i18n("Not set")).val("")).append(b("<option />").text(c.rte.i18n("Left to right")).val("ltr")).append(b("<option />").text(c.rte.i18n("Right to left")).val("rtl")),lang:b('<input type="text" />'),charset:b('<input type="text" />'),type:b('<input type="text" />'),rel:b('<input type="text" />'),rev:b('<input type="text" />'),tabindex:b('<input type="text" />'),accesskey:b('<input type="text" />')},events:{}};b.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){c.src.events[this]=b('<input type="text" />')});b.each(c.src,function(){for(var k in this){this[k].attr("name",k);var j=this[k].attr("type");if(!j||(j=="text"&&!this[k].attr("size"))){this[k].css("width","100%")}}})}this.command=function(){!this.src&&h();this.rte.browser.msie&&this.rte.selection.saveIERange();var p=this.rte.selection.getNode();var q;if((p.nodeName=="A")&&(q=this.rte.dom.selfOrParentLink(p))){this.link=q}else{this.link=null}this.link=this.link?b(this.link):b(this.rte.doc.createElement("a"));this.updatePopup();this.src.main.anchor.empty();b('a[href!=""][name]',this.rte.doc).each(function(){var r=b(this).attr("name");c.src.main.anchor.append(b("<option />").val(r).text(r))});if(this.src.main.anchor.children().length){this.src.main.anchor.prepend(b("<option />").val("").text(this.rte.i18n("Select bookmark"))).change(function(){var r=b(this).val();if(r){c.src.main.href.val("#"+r)}})}var j={submit:function(r,v){r.stopPropagation();r.preventDefault();c.set();v.close()},tabs:{show:function(v,r){if(r.index==3){c.updateOnclick()}}},dialog:{width:"auto",width:430,title:this.rte.i18n("Link")}};var t=new elDialogForm(j);var q=b("<div />").append(b("<label />").append(this.src.popup.location).append(this.rte.i18n("Location bar"))).append(b("<label />").append(this.src.popup.menubar).append(this.rte.i18n("Menu bar"))).append(b("<label />").append(this.src.popup.toolbar).append(this.rte.i18n("Toolbar"))).append(b("<label />").append(this.src.popup.scrollbars).append(this.rte.i18n("Scrollbars")));var k=b("<div />").append(b("<label />").append(this.src.popup.status).append(this.rte.i18n("Status bar"))).append(b("<label />").append(this.src.popup.resizable).append(this.rte.i18n("Resizable"))).append(b("<label />").append(this.src.popup.dependent).append(this.rte.i18n("Depedent"))).append(b("<label />").append(this.src.popup.retfalse).append(this.rte.i18n("Add return false")));t.tab("main",this.rte.i18n("Properies")).tab("popup",this.rte.i18n("Popup")).tab("adv",this.rte.i18n("Advanced")).tab("events",this.rte.i18n("Events")).append(b("<label />").append(this.src.popup.use).append(this.rte.i18n("Open link in popup window")),"popup").separator("popup").append([this.rte.i18n("URL"),this.src.popup.url],"popup",true).append([this.rte.i18n("Window name"),this.src.popup.name],"popup",true).append([this.rte.i18n("Window size"),b("<span />").append(this.src.popup.width).append(" x ").append(this.src.popup.height).append(" px")],"popup",true).append([this.rte.i18n("Window position"),b("<span />").append(this.src.popup.left).append(" x ").append(this.src.popup.top).append(" px")],"popup",true).separator("popup").append([q,k],"popup",true);var u=this.link.get(0);var o=this.rte.dom.attr(u,"href");this.src.main.href.val(o).change(function(){b(this).val(c.rte.utils.absoluteURL(b(this).val()))});if(this.rte.options.fmAllow&&this.rte.options.fmOpen){var x=b("<span />").append(this.src.main.href.css("width","87%")).append(b("<span />").addClass("ui-state-default ui-corner-all").css({"float":"right","margin-right":"3px"}).attr("title",c.rte.i18n("Open file manger")).append(b("<span />").addClass("ui-icon ui-icon-folder-open")).click(function(){c.rte.options.fmOpen(function(r){c.src.main.href.val(r).change()})}).hover(function(){b(this).addClass("ui-state-hover")},function(){b(this).removeClass("ui-state-hover")}));t.append([this.rte.i18n("Link URL"),x],"main",true)}else{t.append([this.rte.i18n("Link URL"),this.src.main.href],"main",true)}this.src.main.href.change();t.append([this.rte.i18n("Title"),this.src.main.title.val(this.rte.dom.attr(u,"title"))],"main",true);if(this.src.main.anchor.children().length){t.append([this.rte.i18n("Bookmark"),this.src.main.anchor.val(o)],"main",true)}for(var p in this.src.adv){this.src.adv[p].val(this.rte.dom.attr(u,p));t.append([this.rte.i18n(this.labels[p]?this.labels[p]:p),this.src.adv[p]],"adv",true)}for(var p in this.src.events){var w=this.rte.utils.trimEventCallback(this.rte.dom.attr(u,p));this.src.events[p].val(w);t.append([this.rte.i18n(this.labels[p]?this.labels[p]:p),this.src.events[p]],"events",true)}this.src.popup.use.change(function(){var r=b(this).attr("checked");b.each(c.src.popup,function(){if(b(this).attr("name")!="use"){if(r){b(this).removeAttr("disabled")}else{b(this).attr("disabled",true)}}})});this.src.popup.use.change();t.open()};this.update=function(){var j=this.rte.selection.getNode();if(this.rte.dom.selfOrParentAnchor(j)){this.domElem.addClass("disabled")}else{if((j.nodeName=="A")&&(l=this.rte.dom.selfOrParentLink(j))){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.removeClass("active");if(!this.rte.selection.collapsed()||(j.nodeType==1&&/^(IMG|EMBED|OBJECT)$/.test(j.nodeName))){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}};this.updatePopup=function(){var j=this.rte.dom.attr(this.link.get(0),"onclick");j=j?b.trim(j.toString()):"";if(j.length>0&&(m=j.match(/window.open\("([^"]+)",\s*"([^"]*)",\s*"([^"]*)"\s*.*\);\s*(return\s+false)?/))){this.src.popup.use.attr("checked","on");this.src.popup.url.val(m[1]);this.src.popup.name.val(m[2]);if(/location=yes/.test(m[3])){this.src.popup.location.attr("checked",true)}if(/menubar=yes/.test(m[3])){this.src.popup.menubar.attr("checked",true)}if(/toolbar=yes/.test(m[3])){this.src.popup.toolbar.attr("checked",true)}if(/scrollbars=yes/.test(m[3])){this.src.popup.scrollbars.attr("checked",true)}if(/status=yes/.test(m[3])){this.src.popup.status.attr("checked",true)}if(/resizable=yes/.test(m[3])){this.src.popup.resizable.attr("checked",true)}if(/dependent=yes/.test(m[3])){this.src.popup.dependent.attr("checked",true)}if((_m=m[3].match(/width=([^,]+)/))){this.src.popup.width.val(_m[1])}if((_m=m[3].match(/height=([^,]+)/))){this.src.popup.height.val(_m[1])}if((_m=m[3].match(/left=([^,]+)/))){this.src.popup.left.val(_m[1])}if((_m=m[3].match(/top=([^,]+)/))){this.src.popup.top.val(_m[1])}if(m[4]){this.src.popup.retfalse.attr("checked",true)}}else{b.each(this.src.popup,function(){var k=b(this);if(k.attr("type")=="text"){k.val(k.attr("name")=="url"?"http://":"")}else{if(k.attr("name")=="retfalse"){this.attr("checked",true)}else{k.removeAttr("checked")}}})}};this.updateOnclick=function(){var p=this.src.popup.url.val();if(this.src.popup.use.attr("checked")&&p){var q="";if(this.src.popup.location.attr("checked")){q+="location=yes,"}if(this.src.popup.menubar.attr("checked")){q+="menubar=yes,"}if(this.src.popup.toolbar.attr("checked")){q+="toolbar=yes,"}if(this.src.popup.scrollbars.attr("checked")){q+="scrollbars=yes,"}if(this.src.popup.status.attr("checked")){q+="status=yes,"}if(this.src.popup.resizable.attr("checked")){q+="resizable=yes,"}if(this.src.popup.dependent.attr("checked")){q+="dependent=yes,"}if(this.src.popup.width.val()){q+="width="+this.src.popup.width.val()+","}if(this.src.popup.height.val()){q+="height="+this.src.popup.height.val()+","}if(this.src.popup.left.val()){q+="left="+this.src.popup.left.val()+","}if(this.src.popup.top.val()){q+="top="+this.src.popup.top.val()+","}if(q.length>0){q=q.substring(0,q.length-1)}var k=this.src.popup.retfalse.attr("checked")?"return false;":"";var o='window.open("'+p+'", "'+b.trim(this.src.popup.name.val())+'", "'+q+'");'+k;this.src.events.onclick.val(o);if(!this.src.main.href.val()){this.src.main.href.val("#")}}else{var j=this.src.events.onclick.val();j=j.replace(/window\.open\([^\)]+\)\s*;?\s*return\s*false\s*;?/i,"");this.src.events.onclick.val(j)}};this.set=function(){this.updateOnclick();this.rte.browser.msie&&this.rte.selection.restoreIERange();this.rte.history.add();var k=this.rte.utils.absoluteURL(this.src.main.href.val());if(!k){this.link.parents().length&&this.rte.doc.execCommand("unlink",false,null)}else{if(!this.link.parents().length){var o="#--el-editor---"+Math.random();var q=this.rte.doc.execCommand("createLink",false,o);this.link=b('a[href="'+o+'"]',this.rte.doc);this.link.each(function(){var r=b(this);if(!b.trim(r.html())&&!b.trim(r.text())){r.replaceWith(r.text())}})}this.src.main.href.val(k);for(var p in this.src){if(p!="popup"){for(var t in this.src[p]){if(t!="anchors"){var j=b.trim(this.src[p][t].val());if(j){this.link.attr(t,j)}else{this.link.removeAttr(t)}}}}}}this.rte.ui.update(true)}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.nbsp=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){this.rte.history.add();this.rte.selection.insertHtml("&nbsp;",true);this.rte.window.focus();this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.outdent=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.command=function(){var h=this.find();if(h.node){this.rte.history.add();b(h.node).css(h.type,(h.val>40?h.val-40:0)+"px");this.rte.ui.update()}};this.find=function(k){function h(q){var o={type:"",val:0};var p;if((p=c.rte.dom.attr(q,"style"))){o.type=p.indexOf("padding-left")!=-1?"padding-left":(p.indexOf("margin-left")!=-1?"margin-left":"");o.val=o.type?parseInt(b(q).css(o.type))||0:0}return o}var k=this.rte.selection.getNode();var j=h(k);if(j.val){j.node=k}else{b.each(this.rte.dom.parents(k,"*"),function(){j=h(this);if(j.val){j.node=this;return j}})}return j};this.update=function(){var h=this.find();if(h.node){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.pasteformattext=function(g,d){this.constructor.prototype.constructor.call(this,g,d);this.iframe=b(document.createElement("iframe")).addClass("el-rte-paste-input");this.doc=null;var c=this;this.command=function(){this.rte.browser.msie&&this.rte.selection.saveIERange();var h={submit:function(o,p){o.stopPropagation();o.preventDefault();c.paste();p.close()},dialog:{width:500,title:this.rte.i18n("Paste formatted text")}};var k=new elDialogForm(h);k.append(this.iframe).open();this.doc=this.iframe.get(0).contentWindow.document;html=this.rte.options.doctype+'<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(this.rte.options.cssfiles.length){b.each(this.rte.options.cssfiles,function(){html+='<link rel="stylesheet" type="text/css" href="'+this+'" />'})}html+="</head><body> </body></html>";this.doc.open();this.doc.write(html);this.doc.close();if(!this.rte.browser.msie){try{this.doc.designMode="on"}catch(j){}}else{this.doc.body.contentEditable=true}this.iframe.get(0).contentWindow.focus()};this.paste=function(){var h=b.trim(b(this.doc.body).html());if(h){this.rte.history.add();this.rte.browser.msie&&this.rte.selection.restoreIERange();this.rte.selection.insertHtml(this.rte.filter(h),true);this.rte.ui.update(true)}};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.pastetext=function(g,d){this.constructor.prototype.constructor.call(this,g,d);this.input=b("<textarea />").addClass("el-rte-paste-input");var c=this;this.command=function(){this.rte.browser.msie&&this.rte.selection.saveIERange();var h={submit:function(k,o){k.stopPropagation();k.preventDefault();c.paste();o.close()},dialog:{width:500,title:this.rte.i18n("Paste only text")}};var j=new elDialogForm(h);j.append(this.input).open()};this.paste=function(){var h=b.trim(this.input.val());if(h){this.rte.history.add();this.rte.browser.msie&&this.rte.selection.restoreIERange();this.rte.selection.insertText(h.replace(/\r?\n/g,"<br />"),true);this.rte.ui.update(true)}this.input.val("")};this.update=function(){this.domElem.removeClass("disabled")}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.save=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.active=true;this.command=function(){this.rte.save()};this.update=function(){}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.stopfloat=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.find=function(){if(this.rte.selection.collapsed()){var g=this.rte.dom.selfOrParent(this.rte.selection.getEnd(),/^DIV$/);if(g&&(this.rte.dom.attr(g,"clear")||b(g).css("clear")!="none")){return g}}};this.command=function(){var g;if((g=this.find())){var g=b(g);this.rte.history.add();if(!g.children().length&&!b.trim(g.text()).length){g.remove()}else{g.removeAttr("clear").css("clear","")}}else{this.rte.history.add();this.rte.selection.insertNode(b(this.rte.dom.create("div")).css("clear","both").get(0),true)}this.rte.ui.update(true)};this.update=function(){this.domElem.removeClass("disabled");if(this.find()){this.domElem.addClass("active")}else{this.domElem.removeClass("active")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.table=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.src=null;this.labels=null;function h(){c.labels={main:"Properies",adv:"Advanced",events:"Events",id:"ID","class":"Css class",style:"Css style",dir:"Script direction",summary:"Summary",lang:"Language",href:"URL"};c.src={main:{caption:b('<input type="text" />'),rows:b('<input type="text" />').attr("size",5).val(2),cols:b('<input type="text" />').attr("size",5).val(2),width:b('<input type="text" />').attr("size",5),wunit:b("<select />").append(b("<option />").val("%").text("%")).append(b("<option />").val("px").text("px")),height:b('<input type="text" />').attr("size",5),hunit:b("<select />").append(b("<option />").val("%").text("%")).append(b("<option />").val("px").text("px")),align:b("<select />").append(b("<option />").val("").text(c.rte.i18n("Not set"))).append(b("<option />").val("left").text(c.rte.i18n("Left"))).append(b("<option />").val("center").text(c.rte.i18n("Center"))).append(b("<option />").val("right").text(c.rte.i18n("Right"))),spacing:b('<input type="text" />').attr("size",5),padding:b('<input type="text" />').attr("size",5),border:b("<div />"),rules:b("<select />").append(b("<option />").val("none").text(c.rte.i18n("No"))).append(b("<option />").val("all").text(c.rte.i18n("Cells"))).append(b("<option />").val("groups").text(c.rte.i18n("Groups"))).append(b("<option />").val("rows").text(c.rte.i18n("Rows"))).append(b("<option />").val("cols").text(c.rte.i18n("Columns"))),margin:b("<div />"),bg:b("<div />"),bgimg:b('<input type="text" />').css("width","90%")},adv:{id:b('<input type="text" />'),summary:b('<input type="text" />'),"class":b('<input type="text" />'),style:b('<input type="text" />'),dir:b("<select />").append(b("<option />").text(c.rte.i18n("Not set")).val("")).append(b("<option />").text(c.rte.i18n("Left to right")).val("ltr")).append(b("<option />").text(c.rte.i18n("Right to left")).val("rtl")),lang:b('<input type="text" />')},events:{}};b.each(c.src,function(){for(var k in this){this[k].attr("name",k);var j=this[k].get(0).nodeName;if(j=="INPUT"&&k!="bgimg"){this[k].css(this[k].attr("size")?{"text-align":"right"}:{width:"100%"})}else{if(j=="SELECT"&&k!="wunit"&&k!="hunit"){this[k].css("width","100%")}}}});b.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){c.src.events[this]=b('<input type="text" />').attr("name",this).css("width","100%")});c.src.main.align.change(function(){var k=b(this).val();if(k=="center"){c.src.main.margin.val({left:"auto",right:"auto"})}else{var j=c.src.main.margin.val();if(j.left=="auto"&&j.right=="auto"){c.src.main.margin.val({left:"",right:""})}}});c.src.main.bgimg.change(function(){var j=b(this);j.val(c.rte.utils.absoluteURL(j.val()))})}this.command=function(){var r=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TABLE$/);if(this.name=="table"){this.table=b(this.rte.doc.createElement("table"))}else{this.table=r?b(r):b(this.rte.doc.createElement("table"))}!this.src&&h();this.src.main.border.elBorderSelect({styleHeight:117});this.src.main.bg.elColorPicker({palettePosition:"outer","class":"el-colorpicker ui-icon ui-icon-pencil"});this.src.main.margin.elPaddingInput({type:"margin",value:this.table});if(this.table.parents().length){this.src.main.rows.val("").attr("disabled",true);this.src.main.cols.val("").attr("disabled",true)}else{this.src.main.rows.val(2).removeAttr("disabled");this.src.main.cols.val(2).removeAttr("disabled")}var D=this.table.css("width")||this.table.attr("width");this.src.main.width.val(parseInt(D)||"");this.src.main.wunit.val(D.indexOf("px")!=-1?"px":"%");var z=this.table.css("height")||this.table.attr("height");this.src.main.height.val(parseInt(z)||"");this.src.main.hunit.val(z&&z.indexOf("px")!=-1?"px":"%");var B=this.table.css("float");this.src.main.align.val("");if(B=="left"||B=="right"){this.src.main.align.val(B)}else{var t=this.table.css("margin-left");var p=this.table.css("margin-right");if(t=="auto"&&p=="auto"){this.src.main.align.val("center")}}this.src.main.border.val(this.table);this.src.main.rules.val(this.rte.dom.attr(this.table.get(0),"rules"));this.src.main.bg.val(this.table.css("background-color"));var j=this.table.css("background-image").replace(/url\(([^\)]+)\)/i,"$1");this.src.main.bgimg.val(j!="none"?j:"");var k={submit:function(v,w){v.stopPropagation();v.preventDefault();c.set();w.close()},dialog:{width:530,title:this.rte.i18n("Table")}};var C=new elDialogForm(k);for(var q in this.src){C.tab(q,this.rte.i18n(this.labels[q]));if(q=="main"){var A=b("<table />").append(b("<tr />").append("<td>"+this.rte.i18n("Rows")+"</td>").append(b("<td />").append(this.src.main.rows))).append(b("<tr />").append("<td>"+this.rte.i18n("Columns")+"</td>").append(b("<td />").append(this.src.main.cols)));var x=b("<table />").append(b("<tr />").append("<td>"+this.rte.i18n("Width")+"</td>").append(b("<td />").append(this.src.main.width).append(this.src.main.wunit))).append(b("<tr />").append("<td>"+this.rte.i18n("Height")+"</td>").append(b("<td />").append(this.src.main.height).append(this.src.main.hunit)));var u=b("<table />").append(b("<tr />").append("<td>"+this.rte.i18n("Spacing")+"</td>").append(b("<td />").append(this.src.main.spacing.val(this.table.attr("cellspacing")||"")))).append(b("<tr />").append("<td>"+this.rte.i18n("Padding")+"</td>").append(b("<td />").append(this.src.main.padding.val(this.table.attr("cellpadding")||""))));C.append([this.rte.i18n("Caption"),this.src.main.caption.val(this.table.find("caption").eq(0).text()||"")],"main",true).separator("main").append([A,x,u],"main",true).separator("main").append([this.rte.i18n("Border"),this.src.main.border],"main",true).append([this.rte.i18n("Inner borders"),this.src.main.rules],"main",true).append([this.rte.i18n("Alignment"),this.src.main.align],"main",true).append([this.rte.i18n("Margins"),this.src.main.margin],"main",true).append([this.rte.i18n("Background"),b("<span />").append(b("<span />").css({"float":"left","margin-right":"3px"}).append(this.src.main.bg)).append(this.src.main.bgimg)],"main",true)}else{for(var o in this.src[q]){var E=this.rte.dom.attr(this.table,o);if(q=="events"){E=this.rte.utils.trimEventCallback(E)}C.append([this.rte.i18n(this.labels[o]?this.labels[o]:o),this.src[q][o].val(E)],q,true)}}}C.open()};this.set=function(){if(!this.table.parents().length){var j=parseInt(this.src.main.rows.val())||0;var z=parseInt(this.src.main.cols.val())||0;if(j<=0||z<=0){return}this.rte.history.add();var B=b(this.rte.doc.createElement("tbody")).appendTo(this.table);var A=b("<tr />");for(var q=0;q<z;q++){A.append(b("<td />").html("&nbsp;"))}for(var q=0;q<j;q++){B.append(A.clone(true))}this.rte.selection.insertNode(this.table.get(0),true)}else{this.table.removeAttr("width").removeAttr("height").removeAttr("border").removeAttr("align").removeAttr("bordercolor").removeAttr("bgcolor").removeAttr("cellspacing").removeAttr("cellpadding").removeAttr("frame").removeAttr("rules").removeAttr("style")}var G=b.trim(this.src.main.caption.val());if(G){if(!this.table.children("caption").length){this.table.prepend(b("<caption />"))}this.table.children("caption").text(G)}else{this.table.children("caption").remove()}for(var o in this.src){if(o!="main"){for(var k in this.src[o]){var E=b.trim(this.src[o][k].val());if(E){this.table.attr(k,E)}else{this.table.removeAttr(k)}}}}var x,C,F;if((x=parseInt(this.src.main.spacing.val()))&&x>=0){this.table.attr("cellspacing",x)}if((C=parseInt(this.src.main.padding.val()))&&C>=0){this.table.attr("cellpadding",C)}if((F=this.src.main.rules.val())){this.table.attr("rules",F)}var D=parseInt(this.src.main.width.val())||"",t=parseInt(this.src.main.height.val())||"",q=b.trim(this.src.main.bgimg.val()),B=this.src.main.border.val(),p=this.src.main.margin.val(),u=this.src.main.align.val();this.table.css({width:D?D+this.src.main.wunit.val():"",height:t?t+this.src.main.hunit.val():"",border:b.trim(B.width+" "+B.style+" "+B.color),"background-color":this.src.main.bg.val(),"background-image":q?"url("+q+")":""});if(p.css){this.table.css("margin",p.css)}else{this.table.css({"margin-top":p.top,"margin-right":p.right,"margin-bottom":p.bottom,"margin-left":p.left})}if((u=="left"||u=="right")&&this.table.css("margin-left")!="auto"&&this.table.css("margin-right")!="auto"){this.table.css("float",u)}if(!this.table.attr("style")){this.table.removeAttr("style")}this.rte.ui.update()};this.update=function(){this.domElem.removeClass("disabled");if(this.name=="tableprops"&&!this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TABLE$/)){this.domElem.addClass("disabled").removeClass("active")}}};elRTE.prototype.ui.prototype.buttons.tableprops=elRTE.prototype.ui.prototype.buttons.table})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.tablerm=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){var g=this.rte.dom.parent(this.rte.selection.getNode(),/^TABLE$/);if(g){this.rte.history.add();b(g).remove()}this.rte.ui.update(true)};this.update=function(){if(this.rte.dom.parent(this.rte.selection.getNode(),/^TABLE$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.tbcellprops=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.src=null;this.labels=null;function h(){c.labels={main:"Properies",adv:"Advanced",events:"Events",id:"ID","class":"Css class",style:"Css style",dir:"Script direction",lang:"Language"};c.src={main:{type:b("<select />").css("width","100%").append(b("<option />").val("td").text(c.rte.i18n("Data"))).append(b("<option />").val("th").text(c.rte.i18n("Header"))),width:b('<input type="text" />').attr("size",4),wunit:b("<select />").append(b("<option />").val("%").text("%")).append(b("<option />").val("px").text("px")),height:b('<input type="text" />').attr("size",4),hunit:b("<select />").append(b("<option />").val("%").text("%")).append(b("<option />").val("px").text("px")),align:b("<select />").css("width","100%").append(b("<option />").val("").text(c.rte.i18n("Not set"))).append(b("<option />").val("left").text(c.rte.i18n("Left"))).append(b("<option />").val("center").text(c.rte.i18n("Center"))).append(b("<option />").val("right").text(c.rte.i18n("Right"))).append(b("<option />").val("justify").text(c.rte.i18n("Justify"))),border:b("<div />"),padding:b("<div />"),bg:b("<div />"),bgimg:b('<input type="text" />').css("width","90%"),apply:b("<select />").css("width","100%").append(b("<option />").val("").text(c.rte.i18n("Current cell"))).append(b("<option />").val("row").text(c.rte.i18n("All cells in row"))).append(b("<option />").val("column").text(c.rte.i18n("All cells in column"))).append(b("<option />").val("table").text(c.rte.i18n("All cells in table")))},adv:{id:b('<input type="text" />'),"class":b('<input type="text" />'),style:b('<input type="text" />'),dir:b("<select />").css("width","100%").append(b("<option />").text(c.rte.i18n("Not set")).val("")).append(b("<option />").text(c.rte.i18n("Left to right")).val("ltr")).append(b("<option />").text(c.rte.i18n("Right to left")).val("rtl")),lang:b('<input type="text" />')},events:{}};b.each(c.src,function(){for(var j in this){this[j].attr("name",j);if(this[j].attr("type")=="text"&&!this[j].attr("size")&&j!="bgimg"){this[j].css("width","100%")}}});b.each(["onblur","onfocus","onclick","ondblclick","onmousedown","onmouseup","onmouseover","onmouseout","onmouseleave","onkeydown","onkeypress","onkeyup"],function(){c.src.events[this]=b('<input type="text" />').attr("name",this).css("width","100%")})}this.command=function(){!this.src&&h();this.cell=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/);if(!this.cell){return}this.src.main.type.val(this.cell.nodeName.toLowerCase());this.cell=b(this.cell);this.src.main.border.elBorderSelect({styleHeight:117,value:this.cell});this.src.main.bg.elColorPicker({palettePosition:"outer","class":"el-colorpicker ui-icon ui-icon-pencil"});this.src.main.padding.elPaddingInput({value:this.cell});var j=this.cell.css("width")||this.cell.attr("width");this.src.main.width.val(parseInt(j)||"");this.src.main.wunit.val(j.indexOf("px")!=-1?"px":"%");var q=this.cell.css("height")||this.cell.attr("height");this.src.main.height.val(parseInt(q)||"");this.src.main.hunit.val(q.indexOf("px")!=-1?"px":"%");this.src.main.align.val(this.cell.attr("align")||this.cell.css("text-align"));this.src.main.bg.val(this.cell.css("background-color"));var t=this.cell.css("background-image");this.src.main.bgimg.val(t&&t!="none"?t.replace(/url\(([^\)]+)\)/i,"$1"):"");this.src.main.apply.val("");var r={submit:function(v,w){v.stopPropagation();v.preventDefault();c.set();w.close()},dialog:{width:"auto",title:this.rte.i18n("Table cell properties")}};var u=new elDialogForm(r);for(var p in this.src){u.tab(p,this.rte.i18n(this.labels[p]));if(p=="main"){u.append([this.rte.i18n("Width"),b("<span />").append(this.src.main.width).append(this.src.main.wunit)],"main",true).append([this.rte.i18n("Height"),b("<span />").append(this.src.main.height).append(this.src.main.hunit)],"main",true).append([this.rte.i18n("Table cell type"),this.src.main.type],"main",true).append([this.rte.i18n("Border"),this.src.main.border],"main",true).append([this.rte.i18n("Alignment"),this.src.main.align],"main",true).append([this.rte.i18n("Paddings"),this.src.main.padding],"main",true).append([this.rte.i18n("Background"),b("<span />").append(b("<span />").css({"float":"left","margin-right":"3px"}).append(this.src.main.bg)).append(this.src.main.bgimg)],"main",true).append([this.rte.i18n("Apply to"),this.src.main.apply],"main",true)}else{for(var o in this.src[p]){var k=this.cell.attr(o)||"";if(p=="events"){k=this.rte.utils.trimEventCallback(k)}u.append([this.rte.i18n(this.labels[o]?this.labels[o]:o),this.src[p][o].val(k)],p,true)}}}u.open()};this.set=function(){b(D).remove();var x=this.cell,B=this.src.main.apply.val();switch(this.src.main.apply.val()){case"row":x=this.cell.parent("tr").children("td,th");break;case"column":x=b(this.rte.dom.tableColumn(this.cell.get(0)));break;case"table":x=this.cell.parents("table").find("td,th");break}for(var o in this.src){if(o!="main"){for(var k in this.src[o]){var C=b.trim(this.src[o][k].val());if(C){x.attr(k,C)}else{x.removeAttr(k)}}}}x.removeAttr("width").removeAttr("height").removeAttr("border").removeAttr("align").removeAttr("bordercolor").removeAttr("bgcolor");var D=this.src.main.type.val();var A=parseInt(this.src.main.width.val())||"";var r=parseInt(this.src.main.height.val())||"";var q=b.trim(this.src.main.bgimg.val());var z=this.src.main.border.val();var u={width:A?A+this.src.main.wunit.val():"",height:r?r+this.src.main.hunit.val():"","background-color":this.src.main.bg.val(),"background-image":q?"url("+q+")":"",border:b.trim(z.width+" "+z.style+" "+z.color),"text-align":this.src.main.align.val()||""};var j=this.src.main.padding.val();if(j.css){u.padding=j.css}else{u["padding-top"]=j.top;u["padding-right"]=j.right;u["padding-bottom"]=j.bottom;u["padding-left"]=j.left}x=x.get();b.each(x,function(){var E=this.nodeName.toLowerCase();var G=b(this);if(E!=D){var p={};for(var w in c.src.adv){var t=G.attr(w);if(t){p[w]=t.toString()}}for(var w in c.src.events){var t=G.attr(w);if(t){p[w]=t.toString()}}var H=G.attr("colspan")||1;var F=G.attr("rowspan")||1;if(H>1){p.colspan=H}if(F>1){p.rowspan=F}G.replaceWith(b("<"+D+" />").html(G.html()).attr(p).css(u))}else{G.css(u)}});this.rte.ui.update()};this.update=function(){if(this.rte.dom.parent(this.rte.selection.getNode(),/^TABLE$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.tbcellsmerge=function(h,g){this.constructor.prototype.constructor.call(this,h,g);var d=this;function c(){var k=d.rte.dom.selfOrParent(d.rte.selection.getStart(),/^(TD|TH)$/);var j=d.rte.dom.selfOrParent(d.rte.selection.getEnd(),/^(TD|TH)$/);if(k&&j&&k!=j&&b(k).parents("table").get(0)==b(j).parents("table").get(0)){return[k,j]}return null}this.command=function(){var A=c();if(A){var z=this.rte.dom.indexOf(b(A[0]).parent("tr").get(0));var t=this.rte.dom.indexOf(b(A[1]).parent("tr").get(0));var r=Math.min(z,t);var v=Math.max(z,t)-r+1;var k=this.rte.dom.tableColumn(A[0],true,true);var j=this.rte.dom.tableColumn(A[1],true);var C=b.inArray(A[0],k.column);var x=b.inArray(A[1],j.column);var q=k.info.offset[C]<j.info.offset[x]?k:j;var w=k.info.offset[C]>=j.info.offset[x]?k:j;var o=0;var u=null;var p="";this.rte.history.add();var B=b(b(A[0]).parents("table").eq(0).find("tr").get().slice(r,r+v)).each(function(F){var E=p.length;var D=false;b(this).children("td,th").each(function(){var L=b(this);var J=b.inArray(this,q.column);var I=b.inArray(this,w.column);if(J!=-1||I!=-1){D=J!=-1&&I==-1;var H=parseInt(L.attr("colspan")||1);if(F==0){o+=H}if(J!=-1&&F>0){var M=q.info.delta[J];if(M>0){if(L.css("text-align")=="left"){var G=L.clone(true);L.html("&nbsp;")}else{var G=L.clone().html("&nbsp;")}G.removeAttr("colspan").removeAttr("id").insertBefore(this);if(M>1){G.attr("colspan",M)}}}if(I!=-1){var M=w.info.delta[I];if(H-M>1){var K=H-M-1;if(L.css("text-align")=="right"){var G=L.clone(true);L.html("&nbsp;")}else{var G=L.clone().html("&nbsp;")}G.removeAttr("colspan").removeAttr("id").insertAfter(this);if(K>1){G.attr("colspan",K)}}}if(!u){u=L}else{p+=L.html();L.remove()}}else{if(D){if(F==0){o+=parseInt(L.attr("colspan")||1)}p+=L.html();L.remove()}}});p+=E!=p.length?"<br />":""});u.removeAttr("colspan").removeAttr("rowspan").html(u.html()+p);if(o>1){u.attr("colspan",o)}if(v>1){u.attr("rowspan",v)}this.rte.dom.fixTable(b(A[0]).parents("table").get(0))}};this.update=function(){if(c()){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.tbcellsplit=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){var k=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/);if(k){this.rte.history.add();var o=parseInt(this.rte.dom.attr(k,"colspan"));var p=parseInt(this.rte.dom.attr(k,"rowspan"));if(o>1||p>1){var v=o-1;var w=p-1;var t=this.rte.dom.parent(k,/^TABLE$/);var q=this.rte.dom.tableMatrix(t);if(v){for(var u=0;u<v;u++){b(this.rte.dom.create(k.nodeName)).html("&nbsp;").insertAfter(k)}}if(w){var z=this.rte.dom.indexesOfCell(k,q);var j=z[0];var h=z[1];for(var g=j+1;g<j+w+1;g++){var x;if(!q[g][h].nodeName){if(q[g][h-1].nodeName){x=q[g][h-1]}else{for(var u=h-1;u>=0;u--){if(q[g][u].nodeName){x=q[g][u];break}}}if(x){for(var u=0;u<=v;u++){b(this.rte.dom.create(x.nodeName)).html("&nbsp;").insertAfter(x)}}}}}b(k).removeAttr("colspan").removeAttr("rowspan");this.rte.dom.fixTable(t)}}this.rte.ui.update(true)};this.update=function(){var g=this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/);if(g&&(parseInt(this.rte.dom.attr(g,"colspan"))>1||parseInt(this.rte.dom.attr(g,"rowspan"))>1)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.tbcolbefore=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.command=function(){var h=this.rte.dom.tableColumn(this.rte.selection.getNode(),false,true);if(h.length){this.rte.history.add();b.each(h,function(){var k=b(this);var j=parseInt(k.attr("colspan")||1);if(j>1){k.attr("colspan",j+1)}else{var o=k.clone().html("&nbsp;").removeAttr("colspan").removeAttr("width").removeAttr("id");if(c.name=="tbcolbefore"){o.insertBefore(this)}else{o.insertAfter(this)}}});this.rte.ui.update()}};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}};elRTE.prototype.ui.prototype.buttons.tbcolafter=elRTE.prototype.ui.prototype.buttons.tbcolbefore})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.tbcolrm=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.command=function(){var q=this.rte.selection.getNode();var p=this.rte.dom.selfOrParent(q,/^(TD|TH)$/);var o=b(p).prev("td,th").get(0);var k=b(p).next("td,th").get(0);var h=this.rte.dom.parent(q,/^TABLE$/);var j=this.rte.dom.tableColumn(q,false,true);if(j.length){this.rte.history.add();b.each(j,function(){var t=b(this);var r=parseInt(t.attr("colspan")||1);if(r>1){t.attr("colspan",r-1)}else{t.remove()}});this.rte.dom.fixTable(h);if(o||k){this.rte.selection.selectContents(o?o:k).collapse(true)}this.rte.ui.update(true)}};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^(TD|TH)$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);elRTE.prototype.ui.prototype.buttons.tbrowbefore=function(c,b){this.constructor.prototype.constructor.call(this,c,b);this.command=function(){var h=this.rte.selection.getNode();var t=this.rte.dom.selfOrParent(h,/^(TD|TH)$/);var d=this.rte.dom.selfOrParent(t,/^TR$/);var w=this.rte.dom.tableMatrix(this.rte.dom.selfOrParent(t,/^TABLE$/));if(t&&d&&w){this.rte.history.add();var u=this.name=="tbrowbefore";var q=$(d).prevAll("tr").length;var j=0;var p=[];function k(r,z){while(z>0){z--;if(w[z]&&w[z][r]&&w[z][r].nodeName){return w[z][r]}}}for(var o=0;o<w[q].length;o++){if(w[q][o]&&w[q][o].nodeName){var v=$(w[q][o]);var g=parseInt(v.attr("colspan")||1);if(parseInt(v.attr("rowspan")||1)>1){if(u){j+=g}else{p.push(v)}}else{j+=g}}else{if(w[q][o]=="-"){v=k(o,q);v&&p.push($(v))}}}var x=$("<tr />");for(var o=0;o<j;o++){x.append("<td>&nbsp;</td>")}if(u){x.insertBefore(d)}else{x.insertAfter(d)}$.each(p,function(){$(this).attr("rowspan",parseInt($(this).attr("rowspan")||1)+1)});this.rte.ui.update()}};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TR$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}};elRTE.prototype.ui.prototype.buttons.tbrowafter=elRTE.prototype.ui.prototype.buttons.tbrowbefore;(function(b){elRTE.prototype.ui.prototype.buttons.tbrowrm=function(g,d){this.constructor.prototype.constructor.call(this,g,d);var c=this;this.command=function(){var j=this.rte.selection.getNode(),z=this.rte.dom.selfOrParent(j,/^(TD|TH)$/),h=this.rte.dom.selfOrParent(z,/^TR$/),t=this.rte.dom.selfOrParent(z,/^TABLE$/),B=this.rte.dom.tableMatrix(t);if(z&&h&&B.length){this.rte.history.add();if(B.length==1){b(t).remove();return this.rte.ui.update()}var v=[];var w=b(h).prevAll("tr").length;function q(r,D){while(D>0){D--;if(B[D]&&B[D][r]&&B[D][r].nodeName){return B[D][r]}}}function C(D,r){y=w+1;var F=null;if(B[y]){for(var E=0;E<r;E++){if(B[y][E]&&B[y][E].nodeName){F=B[y][E]}}D=D.remove();if(F){D.insertAfter(F)}else{D.prependTo(b(h).next("tr").eq(0))}}}function p(D){for(var r=0;r<D.length;r++){if(D[r]==z){return r<D.length-1?D[r+1]:D[r-1]}}}for(var u=0;u<B[w].length;u++){var A=null;var k=false;if(B[w][u]&&B[w][u].nodeName){A=B[w][u];k=true}else{if(B[w][u]=="-"&&(A=q(u,w))){k=false}}if(A){A=b(A);var o=parseInt(A.attr("rowspan")||1);if(o>1){A.attr("rowspan",o-1);k&&C(A,u,w)}}}var x=p(this.rte.dom.tableColumn(z));if(x){this.rte.selection.selectContents(x).collapse(true)}b(h).remove()}this.rte.ui.update()};this.update=function(){if(this.rte.dom.selfOrParent(this.rte.selection.getNode(),/^TR$/)){this.domElem.removeClass("disabled")}else{this.domElem.addClass("disabled")}}}})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.undo=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){if(this.name=="undo"&&this.rte.history.canBack()){this.rte.history.back();this.rte.ui.update()}else{if(this.name=="redo"&&this.rte.history.canFwd()){this.rte.history.fwd();this.rte.ui.update()}}};this.update=function(){this.domElem.toggleClass("disabled",this.name=="undo"?!this.rte.history.canBack():!this.rte.history.canFwd())}};elRTE.prototype.ui.prototype.buttons.redo=elRTE.prototype.ui.prototype.buttons.undo})(jQuery);(function(b){elRTE.prototype.ui.prototype.buttons.unlink=function(d,c){this.constructor.prototype.constructor.call(this,d,c);this.command=function(){var j=this.rte.selection.getNode();var g,h;if((j.nodeName=="A")&&(g=this.rte.dom.selfOrParentLink(j))){this.link=g}else{this.link=null}if(h){this.rte.history.add();this.rte.selection.select(h);this.rte.doc.execCommand("unlink",false,null);this.rte.ui.update(true)}};this.update=function(){var g=this.rte.selection.getNode();if((g.nodeName=="A")&&(l=this.rte.dom.selfOrParentLink(g))){this.domElem.removeClass("disabled").addClass("active")}else{this.domElem.removeClass("active").addClass("disabled")}}}})(jQuery);function GetCookie (name){
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen){
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getCookieVal (j);
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return null;
}
//---------------------------------------------------------------------
// Function to get a cookie.
//---------------------------------------------------------------------
function getCookieVal( offset ){
var endstr = document.cookie.indexOf (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
//---------------------------------------------------------------------
// Function to set a cookie.
//---------------------------------------------------------------------
function SetCookie( name, value ){
var argv = SetCookie.arguments;
var argc = SetCookie.arguments.length;
var expires = (argc > 2) ? argv[2] : null;
var path = (argc > 3) ? argv[3] : null;
var domain = (argc > 4) ? argv[4] : null;
var secure = (argc > 5) ? argv[5] : false;
document.cookie =
name + "=" + escape (value) +
((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
((path == null) ? "" : ("; path=" + path)) +
((domain == null) ? "" : ("; domain=" + domain)) +
((secure == true) ? "; secure" : "");
}
//---------------------------------------------------------------------
// Function to delete a cookie. (Sets expiration date)
// name - String object containing the cookie name
//---------------------------------------------------------------------
function DeleteCookie (name){
var exp = new Date();
var cval = GetCookie (name);
exp.setTime (exp.getTime() - 1); // This cookie is history
document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}function set_display(id, status){
//alert(id);
var elm = document.getElementById(id);
if (!elm){
return;
//alert(id);
}
if (status==true || status==1){
elm.style.display = '';
}
else if (status==false || status==0){
elm.style.display = 'none';
}
else{
elm.style.display = status;
}
}
function toggle_display(id){
//alert('123;');
//alert(document.getElementById(id).style.display);
if (document.getElementById(id).style.display){
document.getElementById(id).style.display = '';
return true;
}
else{
document.getElementById(id).style.display = 'none';
return false;
}
}
function toggle_list_display(block_id, icon_id, override){
var element = document.getElementById(icon_id);
if (override==undefined){
if (toggle_display(block_id)){
element.innerHTML = '-';
element.title = lang[act_lang]['common']['hide_contents'];
return true;
}
else{
element.innerHTML = '+';
element.title = lang[act_lang]['common']['show_contents'];
return true;
}
}
else{
if (override){
set_display(block_id, true);
element.innerHTML = '-';
element.title = lang[act_lang]['common']['hide_contents'];
}
else{
set_display(block_id, false);
element.innerHTML = '+';
element.title = lang[act_lang]['common']['show_contents'];
}
}
}
function getClientWidth(){
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}
function getClientHeight(){
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
function getBodyScrollTop(){
	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}
function getBodyScrollBottom(){
alert(document.body.clientHeight);
alert(document.body.clientHeight - getBodyScrollTop() - document.body.clientHeight );
}
function getBodyScrollLeft(){
	return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}
function getClientCenterX(){
	return parseInt(getClientWidth()/2)+getBodyScrollLeft();
}
function getClientCenterY(){
	return parseInt(getClientHeight()/2)+getBodyScrollTop();
}
function absPosition(obj) {
var x = y = 0;
while(obj) {
x += obj.offsetLeft;
y += obj.offsetTop;
obj = obj.offsetParent;
}
return {x:x, y:y};
}
function getAssocSize(arr){
var c=0;
for (i in arr){
c++;
}
return c;
}
function explain(obj, recurse){
var ptext;
var ptype;
var arr;
for (key in obj){
try{
ptype = typeof(obj[key]);
if (ptype!='function'){
}
//ptext += ptype + ' ' + key + ' = ' + obj[key] + '\n';
}
catch(e){
//alert(e.toString());
}
}
alert(ptext);
}
function Dump(d,l){
if (l == null) l = 1;
var s = '';
if (l>16) return 'Too many levels!' + s;
if (typeof(d) == "object"){
s += typeof(d) + " {\n";
for (var k in d){
for (var i=0; i<l; i++) s += " ";
s += k+": " + Dump(d[k],l+1);
//alert(s);
}
for (var i=0; i<l-1; i++) s += " ";
s += "}\n"
}
else{
s += "" + d + "\n";
}
return s;
}
function xml2Array(string){
var elements = string.childNodes;
var arr = new Array();
var am=0;
for (var i=0; i<elements.length; i++){
element = elements.item(i);
if (element.tagName != undefined) tag = element.tagName;
else tag = 'value';
//alert(element.tagName);
if (arr[tag] == undefined) arr[tag] = new Array();
//alert(i);
if (element.data == undefined){
arr[tag][i] = xml2Array(element);
}
else{
alert(element.nodeValue);
arr[tag][i] = element.data;
}
//alert(element.childNodes);
//alert(element.childNodes.item(0).childNodes);
//alert(element.childNodes.item(0).childNodes.item(0).data);
}
//alert(string);

return arr;
}
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
var i;
var j;
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
function open_fips(url, id, aid){
if (id>0) window.open('http://www.fips.ru/cdfi/fips.dll?ty=49&docid=' + id + '&lb=5', 'fips' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
else if (aid>0) window.open('http://www.fips.ru/cdfi/fips.dll?ty=49&docid=' + aid + '&lb=30', 'fips' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
window.location = url;
}
function open_fips2(id, aid){
//if (id.length>1) window.open('http://www.fips.ru/cdfi/fips.dll?ty=49&docid=' + id + '&lb=5', 'fips' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
if (id.length>1) window.open('http://www1.fips.ru/fips_servl/fips_servlet?DB=RUTM&DocNumber='+id+'&TypeFile=html', 'fips' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
else if (aid.length>1) window.open('http://www1.fips.ru/fips_servl/fips_servlet?DB=RUTMAP&DocNumber='+aid+'&TypeFile=html', 'fips' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
//else if (aid>0) window.open('http://www.fips.ru/cdfi/fips.dll?ty=49&docid=' + aid + '&lb=30', 'fips' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
}
function open_nic(id, domain){
window.open('https://www.nic.ru/whois/?domain=' + domain, 'nic' + id, 'width=' + (screen.width-200) + ',height=' + (screen.height-200) + ',left=50,top=50,scrollbars=yes,resizable=yes');
}
function test_popup(url){
try{
var tw = window.open('', 'tw', 'width=1,height=1');
tw.document.write('<html><head></head><body><script>try{window.opener.location.href="' + url + '"; window.close();}catch(e){}</script></body></html>');
}
catch (e){
var tw = window.open('', 'tw', 'width=1,height=1');
tw.document.write('<html><head></head><body><script>try{window.opener.location.href="' + url + '"; window.close();}catch(e){}</script></body></html>');
}
}
function fill_dates(prefix, sy, ey, dy, dm, dd){
//alert('Fill dates: ' + dm + '-' + dd);
var text = '<select name="' + prefix + '_day" id="' + prefix + '_day">';
for (var i=1; i<32; i++){
if (i<10) k = '0' + i; else k=i;
text += '<option value="' + k + '"';
if ((i*1)==(dd*1)) text +=' selected="selected"';
//alert(i + ' / ' + dd);
text += '>' + k + '<\/option>';
}
text += '<\/select>';
document.getElementById(prefix + '_day_span').innerHTML = text;
text = '<select name="' + prefix + '_month" id="' + prefix + '_month">';
for (var i=1; i<13; i++){
if (i<10) k = '0' + i; else k=i;
text += '<option value="' + k + '"';
if ((i*1)==(dm*1)) text +=' selected="selected"';
text += '>' + k + '<\/option>';
}
text += '<\/select>';
document.getElementById(prefix + '_month_span').innerHTML = text;
text = '<select name="' + prefix + '_year" id="' + prefix + '_year">';
for (var i=sy; i<=ey; i++){
text += '<option value="' + i + '"';
if ((i*1)==(dy*1)) text +=' selected="selected"';
text += '>' + i + '<\/option>';
}
text += '<\/select>';
document.getElementById(prefix + '_year_span').innerHTML = text;
}
function set_datetype(type){
var act;
if (type==0){
document.getElementById('reg_start_act').checked = false;
document.getElementById('reg_end_act').checked = false;
document.getElementById('exp_start_act').checked = false;
document.getElementById('exp_end_act').checked = false;
document.getElementById('app_start_act').checked = false;
document.getElementById('app_end_act').checked = false;
}
if (document.getElementById('reg_start_act').checked) act = false; else act = true;
document.getElementById('reg_start_day').disabled = act;
document.getElementById('reg_start_month').disabled = act;
document.getElementById('reg_start_year').disabled = act;
if (document.getElementById('reg_end_act').checked) act = false; else act = true;
document.getElementById('reg_end_day').disabled = act;
document.getElementById('reg_end_month').disabled = act;
document.getElementById('reg_end_year').disabled = act;
if (document.getElementById('exp_start_act').checked) act = false; else act = true;
document.getElementById('exp_start_day').disabled = act;
document.getElementById('exp_start_month').disabled = act;
document.getElementById('exp_start_year').disabled = act;
if (document.getElementById('exp_end_act').checked) act = false; else act = true;
document.getElementById('exp_end_day').disabled = act;
document.getElementById('exp_end_month').disabled = act;
document.getElementById('exp_end_year').disabled = act;
if (document.getElementById('app_start_act').checked) act = false; else act = true;
document.getElementById('app_start_day').disabled = act;
document.getElementById('app_start_month').disabled = act;
document.getElementById('app_start_year').disabled = act;
if (document.getElementById('app_end_act').checked) act = false; else act = true;
document.getElementById('app_end_day').disabled = act;
document.getElementById('app_end_month').disabled = act;
document.getElementById('app_end_year').disabled = act;
}
function get_array_size(array){
var cnt = 0;
for (key in array){
cnt++;
}
return cnt;
}
function addslashes(str){
str = str.replace(/\\/g,'\\\\');
str = str.replace(/\'/g,'\\\'');
//str = str.replace(/\"/g,'&quot;');
return str;
}
var vowel = new String ('аеёиоуыэюяАЕЁИОУЫЭЮЯAEIOUY'); // Гласные буквы
var voiced = new String ('бвгджзлмнрхцчшщБВГДЖЗЛМНРХЦЧШЩBCDFGJLMNPRVWZ'); // Звонкие и шипящие согласные
var deaf = new String ('кпстфКПСТФHKQSTX'); // Глухие согласные
var brief = new String ('йЙ'); // Й
var other = new String ('ьъЬЪ'); // Другие
var cons = new String ('бвгджзйклмнпрстфхцчшщБВГДЖЗКЛМНПРСТФХЦЧШЩBCDFGJLMNRVWZHKPQSTX'); // Все согласные
// Валидация правильности введенной строки
function validateString (s) {return s;}
// Есть ли в строке гласные?
function isNotLastSep (remainStr){
var is = false;
for (var i = 0; i < remainStr.length; i++){
if (vowel.indexOf (remainStr.substr (i, 1)) != -1) { is = true; break; }
}
return is;
}
// Собственно функция разбиения слова на слоги
function getSeparatedString(s){
//alert('.' + s + '.');
// Добавляем слог в массив и начинаем новый слог
function addSep (){
sepArr.push (tmpS);
tmpS = '';
}
s = validateString (s);
var tmpL = new String (); // Текущий символ
var tmpS = new String (); // Текущий слог
var sepArr = new Array (); // Массив слогов
for (var i = 0; i < s.length; i++){
tmpL = s.substr (i, 1);
tmpS += tmpL;
// Проверка на признаки конца слогов
// если буква равна 'й' и она не первая и не последняя и это не последний слог
if (
(i != 0) &&
(i != s.length -1) &&
(brief.indexOf (tmpL) != -1) &&
(isNotLastSep (s.substr (i+1, s.length-i+1)))
) { addSep (); continue; }
// если текущая гласная и следующая тоже гласная
if (
(i < s.length - 1) &&
(vowel.indexOf (tmpL) != -1) &&
(vowel.indexOf (s.substr (i+1, 1)) != -1)
){ addSep (); continue; }
// если текущая гласная, следующая согласная, а после неё гласная
if (
(i < s.length - 2) &&
(vowel.indexOf (tmpL) != -1) &&
(cons.indexOf (s.substr (i+1, 1)) != -1) &&
(vowel.indexOf (s.substr (i+2, 1)) != -1)
) { addSep (); continue; }
// если текущая гласная, следующая глухая согласная, а после согласная и это не последний слог
if (
(i < s.length - 2) &&
(vowel.indexOf (tmpL) != -1) &&
(deaf.indexOf (s.substr (i+1, 1)) != -1) &&
(cons.indexOf (s.substr (i+2, 1)) != -1) &&
(isNotLastSep (s.substr (i+1, s.length-i+1)))
) { addSep (); continue; }
// если текущая звонкая или шипящая согласная, перед ней гласная, следующая не гласная и не другая, и это не последний слог
if (
(i > 0) &&
(i < s.length - 1) &&
(voiced.indexOf (tmpL) != -1) &&
(vowel.indexOf (s.substr (i-1, 1)) != -1) &&
(vowel.indexOf (s.substr (i+1, 1)) == -1) &&
(other.indexOf (s.substr (i+1, 1)) == -1) &&
(isNotLastSep (s.substr (i+1, s.length-i+1)))
) { addSep (); continue; }
// если текущая другая, а следующая не гласная если это первый слог
if (
(i < s.length - 1) &&
(other.indexOf (tmpL) != -1) &&
((vowel.indexOf (s.substr (i+1, 1)) == -1) ||
(isNotLastSep (s.substr (0, i))))
) { addSep (); continue; }
} // for (var i = 0; i < s.length; i++)
sepArr.push (tmpS);
return sepArr.join('-');
} // function getSeparatedString (s)

// JS Calendar
var calendar = null; // remember the calendar object so that we reuse
// it and avoid creating another
// This function gets called when an end-user clicks on some date
function selected(cal, date) {
	cal.sel.value = date; // just update the value of the input field
}
// And this gets called when the end-user clicks on the _selected_ date,
// or clicks the "Close" (X) button. It just hides the calendar without
// destroying it.
function closeHandler(cal) {
	cal.hide();			// hide the calendar
	// don't check mousedown on document anymore (used to be able to hide the
	// calendar when someone clicks outside it, see the showCalendar function).
	Calendar.removeEvent(document, "mousedown", checkCalendar);
}
// This gets called when the user presses a mouse button anywhere in the
// document, if the calendar is shown. If the click was outside the open
// calendar this function closes it.
function checkCalendar(ev) {
	var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev);
	for (; el != null; el = el.parentNode)
	// FIXME: allow end-user to click some link without closing the
	// calendar. Good to see real-time stylesheet change :)
	if (el == calendar.element || el.tagName == "A") break;
	if (el == null) {
		// calls closeHandler which should hide the calendar.
		calendar.callCloseHandler(); Calendar.stopEvent(ev);
	}
}
// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(id) {
	var el = document.getElementById(id);
	if (calendar != null) {
		// we already have one created, so just update it.
		calendar.hide();		// hide the existing calendar
		calendar.parseDate(el.value); // set it to a new date
	} else {
		// first-time call, create the calendar
		var cal = new Calendar(true, null, selected, closeHandler);
		calendar = cal;		// remember the calendar in the global
		cal.setRange(1900, 2070);	// min/max year allowed
		calendar.create();		// create a popup calendar
	}
	calendar.sel = el;		// inform it about the input field in use
	calendar.showAtElement(el);	// show the calendar next to the input field
	// catch mousedown on the document
	Calendar.addEvent(document, "mousedown", checkCalendar);
	return false;
}
function addHandler(object, event, handler){
if (typeof object.addEventListener != 'undefined')
object.addEventListener(event, handler, false);
else if (typeof object.attachEvent != 'undefined')
object.attachEvent('on' + event, handler);
else
throw "Incompatible browser";
}
function removeHandler(object, event, handler){
if (typeof object.removeEventListener != 'undefined')
object.removeEventListener(event, handler, false);
else if (typeof object.detachEvent != 'undefined')
object.detachEvent('on' + event, handler);
else
throw "Incompatible browser";
}

