function $create(name){
    return document.createElement(name);
}

// Provide the XMLHttpRequest class for IE 5.x-6.x:
if( typeof XMLHttpRequest == "undefined" ) XMLHttpRequest = function() {
  try { return new ActiveXObject("Msxml2.XMLHTTP.6.0") } catch(e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP.3.0") } catch(e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP") } catch(e) {}
  try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
  throw new Error( "This browser does not support XMLHttpRequest." )
};


function submitTest(evt){

var buff

// process event here, handles both IE and Mozilla event models

evt = (evt) ? evt : ((window.event) ? window.event : "")

if (evt) {

elem = (evt.target) ? evt.target : evt.srcElement;

URLString = document.test.root.value + "xmlhttp.asp";

//alert(URLString);

 

http.open("POST", URLString, true);

http.onreadystatechange = processReqChange;

http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

http.send("action=submitTest");

}

}


function stop_event(e){
    //e.cancelBubble is supported by IE - this will kill the bubbling process.
	e.cancelBubble = true;
	e.returnValue = false;

	//e.stopPropagation works only in Firefox.
	if (e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
	}
    return false
}

function getEventAndTarget(e){
    var event = e || window.event;
    var target = event.target || event.srcElement;
    
    return [event, target];
}

function listen(evnt, elem, func) {
    if (elem.attachEvent) { // IE DOM
        var r = elem.attachEvent("on"+evnt, func);
        return r;
    }
    else if (elem.addEventListener){// W3C DOM
        elem.addEventListener(evnt,func,false);
    }
    else{
        window.alert('I\'m sorry Dave, I\'m afraid I can\'t do that.');
    }
}
// Use: listen("event name", elem, func);

function callbackFunction(id)
{
  if (currentreq.readyState != 4)
    return;

  var result = currentreq.responseText;

  var _result = null
  try {
  eval('_result = '+result);
  }
  catch(e){
      //console.error(e)
  }
  
  if(_result && _result.type == 'success'){
      
    message = $create('div');
    message.className = 'xhrmessage';
    message.innerHTML = _result.data.message;
    currentform.parentNode.replaceChild(message, currentform )
  }
  else if(_result && _result.type == 'failure'){
    alert(_result.data.message);
    curdisabled.removeAttribute('disabled')
  }
  //console.log(_result)
  /* if you've returned javascript instead of xml or text, 
  you can eval(result) to access the javascript variables returned.
  */
}
/* 
import httplib, mimetypes

def post_multipart(host, selector, fields, files):
    """
    Post fields and files to an http host as multipart/form-data.
    fields is a sequence of (name, value) elements for regular form fields.
    files is a sequence of (name, filename, value) elements for data to be uploaded as files
    Return the server's response page.
    """
    content_type, body = encode_multipart_formdata(fields, files)
    h = httplib.HTTP(host)
    h.putrequest('POST', selector)
    h.putheader('content-type', content_type)
    h.putheader('content-length', str(len(body)))
    h.endheaders()
    h.send(body)
    errcode, errmsg, headers = h.getreply()
    return h.file.read()

def encode_multipart_formdata(fields, files):
    """
    fields is a sequence of (name, value) elements for regular form fields.
    files is a sequence of (name, filename, value) elements for data to be uploaded as files
    Return (content_type, body) ready for httplib.HTTP instance
    """
    BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$'
    CRLF = '\r\n'
    L = []
    for (key, value) in fields:
        L.append('--' + BOUNDARY)
        L.append('Content-Disposition: form-data; name="%s"' % key)
        L.append('')
        L.append(value)
    for (key, filename, value) in files:
        L.append('--' + BOUNDARY)
        L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename))
        L.append('Content-Type: %s' % get_content_type(filename))
        L.append('')
        L.append(value)
    L.append('--' + BOUNDARY + '--')
    L.append('')
    body = CRLF.join(L)
    content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
    return content_type, body

def get_content_type(filename):
    return mimetypes.guess_type(filename)[0] or 'application/octet-stream'




*/
var currentreq = null;
var currentform = null

