//shortcut
var d = document;

//songs played array will function like stack
var SONGS_PLAYED = Array();

function sotdLoad() 
{
    //need to make an ajax request to the php function to get the song info
    var url = "http://" + getDomain() + "/php/sotd_functions.php";
    var params = new ajaxParameters();

    //check to see if there is anything set in the query string
    //alert(window.top.location.search);
    var param = window.top.location.search.substring(1);

    if (params != null && param != "") {
        if (param.substr(0, 4) == "day=") {
            var day = param.substr(4, param.length);
            params.add("day", day);
        }
        else if (param.substr(0, 2) == "d=") {
            var d = param.substr(2, param.length);
            params.add("d", d);
        }
    }

    var user_key = readCookie("isc_key");

    if (user_key) 
    {
        params.add("user_key", user_key);
    }

    makeAjaxRequest(url, params, true, load_song);
}

function load_song(xml) 
{
    //alert(xml);
    var xmlDoc = PrepareXML(xml);

    var song = xmlDoc.getElementsByTagName("sotd")[0];

    var id = getXmlNode(song, "id");

    d.getElementById("hidSongId").value = id;
    d.getElementById("hidSelected").value = id;

    SONGS_PLAYED.push(id);

    var song_src = getXmlNode(song, "song_path");
    var art_src = getXmlNode(song, "art_path");
    var name = getXmlNode(song, "name");
    var artist = getXmlNode(song, "artist");
    var album = getXmlNode(song, "album");
    var year = getXmlNode(song, "year");
    var stars = getXmlNode(song, "stars");
    var points = getXmlNode(song, "points");
    var user_name = getXmlNode(song, "userName");
    var user_email = getXmlNode(song, "userEmail");
    var arrComments = xmlDoc.getElementsByTagName("comment");

    d.getElementById("hidEmail").value = user_email;

    setDate(user_name);

    load_art(art_src, album, year);

    d.getElementById("divSongName").appendChild(d.createTextNode(name.toLowerCase()));
    d.getElementById("divArtistName").appendChild(d.createTextNode(artist.toLowerCase()));
    d.getElementById("divAlbumName").appendChild(d.createTextNode(album.toLowerCase() + " [" + year + "]"));

    //alert(song_src);

    soundManager.play("sotd_mp3", song_src);

    //alert("user rating: " + stars);
    initStars(stars);

    //if the user is logged in AND has not rated the current song.. show the alert gif
    if (user_name != "" && stars == 0) 
    {
        showNoRate(true);
    }
    else 
    {
        showNoRate(false);
    }

    if (points != "--" && user_name != "") 
    {
        showPoints(points);
    }

    addComments(arrComments);

    //get the avg
    var avg = getXmlNode(song, "avg");

    //get the # of votes
    var votes = getXmlNode(song, "votes");

    setStats(avg, votes);

    var xmlSongs = xmlDoc.getElementsByTagName("songs")[0];
    drawSongsTable(xmlSongs, true);

    updateSocialNetworking(name, artist, "2009-09-30");
}

function updateSocialNetworking(song, artist, date)
{
    //d.getElementById("lnkTwitter").href = "http://twitter.com/home?status=" + artist + " - " + song + " %23indiestreetcred http://indiestreetcred.com?" + date;
}

function showNoRate(bln) 
{
    if (bln) {
        //d.getElementById("spanNoRate").style.display = "";
        d.getElementById("spanNoRate").style.display = "none";
    }
    else {
        d.getElementById("spanNoRate").style.display = "none";
    }
}

function load_art(src, album, year) 
{
    var img = d.getElementById("albumArt");

    img.src = src;
    img.title = album.toLowerCase() + " [" + year + "]";
}

function play() 
{
    soundManager.play("sotd_mp3");
}

function playOrPause() 
{
    //change the imgPlayPause
    var img = d.getElementById("imgPlayPause");

    if (img.src.match(/play_button/)) {
        //call play and switch to pause img
        play();
        img.src = "img/pause_button.png";
    }
    else if (img.src.match(/pause_button/)) {
        //call pause and switch to play img
        pause();
        img.src = "img/play_button.png";
    }
}

function pause() 
{
    soundManager.pause("sotd_mp3");
}

function stop() 
{
    soundManager.stop("sotd_mp3");

    //change the imgPlayPause to play
    var img = d.getElementById("imgPlayPause");
    img.src = "img/play_button.png";
}

function artLoaded() 
{
    //hide the place holder
    d.getElementById("divPlaceHolder").style.display = "none";

    //show the picture
    d.getElementById("albumArt").style.display = "inline";
}

function addProgress(position, duration) 
{
    var divProgress = d.getElementById("divProgress");
    divProgress.style.width = Math.round((position / duration) * 200) + "px";
}

function addLoad(bytes, bytesTotal) 
{
    var divLoaded = d.getElementById("divLoaded");
    divLoaded.style.width = Math.round((bytes / bytesTotal) * 200) + "px";
}

function songFinish() 
{
    //reset progress bar
    var divProgress = d.getElementById("divProgress");
    divProgress.style.width = 0 + "px";

    //check for continuous play
    var hidContinuous = d.getElementById("hidContinuous");
    var hidRandom = d.getElementById("hidRandom");

    if (hidContinuous.value == "true" || hidRandom.value == "true")
    {
        showComments();
        playNextSong();
    }
    else if (hidContinuous.value == "1") 
    {
        //no need to kill sotd_mp3 and start from scratch.. just play
        soundManager.play("sotd_mp3");
    }
    else 
    {
        //return button to play button
        //change the imgPlayPause to play
        var img = d.getElementById("imgPlayPause");
        img.src = "img/play_button.png";
    }
}

function playNextSong() 
{
    var hid = d.getElementById("hidRandom");

    var tbl = d.getElementById("tblSongs");

    if (tbl.rows.length == 0) 
    {
        alert("rows length = 0");
        return;
    }

    var nextSong;

    if (hid.value == "true")
     {
        //if not random play the next row
        var songId = d.getElementById("hidSelected").value;

        if (songId == null) {
            songId = d.getElementById("hidSongId").value;
        }

        nextSong = songId;

        while (nextSong == songId) 
        {
            //get random number btwn 0 and array.length - 1
            var random = Math.random() * tbl.rows.length;
            nextSong = Math.floor(random);
        }

    }
    else 
    {
        //check to see if repeat one is on
        hid = d.getElementById("hidContinuous");

        if (hid.value == "1") 
        {
            /*//if not random play the next row
            var songId = d.getElementById("hidSelected").value;

			if(songId == null)
            {
            songId = d.getElementById("hidSongId").value;
            }
		

			var currentTr = d.getElementById(songId).rowIndex;

			var nextSong = parseInt(currentTr);*/

            //just replay the current song
            soundManager.play("sotd_mp3");
            return;
        }
        else 
        {
            //if not random play the next row
            var songId = d.getElementById("hidSelected").value;

            if (songId == null) {
                songId = d.getElementById("hidSongId").value;
            }

            var currentTr = d.getElementById(songId).rowIndex;

            if (currentTr == null || currentTr == "undefined" || isNaN(currentTr)) 
            {
                currentTr = tbl.rows.length - 4;
            }

            var nextSong = parseInt(currentTr) + 1;

            if (nextSong > tbl.rows.length - 1) 
            {
                nextSong = 0;
            }
        }
    }

    //alert(nextSong);
    var tr = tbl.rows[nextSong];
    //alert(tr);

    //scroll to selected song
    var divOldSotd = d.getElementById("divOldSotd");
    var scrollHeight = nextSong * tbl.rows[0].offsetHeight;

    //alert(scrollHeight);
    divOldSotd.scrollTop = scrollHeight - 20;
    //divOldSotd.scrollTo(0, scrollHeight);

    songSelected(tr);

    //SONGS_PLAYED.push(tr.id);
}

