/*
    Copyleft 2009 Anton Kudris
*/

// yeah, everybody lovezz all those global varzz
var domain = 'kudris.com';
var cookie_name = 'openid_key';
var openid_providers = "{'google': {'icon': 'http://google.com/favicon.ico', help: 'email на Гугле', title: 'Gmail'}, 'yandex': {'icon' : 'http://img.yandex.net/i/favicon.ico', 'help' : 'почта на Яндексе', 'title': 'Яндекса'}, 'livejournal': {'icon' : 'http://www.livejournal.com/favicon.ico', 'help': 'имя в ЖЖ', 'title': 'Живого Журнала'}, 'rambler': {'icon' : 'http://rambler.ru/favicon.ico', 'help': 'email на Рамблере', 'title': 'Рамблер'}, 'openid': {'icon' : '/i/i/openid_ico.gif', 'help': 'ваш OpenID', 'title': 'любого OpenID'}}".evalJSON();
var openid_selected = 'google';
var openid_url = '';
var openid_nick = '';
var openid_key = getCookie(cookie_name);

function getCookie(_name){
    if(document.cookie.match(new RegExp(_name+"=(.+?)($|;)","gi")))
    return unescape(RegExp.$1); return null;
}

Event.observe(window, 'load', function() {

	document.onclick = function() {
	    $$('div.tag_preview').invoke('hide');
	    $$('div.arch_preview').invoke('hide');
	}

	if (openid_key) {
		new Ajax.Request('/cgi-bin/comment.pl', {
			method: 'get',
			parameters: { a: 'get_stored_openid_auth'},
			onComplete: function(transport) {

				var res = transport.responseText.evalJSON();
				//alert(res.openid_url);
				if (res.openid_url != 'not found') {
					openid_url = res.openid_url;
					openid_nick = res.nick;
					openid_selected = res.openid_provider;
					if (openid_selected == 'openid') {
						openid_nick = openid_url;
					}
					//alert('cookie found. openidurl = '+openid_url);
				} else {
					openid_url = '';
					openid_key = false;
					// let's kill some cookies!
					logout_openid();
					//alert('deleting cookie');
				}
			}
		});
	} else {
		//alert(openid_key);
	}

});

