/* tags */

function win2url( str ) {
    //  словарь
    var trans = [];
    for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350; // А-Яа-я
    trans[0x401] = 0xA8;    // Ё
    trans[0x451] = 0xB8;    // ё
    var ret = [];
    // Составляем массив кодов символов, попутно переводим кириллицу
    for (var i = 0; i < str.length; i++){
        var n = str.charCodeAt(i);
        if (typeof trans[n] != 'undefined') n = trans[n];
        if ( n <= 0xFF ) ret.push(n);
    }
    return escape(String.fromCharCode.apply(null, ret));
}


var fly;

function fast_form(obj, id){
	if ( fly  == undefined ) { fly = obj.src }
    var coord = absPosition(obj);
    var divs = document.getElementById( id );
    divs.style.top  = coord.y + 10;
    divs.style.left = coord.x + 10;
    divs.style.display = divs.style.display == 'block' ? 'none' : 'block';
	obj.src = divs.style.display == 'block' ? 'http://img.mail.ru/r/blogs/ico_del.png' : fly;
	if(divs.style.display == 'block') obj.className =  'IEpng';
    var edit = document.getElementById('tagsearch');
    divs.style.display == 'block' ? edit.focus() : '';
}

function tag_search(id, prefix){
	inp = document.getElementById(id);
	if(inp.value == '')
	{
		alert('Заполните пожалуйста поле поиска');
		inp.focus();
	}
	else
	{
		prefix = prefix.length ? prefix :  PerlVar_JournalDir;
		window.location = prefix +  PerlVar_tag_search_path + win2url(gebi( id ).value);
	}
}

function load_tagcloud_state()
{
    var cookname = "tagcloud_state";
    if (!get_cookie(cookname)) set_cookie(cookname, "show");
    if (get_cookie(cookname) == "hide") {
	curr_row='list_tags'; 
	koryto[curr_row]=[0,0,0]; 
	return '<img id="tagcloud_icon" onclick="show_hide_tagcloud(this);" src=http://img.mail.ru/r/blogs/calendar_maximize.gif width=14 height=14 border=0 align=absmiddle>&nbsp;&nbsp;';
    } else {
	curr_row='list_tags'; 
	koryto[curr_row]=[0,0,1]; 
	return '<img id="tagcloud_icon" onclick="show_hide_tagcloud(this);" src=http://img.mail.ru/r/blogs/calendar_minimize.gif width=14 height=14 border=0 align=absmiddle>&nbsp;&nbsp;';
    }
}

show_hide_tagcloud = function(click_obj)
{
	click_obj.onclick = function onclick(event) { return false; } // заблокирвоать выпадушку
    var cookname = "tagcloud_state";
    if (get_cookie(cookname) == "hide") {
	    set_cookie(cookname, "show");
		curr_row='list_tags'; 
		koryto[curr_row]=[0,0,0]; 
		gebi("tagcloud_icon").src = "http://img.mail.ru/r/blogs/calendar_minimize.gif";
    } else {
		set_cookie(cookname, "hide");
		curr_row='list_tags'; 
		koryto[curr_row]=[0,0,1];
		gebi("tagcloud_icon").src = "http://img.mail.ru/r/blogs/calendar_maximize.gif";
    }
	razvorot(curr_row, 1, 0, click_obj,  show_hide_tagcloud);
}

var post_tagslist_object;

function post_post_addtag(tag)
{
	var tinput = gebi('posttagarea'); 
	if(!tinput) return false;
	var inparr = tinput.value.split(',');
	while(a=inparr.shift()) {
		a=a.replace(/(^\s+)|(\s+$)/g, "")
		if(a == tag) return false;
	}
	if(tinput.value != '') {
		tag = ', '+tag;
	}
	tinput.value += tag;
	return false;
}

function create_post_tags_form()
{
	var div = document.createElement('div');
	div.setAttribute('id','posttagsdiv');
	div.setAttribute('class','favoradd');
	div.className = 'favoradd';
	div.style.display='none';
	var html = '<form method="POST" id="posttagsform" onsubmit="return set_post_tags(this)" action="#">';
	html+='<div><b>Редактировать метки</b><br />';
	html+='<input type=hidden name="postid" id="posttagsid" value="">';
	html+='<textarea id="posttagarea" name="tags"></textarea>';
	html+='<span style="display:block;padding-bottom:4px;" id="journallasttags">';
	if(typeof(PerlVar_LastTags)!='undefined' && PerlVar_LastTags!='') {
		html+='Последние: ';
		var inparr = PerlVar_LastTags.split(',');
		while(a=inparr.shift()) {
			a=a.replace(/(^\s+)|(\s+$)/g, "");
			html+='<a href="#" class="lasttags" onclick="return post_post_addtag(\''+a.replace(/\\/g,'\\\\')+'\')">'+a+'</a>';
			if(inparr.length) html+=', ';
		}
	}
	html+='</span>';
	html+='<input type=submit value=" Сохранить " class="add">';
	html+='<input type=button value=" Отменить " onclick="close_post_tags()" class="close">';
	html+='<a onclick="return close_post_tags();" href="#"><img src="http://img.mail.ru/r/foto2/ico_close.gif" width="7" height="7" alt="Закрыть" border=0 class="ico_close" /></a>';
	html+='</div></form>';
	div.innerHTML = html;
	document.body.insertBefore(div,document.body.firstChild);
	return div;
}