function playPreviousSong() {
    /*
    //used for debugging!
    var strIds = "";
    
    for(var i = 0; i < SONGS_PLAYED.length; i++)
    {
    strIds += SONGS_PLAYED[i] + ", ";
    }
    
    alert(strIds);*/

    var tbl = d.getElementById("tblSongs");

    if (tbl.rows.length == 0) {
        return;
    }

    if (SONGS_PLAYED.length == 0) {
        return;
    }

    if (SONGS_PLAYED.length > 1) {
        //play the last song int eh array (at index length - 1)
        SONGS_PLAYED.pop();
        var row_id = SONGS_PLAYED.pop();

        var tr = d.getElementById(row_id);

        songSelected(tr);
    }
    else {
        //assert that the length is 1?

        var row_id = SONGS_PLAYED.pop();

        var tr = d.getElementById(row_id);

        songSelected(tr);
    }


}

function addComment(song_id)
{
    var raw_txt = d.getElementById("txtComment").value;
    
    var txt = checkForHTML(raw_txt);
    txt = escapeSpecialChars(txt);
    
    var name = escapeSpecialChars(d.getElementById("txtCommentName").value);
    
    //make ajax call
    var url = "http://" + getDomain() + "/addComment.php";

    if (!song_id) 
    {
        var hid = d.getElementById("hidSongId");
        var id = hid.value;
    }
    else 
    {
        var id = song_id;
    }

    var params = new ajaxParameters();
    params.add("id", id);
    params.add("name", name);
    params.add("comment", txt);

    //txt.disabled = true;

    makeAjaxPOSTRequest(url, params, comment_callback, true);
}

function comment_callback(xml)
{
    //only need to draw out the comment if the comments are showing (and not lyrics)

    if (d.getElementById("divPostedComments"))
    {
        var xmlDoc = PrepareXML(xml);

        //get the message
        var m = getXmlNode(xmlDoc, "statusId");
        var txt = getXmlNode(xmlDoc, "comment");
        var author = getXmlNode(xmlDoc, "author");
        var date = getXmlNode(xmlDoc, "datePosted");

        txt = replaceSpecialChars(txt);
        author = replaceSpecialChars(author);

        //add comment to the table
        var tbl = d.getElementById("tbodyComments");

        var tr = d.createElement("tr");
        var td = tr.appendChild(d.createElement("td"));
        td.className = "sotdText";

        var div = d.createElement("div");
        div.className = "divComment";

        var divAuthor = div.appendChild(d.createElement("div"));
        divAuthor.className = "divAuthor";

        var img = d.createElement("img");
        img.src = "img/comment.png";
        img.className = "imgComment";

        divAuthor.appendChild(img);

        var spanAuthor = divAuthor.appendChild(d.createElement("span"));
        spanAuthor.className = "spanAuthor";
        spanAuthor.appendChild(d.createTextNode(author.toLowerCase()));

        var spanDash = divAuthor.appendChild(d.createElement("span"));
        spanDash.className = "spanDash";
        spanDash.appendChild(d.createTextNode(" - "));

        var spanCommentDate = divAuthor.appendChild(d.createElement("span"));
        spanCommentDate.className = "spanCommentDate";
        spanCommentDate.appendChild(d.createTextNode(date));

        var divComment = div.appendChild(d.createElement("div"));

        var spanCommentText = divComment.appendChild(d.createElement("span"));
        spanCommentText.className = "spanCommentText";
        //spanCommentText.appendChild(d.createTextNode(txt.toLowerCase()));

        spanCommentText.innerHTML = formatComment(txt);

        td.appendChild(div);

        tbl.appendChild(tr);

        var divPostedComments = d.getElementById("divPostedComments");

        divPostedComments.scrollTop = divPostedComments.scrollHeight;

        removeCoverDiv();

        if (!readCookie("isc_key"))
        {
            createCookie("isc_key", author, 60);
        }
    }
}

function formatComment(str)
{
    if (str.match(/http:\/\/[\w\.]+/))
    {
        var comment = "";
        
        var words = str.split(" ");

        for (var i = 0; i < words.length; i++)
        {
            //check for the href
            if (words[i].match(/^href/))
            {
                //some urls may be case-sensitive
                comment += words[i] + " ";
            }
            else
            {
                comment += words[i].toLowerCase() + " ";
            }
        }

        return comment;
    }
    else
    {
        return str.toLowerCase();
    }
}

function allowComment(str)
{
    str = str.toLowerCase();
    
    var re = /(.)*<object(.)*/;
    var re1 = /(.)*<div(.)*/;
    var re2 = /(.)*<span(.)*/;
    var re3 = /(.)*<marquee(.)*/;
    var re4 = /(.)*<html(.)*/;
    var re5 = /(.)*<head(.)*/;
    var re6 = /(.)*<embed(.)*/;
    var re7 = /(.)*<b>(.)*/;
    var re8 = /(.)*<h(.)*/;
    var re9 = /(.)*<p(.)*/;
    var re10 = /(.)*<img(.)*/;
    var re11 = /(.)*<body(.)*/;
    var re12 = /(.)*<h(.)*/;
    var re13 = /(.)*<input(.)*/;
    var re14 = /(.)*<script(.)*/;
    var re15 = /(.)*<table(.)*/;
    var re16 = /(.)*<tr(.)*/;
    var re17 = /(.)*<td(.)*/;
    var re18 = /(.)*<tbody(.)*/;
    var re19 = /(.)*<style(.)*/;
    var re20 = /(.)*<link(.)*/;
    var re21 = /(.)*<meta(.)*/;
    var re22 = /(.)*<title(.)*/;
    var re23 = /(.)*<font(.)*/;
    var re24 = /(.)*<a(.)*/;

    var return_val = re.test(str) || re1.test(str) || re2.test(str) || re3.test(str) && re4.test(str) || re5.test(str) || re6.test(str) || re7.test(str) || re8.test(str) || re9.test(str) || re10.test(str) || re11.test(str) || re12.test(str) || re13.test(str) || re14.test(str) || re15.test(str) || re16.test(str) || re17.test(str) || re18.test(str) || re19.test(str) || re20.test(str) || re21.test(str) || re22.test(str) || re23.test(str) || re24.test(str);

    return !return_val;
    
    /*if (str.match(/.<object./))
    {
        alert("returning false");
        return false;
    }
    else
    {
        alert("returning true");
        return true;
    }*/
}

