function readXML(name, url)
{
	var item = null;
	var xmlDoc=null;
	var XMLFile = new Array();
	if (window.ActiveXObject)
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	else if (document.implementation && document.implementation.createDocument)
		xmlDoc=document.implementation.createDocument("","",null);
	else
		alert('Your browser cannot read XML files.');
	if (xmlDoc!=null)
	{
		xmlDoc.async=false;
		xmlDoc.load(url);
		for (var i in name)
			XMLFile[i] = xmlDoc.getElementsByTagName(name[i]);
	}
	return XMLFile;
}

// Objects
function XML_to_Address(item)
{
	var address = new Address();
	address.id = item.getAttribute("Id");
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Country':address.country = value;break;
		case 'Street':address.street = value;break;
		case 'Town':address.town = value;break;
		}
	}
	return address;
}
function XML_to_Gig(item, link_band, link_location, address, songs)
{
	var pictures = new Array(new Affiches(), new Pictures());
	var gig = new Gig();
	gig.id = item.getAttribute("Id");
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i];
		switch(value.nodeName)
		{
		case 'Affiches':gig.affiches = setupAffiches(value);break;
		case 'Description':gig.description = setupDescription(value);break;
		case 'Details':gig.details = setupDetails(value, link_location, address);break;
		//case 'GoogleMap':gig.googleMap = setupGoogleMap(value);break;
		case 'LiveTakes':gig.liveTakes = setupLiveTakes(value);break;
		case 'OnStage':gig.onStage = setupOnStage(value, link_band);break;
		case 'Pictures':gig.pictures = setupPictures(value);break;
		case 'Playlist':gig.playlist = setupPlaylist(value, songs);break;
		}
	}
	return gig;
}
function XML_to_Member(item)
{
	var member = new Member();
	member.name = item.getAttribute("Name");
	member.kind = item.getAttribute("Kind");
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Description':member.description=value;break;
//		case 'Gear':member.gear=value;break;
		case 'Functions':member.functions=setupFunctions(item.childNodes[i]);break;
		case 'Home':member.home=value;break;
		case 'LongName':member.longname=value;break;
		case 'Pictures':member.pictures=setupPictures(item.childNodes[i]);break;
		case 'ShortName':member.shortname=value;break;
		}
	}
	return member;
}
function XML_to_Link(item)
{
	var link = new Link();
	link.id = item.getAttribute("Id");
	link.kind = item.getAttribute("Kind");
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Text':link.text = value;break;
		case 'Url':link.url = value;break;
		}
	}
	return link;
}
function XML_to_Song(item)
{
	var song = new Song();
	song.kind = item.getAttribute("Kind");
	song.title = item.getAttribute("Title");
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'CD':song.cd = value;break;
		case 'Date':song.date = toDate(value);break;
		case 'Description':song.description = value;break;
		case 'LiveTakes':song.liveTakes = setupLiveTakes(item.childNodes[i]);break;
		case 'Lyrics':song.lyrics = value;break;
		case 'Members':song.members = setupMembers(item.childNodes[i]);break;
		case 'Picture':song.picture = value;break;
		}
	}
	return song;
}