function logout_openid() {
    document.cookie = cookie_name + '=' + '; path=/' + ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

function comment_reply(post_id, pid) {
	cmts_text = unquote($(post_id+'_'+pid).innerHTML);
	gimmeajaxicomments(post_id, pid, cmts_text);
}


// in fact we just cleaning cookie with openid_key and show comments form
function logout(post_id, pid) {
	var cmts_text = '';
	if ($('cmts_text')) {
		cmts_text = $('cmts_text').value;
	}
	openid_url = '';
	openid_key = false;
	logout_openid();
	gimmeajaxicomments(post_id, pid, cmts_text);
}

// comments posting
function submit_comment(post_id, pid) {
    if (!openid_key) {
		openid_url = $F('auth_openid');
	}

	$('cmnt_submit').disable();
	// are you a bad boy (post) or a krishna (has openid_key)
	var action = (openid_key) ? 'post_with_stored_openid' : 'post';

	// hey, cmon! hidden formz ownz so much!
	// let's load your overpowered cpu with some DOM operations
	var cmnt_form = new Element('form', {id: 'secret_form', method: 'POST', action: '/cgi-bin/comment.pl'}).hide();
	cmnt_form.insert(new Element('input', {type: 'hidden', name: 'a', value: action}));
	cmnt_form.insert(new Element('input', {type: 'hidden', name: 'openid_provider', value: openid_selected}));
	cmnt_form.insert(new Element('input', {type: 'hidden', name: 'openid_url', value: openid_url}));
	cmnt_form.insert(new Element('input', {type: 'hidden', name: 'text', value: $F('cmts_text')}));
	cmnt_form.insert(new Element('input', {type: 'hidden', name: 'post_id', value: post_id}));
	cmnt_form.insert(new Element('input', {type: 'hidden', name: 'cmnt_pid', value: pid}));

	$('blog_posts').insert(cmnt_form);
	cmnt_form.submit();
}

// gimme all your cookies! ... and all your money
function getCookie(_name){
    if(document.cookie.match(new RegExp(_name+"=(.+?)($|;)","gi")))
    return unescape(RegExp.$1); return null;
}

// comment form
function gimmeajaxicomments(post_id, pid, text) {

	var cmts_text = (text) ? text : '';
	var insertTo = (pid) ? $('c'+pid) : $('cmts_'+post_id);

	var old_form = $('comment_form');
	if (old_form) { old_form.remove() }

	if (openid_url != '') {
		var u_name = (openid_nick == '') ? openid_url : openid_nick;
        cmts_form = '<div id="comment_form">'+
			'<textarea id="cmts_text" class="cmts_text" onkeypress="check_comment(this)">'+cmts_text+'</textarea>'+
            '<span id="openid_prov_title">Вы зашли, как пользователь </span><span id="auth_type">'+u_name+'('+openid_url+')</span> <a href="javascript:void(0)" onclick="logout('+post_id+', '+pid+')">Выйти</a><br />'+
			'<div id="openid_list" style="display: none"></div>'+
            '<span style="display: none" "id="openid_prov_help">почта на Гугле</span><input type="text" id="auth_openid" style="display: none" value="'+openid_url+'" /><br />'+
			'<span id="floatleft">&nbsp;</span><input id="cmnt_submit" type="button" disabled="disabled" onclick="submit_comment('+post_id+', '+pid+')" value="Отправить" /> или <a href="javascript:void(0)" onclick="cancel_comment()">отменить комментарий</a>'+
			'</div>';
			Element.insert(insertTo, {after: cmts_form});

    } else {
		var oid_content = '';

		for (var provider in openid_providers) {
			oid_content += '<div id="'+provider+'" onclick="select_openid_provider(\''+provider+'\')"><img src="'+openid_providers[provider].icon+'" align="absmiddle" />'+openid_providers[provider].title+'</div>';
		}

        cmts_form = '<div id="comment_form">'+
			'<textarea id="cmts_text" class="cmts_text" onkeypress="check_comment(this)">'+cmts_text+'</textarea>'+
            '<span id="openid_prov_title">Войти, как пользователь</span><span id="auth_type" onclick="auth_type()"><img src="http://google.com/favicon.ico" align="absmiddle" border="0"> Google</span><br />'+
			'<div id="openid_list" style="display: none"></div>'+
            '<span id="openid_prov_help">почта на Гугле</span><input type="text" id="auth_openid" onkeypress="check_comment(this)" value="" /><br />'+
			'<span id="floatleft">&nbsp;</span><input id="cmnt_submit" type="button" disabled="disabled" onclick="submit_comment('+post_id+', '+pid+')" value="Отправить" /> или <a href="javascript:void(0)" onclick="cancel_comment()">отменить комментарий</a>'+			'</div>';
	    //$('cmts_form_'+post_id).update(cmts_form).show();
	    Element.insert(insertTo, {after: cmts_form});

	    var pos = $('auth_type').positionedOffset();
	    $('openid_list').insert(oid_content).setStyle({left: pos[0]+"px"});
    }
}


function cancel_comment() {
	$('comment_form').remove();
}

// checking comments
function check_comment(o) {
	var cmnt_text = $F('cmts_text');
	var auth_openid = $F('auth_openid');
	var cmnt_submit = $('cmnt_submit');

	if (cmnt_text.strip() != '' && auth_openid.strip() != '') {
		cmnt_submit.enable();
	} else {
		cmnt_submit.disable();
	}
	o.focus();
}

function auth_type() {
	$('auth_type').innerHTML = '&nbsp;';
	$('openid_list').show();
	return 1;
}

function select_openid_provider(provider) {
	openid_selected = provider;
	$('auth_type').innerHTML = '<img src="'+openid_providers[provider].icon+'" align="absmiddle" />'+openid_providers[provider].title;
	$('openid_prov_help').innerHTML = openid_providers[provider].help;
	$('openid_list').hide();
}

function showcomments(id) {
    var div = $('cmts_'+id);

	if (div.visible()) {
		var total_comments = 0;
		$$("#cmts_"+id+" div.comment").each(function() {
			total_comments++;
		});
		$('cmts_switch_'+id).update('<a href="javascript:showcomments('+id+')">Показать комментарии ('+total_comments+')</a>');
	} else {
		$('cmts_switch_'+id).update('<a href="javascript:showcomments('+id+')">Спрятать комментарии</a>');
	}
	div.toggle();

}

function load_content(div, file) {
    new Ajax.Request('/'+file, {
        method: 'get',
        onSuccess: function(transport){
            var arch = transport.responseText || "0";
            var arch_div = document.getElementById(div);
            arch_div.innerHTML = arch;
        }
    });
}

function trigger_archive(year, li) {
    var arch_ul = document.getElementById('arch-'+year);
    if (arch_ul.className == 'archive_visible') {
        arch_ul.className = 'archive_hidden';
        li.parentNode.style.listStyleImage = "url(/i/arch_closed.png)";
    } else {
        arch_ul.className = 'archive_visible';
        li.parentNode.style.listStyleImage = "url(/i/arch_opened.png)";
    }
}

function gimmeajaxarchive(y, m) {
    $$('div.arch_preview').invoke('hide');
    if (!$('id_archive_'+y+'_'+m)) {
        new Ajax.Request('/archive/'+y+'.'+m+'.ak', {
            method: 'get',
            onSuccess: function(transport) {
				var arch_div = $('archive_div');
                var left_offset = getX(arch_div) - 502;
                var top_offset = getY(arch_div) - 50;
                var h = arch_div.offsetHeight+80;
                var arch_preview = new Element('div', {
                    id: 'id_archive_'+y+'_'+m,
                    style: "left: "+left_offset+"px; top:"+top_offset+"px; height: "+h+"px;"
                }).addClassName('arch_preview').update(
                    new Element('div', {style: "overflow: auto; height: 400px; width: 480px;"})
                );
                arch_preview.down().innerHTML = transport.responseText;
                $('block_2').insert(arch_preview);
            }
        });
    } else {
        $('id_archive_'+y+'_'+m).show();
    }
}

function closeajaxblog() {
    $('blog_posts').show();
    $('arhive_div').hide();
}

function gimmeajaxblog() {
    var blog_content = document.getElementById('blog_posts');
    var archive = document.getElementById('arhive_div');
    blog_content.className = 'hidden';
    archive.className = 'visible';
    archive.innerHTML = '<img align="top" src="/admin/loading2.gif" border="0" alt="Loading..."  /> Идет загрузка архива...';
}

function getX(el) {
    var X = 0;
    while(el != null) {
        X += el.offsetLeft;
        el = el.offsetParent;
    }
    return X;
}

function getY(el) {
    var Y = 0;
    while(el != null) {
        Y += el.offsetTop;
        el = el.offsetParent;
    }
    return Y;
}

function show_tags(tag) {
    $$('div.tag_preview').invoke('hide');
    if (!$('id_tag_'+tag)) {
        new Ajax.Request('/tags/'+tag, {
            method: 'get',
            onSuccess: function(transport) {
                var left_offset = getX($('tags')) - 300;
                var tag_preview = new Element('div', {id: 'id_tag_'+tag, style: "left: "+left_offset+"px;"});
                tag_preview.addClassName('tag_preview').update(transport.responseText);
                $('block_2').insert(tag_preview);
            }
        });
    } else {
        $('id_tag_'+tag).show();
    }
}


function setCookie(cookieName,cookieValue) {
    var today = new Date();
    var expire = new Date();
    //if (nDays==null || nDays==0) nDays=1;
    //expire.setTime(today.getTime() + 3600000*24*nDays);
    expire.setTime(today.getTime() + 18000);
    document.cookie = cookieName+"="+escape(cookieValue)+ ";expires="+expire.toGMTString();
}

function search_site() {
    var text = $F('search_form_text');
    if (text.length >= 3) {
	new Ajax.Request('/cgi-bin/search.pl', {
            method: 'get',
            parameters: {
                search: text
            },
            onSuccess: function(transport) {
    		$('blog_posts').hide();
		$('search').update(transport.responseText).show();
            }
        });

    } else {
	alert('Не-а... ничего не буду искать... 3 буквы минимум! Подсказать слово?');
    }
}

function search_click() {
    if ($F('search_form_text') == 'поиск по сайту') {
	$('search_form_text').value = '';
    }
}

function hide_search() {
    $('blog_posts').show();
    $('search').hide();
}

/*

	функция, которая парсит html код комментария, дабы его можно было цитировать
	понимает только теги br и blockquote

*/
function unquote(t) {
	t = t.gsub(/\n/, '');
	var l = []; l[0] = '>';
	var tagflag = 0;
	var tagname = '';
	var line = 0;
	var quotes = '>';
	for (var i = 0, max = t.length; i < max; i++) {
		if (t[i] == '<') {
			tagflag = 1;
			continue;
		}
		if (t[i] == '>') {
			tagflag = 0;
			tagname = tagname.sub(/\/$/, "").gsub(/\s/, "");
			if (tagname == 'br') {
				line++;
				l[line] = quotes;
				tagname = '';
				continue;
			}
			if (tagname == 'blockquote') {
				quotes += '>';
				line++;
				l[line] = quotes;
				tagname = '';
				continue;
			}
			if (tagname == '/blockquote') {
				quotes = quotes.sub('>', '');
				line++;
				l[line] = quotes;
				tagname = '';
				continue;
			}
		}
		if (tagflag == 1) {
			tagname += t[i];
			continue;
		}
		l[line] += t[i];
	}

	return l.join("\n")+"\n\n";
}