//<!--



function importXML(xmlfile, callback) {
	// xmlDoc should be globally declared outside.
	// It is is created and loaded here
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.onload = callback;
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.onreadystatechange = function () {
			if (xmlDoc.readyState == 4) callback()
		};
 	}
	else
	{
		alert('Your browser can\'t handle this script');
		return;
	}
	xmlDoc.load(xmlfile);
	return xmlDoc
}

//globals for storing info from XML files
var songDoc;
var setlistReady = false;  
var setlistName;
var songs;
var gigDoc;
var giglistReady = false;
var giglistYear;
var gigs;

/*
 * create a printable list
 */
 var newWindow;
 function printable(type, option) {
     // open a new window
     newWindow = window.open("blanklist.html", "setListwindow", 
            config='height=600, width=600, toolbar=no, menubar=no, scrollbars=yes, resizable=yes, location=no, directories=no, status=no' );
     var doc = newWindow.document;
     if (doc == null) {
         alert("new document is null!!");
     } else {
       if (type == 'setlist') {
         setlistReady = false;  
			// option not used yet
         songDoc = importXML("classes/xml/setlist.xml", setlistCallback);
         buildSetList();
       } else if (type == 'giglist') {
           giglistReady = false;  
           giglistYear=option;
           // fof gig list the oprion is the year as a string
     	   gigDoc = importXML("classes/xml/gigs"+option+".xml", giglistCallback);
           buildGigList();
       }
     }
 }

 function setlistCallback() {
 	readSetlist(songDoc);
 }

 function giglistCallback() {
 	readGiglist(gigDoc);
 }
 

// song class
function Song(artist, title, genre, decade) {
    this.artist=artist;
    this.title=title;
    this.genre=genre;
    this.decade=decade;
}
// gig class
function Gig(date, title, details) {
    this.date=date;
    this.title=title;
    this.details=details;
}
    