function addComments(arrComments) 
{
    var tbl = d.getElementById("tbodyComments");

    for (var i = 0; i < arrComments.length; i++) 
    {
        var tr = tbl.appendChild(d.createElement("tr"));
        var td = tr.appendChild(d.createElement("td"));
        td.className = "sotdText";

        var text = arrComments[i].getElementsByTagName("text")[0].firstChild.nodeValue;
        var authorTag = arrComments[i].getElementsByTagName("author")[0];

        var author = "";

        if (authorTag && authorTag.firstChild && authorTag.firstChild.nodeValue) 
        {
            author = authorTag.firstChild.nodeValue;
        }

        var pointsTag = arrComments[i].getElementsByTagName("points")[0];

        var points = "";

        if (pointsTag && pointsTag.firstChild && pointsTag.firstChild.nodeValue) 
        {
            points = pointsTag.firstChild.nodeValue;
        }

        var date = arrComments[i].getElementsByTagName("date")[0].firstChild.nodeValue;

        text = replaceSpecialChars(text);
        author = replaceSpecialChars(author);

        var div = d.createElement("div");
        div.className = "divComment";

        var divAuthor = div.appendChild(d.createElement("div"));

        divAuthor.className = "divAuthor";
        var img = d.createElement("img");
        img.src = "img/comment.png";
        img.className = "imgComment";

        divAuthor.appendChild(img);

        var spanAuthor = divAuthor.appendChild(d.createElement("span"));
        spanAuthor.className = "spanAuthor";
        spanAuthor.appendChild(d.createTextNode(author.toLowerCase()));

        if (points != null && points != "") 
        {
            spanAuthor.title = "(" + points + ")";
        }

        var spanDash = divAuthor.appendChild(d.createElement("span"));
        spanDash.className = "spanDash";
        spanDash.appendChild(d.createTextNode(" - "));

        var spanCommentDate = divAuthor.appendChild(d.createElement("span"));
        spanCommentDate.className = "spanCommentDate";
        spanCommentDate.appendChild(d.createTextNode(date));

        var divComment = div.appendChild(d.createElement("div"));

        var spanCommentText = divComment.appendChild(d.createElement("span"));
        spanCommentText.className = "spanCommentText";
        //spanCommentText.appendChild(d.createTextNode(text.toLowerCase()));
        spanCommentText.innerHTML = formatComment(text);

        td.appendChild(div);
    }
}

function showOldSongs() 
{
    if (d.getElementById("tbodySongs").rows.length == 0) 
    {
        getAllSongs();
    }
    else 
    {
        if (d.getElementById("divOldSotd").style.display == "none") 
        {
            d.getElementById("divOldSotd").style.display = "";
            d.getElementById("divOldSongsHeader").style.display = "";
            d.getElementById("divControls").style.display = "";
            realignTable("tbodySongs", "tblSongsHeader");

            //change link text to read 'hide old sotds'
            d.getElementById("lnkOldSotds").firstChild.nodeValue = "hide all sotds";
        }
        else 
        {
            d.getElementById("divOldSotd").style.display = "none";
            d.getElementById("divOldSongsHeader").style.display = "none";
            d.getElementById("divControls").style.display = "none";

            //change link text to read 'show old sotds'
            d.getElementById("lnkOldSotds").firstChild.nodeValue = "show all sotds";
        }
    }
}

function getAllSongs() 
{
    var url = "http://" + getDomain() + "/php/all_songs.php";

    var params = new ajaxParameters();

    makeAjaxRequest(url, params, true, drawSongsTable);
}

function drawSongsTable(xml, blnFirst) {
    if (blnFirst == true) 
    {
        var xmlDoc = xml;
    }
    else 
    {
        var xmlDoc = PrepareXML(xml);
    }

    var songs = xmlDoc.getElementsByTagName("song");
    var tblBody = document.getElementById("tbodySongs");

    if (tblBody.rows.length > 0) 
    {
        clearTable("tbodySongs");
    }

    for (var i = 0; i < songs.length; i++) 
    {
        var song = songs[i];

        var id = getXmlNode(song, "id");
        var song_src = getXmlNode(song, "song_path");
        var art_src = getXmlNode(song, "art_path");
        var name = getXmlNode(song, "name");
        var artist = getXmlNode(song, "artist");
        var album = getXmlNode(song, "album");
        var date = getXmlNode(song, "date");
        var year = getXmlNode(song, "year");

        var tr = d.createElement("tr");
        tr.id = id;
        tr.ondblclick = function() { songSelected(this); }

        var span = d.createElement("span");

        if (i % 2 == 1) 
        {
            tr.className = "trOdd";
        }
        else 
        {
            tr.className = "trEven";
        }

        span.className = "sotdText";

        var td = tr.appendChild(d.createElement("td"));
        td.align = "left";
        td.className = "tdSong";

        span = d.createElement("span");
        span.className = "sotdOldSongText";

        if (name.length > 28) 
        {
            span.appendChild(d.createTextNode(name.substring(0, 28).toLowerCase() + "..."));
            span.title = name.toLowerCase();
        }
        else 
        {
            span.appendChild(d.createTextNode(name.toLowerCase()));
        }

        td.appendChild(span);
        td = tr.appendChild(d.createElement("td"));
        td.align = "left";
        td.className = "tdSong";

        span = d.createElement("span");
        span.className = "sotdOldSongText";

        if (artist.length > 28) 
        {
            span.appendChild(d.createTextNode(artist.substring(0, 28).toLowerCase() + "..."));
            span.title = artist.toLowerCase();
        }
        else 
        {
            span.appendChild(d.createTextNode(artist.toLowerCase()));
        }

        td.appendChild(span);
        td = tr.appendChild(d.createElement("td"));
        td.align = "left";
        td.className = "tdSong";

        span = d.createElement("span");
        span.className = "sotdOldSongText";

        if (album.length > 28) 
        {
            span.appendChild(d.createTextNode(album.substring(0, 28).toLowerCase() + "..."));
            span.title = album.toLowerCase();
        }
        else 
        {
            span.appendChild(d.createTextNode(album.toLowerCase()));
        }

        td.appendChild(span);
        td = tr.appendChild(d.createElement("td"));
        td.align = "left";
        td.className = "tdSong";

        span = d.createElement("span");
        span.className = "sotdOldSongText";
        span.appendChild(d.createTextNode(date));
        td.appendChild(span);

        //create a hidden field for each song
        var hidSrc = d.createElement("input");
        hidSrc.type = "hidden";
        hidSrc.value = song_src;
        td.appendChild(hidSrc);

        //add hidden field for art path
        var hidArt = d.createElement("input");
        hidArt.type = "hidden";
        hidArt.value = art_src;
        td.appendChild(hidArt);

        //create a hidden field for the song id
        var hidId = d.createElement("input");
        hidId.type = "hidden";
        hidId.value = id;
        td.appendChild(hidId);

        //create a hidden field for the year
        var hidYear = d.createElement("input");
        hidYear.type = "hidden";
        hidYear.value = year;
        td.appendChild(hidYear);

        tblBody.appendChild(tr);
    }

    if (blnFirst == null || blnFirst == false) 
    {
        if (d.getElementById("divOldSotd").style.display == "none") 
        {
            d.getElementById("divOldSotd").style.display = "";
            d.getElementById("divOldSongsHeader").style.display = "";
            d.getElementById("divControls").style.display = "";
            realignTable("tbodySongs", "tblSongsHeader");

            //change link text to read 'hide old sotds'
            d.getElementById("lnkOldSotds").firstChild.nodeValue = "hide all sotds";
        }
    }

    //highlight the selected song
    var selectedSong = d.getElementById("hidSelected").value;

    if (selectedSong && d.getElementById(selectedSong)) 
    {
        d.getElementById(selectedSong).className = "trSelected";
    }
    else 
    {
        var current = d.getElementById("hidSongId").value;

        if (current && d.getElementById(current)) 
        {
            d.getElementById(current).className = "trSelected";
        }
    }

    //realignTable("tbodySongs", "tblSongsHeader");
}

