/*
    Hierarchic comments. JavaScript implementation part.
    Property: bigmir)net
    Author: Alexey Karpinskiy (alex_kiy@bigmir.net)
    Release date: november 2007
*/

// Global structure with settings. Included in source code to preserve compatibility and save js module integrity
// May be redeclared in comment's html source.
// Can be cutted off here and simply placed in source html output in script tags

function _(id) {
    return document.getElementById(id) ? document.getElementById(id) : null;
}

function f_clientWidth() {
    return f_filterResults (
        window.innerWidth ? window.innerWidth : 0,
        document.documentElement ? document.documentElement.clientWidth : 0,
        document.body ? document.body.clientWidth : 0
    );
}
function f_clientHeight() {
    return f_filterResults (
        window.innerHeight ? window.innerHeight : 0,
        document.documentElement ? document.documentElement.clientHeight : 0,
        document.body ? document.body.clientHeight : 0
    );
}
function f_scrollLeft() {
    return f_filterResults (
        window.pageXOffset ? window.pageXOffset : 0,
        document.documentElement ? document.documentElement.scrollLeft : 0,
        document.body ? document.body.scrollLeft : 0
    );
}
function f_scrollTop() {
    return f_filterResults (
        window.pageYOffset ? window.pageYOffset : 0,
        document.documentElement ? document.documentElement.scrollTop : 0,
        document.body ? document.body.scrollTop : 0
    );
}

function f_filterResults(n_win, n_docel, n_body) {
    var n_result = n_win ? n_win : 0;
    if (n_docel && (!n_result || (n_result > n_docel)))
        n_result = n_docel;
    return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

function Find_AbsoluteDocObjCoords(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft;
        curtop = obj.offsetTop;
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }
    }
    return [curleft, curtop];
}
function Find_AbsoluteDocObjCoord_X(obj) {
    var coords = Find_AbsoluteDocObjCoords(obj);
    return coords[0];
}
function Find_AbsoluteDocObjCoord_Y(obj) {
    var coords = Find_AbsoluteDocObjCoords(obj);
    return coords[1];
}

function Trim_Str (str) {
    if (window.RegExp && str) {
        str = str.replace(/^s+|\s+$/g, '');
    }
    return str;
}

var isBrowsMSIE = document.attachEvent != null;
var isBrowsGecko = !document.attachEvent && document.addEventListener;

function Get_ElementCurrentStyle(element, CssStyleProperty) {
    if (!element) return false;
    if (element.currentStyle) {
        return element.currentStyle[CssToJavascriptStyle(CssStyleProperty)];
    }else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(element, '');
        return compStyle.getPropertyValue(CssStyleProperty);
    }else {
        return '';
    }
}

function CssToJavascriptStyle(CssProperty) {
    var stringArray = CssProperty.toLowerCase().split('-');
    if (stringArray.length == 1) {
        return stringArray[0];
    }
    var ret = (CssProperty.indexOf("-") == 0) ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1) : stringArray[0];
    for (var i = 1; i < stringArray.length; i++) {
        var s = stringArray[i];
        ret += s.charAt(0).toUpperCase() + s.substring(1);
    }
    return ret;
};

function browseIt() {
    this.ver = navigator.appVersion.toLowerCase();
    this.agent = navigator.userAgent.toLowerCase();
    this.vendor = (navigator.vendor) ? navigator.vendor.toLowerCase() : '';
    this.dom = document.getElementById ? 1 : 0;
    this.opera = (this.agent.indexOf("opera")>-1 && document.getElementById) ? 1 : 0;
    this.opera7 = (this.opera && parseInt(navigator.appVersion) >= 7) ? 1 : 0;
    this.safari = (this.agent.indexOf("applewebkit")>-1 || this.vendor.indexOf("apple")>-1) ? 1 : 0;
    this.ie = (/*this.ver.indexOf("msie")>-1 && */this.dom &&  ('undefined' !== typeof window.onbeforeunload) && !this.safari && !this.opera) ? 1 : 0;
    this.macOS = (this.agent.indexOf("mac") > -1) ? 1 : 0;
    this.mac = (this.macOS && parseInt(this.ver) >= 7) ? 1 : 0;
    this.moz = (this.agent.indexOf("gecko")>-1 && !this.safari) ? 1 : 0;
    this.ns6 = (this.dom && this.agent.indexOf("netscape")>-1 && parseInt(this.ver) >= 5) ? 1 : 0;
    this.b = (this.ie || this.ns6 || this.opera7 || this.mac || this.moz || this.safari || this.dom);
    return this;
}

