
// Определяем браузер пользователя
isNS4 = (document.layers) ? true : false;
isIE4 = (document.all && !document.getElementById) ? true : false;
isIE5 = (document.all && document.getElementById) ? true : false;
isNS6 = (!document.all && document.getElementById) ? true : false;


    function getelementbyid(myid) {
        if (isNS4){
            objElement = document.layers[myid];
        }else if (isIE4) {
            objElement = document.all[myid];
        }else if (isIE5 || isNS6) {
            objElement = document.getElementById(myid);
        };
        return(objElement);
    };


    function copyNode( node ) {
        try {
            var acopy = null;
            if ( node.nodeType == 1 ) {
                acopy = document.createElement(node.nodeName);
                if ( node.attributes ) {
                  var attrs = node.attributes;
                  for (var i = 0; i < attrs.length; i++) {
                      if (attrs[i].nodeValue) {
                          var at = document.createAttribute(attrs[i].nodeName);
                          at.nodeValue = attrs[i].nodeValue;
                          acopy.setAttributeNode(at);
                      };
                  };
                };
                for( var i = 0; i < node.childNodes.length; i++ ) {
                    var child = copyNode(node.childNodes.item(i));
                    if ( child != null ) {
                        acopy.appendChild(child);
                    };
                };
            } else if ( node.nodeType == 2 ) {
            } else if ( node.nodeType == 3 ) {
                acopy = document.createTextNode(node.nodeValue);
            };
            return acopy;
        } catch (e) {
            alert('Caught Exception 1: ' + e.description);
            return null;
        };
    };

    function seek_node( parent, searchName ) {
      if ( parent.nodeName == searchName )
        return parent;
      for ( var i = 0; i < parent.childNodes.length; i++ ) {
        var chilren_found = seek_node( parent.childNodes[i], searchName );
        if ( chilren_found != null )
          return chilren_found;
      }
      return null;
    }

    function seek_node_back( child, searchName ) {
      if ( child.nodeName == searchName )
        return child;
      if ( child.parentNode ) {
        var parent_found = seek_node_back( child.parentNode, searchName );
        if ( parent_found != null )
          return parent_found;
      }
      return null;
    }

    function seek_named_node( parent, attrName ) {
      if ( parent != null ) {
        if ( parent.nodeType == 1 ) {
          if ( parent.getAttribute('name') == attrName )
            return parent;
        };
        for ( var i = 0; i < parent.childNodes.length; i++ ) {
          var chilren_found = seek_named_node( parent.childNodes[i], attrName );
          if ( chilren_found != null )
            return chilren_found;
        };
        return null;
      } else
        return null;
    };

    function copy_form( target_id ) {
      try {
        var source = getelementbyid('sourceForm');
        var target = getelementbyid('target'+target_id);
        while( target.childNodes.length > 0 ) {
          target.removeChild(target.firstChild);
        };
        for( var i = 0; i < source.childNodes.length; i++ ) {
          var child = copyNode(source.childNodes.item(i));
          if ( child != null ) {
            target.appendChild(child);
          };
        };
        return false;
      } catch (e) {
        alert('Caught Exception: ' + e.description);
        return true;
      };
    };

    function set_forum_reply_form( target_post_id ) {
      try {
        var result = copy_form( target_post_id );
        if ( result )
          return true;
        var form_cont = getelementbyid('target'+target_post_id);
        var form = seek_node( form_cont, 'FORM' );
        var ppid = seek_named_node( form_cont, 'f_ParentPostID' );
        ppid.value = target_post_id;
        return false;
      } catch (e) {
          alert('Caught Exception: ' + e.description);
          return true;
      };
    }

    function vote(up, vcc, vm, vt, source) {
        try {
            var formid = 'fvcc'+vcc+'vm'+vm+'vt'+vt;
            var form = getelementbyid(formid);
            if ( form.voted.value == 'true' )
                return false;
        } catch (e) {
            return true;
        };
        var http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            };
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {};
            };
        };

        if (!http_request) {
//            alert('Giving up :( Cannot create an XMLHTTP instance');
            return true;
        };
        if ( up == true ) {
            query = '?up_x=1&vcc='+vcc+'&vm='+vm+'&vt='+vt;
        } else {
            query = '?down_x=1&vcc='+vcc+'&vm='+vm+'&vt='+vt;
        };

        http_request.onreadystatechange = function() { alertContents(http_request, up, vcc, vm, vt,source ); };
        http_request.open('GET', '/vote/'+query, true);
        http_request.send(null);
        return false;
    };


    function alertContents(http_request, up, vcc, vm, vt, source) {
        try {
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    var xmldoc = http_request.responseXML;
                    var status_node = xmldoc.getElementsByTagName('status').item(0);
                    if ( status_node.firstChild.data == '0' ) {
                      var formid = 'fvcc'+vcc+'vm'+vm+'vt'+vt;
                      var pointsid = 'pvcc'+vcc+'vm'+vm+'vt'+vt;
                      var upbtnid = 'upvcc'+vcc+'vm'+vm+'vt'+vt;
                      var downbtnid = 'downvcc'+vcc+'vm'+vm+'vt'+vt;
                      if ( up ) {
                        getelementbyid(upbtnid).className='nobtn';
                        getelementbyid(downbtnid).className='invisible';
                        getelementbyid(upbtnid).src='/imgs/rat_plus_set.gif';
                      } else {
                        getelementbyid(upbtnid).className='invisible';
                        getelementbyid(downbtnid).className='nobtn';
                        getelementbyid(downbtnid).src='/imgs/rat_minus_set.gif';
                      };
                      getelementbyid(formid).voted.value=true;
                      var points_node = xmldoc.getElementsByTagName('points').item(0);
                      var points_cont = getelementbyid(pointsid);
                      while( points_cont.childNodes.length > 0 ) {
                          points_cont.removeChild(points_cont.firstChild);
                      };
                      for( var i = 0; i < points_node.childNodes.length; i++ ) {
                          var child = copyNode(points_node.childNodes.item(i));
                          if ( child != null ) {
                                  points_cont.appendChild(child);
                          };
                      };
                    } else {
                      var comment_node = xmldoc.getElementsByTagName('comments').item(0);
                      alert( comment_node.firstChild.data );
                    };
                } else {
                    alert('Ошибка обработки запроса!');
                };
            };
        } catch( e ) {
            alert('Ошибка: ' + e.description);
        };
    };

    var vote_stat_id = 'votestat_indicator';

    function show_points_stat(vcc, vm, vt, ev, source) {
        var http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            };
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {};
            };
        };

        if (!http_request) {
//            alert('Giving up :( Cannot create an XMLHTTP instance');
            return true;
        };

        query = '?vcc='+vcc+'&vm='+vm+'&vt='+vt;

        http_request.onreadystatechange = function() { alertContentsStat(http_request, vcc, vm, vt, ev, source ); };
        http_request.open('GET', '/vote/stat/'+query, true);
        http_request.send(null);
        return true;
    }

    function alertContentsStat(http_request, vcc, vm, vt, ev, source) {
        try {
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    var xmldoc = http_request.responseXML;
                    var status_node = xmldoc.getElementsByTagName('status').item(0);
                    if ( status_node.firstChild.data == '0' ) {

                      var points_up   = xmldoc.getElementsByTagName('points_up').item(0).firstChild.data;
                      var points_down = xmldoc.getElementsByTagName('points_down').item(0).firstChild.data;

                      showStat( points_up, points_down, ev, source );
                    } else {
                      var comment_node = xmldoc.getElementsByTagName('comments').item(0);
                      alert( comment_node.firstChild.data );
                    };
                } else {
                    alert('Ошибка обработки запроса!');
                };
            };
        } catch( e ) {
            alert('Ошибка: ' + e.description);
        };
    };

    function showStat( up, down, ev, source )
    {
        var object = getelementbyid(vote_stat_id);
        if ( object == null ) return false;
        var   up_el = getelementbyid('votestat_indicator_up');
        var down_el = getelementbyid('votestat_indicator_down');
        var k = 10;
        var max = k*up;
        var mu = 1;
        if ( max < -k*down )
        {
            mu = 0;
            max = -k*down;
        }
        if ( max > 50 ) max = 50;
        if ( mu == 1 )
        {
            if ( up == 0 ) k = 10;
            else k = max / up;
        }
        else k = - max / down;
        if ( up_el != null )
            up_el.style.height = k*up;
        if ( down_el != null )
            down_el.style.height = -k*down;
        var pos = getAbsolutePos( source );
        var offset = 11;
        object.style.left = pos.x+1;
        object.style.top = pos.y+offset-k*up-18;
        object.style.display = 'block';
        var   up_el_val = getelementbyid('votestat_indicator_up_value');
        var down_el_val = getelementbyid('votestat_indicator_down_value');
        if ( up_el_val != null )
            up_el_val.firstChild.data = up;
        if ( down_el_val != null )
            down_el_val.firstChild.data = (-1*down);
    }

    function hideStat()
    {
        var object = getelementbyid(vote_stat_id);
        if ( object == null ) return false;
        object.style.display = 'none';
    }

    function getAbsolutePos( el )
    {
        var r = { x: el.offsetLeft, y: el.offsetTop };
        if (el.offsetParent)
                {
                var tmp = getAbsolutePos(el.offsetParent);
                r.x += tmp.x;
                r.y += tmp.y;
                }
        return r;
    }