function songSelected(tr) 
{
    //get the id of the previously selected row
    var row = d.getElementById("hidSelected").value;

    if (row != "") 
    {
        var rowIndex = d.getElementById(row).rowIndex;

        if (rowIndex % 2 == 0) 
        {
            d.getElementById(row).className = "trEven";
        }
        else 
        {
            d.getElementById(row).className = "trOdd";
        }
    }
    else 
    {
        var row = d.getElementById("hidSongId").value;

        var rowIndex = d.getElementById(row).rowIndex;

        if (rowIndex != "") 
        {
            if (rowIndex % 2 == 0) 
            {
                d.getElementById(row).className = "trEven";
            }
            else
            {
                d.getElementById(row).className = "trOdd";
            }
        }
        else if (rowIndex == "0")
        {
        if (rowIndex % 2 == 0) 
            {
                d.getElementById(row).className = "trEven";
            }
            else 
            {
                d.getElementById(row).className = "trOdd";
            }
        }
        else 
        {
            alert("how?");
        }
    }

    tr.className = "trSelected";

    //reset previously selected
    d.getElementById("hidSelected").value = tr.id;

    SONGS_PLAYED.push(tr.id);

    //get the actual path to the previous song of the day
    var song_src = tr.getElementsByTagName("input")[0].value;

    //call stop to make sure nothing is playing
    if (soundManager && soundManager.isPlaying("sotd_mp3") == 1) 
    {
        soundManager.stop("sotd_mp3");
    }

    soundManager.destroySound("sotd_mp3");
    soundManager.play("sotd_mp3", song_src);

    //show the pause button
    var img = d.getElementById("imgPlayPause");
    img.src = "img/pause_button.png";

    setSongInfo(tr);
}

function setSongInfo(tr) 
{
    var art_src = tr.getElementsByTagName("input")[1].value;
    var id = tr.getElementsByTagName("input")[2].value;
    var year = tr.getElementsByTagName("input")[3].value;

    //get the song name/artist/album
    var spans = tr.getElementsByTagName("span");

    var name = spans[0].firstChild.nodeValue;
    var artist = spans[1].firstChild.nodeValue;
    var album = spans[2].firstChild.nodeValue;

    //if the last three characters are '...' use the title property
    var fullName = spans[0].title;
    var fullArtist = spans[1].title;
    var fullAlbum = spans[2].title;

    if (fullName == null || fullName == "") 
    {
        fullName = name;
    }

    if (fullArtist == null || fullArtist == "") 
    {
        fullArtist = artist;
    }

    if (fullAlbum == null || fullAlbum == "") 
    {
        fullAlbum = album;
    }

    d.getElementById("divSongName").firstChild.nodeValue = fullName;
    d.getElementById("divArtistName").firstChild.nodeValue = fullArtist;
    d.getElementById("divAlbumName").firstChild.nodeValue = fullAlbum + " [" + year + "]";

    //reset the selected song id
    d.getElementById("hidSongId").value = id;

    //show new album art, etc.
    load_art(art_src, fullAlbum, year);
    d.getElementById("albumArt").src = art_src;

    //make ajax call to get comments
    var url = "http://" + getDomain() + "/php/comments.php";
    var params = new ajaxParameters();
    params.add("action", "get");
    params.add("id", id);

    if (readCookie("isc_key")) 
    {
        //alert(readCookie("isc_key"));
        params.add("isc_key", readCookie("isc_key"));
    }

    updateSocialNetworking(fullName, fullArtist, "2009-09-01");

    makeAjaxPOSTRequest(url, params, getComments, true);
}

function getComments(xml) 
{
    var xmlDoc = PrepareXML(xml);
    var arrComments = xmlDoc.getElementsByTagName("comment");

    showComments();

    clearTable("tbodyComments");
    addComments(arrComments);

    var stars = getXmlNode(xmlDoc, "rating");

    if (stars == 0 && readCookie("isc_key") != null && readCookie("isc_key") != "") 
    {
        showNoRate(true);
    }
    else 
    {
        showNoRate(false);
    }

    //alert(stars);
    initStars(stars);

    var avg = getXmlNode(xmlDoc, "avg");
    var votes = getXmlNode(xmlDoc, "votes");
    //alert(avg);

    setStats(avg, votes);
}

function commentClick() 
{
    var txt = d.getElementById("txtComment");

    if (txt.value == "comment...") {
        txt.value = "";
    }
}

function commentNameClick() 
{
    var txt = d.getElementById("txtCommentName");

    if (txt.value == "your name...") {
        txt.value = "";
    }
}

function getUserName()
{
    var userName;

    if (d.getElementById("spanUser").firstChild)
    {
        userName = d.getElementById("spanUser").firstChild.nodeValue;

        if (userName == "")
        {
            userName = "anonymous";
        }
    }
    else
    {
        userName = "anonymous";
    }

    return userName;
}

function suggestSong() 
{
    var divCover = createCoverDiv();

    var divSuggest = d.createElement("div");
    divSuggest.id = "divDrag";
    divSuggest.className = "popup";

    divSuggest.appendChild(getTitleDiv("suggest a song..."));

    var tbl = divSuggest.appendChild(d.createElement("table"));
    var tbody = tbl.appendChild(d.createElement("tbody"));

    //your name
    var tr = tbody.appendChild(d.createElement("tr"));
    var td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("your name: "));

    var input = d.createElement("input");
    input.id = "txtName";
    input.onfocus = clearErrorMsg;
    input.maxLength = 50;
    input.value = getUserName();

    if (input.value != "" && input.value != "anonymous")
    {
        input.disabled = true;
    }
    else
    {
        input.value = "";
    }

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    //your email
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("your email address: "));
    td = tr.appendChild(d.createElement("td"));

    var input = d.createElement("input");
    input.id = "txtEmail";
    input.onfocus = clearErrorMsg;
    input.maxLength = 75;

    var email = d.getElementById("hidEmail").value;

    if (email != null && email != "")
    {
        input.value = email;
        input.disabled = true;
    }

    td.appendChild(input);

    //add artist field
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("artist: "));
    td = tr.appendChild(d.createElement("td"));

    var input = d.createElement("input");
    input.id = "txtArtist";
    input.onfocus = clearErrorMsg;
    input.maxLength = 75;

    td.appendChild(input);

    //add song name field
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("song name: "));
    td = tr.appendChild(d.createElement("td"));

    var input = d.createElement("input");
    input.id = "txtSongName";
    input.onfocus = clearErrorMsg;
    input.maxLength = 75;

    td.appendChild(input);

    var divBtns = d.createElement("div");

    var btnOk = createButton("btnOk", "ok")
    btnOk.className = "btnPlainSotd";
    divBtns.appendChild(btnOk);

    btnOk.onclick = function() {
        //ensure that all values are set
        var name = d.getElementById("txtName").value;
        var email = d.getElementById("txtEmail").value;
        var artist = d.getElementById("txtArtist").value;
        var song = d.getElementById("txtSongName").value;

        var msg = d.getElementById("divMessage");

        if (name == "" || email == "" || artist == "" || song == "") {
            //all fields are required
            msg.firstChild.nodeValue = "all fields are required.";
            msg.style.visibility = "visible";
            return;
        }

        var validPath = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/

        if (!email.match(validPath)) {
            //all fields are required
            msg.firstChild.nodeValue = "enter a valid email address.";
            msg.style.visibility = "visible";
            return;
        }

        //make ajax call to get comments
        var url = "http://" + getDomain() + "/php/suggest.php";

        var params = new ajaxParameters();
        params.add("name", name);
        params.add("email", email);
        params.add("artist", artist);
        params.add("song_name", song);

        msg.firstChild.nodeValue = "sending suggestion...";
        msg.style.visibility = "visible";

        makeAjaxPOSTRequest(url, params, suggest_callback, true);
    }

    var btnCancel = createButton("btnCancel", "cancel")
    btnCancel.className = "btnPlainSotd";
    divBtns.appendChild(btnCancel);

    btnCancel.onclick = function() {
        //call remove cover div
        removeCoverDiv();
    }
    divBtns.align = "center";

    var br = d.createElement("br");

    divSuggest.appendChild(br);

    divSuggest.appendChild(divBtns);



    divSuggest.appendChild(br);

    var divMessage = d.createElement("div");
    divMessage.align = "center";
    divMessage.id = "divMessage";
    divMessage.appendChild(d.createTextNode("sending suggestion..."));
    divMessage.style.visibility = "hidden";

    divSuggest.appendChild(divMessage);

    //alert(divSuggest.style.offsetWidth);

    //for ie
    divSuggest.style.width = "300px";

    divCover.appendChild(divSuggest);
    centerObject(divSuggest);
}