// Setup
function setupAddress(item)
{
	var address = new Address();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Country':address.country = value;break;
		case 'Street':address.street = value;break;
		case 'Town':address.town = value;break;
		}
	}
	return address;
}
function setupAffiches(item)
{
	var number = 0;
	var affiches = new Affiches();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i];
		if (value.nodeName == 'Picture')
			affiches[number++] = setupPicture(value, 'Affiches');
	}
	return affiches;

}
function setupBand(name, links)
{
	var band = new Band();
	band.name = name;
	band.link = getLinkById(links, band.name);
	return band;
}
function setupDescription(item)
{
	var number = 0;
	var description = new Description();
	for (var i = 0; i < item.childNodes.length; i++)
		if (item.childNodes[i].nodeName == 'Paragraph')
			description[number++] = item.childNodes[i].childNodes[0].nodeValue;

	return description;
}
function setupDetails(item, links, address)
{
	var details = new Details();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Date':details.date = toDate(value);break;
		case 'Hour':details.hour = value;break;
		case 'Id':details.id = value;break;
		case 'Name':details.name = value;break;
		case 'Title':details.title = value;break;
		}
	}
	details.address = getAddressById(address, details.id);
	details.link = getLinkById(links, details.id);
	return details;
}
function setupFunctions(item)
{
	var number = 0;
	var functions = new Array();
	for (var i = 0; i < item.childNodes.length; i++)
		functions[number++] = item.childNodes[i].childNodes[0].nodeValue;

	return functions;
}
function setupGoogleMap(item)
{
	var googleMap = new GoogleMap();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Icon':googleMap.icon = value;break;
		case 'Text':googleMap.text = value;break;
		case 'Picture':googleMap.picture = setupPicture(item.childNodes[i]);break;
		}
	}
	return googleMap;
}
function setupLiveTakes(item)
{
	var liveTakes = new LiveTakes();
	for (var i = 0; i < item.childNodes.length; i++)
		if (item.childNodes[i].nodeName == 'Video')
			liveTakes[i] = setupVideo(item.childNodes[i]);
	return liveTakes;
}
function setupMembers(item)
{
	var members = new Array();
	for (var i = 0; i < item.childNodes.length; i++)
		members[i] = item.childNodes[i].childNodes[0].nodeValue;
	return members;

}
function setupOnStage(item, links)
{
	var onStage = new OnStage();
	for (var i = 0; i < item.childNodes.length; i++)
		if (item.childNodes[i].nodeName == 'Band')
			onStage[i] = setupBand(item.childNodes[i].childNodes[0].nodeValue, links);
	return onStage;
}
function setupPicture(item, kind)
{
	var picture = new Picture();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Alt':picture.alt = value;break;
		case 'Link':picture.link = value;break;
		case 'Text':picture.text = value;break;
		case 'Size':picture.size = toSize(value);break;
		case 'Src':picture.src = new Src(value, kind);break;
		}
	}
	return picture;
}
function setupPictures(item)
{
	var number = 0;
	var pictures = new Pictures();
	for (var i = 0; i < item.childNodes.length; i++)
		if (item.childNodes[i].nodeName == 'Picture')
			pictures[number++] = setupPicture(item.childNodes[i], 'Pictures');
	return pictures;
}
function setupPlaylist(item, songs)
{
	var number = 0;
	var playlist = new Playlist();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		if (item.childNodes[i].nodeName == 'Song')
			playlist[number++] = getSongByTitle(songs, value);
	}
	return playlist;
}
function setupVideo(item)
{
	var video = new Video();
	for (var i = 0; i < item.childNodes.length; i++)
	{
		value = item.childNodes[i].childNodes[0].nodeValue;
		switch(item.childNodes[i].nodeName)
		{
		case 'Text':video.text = value;break;
		case 'Url':video.url = new Url(value);break;
		}
	}
	return video;
}

// Get by Id
function getAddressById(address, id)
{
	var addr = new Address();
	for (var i in address)
		if (id == address[i].id)
			addr = address[i];
	return addr;
}
function getLinkById(links, id)
{
	var link = new Array();
	for (var i in links)
		if (id == links[i].id)
			link[link.length] = links[i];
	return link;
}
function getSongByTitle(songs, title)
{
	var song = title;
	for (var j in songs)
		if (parseInt((j+1)) && title == songs[j].title)
			song = songs[j];
	return song;
}

// Get objects
function getAllAddressFromXML(XMLFile)
{
	var item = new Array();
	for (var i = 0; i < XMLFile.length; i++)
		item[i] = XML_to_Address(XMLFile[i]);
	return item;
}
function getAllGigFromXML(XMLFile, links, address, songs)
{
	var link_band = new Array();
	var link_location = new Array();
	for (var i in links)
		if (links[i].kind == "Band")
			link_band[link_band.length] = links[i];
		else if (links[i].kind == "Place")
			link_location[link_location.length] = links[i];
	var item = new Array();
	for (var i = 0; i < XMLFile.length; i++)
		item[i] = XML_to_Gig(XMLFile[i], link_band, link_location, address, songs);
	return item;
}
function getAllLinkFromXML(XMLFile)
{
	var item = new Array();
	for (var i = 0; i < XMLFile.length; i++)
		item[i] = XML_to_Link(XMLFile[i]);
	return item;
}
function getAllMembersFromXML(XMLFile)
{
	var item = new Array();
	for (var i = 0; i < XMLFile.length; i++)
		item[i] = XML_to_Member(XMLFile[i]);
	return item;
}
function getAllSongFromXML(XMLFile)
{
	var item = new Songs();
	for (var i = 0; i < XMLFile.length; i++)
		item[i] = XML_to_Song(XMLFile[i]);
	return item;
}