function Attach_EventListener(element, action, callback, capture) {
    capture = (capture) ? true : false;
    element = (element) ? element : document;
    if (isBrowsMSIE && element.attachEvent) {
        element.attachEvent("on"+action, callback);
    }
    else if (isBrowsGecko && element.addEventListener) {
        element.addEventListener(action, callback, capture);
    }
}

function Change_LayerVisibility(id, forceOpen, forceClose) {
    var layer = _(id); if (!layer) return false;

    if ((Check_LayerVisibility(layer) === 'hidden' && !forceClose) || forceOpen) {
        //layer.style.visibility = 'visible';
        layer.style.display = 'block';
    }
    else if ((Check_LayerVisibility(layer) === 'visible' && !forceOpen) || forceClose) {
        //layer.style.visibility = 'hidden';
        layer.style.display = 'none';
    }
    return false;
}

function Check_LayerVisibility(layer) {

    if (typeof(layer) == 'string'){layer = _(layer);}
    else if(typeof(layer) != 'object') {return 'undef';}

    //if (layer.style.visibility == '') layer.style.visibility = Get_ElementCurrentStyle(layer, 'visibility');
    if (layer.style.display == '') layer.style.display = Get_ElementCurrentStyle(layer, 'display');

    //if (layer.style.visibility == 'hidden' && layer.style.display == 'none') {
    if (layer.style.display == 'none') {
        return 'hidden';
    }
    //else if (layer.style.visibility == 'visible' && layer.style.display == 'block') {
    else if (layer.style.display == 'block') {
        return 'visible';
    }
    return 'undef';
}

if(typeof(window.commJsGlVar) == 'undefined') {

    window.commJsGlVar = {
        bmImgServer : 'http://i.bigmir.net/',
        commCaptchaWebPath : 'http://main.bigmir.net/include/c_captcha.inc.php',
        commScriptFullUrl : window.location.protocol + '//' + window.location.host + window.location.pathname + '/',
        commTplIdPrefix : 'CMNT_ID_',
        commTplAnchorPrefix : 'CMNT_ANCHOR_',
        commNullId : 0,
        commID : 0,
        commErrorMsg : false
    };
}

// --------------- Ajax loader ------

function commHttpLoad(vars) {
    if (vars) { 
    	vars[vars.length] = {
    		'name'	: 'ajaxify', 
    		'value'	: '1'
   		};
   		if( typeof window.commJsGlVar.table_alias != 'undefined' ) {
	    	vars[vars.length] = {
	    		'name'	: 'table_alias', 
	    		'value'	: window.commJsGlVar.table_alias
	   		};   		
	    	vars[vars.length] = {
	    		'name'	: 'id', 
	    		'value'	: window.commJsGlVar.id
	   		};
   		}
	}
    var initCom = false;
	var bt_message = '';
    var q = '';
    for (k in vars) {
        if(vars[k]['name'] == 'addcomment') {
            initCom = true;
        }
        q += vars[k]['name'] + '=' + vars[k]['value'] + '&';
    }
    q += 'sended';
    Change_LayerVisibility('send_btns', false, true);
    Change_LayerVisibility('send_indicator', true, false);
    Change_LayerVisibility('imgLoaderStatus_1', true, false);
    Change_LayerVisibility('imgLoaderStatus_2', true, false);

    function wrupper(res) {
        eval("var responsedata = (" + res.responseText + ")");
        $('comment_header_layer').innerHTML = responsedata.body;
        commJsGlVar.commErrorMsg = Boolean(responsedata.errorMsg);
        commJsGlVar.commID = parseInt(responsedata.ID);
        initComments(Boolean(!initCom));
        Change_LayerVisibility('send_btns', true, false);
        Change_LayerVisibility('send_indicator', false, true);
        Change_LayerVisibility('imgLoaderStatus_1', false, true);
        Change_LayerVisibility('imgLoaderStatus_2', false, true);
    }

    new ajax(commJsGlVar.commScriptFullUrl, {postBody: q, onComplete: wrupper});
    return false;
}