function suggest_callback(xml) {
    var xmlDoc = PrepareXML(xml);

    //get the status message
    var msg = getXmlNode(xmlDoc, "statusId");

    if (msg == "success") {
        //remove the translucent cover div
        removeCoverDiv();
    }
    else {
        alert(xml);
    }
}

function clearErrorMsg() {
    d.getElementById("divMessage").style.visibility = "hidden";
}

function subscribe() {
    var divCover = createCoverDiv();

    var divSubscribe = d.createElement("div");
    divSubscribe.id = "divDrag";
    divSubscribe.className = "popup";

    divSubscribe.appendChild(getTitleDiv("subscribe..."));

    divSubscribe.appendChild(d.createTextNode("coming soon..."));

    /*divSubscribe.appendChild(d.createTextNode("enter your email address below to receive"));
    divSubscribe.appendChild(d.createElement("br"));
    divSubscribe.appendChild(d.createTextNode("a notice each time a new song is posted."));

	divSubscribe.appendChild(d.createElement("br"));
    
    var tbl = divSubscribe.appendChild(d.createElement("table"));
    var tbody = tbl.appendChild(d.createElement("tbody"));
    
    //your name
    var tr = tbody.appendChild(d.createElement("tr"));
    var td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("email address: "));
    td = tr.appendChild(d.createElement("td"));
    
    var txtEmail = d.createElement("input");
    txtEmail.id = "txtEmail";
    
    td.appendChild(txtEmail);*/

    divCover.appendChild(divSubscribe);

    var divBtns = d.createElement("div");

    var btnOk = createButton("btnOk", "ok")
    btnOk.className = "btnPlainSotd";
    divBtns.appendChild(btnOk);

    btnOk.onclick = function() {
        /*var txt = d.getElementById("txtEmail");
        
        if(txt.value != "")
        {
        //make ajax call to get comments
        var url = "http://" + getDomain() + "/sotd/php/subscribe.php";
        var params = new ajaxParameters();
        params.add("email", txt.value);

            makeAjaxPOSTRequest(url, params, subscribe_callback, true);
        }
        else
        {
        alert("please enter an email address");
        }*/

        removeCoverDiv();
    }

    var btnCancel = createButton("btnCancel", "cancel")
    btnCancel.className = "btnPlainSotd";
    divBtns.appendChild(btnCancel);

    btnCancel.onclick = function() {
        //call remove cover div
        removeCoverDiv();
    }

    divBtns.align = "center";

    var br = d.createElement("br");
    divSubscribe.appendChild(br);

    divSubscribe.appendChild(divBtns);

    //for ie
    divSubscribe.style.width = "300px";

    centerObject(divSubscribe);
}

function getPermalink() {
    var divCover = createCoverDiv();

    var br = d.createElement("br");

    var divPermalink = d.createElement("div");
    divPermalink.id = "divDrag";
    divPermalink.className = "popup";

    divPermalink.appendChild(getTitleDiv("permalink..."));

    divPermalink.appendChild(br);

    //get the id of the previously selected row
    var row = d.getElementById("hidSelected").value;
    var tr = d.getElementById(row);
    var tds = tr.getElementsByTagName("td");
    var date = tds[3].innerText;

    if (!date || date == null) {
        date = tds[3].textContent;
    }
    //alert(date);

    var spanPermalink = d.createElement("div");
    spanPermalink.id = "spanPermalink";

    spanPermalink.appendChild(br);
    spanPermalink.appendChild(d.createTextNode("http://www.indiestreetcred.com/?day=" + date));
    spanPermalink.appendChild(br);

    divPermalink.appendChild(spanPermalink);

    divPermalink.appendChild(br);

    divCover.appendChild(divPermalink);

    var divBtns = d.createElement("div");

    var btnOk = createButton("btnOk", "ok")
    btnOk.className = "btnPlainSotd";
    divBtns.appendChild(btnOk);

    btnOk.onclick = function() {
        removeCoverDiv();
    }

    var btnCancel = createButton("btnCancel", "cancel")
    btnCancel.className = "btnPlainSotd";
    divBtns.appendChild(btnCancel);

    btnCancel.onclick = function() {
        //call remove cover div
        removeCoverDiv();
    }

    divBtns.align = "center";


    divPermalink.appendChild(br);

    divPermalink.appendChild(divBtns);

    //for ie
    divPermalink.style.width = "320px";

    centerObject(divPermalink);
}

function subscribe_callback(xml) {
    var xmlDoc = PrepareXML(xml);

    //get the status message
    var msg = getXmlNode(xmlDoc, "statusId");

    if (msg == "success") {
        //remove the translucent cover div
        removeCoverDiv();
    }
    else {
        alert(xml);
    }
}

function sort(type) {

    var sortType = "";
    var sortDir = "";

    if (type == "name") {
        sortType = "s.name";

        var hid = d.getElementById("hidNameSort");

        if (hid.value == "" || hid.value == "DESC") {
            sortDir = "ASC";
        }
        else if (hid.value == "ASC") {
            sortDir = "DESC";
        }

        hid.value = sortDir;
    }
    else if (type == "artist") {
        sortType = "s.artist";

        var hid = d.getElementById("hidArtistSort");

        if (hid.value == "" || hid.value == "DESC") {
            sortDir = "ASC";
        }
        else if (hid.value == "ASC") {
            sortDir = "DESC";
        }

        hid.value = sortDir;
    }
    else if (type == "album") {
        sortType = "s.album";

        var hid = d.getElementById("hidAlbumSort");

        if (hid.value == "" || hid.value == "DESC") {
            sortDir = "ASC";
        }
        else if (hid.value == "ASC") {
            sortDir = "DESC";
        }

        hid.value = sortDir;
    }
    else {
        sortType = "d.date";

        var hid = d.getElementById("hidDateSort");

        if (hid.value == "" || hid.value == "ASC") {
            sortDir = "DESC";
        }
        else if (hid.value == "DESC") {
            sortDir = "ASC";
        }

        hid.value = sortDir;
    }

    //make ajax call
    var url = "http://" + getDomain() + "/php/all_songs.php";

    var params = new ajaxParameters();
    params.add("sortBy", sortType);
    params.add("sortDir", sortDir);

    makeAjaxRequest(url, params, true, drawSongsTable);
}

