var globalNotes = { };


var notesPage;

function notes() {

    var loc = location.href;
    var tokes = loc.split("/");
    notesPage = loc;


    var url = "/getNotes.php?page="+notesPage;
    var opt = {
        method: 'post',
        onSuccess: function(t, two) {
           // var xml = t.responseXML;
            loadNotes(two);
        },
        on404: function(t) {
            alert('Error 404: location "' + t.statusText + '" was not found.');
        },
        onFailure: function(t) {
            alert('Error ' + t.status + ' -- ' + t.statusText);
        }
    }


    var myXHR = new XHR(opt).send(url);

    noteWriter();
}

function loadNotes(xml) {
    var nodes = xml.getElementsByTagName("note");
    globalNotes.notes = getNotes(nodes);
    for (var i = 0; i < globalNotes.notes.length; i ++)
    {
        makeDiv(globalNotes.notes[i], i);
    }
}

function getNoteArea(){
    return document.getElementById("noteArea");
}

function placeWriter() {

}


function noteWriter() {
    /*globalNotes.writer = document.createElement("DIV");
    globalNotes.writer.id = "noteWriter";
    globalNotes.writer.className = "noteWriter";  */

    //document.body.appendChild(globalNotes.writer);


    globalNotes.writer = new Element("div", {id : "noteWriter"}).addClass("noteWriter");
    $(document.body).adopt(globalNotes.writer);


    placeWriter();
    window.onresize = placeWriter;


  /*  globalNotes.writer.innerHTML = "<div id='noteWriterTitle'>Post a note!</div>" +
                                   "<div class='inputArea'><dt>First Name:</dt><dd><input id='fname' type='text'class='noteInput'>"
            + "</dd><dt>Last Name:</dt><dd><input id='lname' type='text' size='20' class='noteInput'></dd> </div>";

    globalNotes.writer.innerHTML = globalNotes.writer.innerHTML +
                                   " <textarea class='noteInput' id='mess'></textarea><br />";

    globalNotes.writer.innerHTML = globalNotes.writer.innerHTML +
                                   "<button onclick='processInput()' class='noteInput'><b><i>Post!</i></b></button><button id='hidenotes' class='noteInput'>Hide</button>";
    */

    var title = new Element("div", {id : "noteWriterTitle"}).setHTML("Post a good note!");
    globalNotes.writer.adopt(title);

    var inputArea = new Element("div").addClass("inputArea");
    var email = new Element("dd").setHTML("Email:");
    var fnameTitle = new Element("dd").setHTML("First Name:");

    var fname = new Element("dd").adopt(new Element("input", {id : "fname"}).addClass("noteInput"))
    var lnameTitle = new Element("dd").setHTML("Last Name:");

    var lname = new Element("dd").adopt(new Element("input", {id : "lname"}).addClass("noteInput"))

    var emailInput = new Element("dd").adopt(new Element("input", {id : "noteEmail"}).addClass("noteInput"))
    inputArea.adopt(email).adopt(fnameTitle);
    inputArea.adopt(email).adopt(fname);
    inputArea.adopt(email).adopt(lnameTitle);
    inputArea.adopt(email).adopt(lname);
    inputArea.adopt(email).adopt(emailInput);

    globalNotes.writer.adopt(inputArea);
    globalNotes.writer.adopt(new Element("div").addClass("noteInput").setHTML("Message:"));
    globalNotes.writer.adopt(new Element("textarea", {id : "mess"}).addClass("noteInput"))

    var postButton = new Element("button", {type : "button"}).setHTML("Post!").addClass("noteInput")
    var hideNotes = new Element("button", {type : "button", id : "hidenotes"}).setHTML("Hide").addClass("noteInput")

    globalNotes.writer.adopt(postButton);
    globalNotes.writer.adopt(hideNotes);

    postButton.addEvent("click", function(){
        processInput();
    }.bind(this))
}


function processInput() {
    var fname = document.getElementById("fname");
    var lname = document.getElementById("lname");
    var mess = document.getElementById("mess");
    var email = document.getElementById("noteEmail");
    var a = "";
    a = a + fname.value + " " + lname.value + "\n" + mess.value;
    if(email.value == "" && mess.value == "") {
        alert("Sorry, you must fill out your email address and message text.")   
    } else {
        makeSingleNote(fname.value, lname.value, mess.value, email.value);
    }

    fname.value = "";
    lname.value = "";
    mess.value = "";
    email.value = "";
}