// captcha reloader
function reloadCommCaptcha() {
/*
    captcha_IMG = _('captcha_img');
    captcha_IMG.src = commJsGlVar.commCaptchaWebPath + '?' + Math.random();
*/

    var capObj = new UserHttpRequest([{'rand':'', 'value':Math.random()}], commJsGlVar.commCaptchaWebPath);
    capObj.onSate_Complete = function() {

        var captcha_cont = _('captcha_container');

        if(captcha_cont && capObj.httpRequest.responseJS.body) {

            captcha_cont.innerHTML = capObj.httpRequest.responseJS.body;

        }
    }
    capObj.Load(true);
    return false; // should return false
}

// text symbol counter
function limitInputText(input, maxlen, left) {
    inputstr = input.value;
    strlen = inputstr.length;
    if (strlen > maxlen) {
        input.value = inputstr.substring(0, maxlen);
    }
    if (left = _(left)) {
        if (left.tagName == 'INPUT') {
            left.value = maxlen - input.value.length;
        }
        else {
            left.innerHTML = maxlen - input.value.length;
        }
    }
    return true;
}

// clear/update name-field
function clearUNameBoxInput(obj, clear, text) {
    if (clear && (obj.value == text)) obj.select();
    else if (obj.value == '') obj.value = text;
}

// form checker
function checkComForm() {
    var cmnt_text = _('cmnt_text');
    if (cmnt_text && !Trim_Str(cmnt_text.value)) {
        alert('Введите текст комментария'); return false;
    }
    var captcha_msg = _('msg_captch');
    if (captcha_msg && !Trim_Str(captcha_msg.value)) {
        alert('Введите защитный код'); return false;
    }
    return true;
}

function proceedComSubmitPresident() {

    var form_Obj = _('commAddForm');

	var select = document.getElementById('president_select');
	var select_l = select.getElementsByTagName('option');
	
	var ItemValue = 0;
	
	for (i=0; i<document.getElementById('president_select').length; i++)
    {
    	if (select_l[i].selected == true)
    	{
    		ItemValue = select_l[i].value; 
    	}
    }

    if (form_Obj && checkComForm()) {
        var serverParams = new Array(
            {name:'addcomment', value:'true'},
            {name:'cmnt_text', value: encodeURIComponent(Trim_Str(form_Obj.cmnt_text.value))}, // send cyrilic text via JsHttpTransport
            {name:'ID', value: form_Obj.ID.value}
        );
        if(form_Obj.userName) {
            serverParams[serverParams.length] = {name:'userName', value: encodeURIComponent(Trim_Str(form_Obj.userName.value))};
        }
        if(form_Obj.msg_captch) {
            serverParams[serverParams.length] = {name:'msg_captch', value: Trim_Str(form_Obj.msg_captch.value)};
            if(form_Obj.msg_captcha_rndSeq) {
                serverParams[serverParams.length] = {name:'msg_captcha_rndSeq', value: Trim_Str(form_Obj.msg_captcha_rndSeq.value)};
            }
        }
    //  if (form_Obj.ID.value != 0) {
            if(form_Obj.displayModeCurrent) {
                serverParams[serverParams.length] = {name:'display', value:form_Obj.displayModeCurrent.value};
            }
            if(form_Obj.currentPage) {
                serverParams[serverParams.length] = {name:'p', value: form_Obj.currentPage.value};
            }
            if(form_Obj.sortMode) {
                serverParams[serverParams.length] = {name:'sort', value: form_Obj.sortMode.value};
            }
            if (parseInt(ItemValue) != 0){
            	serverParams[serverParams.length] = {name:'ItemValue', value: ItemValue};
            } 
    //  }

        return commHttpLoad(serverParams);
    }
    return false;
}