function randomPlay() {
    //change the link to be selected
    var hid = d.getElementById("hidRandom");

    if (hid.value == "") {
        d.getElementById("spanRandom").className = "selected";
        d.getElementById("spanRandom").title = "turn off random play";
        hid.value = "true";

        //uncheck the continuous
        d.getElementById("spanContinuous").className = "unselected";
        d.getElementById("spanContinuous").title = "turn on continuous play";
        d.getElementById("hidContinuous").value = "";
    }
    else {
        d.getElementById("spanRandom").className = "unselected";
        d.getElementById("spanRandom").title = "turn on random play";
        hid.value = "";
    }
}

function continuousPlay() {
    //change the link to be selected
    var hid = d.getElementById("hidContinuous");

    if (hid.value == "") {
        d.getElementById("spanContinuous").className = "selected";
        d.getElementById("spanContinuous").title = "turn on repeat x 1 play";
        hid.value = "true";

        //uncheck the random
        d.getElementById("spanRandom").className = "unselected";
        d.getElementById("spanRandom").title = "turn on random play";
        d.getElementById("hidRandom").value = "";
    }
    else if (hid.value == "true") {
        d.getElementById("spanContinuous").className = "selected";
        d.getElementById("spanContinuous").title = "turn off repeat play";
        d.getElementById("spanContinuous").firstChild.nodeValue = "repeat x 1";
        hid.value = "1";

        //uncheck the random
        d.getElementById("spanRandom").className = "unselected";
        d.getElementById("spanRandom").title = "turn on random play";
        d.getElementById("hidRandom").value = "";
    }
    else {
        d.getElementById("spanContinuous").className = "unselected";
        d.getElementById("spanContinuous").title = "turn on repeat play";
        d.getElementById("spanContinuous").firstChild.nodeValue = "repeat";
        hid.value = "";
    }
}

function makeComment(blnSkip) 
{
    var song_id = d.getElementById("hidSelected").value;

    var isc_key = readCookie("isc_key");

    if (!isc_key) 
    {
        showLogin(true);
        return;
    }

    var divCover = createCoverDiv();

    var divPostComment = d.createElement("div");
    divPostComment.id = "divDrag";
    divPostComment.className = "popup";

    divPostComment.appendChild(getTitleDiv("say something..."));

    var tbl = divPostComment.appendChild(d.createElement("table"));
    var tbody = tbl.appendChild(d.createElement("tbody"));

    //your name
    var tr = tbody.appendChild(d.createElement("tr"));
    var td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("your name: "));

    var input = d.createElement("input");
    input.id = "txtCommentName";
    input.onfocus = clearErrorMsg;
    input.maxLength = 50;
    input.disabled = true;

    var userName;

    if (d.getElementById("spanUser").firstChild) 
    {
        userName = d.getElementById("spanUser").firstChild.nodeValue;

        if (userName == "") 
        {
            userName = "anonymous";
        }
    }
    else 
    {
        userName = "anonymous";
    }

    if (userName) 
    {
        input.value = userName;
    }

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    //your email
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("comment: "));
    td = tr.appendChild(d.createElement("td"));

    var ta = d.createElement("textarea");
    ta.id = "txtComment";
    ta.onfocus = clearErrorMsg;
    ta.maxLength = 510;

    td.appendChild(ta);

    var divBtns = d.createElement("div");

    var btnPost = createButton("btnPost", "post")
    btnPost.className = "btnPlainSotd";
    divBtns.appendChild(btnPost);

    btnPost.onclick = function()
    {
        //ensure that all values are set
        var name = escapeSpecialChars(d.getElementById("txtCommentName").value);
        var raw_comment = d.getElementById("txtComment").value;
        var comment = escapeSpecialChars(raw_comment);

        var msg = d.getElementById("divMessage");

        if (name == "" || comment == "")
        {
            //all fields are required
            msg.firstChild.nodeValue = "all fields are required.";
            msg.style.visibility = "visible";
            return;
        }
        else if (!allowComment(raw_comment))
        {
            //only simple html is allowed
            msg.firstChild.nodeValue = "only simple html is allowed.";
            msg.style.visibility = "visible";
            return;
        }

        var msg = d.getElementById("divMessage");
        msg.firstChild.nodeValue = "posting comment...";
        msg.style.visibility = "visible";

        btnPost.disabled = true;
        d.getElementById("btnCancel").disabled = true;

        addComment(song_id);
    }

    var btnCancel = createButton("btnCancel", "cancel")
    btnCancel.className = "btnPlainSotd";
    divBtns.appendChild(btnCancel);

    btnCancel.onclick = function() 
    {
        //call remove cover div
        removeCoverDiv();
    }

    divBtns.align = "center";

    var br = d.createElement("br");

    divPostComment.appendChild(br);

    divPostComment.appendChild(divBtns);

    divPostComment.appendChild(br);

    var divMessage = d.createElement("div");
    divMessage.align = "center";
    divMessage.id = "divMessage";
    divMessage.appendChild(d.createTextNode("posting comment..."));
    divMessage.style.visibility = "hidden";

    divPostComment.appendChild(divMessage);

    //for ie
    divPostComment.style.width = "300px";

    centerObject(divPostComment);
    divCover.appendChild(divPostComment);
    centerObject(divPostComment);

}

function mapMonth(val) 
{
    var months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
    return months[val];
}

function setDate(userName) 
{
    var date = new Date();
    var strDate = mapMonth(date.getMonth()) + " " + date.getDate() + ", " + date.getFullYear();

    var spanDate = d.getElementById("spanDate");

    if (spanDate.childNodes.length == 0) 
    {
        spanDate.appendChild(d.createTextNode(strDate));
    }
    else
    {
        spanDate.firstChild.nodeValue = strDate;
    }

    //check for the user cookie, and if its there, set the spanUser text
    //var userName = readCookie("isc_key");
    var isc_key = readCookie("isc_key");

    //TODO - get userName

    if (userName) {
        var spanUser = d.getElementById("spanUser");

        if (spanUser.childNodes.length == 0) {
            spanUser.appendChild(d.createTextNode(userName));
        }
        else {
            spanUser.firstChild.nodeValue = userName;
        }
    }
    else if (isc_key) {
        //ajax to get the users login name
    }
    else {
        d.getElementById("spanLogout").firstChild.nodeValue = "login";
    }

}

