addEvent(window, 'load', init, false);

function init() {
    if (!document.getElementsByTagName) return;

    var formElements = document.getElementsByTagName('form');
    for (var i = 0; i < formElements.length; i++) {
        if (formElements[i].className.match(/\bcform\b/)) {
            addEvent(formElements[i], 'submit', submitComment, false);
        }
    }
}

function submitComment(e) {
    knackerEvent(e);

    show('ajax-comment');
    hide('c-error');
    var ps = '';
    var fs = new Array("comment[eid]", "comment[name]", "comment[email]", "comment[website]", "comment[body]", "comment[captcha]", "comment[captcha-id]");
    
    Field.disable("c-submit");

    fs.each(function(field) {
      Field.disable(field);
      val = Field.getValue(field).replace(/\?/g,"@63@").replace(/&/g,"@38@").replace(/#/g,"@35@").replace(/%/g,"@37@");
      ps += field + "=" + val + "&";
    });

    new Ajax.Request('/ajax.php?q=comment',
      {
        method:'post',
        parameters:ps,
        onComplete: function(transport) {
          var response = transport.responseText;

          if (response.search('div') != -1) {
              $('c-error').update("Comment added!");
              Effect.Appear('c-error');
              new Insertion.Top('comments-list', response)
              fs.each(function(field) {
                   Field.clear(field);
                   Field.enable(field);
              });
          } else {
              $('c-error').update(response);
              Effect.Appear('c-error');

              fs.each(function(field) {
                   Field.enable(field);
              });
          }
          hide('ajax-comment');
          Field.enable("c-submit");

        }
      } );
}

function changeCaptcha() {
    show('ajax-captcha');
    if(!document.all) { Effect.Fade('captcha-q'); }

    new Ajax.Updater('captcha-q', '/ajax.php?q=captcha', {
        method:'get',
        onComplete: function(){
           hide('ajax-captcha');
           Effect.Appear('captcha-q');
        }
    });
}

function show(id) {
    document.getElementById(id).style.visibility='visible';
}

function hide(id) {
    document.getElementById(id).style.visibility='hidden';
}

function addEvent(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}

function knackerEvent(eventObject) {
    if (eventObject && eventObject.stopPropagation) {
        eventObject.stopPropagation();
    }
    if (window.event && window.event.cancelBubble ) {
        window.event.cancelBubble = true;
    }
    
    if (eventObject && eventObject.preventDefault) {
        eventObject.preventDefault();
    }
    if (window.event) {
        window.event.returnValue = false;
    }
}