// form data collector
function proceedComSubmit() {

    var form_Obj = _('commAddForm');

    if (form_Obj && checkComForm()) {
        var serverParams = new Array(
            {name:'addcomment', value:'true'},
            {name:'cmnt_text', value: encodeURIComponent(Trim_Str(form_Obj.cmnt_text.value))}, // send cyrilic text via JsHttpTransport
            {name:'ID', value: form_Obj.ID.value}
        );
        if(form_Obj.userName) {
            serverParams[serverParams.length] = {name:'userName', value: encodeURIComponent(Trim_Str(form_Obj.userName.value))};
        }
        if(form_Obj.msg_captch) {
            serverParams[serverParams.length] = {name:'msg_captch', value: Trim_Str(form_Obj.msg_captch.value)};
            if(form_Obj.msg_captcha_rndSeq) {
                serverParams[serverParams.length] = {name:'msg_captcha_rndSeq', value: Trim_Str(form_Obj.msg_captcha_rndSeq.value)};
            }
        }
    //  if (form_Obj.ID.value != 0) {
            if(form_Obj.displayModeCurrent) {
                serverParams[serverParams.length] = {name:'display', value:form_Obj.displayModeCurrent.value};
            }
            if(form_Obj.currentPage) {
                serverParams[serverParams.length] = {name:'p', value: form_Obj.currentPage.value};
            }
            if(form_Obj.sortMode) {
                serverParams[serverParams.length] = {name:'sort', value: form_Obj.sortMode.value};
            }
    //  }

        return commHttpLoad(serverParams);
    }
    return false;
}

// move scroll to given object
function adjustScrollPosition(comLayer) {
    if (typeof(comLayer) == 'string') {
        comLayer = _(comLayer);
        //comLayer = document.getElementById(comLayer);
    }
    if(comLayer && typeof(comLayer) == 'object') {
        var coordX = f_scrollLeft();
        var coordY = Find_AbsoluteDocObjCoord_Y(comLayer);
        if(coordY > 0) scrollTo(coordX, coordY);
    }
}

// coment form container and modifier class
function hierarchicComment(){

    this.node = null,

    this.containerID = null, // contains comment's ID with opened form. Otherwise = null.

    this.getFormNode= function() {
        if(this.node != null && this.node.nodeType > 0) {
            var form = this.node.getElementsByTagName('FORM')[0];
            return form;
        }
        else {
            return null;
        }
    },

    this.modifyCommFormNode = function(ID) {
        var form = this.getFormNode();
        if(form) {
            // fix for safari. do not use "for(x in array)" syntax
            if(typeof(form.ID) == 'undefined') {
                for(var i=0; i<form.length; i++) {
                    if(form[i].name == 'ID') {
                        form[i].value = ID;
                        break;
                    }
                }
            } else {
                form.ID.value = ID;
            }
        }

        this.initCancelCommentButton(ID); // init cancel button action

        return this.node;
    },

    this.initCancelCommentButton = function(ID) {

        var form = this.getFormNode();

        var formCancelButtom = null;

        if(typeof(form.cancel_comment) == 'undefined') {
            for(var i=0; i<form.length; i++) { // fix for safari
                if(form[i].name == 'cancel_comment') {
                    formCancelButton = form[i];
                    break;
                }
            }
        }
        else {
            formCancelButton = form.cancel_comment;
        }

        if(formCancelButton !== null) {

            var onclick_action = 'changeLayerVisibility(\''+ID+'\');';

            if(ID == commJsGlVar.commNullId) {
                onclick_action += 'changeAddHideText(\'up\')';
            }

            var br = new Object(); br.ie = 0;
            if(typeof(window.browseIt) != 'undefined') {
                br = new browseIt();
            }

            if(br.ie) {
                DOM.setNodeAttributeValue(formCancelButton, 'onclick', function(){eval(onclick_action)});
            }
            else {
                DOM.setNodeAttributeValue(formCancelButton, 'onclick', onclick_action);
            }
        }

        return false;
    }
}