function showLogin(show_skip) 
{
    var divCover = createCoverDiv();

    var divLogin = d.createElement("div");
    divLogin.id = "divDrag";
    divLogin.className = "popup";

    divLogin.appendChild(getTitleDiv("login"));

    var tbl = divLogin.appendChild(d.createElement("table"));
    var tbody = tbl.appendChild(d.createElement("tbody"));

    //id
    var tr = tbody.appendChild(d.createElement("tr"));
    var td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("user id: "));

    var input = d.createElement("input");
    input.id = "txtUserId";
    input.onfocus = clearErrorMsg;
    input.maxLength = 32;

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    //password
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("password: "));

    var input = d.createElement("input");
    input.id = "txtPassword";
    input.type = "password";
    input.onfocus = clearErrorMsg;
    input.maxLength = 32;

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    var br = d.createElement("br");

    var divRegister = d.createElement("div");
    divRegister.id = "divRegister";

    divLogin.appendChild(br);

    var spanRegister = divRegister.appendChild(d.createElement("span"));
    spanRegister.id = "spanRegister";
    spanRegister.appendChild(d.createTextNode("not a user? click here."));

    divRegister.align = "center";

    divLogin.appendChild(br);
    divLogin.appendChild(br);
    divLogin.appendChild(divRegister);
    divLogin.appendChild(br);
    divLogin.appendChild(br);

    divRegister.onclick = function() {
        removeCoverDiv();
        showRegister();
    }

    var divBtns = d.createElement("div");

    var btnOk = createButton("btnOk", "ok")
    btnOk.className = "btnPlainSotd";
    divBtns.appendChild(btnOk);

    btnOk.onclick = function() {
        doLogin(show_skip);
    }

    var btnCancel = createButton("btnCancel", "cancel")
    btnCancel.className = "btnPlainSotd";
    divBtns.appendChild(btnCancel);

    btnCancel.onclick = function() {
        //call remove cover div
        removeCoverDiv();
    }

    //only want to show the skip if posting a comment
    if (show_skip && show_skip == true) {
        var btnSkip = createButton("btnSkip", "skip")
        btnSkip.className = "btnPlainSotd";
        divBtns.appendChild(btnSkip);

        btnSkip.onclick = function() {
            //not sure if want to create this cookie here
            createCookie("isc_key", "anonymous", 1);
            removeCoverDiv();
            makeComment(true);
        }
    }

    divBtns.align = "center";

    divLogin.appendChild(br);

    divLogin.appendChild(divBtns);

    divLogin.appendChild(br);

    var divMessage = d.createElement("div");
    divMessage.align = "center";
    divMessage.id = "divMessage";
    divMessage.appendChild(d.createTextNode("logging in..."));
    divMessage.style.visibility = "hidden";

    divLogin.appendChild(divMessage);

    //for ie
    divLogin.style.width = "250px";

    divCover.appendChild(divLogin);
    centerObject(divLogin);
}

function showRegister() {
    var divCover = createCoverDiv();

    var br = d.createElement("br");

    var divRegister = d.createElement("div");
    divRegister.id = "divDrag";
    divRegister.className = "popup";

    divRegister.appendChild(getTitleDiv("register"));

    var tbl = divRegister.appendChild(d.createElement("table"));
    var tbody = tbl.appendChild(d.createElement("tbody"));

    //id
    var tr = tbody.appendChild(d.createElement("tr"));
    var td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("user id: "));

    var input = d.createElement("input");
    input.id = "txtUserId";
    input.onfocus = clearErrorMsg;
    input.maxLength = 32;

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    //password
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("password: "));

    var input = d.createElement("input");
    input.id = "txtPassword";
    input.type = "password";
    input.onfocus = clearErrorMsg;
    input.maxLength = 32;

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    //password 2
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("confirm password: "));

    var input = d.createElement("input");
    input.id = "txtPassword2";
    input.type = "password";
    input.onfocus = clearErrorMsg;
    input.maxLength = 32;

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    //email
    tr = tbody.appendChild(d.createElement("tr"));
    td = tr.appendChild(d.createElement("td"));
    td.appendChild(d.createTextNode("email: "));

    var input = d.createElement("input");
    input.id = "txtEmail";
    input.onfocus = clearErrorMsg;
    input.maxLength = 64;

    td = tr.appendChild(d.createElement("td"));
    td.appendChild(input);

    var divBtns = d.createElement("div");

    var btnOk = createButton("btnOk", "ok")
    btnOk.className = "btnPlainSotd";
    divBtns.appendChild(btnOk);

    btnOk.onclick = function() {
        doRegister();
        //removeCoverDiv();
    }

    var btnCancel = createButton("btnCancel", "cancel")
    btnCancel.className = "btnPlainSotd";
    divBtns.appendChild(btnCancel);

    btnCancel.onclick = function() {
        //call remove cover div
        removeCoverDiv();
    }

    divBtns.align = "center";
    divRegister.appendChild(br);
    divRegister.appendChild(divBtns);

    var divMessage = d.createElement("div");
    divMessage.align = "center";
    divMessage.id = "divMessage";
    divMessage.appendChild(d.createTextNode("posting comment..."));
    divMessage.style.visibility = "hidden";

    divRegister.appendChild(divMessage);

    //for ie
    divRegister.style.width = "300px";

    divCover.appendChild(divRegister);
    centerObject(divRegister);
}

function doLogin(blnPost) 
{
    var user_name = d.getElementById("txtUserId").value;
    var password = d.getElementById("txtPassword").value;

    var divMessage = d.getElementById("divMessage");

    if (user_name == "" || password == "") 
    {

        divMessage.firstChild.nodeValue = "all fields are required.";
        divMessage.style.visibility = "visible";
        return;
    }

    var song_id = d.getElementById("hidSelected").value;

    //make ajax call
    var url = "http://" + getDomain() + "/php/login.php";

    var params = new ajaxParameters();
    params.add("user_name", user_name);
    params.add("password", password);
    params.add("song_id", song_id);

    //blnPost indicates whether or not the user was trying to post a comment
    if (blnPost == true) 
    {
        params.add("type", "post");
    }
    else 
    {
        params.add("type", "other");
    }

    divMessage.firstChild.nodeValue = "logging in...";
    divMessage.style.visibility = "visible";

    //disable the ok and cancel buttons
    d.getElementById("btnOk").disabled = true;
    d.getElementById("btnCancel").disabled = true;

    makeAjaxPOSTRequest(url, params, login_callback, true);
}

function login_callback(xml)
{
    //alert(xml);
    var xmlDoc = PrepareXML(xml);

    var blnAllow = xmlDoc.getElementsByTagName("allow")[0].firstChild.nodeValue;

    if (blnAllow == "true") 
    {
        //get the user name
        var user_name = xmlDoc.getElementsByTagName("userName")[0].firstChild.nodeValue;
        var user_email = xmlDoc.getElementsByTagName("userEmail")[0].firstChild.nodeValue;

        d.getElementById("hidEmail").value = user_email;

        var isc_key = getXmlNode(xmlDoc, "iscKey");
        //alert(isc_key);

        //set logout span
        d.getElementById("spanLogout").firstChild.nodeValue = "logout";

        //write the user name cookie
        createCookie("isc_key", isc_key, 7);
        setDate(user_name);

        //remove the login popup div
        removePopupDiv("divDrag");

        var rating = getXmlNode(xmlDoc, "rating");
        //alert(rating);
        initStars(rating);

        if (rating == 0 && user_name != null && user_name != "" && user_name != "anonymous") 
        {
            showNoRate(true);
        }
        else 
        {
            showNoRate(false);
        }

        //get points
        var points = getXmlNode(xmlDoc, "points");
        //alert(points);
        showPoints(points);

        var type = getXmlNode(xmlDoc, "type");

        if (type == "post") 
        {
            //only call this if the user pressed say something then had to login
            //and allow the user to say something
            makeComment();
        }
        else 
        {
            //remove the cover
            removeCoverDiv();
        }
    }
    else {
        //reenable the ok and cancel buttons
        d.getElementById("btnOk").disabled = false;
        d.getElementById("btnCancel").disabled = false;

        var divMessage = d.getElementById("divMessage");
        divMessage.firstChild.nodeValue = "login failed";
        divMessage.style.visibility = "visible";

    }
}

