var FOX2_POSTTREE = function() {
var inited = false,
newPostID = 'post_new',
newPostTmp = null,
newPostForm = null,
newPostStock = null,
newPostOpened = false;
var myEditors = {},
editorOpened = '';
var Init = function()
{        newPostTmp = qf_getbyid(newPostID);
newPostForm = qf_getbyid(newPostID+'_form');
newPostStock = qf_getbyid(newPostID+'_block');
if (!newPostTmp || !newPostForm || !newPostStock) {
QF_TIMERS.addOnLoad(Init);
return false; }
newPostStock.insertBefore(newPostTmp, null);
newPostStock.insertBefore(newPostForm, null);
QF_EFFECTS.ClearResizers(newPostTmp);
var btnSave = qf_getbyid('post_new_btn_save');
if (btnSave)
{            var btnCancel = document.createElement('button');
btnCancel.id = 'post_new_btn_canc';
btnCancel.innerHTML = 'Отмена';
btnCancel.onclick = function() { doCloseEditor(); return false; };
btnSave.parentNode.insertBefore(btnCancel, btnSave.nextSibling); }
QF_EFFECTS.Invisible(newPostID+'_block');
inited = true;
return true; }
var doRenameFormIDs = function(item, new_prefix)
{        if (item && item.childNodes)
{            if (item.id)
item.id = item.id.replace(/^post_new/, new_prefix);
for (var i=0; i < item.childNodes.length; i++)
doRenameFormIDs(item.childNodes[i], new_prefix); } }
var doSetFormValue = function(form, name, value)
{        var inputs = form.getElementsByTagName('input');
for (var i in inputs)
if (inputs[i].name && inputs[i].name == name) {
inputs[i].value = value;
return true; }
inputs = form.getElementsByTagName('textarea');
for (var i in inputs)
if (inputs[i].name && inputs[i].name == name && inputs[i].tagName && inputs[i].tagName.toLowerCase() == 'textarea') {
inputs[i].value = value;
return true; }
return false; }
var doEditorFocus = function(editorId)
{        var ta = qf_getbyid(editorId+'_text');
if (ta && ta.focus)
ta.focus(); }
var doOpenEditor = function(postId, doEdit)
{        var editorId = 'postEd'+postId+(doEdit ? '_edit' : '_answ');
if (!myEditors[editorId])
{            if (doEdit)
{                var divId = 'post'+postId;
var postDiv = qf_getbyid(divId);
var conts = qf_getbyid(divId+'_cont');
var butts = qf_getbyid(divId+'_butts');
var nConts = qf_getbyid(newPostID+'_cont');
var nButts = qf_getbyid(newPostID+'_butts');
nConts = nConts.cloneNode(true);
nButts = nButts.cloneNode(true);
doRenameFormIDs(nConts, editorId);
doRenameFormIDs(nButts, editorId);
conts.parentNode.insertBefore(nConts, conts);
butts.parentNode.insertBefore(nButts, butts);
var cloneF = newPostForm.cloneNode(true);
postDiv.parentNode.insertBefore(cloneF, postDiv);
cloneF.insertBefore(postDiv, cloneF.firstChild);
doSetFormValue(cloneF, 'post_id', postId);
doSetFormValue(cloneF, 'action', 'editpost');
QF_EFFECTS.Invisible(editorId+'_cont');
QF_EFFECTS.Invisible(editorId+'_butts');
myEditors[editorId] = {parts: [editorId+'_cont', editorId+'_butts'], hides: [divId+'_cont', divId+'_butts'], form: cloneF}; } else {
var divId = postId ? 'post'+postId : 'topic';
var postDiv = qf_getbyid(divId);
var stock = document.createElement('div');
stock.id = editorId+'_block';
var clone = newPostTmp.cloneNode(true);
var cloneF = newPostForm.cloneNode(true);
doSetFormValue(cloneF, 'post_id', postId);
doSetFormValue(cloneF, 'action', 'answer');
doRenameFormIDs(clone, editorId);
doRenameFormIDs(cloneF, editorId);
cloneF.insertBefore(clone, cloneF.firstChild);
stock.insertBefore(cloneF, null);
var parBlock = qf_getbyid(divId + '_answer');
if (parBlock && parBlock.insertBefore)
parBlock.insertBefore(stock, doEdit ? postDiv.nextSibling : null);
QF_EFFECTS.Invisible(editorId+'_block');
var tmp;
if (tmp = qf_getbyid(editorId+'_editblock'))
tmp.parentNode.removeChild(tmp);
myEditors[editorId] = {parts: [editorId+'_block'], hides: [], form: cloneF}; }
var btnCancel = qf_getbyid(editorId+'_btn_canc');
if (btnCancel)
btnCancel.onclick = function() { doCloseEditor(); return false; };
var ta = qf_getbyid(editorId+'_text');
if (ta)
QF_EFFECTS.SetResizebleElem(ta); }
if (editorId != editorOpened) {
doCloseEditor();
var i;
for (i = 0; i < myEditors[editorId].parts.length; i++) {
if (i == 0)
QF_EFFECTS.Show(myEditors[editorId].parts[i], 3, 100, function() {doEditorFocus(editorId);}); else
QF_EFFECTS.Show(myEditors[editorId].parts[i], 3, 100, function() {doEditorFocus(editorId);}); }
for (i = 0; i < myEditors[editorId].hides.length; i++)
QF_EFFECTS.Hide(myEditors[editorId].hides[i], 3); } else
doEditorFocus(editorId);
editorOpened = editorId;
return myEditors[editorId]; }
var doCloseEditor = function()
{        if (!editorOpened)
return false;
var editorId = editorOpened;
for (i = 0; i < myEditors[editorId].parts.length; i++) {
QF_EFFECTS.InitItem(myEditors[editorId].parts[i]); /* TODO: more accurate restoring of params */
QF_EFFECTS.Hide(myEditors[editorId].parts[i], 3); }
for (i = 0; i < myEditors[editorId].hides.length; i++)
QF_EFFECTS.Show(myEditors[editorId].hides[i], 3);
editorOpened = '';
return true; }
var doPrepPostNode = function(postId)
{        var divId = 'post'+postId;
var postDiv = qf_getbyid(divId);
var answBtn = qf_getbyid(divId+'_btn_answ');
if (answBtn)
answBtn.onclick = function() { FOX2_POSTTREE.OpenAnswer(postId); return false; };
var editBtn = qf_getbyid(divId+'_btn_edit');
if (editBtn)
editBtn.onclick = function() { FOX2_POSTTREE.OpenEdit(postId); return false; }; }
var doSetWaiting = function(postId)
{        var parId = postId ? 'post'+postId : 'topic';
var answBtn = qf_getbyid(parId + '_btn_answ');
var editBtn = qf_getbyid(parId + '_btn_edit');
var tmp = (editBtn) ? editBtn : answBtn;
if (tmp && tmp.parentNode && tmp.parentNode.insertBefore) {
if (editBtn)
getStyleObj(editBtn).display = 'none';
if (answBtn)
getStyleObj(answBtn).display = 'none';
var img = document.createElement('img');
img.id = parId + '_img_wait';
img.src = 'http://imfurry.ru/static/images/loading.png';
var stl = getStyleObj(img);
stl.width = '80px';
stl.height = '30px';
tmp.parentNode.insertBefore(img, tmp); } }
var doDropWaiting = function(postId) {
var parId = postId ? 'post'+postId : 'topic';
var answBtn = qf_getbyid(parId + '_btn_answ');
var editBtn = qf_getbyid(parId + '_btn_edit');
var img = qf_getbyid(parId + '_img_wait');
var tmp = (editBtn) ? editBtn : answBtn;
if (img && tmp && tmp.parentNode && tmp.parentNode.removeChild) {
if (editBtn)
getStyleObj(editBtn).display = '';
if (answBtn)
getStyleObj(answBtn).display = '';
tmp.parentNode.removeChild(img); } }
var doOpenEdit = function(postId, data, onOpen)
{        var divId = 'post'+postId;
var editor = doOpenEditor(postId, true);
doSetFormValue(editor.form, 'post_text', data['o_text']); }
var doCloseEdit = function(postId, onClose) { }
var pub = {        PrepPosts: function(posts)
{            if (!posts.length)
return;
for (var i in posts)
doPrepPostNode(posts[i]); },
OpenAnswer: function(postId)
{            if (!inited && !Init())
return Alert('Пожалуйста, дождитесь завершения загрузки страницы');
doOpenEditor(postId); },
OpenEdit: function(postId) {
if (!inited && !Init())
return Alert('Пожалуйста, дождитесь завершения загрузки страницы');
if (editorOpened)
doCloseEditor();
var handle = function(status, data) {
doDropWaiting(postId);
if (status != 200)
alert(data); else
doOpenEdit(postId, data); }
if (QF_AJAX.Query('ptree_getpost', {post_id: postId}, handle))
doSetWaiting(postId); },
SaveAnswer: function() {} };
return pub; }();