// BB-CODE

function insert_bbcode(code, field_name, self ){
        var field = seek_node_back( self, 'FORM');
        field = seek_named_node(field,field_name);
        codes = "["+code+"]";
        codee = "[/"+code+"]";
        insertTag(field,codes,codee);
}

function insert_bbimg(field_name, self){
        var field = seek_node_back( self, 'FORM');
        field = seek_named_node(field,field_name);
        if (imgsrc = prompt('Введите адрес изображения','http://')){
                codes = "[img]"+imgsrc+"[/img]";
                insertTag(field,codes,'');
        }
}

function insert_bblink(field_name, self){
        var field = seek_node_back( self, 'FORM');
        field = seek_named_node(field,field_name);
        if (curSText(field) == ""){
                if (linksrc = prompt('Введите адрес ссылки','http://')){
                        if (linktext = prompt('Введите текст ссылки','Текст ссылки')){
                                codes = "[link="+linksrc+"]"+linktext+"[/link]";
                                insertTag(field,codes,'');
                        }
                }
        }else{
                if (linksrc = prompt('Введите адрес ссылки, на которую будет вести выделенный текст','http://')){
                        codes = "[link="+linksrc+"]";
                        codee = "[/link]";
                        insertTag(field,codes,codee);
                }
        }
}