function doRegister() {
    var user_name = d.getElementById("txtUserId").value;
    var password = d.getElementById("txtPassword").value;
    var password2 = d.getElementById("txtPassword2").value;
    var email = d.getElementById("txtEmail").value;

    var msg = d.getElementById("divMessage");

    //error checking
    if (user_name == "" || password == "" || password2 == "" || email == "") {
        //all fields are required
        msg.firstChild.nodeValue = "all fields are required.";
        msg.style.visibility = "visible";
        return;
    }

    if (password != password2) {
        //all fields are required
        msg.firstChild.nodeValue = "your passwords must match.";
        msg.style.visibility = "visible";
        return;
    }

    var validPath = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/

    if (!email.match(validPath)) {
        //all fields are required
        msg.firstChild.nodeValue = "enter a valid email address.";
        msg.style.visibility = "visible";
        return;
    }

    //make ajax call
    var url = "http://" + getDomain() + "/register.php";

    var params = new ajaxParameters();
    params.add("user_name", user_name);
    params.add("password", password);
    params.add("email", email);

    //disable the ok and cancel buttons
    d.getElementById("btnOk").disabled = true;
    d.getElementById("btnCancel").disabled = true;

    makeAjaxPOSTRequest(url, params, register_callback, true);
}

function register_callback(xml) 
{
    //alert(xml);
    var xmlDoc = PrepareXML(xml);

    var blnStatus = xmlDoc.getElementsByTagName("allow")[0].firstChild.nodeValue;
    var msg = xmlDoc.getElementsByTagName("msg")[0].firstChild.nodeValue;

    if (blnStatus == "true") 
    {
        //alert user that an email has been sent to them and they will need to verify the email registered.
        //remove the divRegisterBox
        //alert(msg);
        removePopupDiv("divDrag");

        //assert - divCover exists
        var divCover = d.getElementById("divCover");

        var divConfirm = d.createElement("div");
        divConfirm.id = "divDrag";
        divConfirm.className = "popup";

        divConfirm.appendChild(getTitleDiv("registration status..."));

        var br = d.createElement("br");
        divConfirm.appendChild(br);

        var divMessage = d.createElement("div");
        divMessage.align = "center";
        divMessage.id = "divMessage";
        divMessage.appendChild(d.createTextNode(msg));

        divConfirm.appendChild(divMessage);

        divConfirm.appendChild(br);

        var tbl = divConfirm.appendChild(d.createElement("table"));
        tbl.align = "center";
        var tbody = tbl.appendChild(d.createElement("tbody"));
        tbody.align = "center";

        //your name
        var tr = tbody.appendChild(d.createElement("tr"));
        var td = tr.appendChild(d.createElement("td"));
        td.align = "center";

        var btnOk = createButton("btnOk", "ok")
        btnOk.className = "btnPlainSotd";
        td.appendChild(btnOk);

        btnOk.onclick = function() {
            //call remove cover div
            removeCoverDiv();
        }

        //for ie
        divConfirm.style.width = "300px";

        centerObject(divConfirm);
        divCover.appendChild(divConfirm);
        centerObject(divConfirm);

        setMessage(msg);
    }
    else 
    {
        //reenable buttons
        d.getElementById("btnOk").disabled = false;
        d.getElementById("btnCancel").disabled = false;

        setMessage(msg);
    }
}

function setMessage(val) 
{
    var divMessage = d.getElementById("divMessage");
    divMessage.firstChild.nodeValue = val;
    divMessage.style.visibility = "visible";
}

function logout() 
{
    if (d.getElementById("spanLogout").firstChild.nodeValue == "login") 
    {
        //alert("do login");
        showLogin();
    }
    else 
    {
        //delete the user cookie.. and update the welcome.. and update the logout to say login
        removeCookie("isc_key");

        if (d.getElementById("spanUser").firstChild) 
        {
            d.getElementById("spanUser").firstChild.nodeValue = "";
        }

        if (d.getElementById("spanPts").firstChild) 
        {
            d.getElementById("spanPts").firstChild.nodeValue = "";
        }

        d.getElementById("spanLogout").firstChild.nodeValue = "login";

        //reset email hidden field
        d.getElementById("hidEmail").value = "";

        //reset stars to 0
        initStars(0);

        showNoRate(false);
    }
}

function showPoints(points) 
{
    if (d.getElementById("spanPts").firstChild) {
        d.getElementById("spanPts").firstChild.nodeValue = "(" + points + ")";
    }
    else {
        d.getElementById("spanPts").appendChild(d.createTextNode("(" + points + ")"));
    }
}

function setStats(avg, votes) 
{
    if (avg == "" || avg == "0") {
        d.getElementById("spanAvg").firstChild.nodeValue = "--";
    }
    else {
        d.getElementById("spanAvg").firstChild.nodeValue = roundAvg(avg);
    }

    var ratings = "ratings";

    if (votes == "1") {
        ratings = "rating";
    }

    d.getElementById("spanVotes").firstChild.nodeValue = votes + " " + ratings;
}

function showComments()
{
    d.getElementById("spanLyrics").firstChild.nodeValue = "lyrics";
    d.getElementById("divPostedComments").style.display = "";
    d.getElementById("divLyrics").style.display = "none";
}

function showLyrics()
{
    //if user clicked 'lyrics' show lyrics view
    if (d.getElementById("spanLyrics").firstChild.nodeValue == "lyrics")
    {
        d.getElementById("spanLyrics").firstChild.nodeValue = "comments";
        //d.getElementById("spanSaySomething").firstChild.nodeValue = " ";
        d.getElementById("divPostedComments").style.display = "none";
        d.getElementById("divLyrics").style.display = "";

        getLyrics();
    }
    //'if user clicked 'comments' return to comments view
    else
    {
        //d.getElementById("spanSaySomething").firstChild.nodeValue = "say something...";
        d.getElementById("spanLyrics").firstChild.nodeValue = "lyrics";
        d.getElementById("divPostedComments").style.display = "";
        d.getElementById("divLyrics").style.display = "none";
    }
}

function getLyrics()
{
    var song_id = d.getElementById("hidSongId").value;
    
    //get the song id and call the lyrics php page
    //make ajax call
    var url = "http://" + getDomain() + "/php/lyrics.php";

    var params = new ajaxParameters();
    params.add("song_id", song_id);

    makeAjaxPOSTRequest(url, params, getLyrics_callback, true);
}

function getLyrics_callback(xml)
{
    var xmlDoc = PrepareXML(xml);

    var lyrics = getXmlNode(xmlDoc, "lyrics");
    lyrics = replaceSpecialChars(lyrics);

    if (lyrics == "")
    {
        lyrics = "no lyrics posted.";
    }
    
    var tbl = d.getElementById("tbodyLyrics");

    clearTable("tbodyLyrics");
    
    var tr = tbl.appendChild(d.createElement("tr"));
    var td = tr.appendChild(d.createElement("td"));
    td.className = "sotdText";

    var div = d.createElement("div");
    div.className = "divComment";

    var divAuthor = div.appendChild(d.createElement("div"));
    divAuthor.className = "divLyrics";

    var img = d.createElement("img");
    img.src = "img/comment.png";
    img.className = "imgComment";

    divAuthor.appendChild(img);

    var spanAuthor = divAuthor.appendChild(d.createElement("span"));
    spanAuthor.className = "spanAuthor";
    spanAuthor.appendChild(d.createTextNode("..lyrics.."));
    
    var divLyrics = div.appendChild(d.createElement("div"));
    
    //draw the lyrics in the comment box
    var spanLyrics = divLyrics.appendChild(d.createElement("div"));
    spanLyrics.className = "spanCommentText";
    spanLyrics.innerHTML = lyrics.toLowerCase();

    td.appendChild(div);
}