function close_post_tags()
{
    var divs = gebi('posttagsdiv');
	if(divs) divs.style.display = 'none';
	return false;
}

function post_tags_callback_set(res,list,lasttags)
{
	if(!res) {
		alert('Ошибка изменения меток!');
		return;
	}
	var parpar = post_tagslist_object.parentNode;
	var str='Метки: ';
	var tags='';
	while(a=list.shift()) {
		if(typeof(a)!='object') continue;
		str+='<a href="' + PerlVar_JournalDir + 'tag/'+win2url(a[0])+'">'+a[1]+'</a>';
		tags+=a[1];
		if(list.length) { str+=', '; tags+=', '; }
	}
	var inner=parpar.innerHTML;
	var reg=new RegExp('(<img .*src=.*)','i');
	var pos=reg.exec(inner);
	var postid = gebi('posttagsid').value;
	parpar.innerHTML=str+' <a href="#" onclick="return show_post_tags(this,\''+postid+'\',\''+tags.replace(/\\/g,'\\\\')+'\')">'+pos[1];
	var span = gebi('journallasttags');
	if(!span) return;
	var html = 'Последние: ';
	if(lasttags.length==0) html='';
	else {
		for(var i=lasttags.length-1;i>=0;i--) {
			var a = lasttags[i];
			html+='<a href="#" class="lasttags" onclick="return post_post_addtag(\''+a[1].replace(/\\/g,'\\\\')+'\')">'+a[1]+'</a>';
			if(i) html+=', ';
		}
	}
	span.innerHTML = html;
}

function set_post_tags()
{
    var divs = gebi('posttagsdiv');
	if(!divs) return false;
	divs.style.display = 'none';
	var forma = gebi('posttagsform');
	var postid = gebi('posttagsid').value;
	var tags = gebi('posttagarea').value;
	perl_set_post_tags(postid,tags,post_tags_callback_set);
	return false;
}

function getCoord(obj)
{
	var offsetLeft = 0;
	var offsetTop = 0;
	var divnum = 0;
	while (obj) {
		offsetLeft += obj.offsetLeft;
		if(obj.tagName=='DIV') {
			divnum++;
			if(!isIE || (isIE && divnum>2)) offsetTop += obj.offsetTop;
		}
		else offsetTop += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return {x:offsetLeft,y:offsetTop};
}	

function show_post_tags(obj,postid,tags)
{
	post_tagslist_object = obj;
	var divs = gebi('posttagsdiv');
	if(!divs) divs = create_post_tags_form();
	var postinp = gebi('posttagsid');
	if(divs.style.display == 'block' && postid == postinp.value) {
		divs.style.display = 'none';
		return false;
	}
	postinp.value = postid;
	var coord = getCoord(obj);
	divs.style.top  = coord.y + 10;
	divs.style.left = coord.x + 10;
	if(parseInt(divs.style.left)+420 > document.body.clientWidth) divs.style.left=parseInt(document.body.clientWidth-415);
	divs.style.display = 'block';
	var edit = gebi('posttagarea');
	var inparr = tags.split(',');
	var tags2 = '';
	while(a=inparr.shift()) {
		a=a.replace(/(^\s+)|(\s+$)/g, "");
		tags2+=a;
		if(inparr.length) tags2+=', ';
	}
	edit.value = tags2;
	edit.focus();
	return false;
}

function getCurrentStyle(oElm, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = oElm.currentStyle[strCssRule];
	}
	return strValue;
}

function BytetoHex(a) {
    a = parseInt(a);
    if(a<16) return '0'+a.toString(16);
    return a.toString(16);
}

function FixRGBtoHex(c) {
	var re = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i;
	var bits = re.exec(c);
	if(bits) return '#'+bits[1]+bits[1]+bits[2]+bits[2]+bits[3]+bits[3];
	re = /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/;
	bits = re.exec(c);
	if (bits) return '#'+BytetoHex(bits[1])+BytetoHex(bits[2])+BytetoHex(bits[3]);
	return c;
}

function FindParentColors(id) {
	var colors = {color:'#666666', bgcolor:'#ffffff'};
	var a=document.getElementById(id);
	if(a) {
		colors.color=FixRGBtoHex(getCurrentStyle(a,'color'));
		while(a=a.parentNode) {
			var c = getCurrentStyle(a,'background-color');
			if(c!='transparent' && c!='') {
				colors.bgcolor=FixRGBtoHex(c);
				break;
			}
		}
	}
	return colors;
}