// sets these globals
// setlistName
// songs
// setlistReady
function readSetlist(songDoc) {
    if (songDoc == null) {
        alert("song list xml document not found.");
    }
    var nameElmnts = songDoc.getElementsByTagName('name');
    setlistName = nameElmnts[0].firstChild.nodeValue;
    var songElmnts = songDoc.getElementsByTagName('song');
    songs = new Array();
    for (var i=0; i<songElmnts.length; i++) {
        var artist="";
        var title="";
        var genre="";
        var decade="";
    	for (var j=0; j < songElmnts[i].childNodes.length; j++) {
        	if (songElmnts[i].childNodes[j].nodeType != 1) continue;
        	if (songElmnts[i].childNodes[j].nodeName == 'title') {
        	    title = songElmnts[i].childNodes[j].firstChild.nodeValue;
        	} else if (songElmnts[i].childNodes[j].nodeName == 'artist') {
                artist = songElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (songElmnts[i].childNodes[j].nodeName == 'genre') {
                genre = songElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (songElmnts[i].childNodes[j].nodeName == 'decade') {
                decade = songElmnts[i].childNodes[j].firstChild.nodeValue;
        	} else {
            	alert("unknown tag "+songElmnts[i].childNodes[j].nodeName+": value "+songElmnts[i].childNodes[j].firstChild.nodeValue);
        	}
    	}
        songs[i]=new Song(artist, title, genre, decade);
    }
    setlistReady = true;  
}

function readGiglist(gigDoc) {
    if (gigDoc == null) {
        alert("gig list xml document not found");
    }
    var gigElmnts = gigDoc.getElementsByTagName('gig');
    gigs = new Array();
    for (var i=0; i<gigElmnts.length; i++) {
        var venue="";
        var day="";
        var month="";
        var year="";
        var location="";
        var isPrivate="false";
        var comment="";
        var details="";
        for (var j=0; j < gigElmnts[i].childNodes.length; j++) {
            if (gigElmnts[i].childNodes[j].nodeType != 1) continue;
            if (gigElmnts[i].childNodes[j].firstChild == null) continue;
            if (gigElmnts[i].childNodes[j].nodeName == 'venue') {
            	venue = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'day') {
                day = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'month') {
                month = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'year') {
                year = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'location') {
                location = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'private') {
                isPrivate = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'comment') {
                comment = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else if (gigElmnts[i].childNodes[j].nodeName == 'details') {
                details = gigElmnts[i].childNodes[j].firstChild.nodeValue;
            } else {
               alert("unknown tag "+gigElmnts[i].childNodes[j].nodeName+": value "+gigElmnts[i].childNodes[j].firstChild.nodeValue);
            }
            // TODO make a better date
            date = formatDate(day, month, year);
            if (isPrivate == "false") {
            	gigs[i] = new Gig(date, venue, details);
            } else {
            	gigs[i] = new Gig(date, "Private function", location);
            }
        }
    }
    giglistReady = true;
}


function buildSetList() {
    var doc = newWindow.document;
    // find the elements we need
    var title = doc.getElementById("listTitle");
    var listmain = doc.getElementById("listMain");
    if (title == null ||listmain == null || !setlistReady) {
        // Sometimes the window is not there so wait a bit
    	setTimeout('buildSetList();', 300);
    } else{
    	var row;
    	var col;
      	title.innerHTML = "Stone Gecko: "+setlistName+" set list ";
      	var content = doc.createElement('table' );
        content.setAttribute('width', '100%');
      	var tbody = doc.createElement('tbody');
//        tbody.setAttribute('style', 'border: 1; background-color: silver;');
        row = doc.createElement('tr');
        col = doc.createElement('td');
        col.setAttribute('width', '50%');
        col.innerHTML='<h2 class="style2">Artist</a>';
        row.appendChild(col);
        col = doc.createElement('td');
        col.setAttribute('width', '50%');
        col.innerHTML='<h2 class="style2">Title</a>';
        row.appendChild(col);
        tbody.appendChild(row);
        for (var i = 0; i < songs.length; i++) {
            var artist = songs[i].artist;
            if (artist == null) {
               artist = "unknown";
            }
            var track = songs[i].title;
            if (track == null) {
                track = "unknown";
            }
            row = doc.createElement('tr');

            col = doc.createElement('td');
            //one way for Mozilla
            col.setAttribute('class', 'style1');
            //another for IE !
            col.setAttribute('className', 'style1');
            var tmp = doc.createTextNode(artist);
            col.appendChild(tmp);
            row.appendChild(col);
            
            col = doc.createElement('td');
            //one way for Mozilla
            col.setAttribute('class', 'style1');
            //another for IE !
            col.setAttribute('className', 'style1');
            tmp=doc.createTextNode(track);
            col.appendChild(tmp);
            row.appendChild(col);

            tbody.appendChild(row);
		}
        content.appendChild(tbody);
        listmain.appendChild(content);
	}
}

function buildGigList() {
	var entry;
    var doc = newWindow.document;
    // find the elements we need
    var title = doc.getElementById("listTitle");
    var listmain = doc.getElementById("listMain");
    if (title == null ||listmain == null | !giglistReady) {
        // Sometimes the window is not there so wait a bit
        setTimeout('buildGigList();', 300);
    } else{
        title.innerHTML = "Stone Gecko: Gig List "+giglistYear;
        for (var i = 0; i < gigs.length; i++) {
            date = gigs[i].date;
            title= gigs[i].title;
            details= gigs[i].details;
            // create a new element
            entry=doc.createElement('p');
            entry.setAttribute('class', 'style1');
            entry.setAttribute('className', 'style1');
            entry.innerHTML = "<strong>"+date+": "+title+"</strong><br/>"+ details;
            listmain.appendChild(entry);
        }
    }
}

// constants for date formatter
var days =  ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var months =["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

function formatDate(day, month, year) {
	theDate = new Date();
	theDate.setFullYear(year, month-1, day);
	var s='th';
	if (day == 1 || day == 21|| day == 31) {
		s='st';
	} else if (day == 2 || day == 22) {
		s = 'nd';
	}
	dow = theDate.getDay();
	txt= days[dow]+' '+day+'<sup>'+s+'</sup>'+' '+months[month-1]+' '+year; 
	return txt;
}

//-->