function insertTag(field,codes,codee) {
        returned = false;
        field.focus();
        decrement=0;

        if (!document.all && !field.selectionStart){
                field.selectionStart = 1;
                decrement = 1;
        }

        if (field.selectionStart){
                var msg = field;
                var val = msg.value;
                msg.value = val.substring(0, msg.selectionStart-decrement) + codes + val.substring(msg.selectionStart-decrement, msg.selectionEnd) + codee + val.substring(msg.selectionEnd, val.length);
                //alert('1');
                return true;
        }

        if (typeof(document.selection) == 'undefined') {
                field.value = field.value + codes + codee;
                //alert('2');
                returned = false;
        } else {
                var rng = document.selection.createRange( );
                if (rng.text) {
                         document.selection.createRange().text = codes + rng.text + codee;
                         //alert('3');
                         returned = true;
                } else  {
                         field.value = field.value + codes + codee;
                         //alert('4');
                         returned = false;
                }
                field.focus();
        }
        return returned;
}

function curSText(field) {
        returned = "";
        field.focus();
        decrement = 0;

        if (!document.all && !field.selectionStart){
                field.selectionStart = 1;
                decrement = 1;
        }

        if (field.selectionStart){
                var msg = field;
                var val = msg.value;
                return val.substring(msg.selectionStart-decrement, msg.selectionEnd);
        }

        if (typeof(document.selection) == 'undefined') {
                returned = "";
        } else {
                var rng = document.selection.createRange( );
                if (rng.text) {
                         returned = rng.text;
                } else  {
                         returned = "";
                }
                field.focus();
        }
        return returned;
}