function makeSingleNote(fname, lname, mess, email) {
    var t = "200";
    var l = "200";
    var url = "/makeNote.php";
    var opt = {
        method: 'post',
        data: "page="+notesPage+"&top=" + t + "&left=" + l + "&fname=" + fname + "&lname=" + lname + "&mes=" + mess + "&email=" + email,
        on404: function(t) {
            alert('Error 404: location "' + t.statusText + '" was not found.');
        },
        onFailure: function(t) {
            alert('Error ' + t.status + ' -- ' + t.statusText);
        },
        onSuccess: function (yay, t){
            // Display the content of the object.
            var ar = t.getElementsByTagName("note");
            var notes = getNotes(ar);
            makeDiv(notes[0]);
            globalNotes.notes[globalNotes.notes.length] = notes[0];
        }
    }
   new Ajax(url, opt).request();
}

function doNothing() {

}

function makeDiv(note, z) {
    note.div = document.createElement("DIV");
    note.div.className = "note";
    note.iDiv = document.createElement("div");
    note.iDiv.className = "notePic";
    note.iDiv.innerHTML = "<img src='/art/postcurl.gif'>";

    note.div.appendChild(note.iDiv);

    var name = document.createElement("DIV");
    name.className = "name";
    name.innerHTML = note.fname + " " + note.lname;
    note.nameDiv = name;

    var mnD = document.createElement("DIV");
    mnD.className = "message";
    mnD.innerHTML = note.message;

    note.div.appendChild(name);
    note.div.appendChild(mnD);


    document.body.appendChild(note.div);

    if(note.top != "") {
        note.div.style.top = note.top+ "px";
        note.div.style.left = note.left+"px";
    }
    else
    {
        note.div.setPosition({relativeTo: $("noteWriter"), position: "bottomRight"});
    }

    note.div.style.zIndex = z;
    // Now using Scriptaculous Event Stuff
    note.div.makeDraggable();
    note.div.onclick = function(e) {
        //alert("top: "+ note.div.style.top);
        keepItUp(note);
    }
    note.div.onmouseup = function(){
        updateNote(note);
        keepItUp(note);
    }


}


function updateNote(n) {
    var top = n.div.style.top.replace("px", "");
    var left = n.div.style.left.replace("px", "");

    var url = "/updateNote.php";
    var opt = {
        method: 'post',
        data: "id=" + n.id + "&fname=" + n.fname + "&lname=" + n.lname + "&mes=" + n.message + "&top=" + top + "&left=" + left,
        on404: function(t) {
            alert('Error 404: location "' + t.statusText + '" was not found.');
        },
        onFailure: function(t) {
            alert('Error ' + t.status + ' -- ' + t.statusText);
        }
    }
    new Ajax( url, opt).request();
}


function keepItUp(n) {
    var zA = new Array();
    for (var i = 0; i < globalNotes.notes.length; i ++) {
        zA[zA.length] = globalNotes.notes[i].div.style.zIndex;
    }
    zA.sort(descending);
    n.div.style.zIndex = zA[0];
    n.div.style.zIndex++;
}

// Math Stuff
function descending(a, b) {
    return b - a;
}

function ascending(a, b) {
    return a - b;
}


function getNotes(xml) {
    var arr = new Array(xml.length);
    for (var i = 0; i < xml.length; i ++) {
        var s = xml[i];
        var n = getNote(s);
        arr[i] = n;
    }
    return arr;
}

function getNote(xml) {
    var n =
    {
        "id" : getXmlValue(xml.getElementsByTagName("id")[0]),
        "fname" : getXmlValue(xml.getElementsByTagName("fname")[0]),
        "lname" : getXmlValue(xml.getElementsByTagName("lname")[0]),
        "top" : getXmlValue(xml.getElementsByTagName("top")[0]),
        "left" : getXmlValue(xml.getElementsByTagName("left")[0]),
        "message" : getXmlValue(xml.getElementsByTagName("message")[0])
    };
    return new Note(n);
}

function getXmlValue(result) {
    var ret = "";
    if (result.childNodes.length > 1) {
        ret = result.childNodes[1].nodeValue;
    } else if (result.firstChild) {
        ret = result.firstChild.nodeValue;
    } else {
        ret = "";
    }
    return ret;
}


function Note(n) {
    this.id = n.id;
    this.fname = n.fname;
    this.lname = n.lname;
    this.top = n.top;
    this.left = n.left;
    this.message = n.message;
    this.div;
    this.mov;
    this.iDiv;
    this.z = n.id;
    this.nameDiv;

    return this;
}

function getBody(){
    return document.getElementsByTagName("body")[0];
}