function attachJsActions() {

    var comLayer = _('comment_threads');

    if(comLayer) {

        var rel_value = '';

        var tags_a = comLayer.getElementsByTagName('A');
        var tags_a_length = tags_a.length;
        
//      alert(tags_a_length);
        
        for(var i=0; i < tags_a_length; i++) {

            if(rel_value = Trim_Str(tags_a[i].rel)) {

                var matching = getRelValueDesc(rel_value);

                var rel_type = matching[0];
                var commID = matching[1];

                switch(rel_type) {

                    case 'answer': {
                        Attach_EventListener(tags_a[i], 'click', commLinkAnswerCallback);
                        commCancelDefaultAction(tags_a[i], rel_type, commID);
                        break;
                    }
                    case 'del': {
                        Attach_EventListener(tags_a[i], 'click', commLinkDelClearCallback);
                        commCancelDefaultAction(tags_a[i], rel_type, commID);
                        break;
                    }
                    case 'clear': {
                        Attach_EventListener(tags_a[i], 'click', commLinkDelClearCallback);
                        commCancelDefaultAction(tags_a[i], rel_type, commID);
                        break;
                    }
                    case 'complain': {
                        Attach_EventListener(tags_a[i], 'click', commLinkDelClearCallback);
                        commCancelDefaultAction(tags_a[i], rel_type, commID);
                        break;
                    }
                    case 'moderate': {
                        Attach_EventListener(tags_a[i], 'click', commLinkDelClearCallback);
                        commCancelDefaultAction(tags_a[i], rel_type, commID);
                        break;
                    }
                }
            }
        }

        // safari fix[remove noscript contents from received html in ajax session]
        var browser = browseIt();
        if(browser.safari) {
            var tags_noscript = comLayer.getElementsByTagName('NOSCRIPT');
            for(var j=0; j < tags_noscript.length; j++) {
                DOM.cutNodeFirstChild(tags_noscript[j]);
            }
        }

    }
}

function commCancelDefaultAction(a_obj, rel_type, commID) {

    // good manner to use cancelEventPropagation but unfortunately it failed
    if(typeof(a_obj) == 'object' && a_obj.href && commID) {
        a_obj.href = 'javascript:// ' + rel_type + ' ' + commID;
    }
    return false;
}


// returns [rel_desc, id]
function getRelValueDesc(rel_value) {

    var matching = [null, null];

    if(rel_value && typeof(rel_value) == 'string') {

        // answer link
        if(matching = rel_value.match(/^comm_answer_(\d+)$/i)) {
            matching[0] = 'answer';
            matching[1] = parseInt(matching[1]);
        }
        // del link
        else if(matching = rel_value.match(/^comm_del_(\d+)$/i)) {
            matching[0] = 'del';
            matching[1] = parseInt(matching[1]);
        }
        // clear link
        else if(matching = rel_value.match(/^comm_clear_(\d+)$/i)) {
            matching[0] = 'clear';
            matching[1] = parseInt(matching[1]);
        }
        // complain link
        else if(matching = rel_value.match(/^comm_complain_(\d+)$/i)) {
            matching[0] = 'complain';
            matching[1] = parseInt(matching[1]);
        }
        // moderate link
        else if(matching = rel_value.match(/^comm_moderate_(\d+)$/i)) {
            matching[0] = 'moderate';
            matching[1] = parseInt(matching[1]);
        }
    }
    return matching;
}

// --- click link callbacks declaration ---

function getEventSrcElement(event) {
    // define source caller object
    event = (event) ? event : window.event;
    return (event.target) ? event.target : event.srcElement;
}

// returns "a"-link relative info [action, id]
function getEventSrcElementRelInfo(event) {

    var element = getEventSrcElement(event);

    var matching = [null, null];

    if(element.rel) matching = getRelValueDesc(element.rel);

    return matching;
}

