var http = false;
var releaseXML = null;
var isValid = true;

function loadXML()
{
	isValid = true;
	//load xml file
	// code for IE
	if (window.ActiveXObject)
	{
		releaseXML = new ActiveXObject("Microsoft.XMLDOM");
		releaseXML.async = false;
		var isValidXML = releaseXML.loadXML(http.responseText);
		if(!isValidXML)
		{
			isValid = false;
		}
	}

	// code for Mozilla, etc.
	else if (document.implementation && document.implementation.createDocument)
	{
		var parser = new DOMParser();
		releaseXML = parser.parseFromString(http.responseText, "text/xml");
		
		if(releaseXML.documentElement.nodeName != "resp")
		{
			isValid = false;
		}
	}
	else
	{
		alert('Your browser can\'t handle this script');
	}
}


function getHTTPObject()
{
	var xmlhttp = false;
	
	if (window.ActiveXObject)
	{
		try
		{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	else if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
	{
		xmlhttp = new XMLHttpRequest();
		if (xmlhttp.overrideMimeType)
		xmlhttp.overrideMimeType('text/xml');
		if (!xmlhttp)
		xmlhttp = null;
	}
	return xmlhttp;
}


function getNewRelease()
{
	document.getElementById("DiscogsPopulation").innerHTML = "Populating...";
	
	var urlic = "discogs.php?id=" + document.getElementById("ajdi").value;
	
	http = getHTTPObject();
	http.onreadystatechange = getReleaseInfo;
	http.open("GET", urlic, true);
	http.send(null);
}


function getReleaseInfo()
{
	var form = '';
	var title = '';
	var album = '';
	
	if (http.readyState == 4)
	{
		if (http.status == 200)
		{
			loadXML();
			if (!isValid)
			{
				document.getElementById("DiscogsPopulation").innerHTML = "Release not found. Please check on Discogs if release is available.";
			}
			else
			{                               
				form = form + "Artist: ";
				form = form + getArtists(releaseXML.documentElement);
				form = form + "\n";
				form = form + "Album: ";
				form = form + getAlbum(releaseXML.documentElement);
				form = form + "\n";
				form = form + "Discogs: ";
				form = form + getDiscogsLink(releaseXML.documentElement);
				form = form + "\n";
				form = form + "Label: ";
				form = form + getLabel(releaseXML.documentElement);
				form = form + "\n";
				form = form + "Catalog#: ";
				form = form + getCatalog(releaseXML.documentElement);
				form = form + "\n";
				form = form + "Released: ";
				form = form + getReleased(releaseXML.documentElement);
				form = form + "\n";
				form = form + "Style: ";
				form = form + getStyle(releaseXML.documentElement);
				form = form + "\n\n";
				form = form + "Tracklist: ";
				form = form + "\n";
				form = form + getTracklist(releaseXML.documentElement);

				title = title + getArtists(releaseXML.documentElement);

				if (document.getElementById("request_artist") != null)
				{
					document.getElementById("request_artist").value = title;
					album = album + getAlbum(releaseXML.documentElement);
					document.getElementById("request_album").value = album;
				}
				else
				{
					form = form + "\n";
					form = form + getImage(releaseXML.documentElement);
					title = title + " - ";
					title = title + getAlbum(releaseXML.documentElement);
					document.getElementById("TopicTitle").value = title;
				}
				document.getElementById("ed-0_textarea").value = form;
			}
		}
		else
		{
			document.getElementById("DiscogsPopulation").innerHTML = "Server is too busy or not responding in timely fashion, please try again little bit later.";
		}
		document.getElementById("DiscogsPopulation").innerHTML = "Done!";
	}
}


function getArtists(xmlRelease)
{
    var artists;
    var artistsValue = '';
    var artistsNodes = xmlRelease.getElementsByTagName("artists");

    for (var i = 0; i < artistsNodes.length; i++)
    {
        if (artistsNodes[i].parentNode.tagName == "release")
        {
            artists = artistsNodes[i].getElementsByTagName("artist");

            for (var j = 0; j < artists.length; j++)
            {
                var reg =/(\()([0-9]{1}|[1-9]{1}[0-9]{1}|1[0-9]{1}[0-9]{1}|2[0-4]{1}[0-9]{1}|25[0-5])(\))/g;
                var name = '';
                var anv = '';
                var join = '';
                name = artists[j].getElementsByTagName("name")[0].firstChild.data;
                name = formatArtistName(name);
                if (artists[j].getElementsByTagName("anv")[0])
                {
                    anv = artists[j].getElementsByTagName("anv")[0].firstChild.data;
                    anv = formatArtistName(anv);
                }
                if (artists[j].getElementsByTagName("join")[0])
                join = artists[j].getElementsByTagName("join")[0].firstChild.data;

                artistsValue = artistsValue + " " + (anv.length > 0 ? anv.replace(reg,'') : name.replace(reg,'')) + " " + (join.length > 0 ? join : '');
            }
        }
    }
    return artistsValue.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function getDiscogsLink(xmlRelease)
{
	var releaseId = xmlRelease.getElementsByTagName("release")[0].attributes.getNamedItem("id").nodeValue;
	return "http://www.discogs.com/release/" + releaseId;
}


function getAlbum(xmlRelease)
{
	var titles = xmlRelease.getElementsByTagName("title");
	var title = '';
	for (var i = 0; i < titles.length; i++)
	{
		if (titles[i].parentNode.tagName == "release")
		{
			title = titles[i].firstChild.data;
		}
	}
	return title;
}


function getLabel(xmlRelease)
{
	var labels = xmlRelease.getElementsByTagName("labels");
	var labelValue = '';
	var label = '';
	for (var i = 0; i < labels.length; i++)
	{
		label = labels[i].getElementsByTagName("label");
		for (var j = 0; j < label.length; j++)
		{
			labelValue = labelValue + label[j].attributes.getNamedItem("name").nodeValue + " / ";
		}
	}
	return labelValue.substring(0, labelValue.lastIndexOf("/")).replace(/^\s+/g, '').replace(/\s+$/g, '');
}


function getCatalog(xmlRelease)
{
	var labels = xmlRelease.getElementsByTagName("labels");
	var catalog = '';
	var catalogValue = '';
	for (var i = 0; i < labels.length; i++)
	{
		catalog = labels[i].getElementsByTagName("label");
		for (var j = 0; j < catalog.length; j++)
		{
			catalogValue = catalogValue + catalog[j].attributes.getNamedItem("catno").nodeValue + " / ";
		}
	}
	return catalogValue.substring(0, catalogValue.lastIndexOf("/")).replace(/^\s+/g, '').replace(/\s+$/g, '');
}


function getReleased(xmlRelease)
{
	if (xmlRelease.getElementsByTagName("released")[0] && xmlRelease.getElementsByTagName("released")[0].firstChild != null)
	return xmlRelease.getElementsByTagName("released")[0].firstChild.data;
	else return 'N/A';
}


function getStyle(xmlRelease)
{
	var styles = xmlRelease.getElementsByTagName("styles");
	var style = '';
	var styleValue = '';
	for (var i = 0; i < styles.length; i++)
	{
		style = styles[i].getElementsByTagName("style");
		for (var j = 0; j < style.length; j++)
		{
			styleValue = styleValue + style[j].firstChild.data + " / ";
		}
	}
	return styleValue.substring(0, styleValue.lastIndexOf("/")).replace(/^\s+/g, '').replace(/\s+$/g, '');
}


function getTracklist(xmlRelease)
{
    var tracks = xmlRelease.getElementsByTagName("track");
    var tracklist = '';

    for (var i = 0; i < tracks.length; i++)
    {
        var position;
        if(tracks[i].getElementsByTagName("position")[0] && tracks[i].getElementsByTagName("position")[0].firstChild)
        position = tracks[i].getElementsByTagName("position")[0].firstChild.data;
        else
        position = '';
        var artists = tracks[i].getElementsByTagName("artists");
        var artist = '';
        var artistValue = '';
        for (var j = 0; j < artists.length; j++)
        {
            artist = artists[j].getElementsByTagName("artist");

            for (var k = 0; k < artist.length; k++)
            {
                var name = '';
                var anv = '';
                var join = '';
                name = artist[k].getElementsByTagName("name")[0].firstChild.data;
                name = formatArtistName(name)
                if (artist[k].getElementsByTagName("anv")[0])
                {
                    anv = artist[k].getElementsByTagName("anv")[0].firstChild.data;
                    anv = formatArtistName(anv);
                }
                if (artist[k].getElementsByTagName("join")[0])
                join = artist[k].getElementsByTagName("join")[0].firstChild.data;
                var reg =/(\()([0-9]{1}|[1-9]{1}[0-9]{1}|1[0-9]{1}[0-9]{1}|2[0-4]{1}[0-9]{1}|25[0-5])(\))/g;
                artistValue = artistValue + (anv.length > 0 ? anv.replace(reg,'') : name.replace(reg,'')) + " " + (join.length > 0 ? " " + join + " " : " / ");
            }
        }
        
        artistValue = artistValue.substring(0, artistValue.lastIndexOf("/")).replace(/^\s+/g, '').replace(/\s+$/g, '');
        var title = tracks[i].getElementsByTagName("title")[0].firstChild.data;
        var duration = '';
        if (tracks[i].getElementsByTagName("duration")[0] && tracks[i].getElementsByTagName("duration")[0].firstChild != null)
        duration = "(" + tracks[i].getElementsByTagName("duration")[0].firstChild.data + ")";
        if(position == '' && position.length == 0)
        {
            tracklist = tracklist + '\n[b]'+title+'[/b]\n\n';            
        }
        else
        {
            tracklist = tracklist + position + " " + artistValue + (artistValue.length > 0 ? " - " : "") + title + " " + duration + "\n";
        }
    }
    return tracklist;
}


function getImage(xmlRelease)
{
	var images = xmlRelease.getElementsByTagName("images");
	var imageURL = '';
	var imageValue = '';
	var image = '';
	for (var i = 0; i < images.length; i++)
	{
		image = images[i].getElementsByTagName("image");
		if (image)
		{
			imageURL = image[0].attributes.getNamedItem("uri150").nodeValue;
			imageValue = "[img]" + imageURL.replace("http://www.discogs.com/image", "http://www.torrentech.org/uploads/discogs") + "[/img]";

			urlimg = "discogs.php?op=getimage&imgurl=" + imageURL;
	
			http = getHTTPObject();
			http.open("GET", urlimg, true);
			http.send(null);
		}
	}
	return imageValue;
}


function formatArtistName(strvalue)
{
    if (strvalue.indexOf(', The') != -1)
    {
        strvalue = 'The ' + strvalue.substring(0, strvalue.indexOf(', The'));
    }
    return strvalue;
}