function textarea_keypress(ev, id){
    var et = getEventAndTarget(ev);
    var event = et[0];
    var target = et[1];
    
    
    //console.log(ev)
    
    if(event.keyCode == 13 && event.ctrlKey){
        submit_comment_form(ev, id)
    }
}


var curdisabled = null;
function submit_comment_form(ev, id){
    var et = getEventAndTarget(ev);
    var event = et[0];
    var target = et[1];
    
    curdisabled = target;
    curdisabled.setAttribute('disabled','')
    //console.log(event);
    
    var parent = target;
    while(parent.tagName != 'FORM'){
        parent = parent.parentNode;
    }
    
    currentform = parent;
    
    var url = parent.action
    // text value
    var value = parent.getElementsByTagName('textarea')[0].value;
    
    
    if(value.length == 0){
        alert(replyformbuttonmessageer1);
        return stop_event(ev);
    }
    else if(value.length < 4){
        alert(replyformbuttonmessageer2.replace('%s',4));
        return stop_event(ev);
    }
    
    
    
    var req = new XMLHttpRequest();  
    req.open("POST", url, true);  
   //// set headers and mime-type appropriately  
   
   
    req.setRequestHeader("Content-Length", value.length);
    req.onreadystatechange = function(e){
        callbackFunction(e, id)
    };
    
    var body = "";
    var boundary = "proto" + Math.random();
    
    req.setRequestHeader("Content-Type", 'multipart/form-data; boundary='+boundary);
    body += "--" + boundary + "\n";
    body += 'Content-Disposition: form-data; name="body"\n';
    body += "\n";
    body += value + "";
    body += "\n";
    body += "--" + boundary + "--";
    body += "\n";
    currentreq = req
    req.send(body);
    
    form = currentform;
    
    delete_current_form = function(){
        if(!current_form)
            return;
        current_form.parentNode.removeChild(current_form)
        current_form = null;
        
    }    
    current_form = form;
    
    return stop_event(event);
}

var current_form = null;
var last_form = null;

function show_reply_form(el,id){
    // already a form at the end
    if(el.parentNode.lastChild.tagName == 'FORM'){
        return false;
    }
    
    if(last_form){
        last_form.parentNode.removeChild(last_form);
    }
    
    var button = $create('button');
    button.innerHTML = replyformbuttonmessage;
    button.onclick = submit_comment_form;
    
    var textarea = $create('textarea');
    textarea.className = 'comment-message';
    listen('keyup', textarea, function(e){ textarea_keypress(e, id) });
    
    var _textarea = $create('div')
    _textarea.className = 'hbox'
    _textarea.appendChild(textarea)
    
    var form = $create('form')
    form.action = '/events/reply-comment?id='+id
    form.appendChild(_textarea)
    form.appendChild(button)
    
    last_form = form;
    
    delete_current_form = function(){
        if(!current_form)
            return;
        current_form.parentNode.removeChild(current_form)
        current_form = null;
        
    }    
    current_form = form;
    
    el.parentNode.appendChild(form)
}



function gen_comment_form(el,id,title){
    if(el.parentNode.lastChild.tagName == 'FORM'){
        return
    }
    /* var _title = $create('h2')
    _title.innerHTML = '<a name="make-comment">'+title+'</a>' */
    
    var button = $create('button');
    button.innerHTML = replyformbuttonmessage
    //button.onclick = submit_comment_form
    listen('click', button, submit_comment_form);
    
    
    
    var textarea = $create('textarea');
    textarea.className = 'comment-message';
    listen('keyup', textarea, function(e){ textarea_keypress(e, null) } );
    
    var _textarea = $create('div')
    _textarea.className = 'hbox'
    _textarea.appendChild(textarea)
    
    var form = $create('form');
    form.action = '/events/'+id+'/comment';
    form.onsubmit = function(){return false;};
    //form.appendChild(_title);
    form.appendChild(_textarea);
    form.appendChild(button);
    
    el.parentNode.appendChild(form);
}