function commLinkAnswerCallback(event) {
    /*if need to open show form by id - showId */
    var relInfo = getEventSrcElementRelInfo(event);
    var relID = relInfo[1];
    var aID = 'CMNT_ID_' + relID;
    if( document.getElementById( 'answ_' + aID ) ) {
        var oldStyle = document.getElementById( 'answ_' + aID ).style.display;
        newStyle = oldStyle == 'block' ? "none" : "block";
        hideAllCommForms();
        document.getElementById('answ_' + aID).style.display = newStyle;
        changeLayerVisibility(relID);
    }
}

function commLinkDelClearCallback(event) {

    var relInfo = getEventSrcElementRelInfo(event);

    var relAction = relInfo[0];
    var relID = relInfo[1];

    var httpGetValue = '';
    var userWarnMessage = '';

    switch(relAction) {
        case 'del': {
            httpGetValue = 'delcomment';
            userWarnMessage = 'Удалить комментарий '+relID+'?';
            break;
        }
        case 'clear': {
            httpGetValue = 'setdeftext';
            userWarnMessage = 'Очистить текст комментария '+relID+'?';
            break;
        }
        case 'moderate': {
            httpGetValue = 'setmoderated';
            userWarnMessage = 'Модерировать комментарий '+relID+', тем самым подтвердив его соответствие с требованиями?';
            break;
        }
        default: {
            return false;
        }
    }

    if (window.confirm(userWarnMessage)) {

        var hJsHierarchComObj = initGetCommFormContainerObj();

        if(hJsHierarchComObj) {

            var form = hJsHierarchComObj.getFormNode();

            var p = (form.currentPage) ? form.currentPage.value : 0;
            var sorting = (form.sortMode) ? form.sortMode.value : '';

            return commHttpLoad(
                [
                    {name: httpGetValue, value: true},
                    {name: 'ID', value: relID},
                    {name: 'p', value: p},
                    {name:'sort', value: sorting}
                ]
            );
        }
    }
    else {
        return false;
    }
}

/* hide/show main null-level comment form */
function changeAddHideText(direction) {

    var direction = (direction == 'up') ? 'up' : 'down';
    var opposite_derection = (direction == 'up') ? 'down' : 'up';

    var action = (direction == 'up') ? (phrase_open_form) : (phrase_close_form);
    var arrowImg = (direction == 'up') ? '' : 'dropdown_open';
    var forceOpen = (direction == 'up') ? false : true;
    var forceClose = (direction == 'up') ? true : false;

    var cContrL = _('cControllerLayer');

    if( cContrL !== null ) {
        cContrL.innerHTML = 
            '<a class="'+arrowImg+'" href="javascript://" onclick="javascript:changeAddHideText(\''+opposite_derection+'\');" title="'+action+'"><b>'
                + action + '</b>&nbsp;'
                + '<img class="ic_dropdown" src="'+commJsGlVar.bmImgServer+'/static/img/spacer.gif" width="5" height="5" alt="'+action+'" title="'+action+'" />'
            + '</a>';
    }
    

    if(direction == 'down') {
        changeLayerVisibility(commJsGlVar.commNullId);
        hideAllCommForms();
//        _('fonthack').style.fontSize = '';
    }
    else if(direction == 'up') { // close comment form only if it opened in null comment place (top)hideAllCommForms();
        var hJsHierarchComObj = initGetCommFormContainerObj();
        var nullLayerObj = _(commJsGlVar.commTplIdPrefix + commJsGlVar.commNullId);
        if(nullLayerObj && typeof(hJsHierarchComObj) == 'object' && hJsHierarchComObj.containerID === commJsGlVar.commNullId) {
            changeLayerVisibility(commJsGlVar.commNullId);
        }
    }

    return false;
}

/* comment page initialization */
function initComments(forceScrollAdjust) {
    attachJsActions();
    initGetCommFormContainerObj(true);
    if(commJsGlVar.commErrorMsg) {
        (commJsGlVar.commID == commJsGlVar.commNullId) ? changeAddHideText('down') : changeLayerVisibility(commJsGlVar.commID);
    }
    else {
        changeAddHideText('up');
    }
    if(forceScrollAdjust === true || commJsGlVar.commErrorMsg) {
        adjustScrollPosition(commJsGlVar.commTplAnchorPrefix + commJsGlVar.commID);
    }
    return false;
}

// creates an "hierarchicComment"-object and init it if necessary
// returns created comm-container object
function initGetCommFormContainerObj(forceInit) {

    if(typeof(window.jsHierarchComObj) == 'undefined') {
        window.jsHierarchComObj = new hierarchicComment();
        forceInit = true;
    }
    if(forceInit) {
        var nullFormContainer = _(commJsGlVar.commTplIdPrefix + commJsGlVar.commNullId);
        if(nullFormContainer) {
            window.jsHierarchComObj.node = DOM.cutNodeFirstChild(nullFormContainer);
            window.jsHierarchComObj.containerID = null;
        }
    }
    return window.jsHierarchComObj;
}

/*
 main form visibility operator
*/
function changeLayerVisibility(commID) {

    var xLayerObj = _(commJsGlVar.commTplIdPrefix + commID);
    var hJsHierarchComObj = initGetCommFormContainerObj();
    if(xLayerObj && typeof(hJsHierarchComObj) == 'object') {

        // close comment form in source place
        if( hJsHierarchComObj.containerID == commID ) {
            if( xLayerObj.hasChildNodes() ) {
                hJsHierarchComObj.node = DOM.cutNodeFirstChild(xLayerObj);
                hJsHierarchComObj.containerID = null;
            }
        }
        else { // insert comment form into given comment ID thread

            if(hJsHierarchComObj.containerID !== null) { // form is opened. close it first

                var xPrevLayerObj = _(commJsGlVar.commTplIdPrefix + hJsHierarchComObj.containerID);

                if(xPrevLayerObj) {
                    hJsHierarchComObj.node = DOM.cutNodeFirstChild(xPrevLayerObj);
                    hJsHierarchComObj.containerID = null;
                }
            }

            DOM.appendNode(xLayerObj, hJsHierarchComObj.modifyCommFormNode(commID));
                        hJsHierarchComObj.containerID = commID;
//            _('fonthack').style.fontSize = '1.0em';
        }

        // close null comment form and change link text
        if (commID != commJsGlVar.commNullId) {
            changeAddHideText('up');
        }
    }
    return false;
}

/* hide all comments form */
function hideAllCommForms(){
    var clasObj = getElementsByClassName('comment_header_layer', 'insideform'); 
    for(i=0; i< clasObj.length; i++){
        clasObj[i].style.display="none";
    }
}

function getElementsByClassName(id,clsName){
  var blockID=document.getElementById(id);
  var aelem=[];
  oaelem=blockID.getElementsByTagName("*");
  for(var i=0;i<oaelem.length;i++){
    if (oaelem[i].className == clsName ){
      aelem[aelem.length]=oaelem[i];
    }
  }
  return aelem;
}

function showCommentsToThisPage(page) {
    if(!readCookie('showComments') || readCookie('showComments') != page)   {
        createCookie('showComments', page, 5);
        commHttpLoad([{name:'sort', value:'DESC'}]);
    }
}

function switchCommentsPerPage(rowsonpage) {
    commHttpLoad([{name:'rowsonpages', value:parseInt(rowsonpage)}]);
}

function chgCaptch() {
    if (_("capimg")) {
        _("capimg").src = '/exec/captcha.php?'+ (new Date()).getTime();
    }
    return false;
}

function hideComments() {
	var Aj = new XHConn();
	Aj.connect("/exec/comments_trigger.php","POST",'cs=0',
	function (res) {
		if (res && res.responseText){
			changeAddHideText('up');	
			_('all_cmnts_block').style.display = 'none';
			_('cControllerLayer').style.display = 'none';
			_('comnt_show_link').innerHTML = phrase_comments_showup;
			_('comnt_show_link').onclick = function() { showComments() };
		}
	}
	);
	return false;
}

function showComments() {
	_('imgLoaderStatus_1').style.display = 'block';
	var Aj = new XHConn();
	Aj.connect("/exec/comments_trigger.php","POST",'cs=1',
	function (res) {
		if (res && res.responseText){
			window.location.href = window.location.href;
		}
	}
	);
	return false;
}
