/* 
 * AJAX driver
 * 
 * generates out XMLHttpRequest Object
 * 
 * Steffen Knott
 * 
 */


var resObjekt = null;
function erzXMLHttpRequestObject()
{
    var resObjekt = null;
    try
    {
        resObjekt = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(Error)
    {
        try
        {
            resObjekt = new ActiveXObject ("MSXML2.XMLHTTP")
        }
        catch(Error)
        {
            try
            {
                resObjekt = new XMLHttpRequest();
            }
            catch(Error)
            {
                alert("Erzeugung des XMLHttpRequest-Objects nicht möglich!");
            }
        }
    }
    return resObjekt;
}

function addStep(id, step)
{
    var schonVorhanden = false;
    
    for (var i=0; i < steps.length; i++)
        { 
            if (steps[i] == id)
            {
                alert ("Step \"" + step + "\" already selected!");
                schonVorhanden = true;
            }
        }
    if (schonVorhanden == false)
      {
            document.getElementById("steps_selected").innerHTML = 
				document.getElementById("steps_selected").innerHTML 
				+ "<span class='step_instance' id='step" + id + "'>" 
				+ "Step included: <strong>" 
				+ step 
				+ "</strong> <a href='#' target='_self' onclick='deleteStep("+id+")'><img src='/img/icons/delete_me.gif' alt='x' border='0' /></a></span><br />";
            steps.push(id);
			
			
			
			//document.getElementById("stepids").value=steps.join(",");
			//document.getElementById("autocomplete").value = "";
			sendCountResultsRequest();
      }
    
}

function deleteStep(id)
{
    obj = document.getElementById("step"+id);
    obj.parentNode.removeChild(obj);
    for (var i=0; i < steps.length; i++)
        {
            if (steps[i] == id)
            {
                steps.splice(i, 1);
            }
        }
	sendCountResultsRequest();
}






/*		Generelle Funktionen 		*/







function sendCountResultsRequest()
{
	document.getElementById("autocomplete").value = "";
	document.getElementById("autocomplete_artist").value = "";
	document.getElementById("autocomplete_setup").value = "";

if (steps.length > 0 || artists.length > 0 || setups.length > 0)
    {   // Eigentlich müsste man die Formularfeldeingabe escapen, dann gibt es aber problem mit den umlauten.
		//if (document.getElementById("bpm_active").checked == true)
		//{
			//var bpm = "&bpmfrom=" + document.getElementById("bpm_from").value + "&bpmto=" + document.getElementById("bpm_to").value;
		//}
        resObjekt.open('get', '/clogging/ajax/ajax_get_resultcount.php?steps=' + steps.join(",") + '&artists=' + artists.join(",") + '&setups=' + setups.join(","), true);
        resObjekt.onreadystatechange = handleResponse;
        resObjekt.send(null);
        document.getElementById("result").innerHTML = "<img src='/img/icons/loading.gif' alt='Daten werden geladen...' />";
    }
    else
       {
           document.getElementById("result").style.visibility = "hidden"
       }
}


function handleResponse()
{
    if (resObjekt.readyState == 4)
        {
            document.getElementById("result").style.visibility = "visible"
            document.getElementById("result").innerHTML = resObjekt.responseText;
        }   
}






/* ARTIST */


function addArtist(id, artist)
{
    var schonVorhanden = false;
    
    for (var i=0; i < artists.length; i++)
        { 
            if (artists[i] == id)
            {
                alert ("Artist \"" + artist + "\" already selected!");
                schonVorhanden = true;
            }
        }
    if (schonVorhanden == false)
      {
            document.getElementById("artists_selected").innerHTML = 
				document.getElementById("artists_selected").innerHTML 
				+ "<span class='artist_instance' id='artist" + id + "'>" 
				+ "Artist involved: <strong>" 
				+ artist 
				+ "</strong> <a href='#' target='_self' onclick='deleteArtist("+id+")'><img src='/img/icons/delete_me.gif' alt='x' border='0' /></a></span><br />";
            artists.push(id);
			sendCountResultsRequest();
      }
    
}

function deleteArtist(id)
{
    obj = document.getElementById("artist"+id);
    obj.parentNode.removeChild(obj);
    for (var i=0; i < artists.length; i++)
        {
            if (artists[i] == id)
            {
                artists.splice(i, 1);
            }
        }
	sendCountResultsRequest();

}




/* SETUP */


function addSetup(id, setup)
{
    var schonVorhanden = false;
    
    for (var i=0; i < setups.length; i++)
        { 
            if (setups[i] == id)
            {
                alert ("Setup \"" + setup + "\" already selected!");
                schonVorhanden = true;
            }
        }
    if (schonVorhanden == false)
      {
            document.getElementById("setups_selected").innerHTML = 
				document.getElementById("setups_selected").innerHTML 
				+ "<span class='setup_instance' id='setup" + id + "'>" 
				+ "Setup: <strong>" 
				+ setup 
				+ "</strong> <a href='#' target='_self' onclick='deleteSetup("+id+")'><img src='/img/icons/delete_me.gif' alt='x' border='0' /></a></span><br />";
            setups.push(id);
			sendCountResultsRequest();
      }
    
}

function deleteSetup(id)
{
    obj = document.getElementById("setup"+id);
    obj.parentNode.removeChild(obj);
    for (var i=0; i < setups.length; i++)
        {
            if (setups[i] == id)
            {
                setups.splice(i, 1);
            }
        }
	sendCountResultsRequest();
}



/*		alte Funktionen 	*/









function showRelated(tag)
{
    if (tag.value != "")
    {   // Eigentlich müsste man die Formularfeldeingabe escapen, dann gibt es aber problem mit den umlauten.
        resObjekt.open('get', 'ajax_get_taglist.jsp?tag=' + tag.toLowerCase(), true);
        resObjekt.onreadystatechange = handleResponse;
        resObjekt.send(null);
        document.getElementById("tagging").innerHTML = "<img src='/img/loading.gif' alt='Daten werden geladen...' />";
    }
    else
       {
           document.getElementById("tagging").style.visibility = "hidden";
           document.getElementById("tags").value = "";
       }
}

function alteShowRelated(id)
{
    if (id != "")
    {   // Eigentlich müsste man die Formularfeldeingabe escapen, dann gibt es aber problem mit den umlauten.
        resObjekt.open('get', 'ajax_get_related_tags.jsp?tags=' + id, true);
        resObjekt.onreadystatechange = handleRelatedResponse;
        resObjekt.send(null);
        document.getElementById("suggested_tags").innerHTML = "<img src='/img/loading.gif' alt='Daten werden geladen...' />";
    }
    else
       {
           document.getElementById("suggested_tags").style.visibility = "hidden"
       }
}

function sendTagBaumRequest()
{
    var expanded = expandedTagBaumItems.join(",");
    resObjektTagBaum.open('get', 'ajax_get_tagbaum.jsp?expanded='+expanded, true);
    resObjektTagBaum.onreadystatechange = handleTagBaumResponse;
    resObjektTagBaum.send(null);
    document.getElementById("tagbaum").innerHTML = "<img src='/img/loading.gif' alt='Daten werden geladen...' />";
}

function addtagwithparent(parent)
{
document.getElementById("addtag").innerHTML = "Bitte geben Sie den Namen des neuen Tags ein und klicken danach auf 'Tag speichern'.<br /><br /><input type='text' id='tagname' size='20'><input type='button' onclick='do_addtag("+parent+")' value='Tag speichern'><br /><br />"
}


function do_addtag(parent)
{
var tag = document.getElementById("tagname").value;
//alert("would add '" + tag + "' with " + parent + " as parent");

    resObjektCreateTag.open('get', 'ajax_create_tag.jsp?parent='+parent+'&tagname='+tag, true);
    resObjektCreateTag.onreadystatechange = handleCreatedTag;
    resObjektCreateTag.send(null);
    document.getElementById("addtag").innerHTML = "<br />";


}

function handleCreatedTag()
{
    if (resObjektCreateTag.readyState == 4)
        {
            alert("Neuer Tag wurde angelegt!");
            // DIAG alert(resObjektCreateTag.responseText);
            showAddTag();
        }
}


function reduziereTagBaum(id)
{
    for (var i=0; i < expandedTagBaumItems.length; i++)
        {
            if (expandedTagBaumItems[i] == id)
            {
                expandedTagBaumItems.splice(i,1);
            }
        }
    sendTagBaumRequest();
}

function erweitereTagBaum(id)
{
    expandedTagBaumItems.push(id);
    sendTagBaumRequest()
}


function handleRelatedResponse()
{
    if (resObjekt.readyState == 4)
        {
            document.getElementById("suggested_tags").style.visibility = "visible"
            document.getElementById("suggested_tags").innerHTML = resObjekt.responseText;
        }   
}

function handleTagBaumResponse()
{
    if (resObjekt.readyState == 4)
        {
            document.getElementById("tagbaum").style.visibility = "visible"
            document.getElementById("tagbaum").innerHTML = resObjektTagBaum.responseText;
        }   
}



function showAddTag()
{
    document.getElementById("taglist").innerHTML = "<p>Hier k&ouml;nnen Sie eigene Tags hinzuf&uuml;gen. Navigieren Sie dazu an die entsprechende Stelle im Tagbaum und klicken dann den Tag an, dem Sie den neuen Tag unterordnen wollen.</p><div id='tagbaum' class='tagbaum'></div>";
    sendTagBaumRequest();
}

resObjekt = erzXMLHttpRequestObject();
resObjektTagBaum = erzXMLHttpRequestObject();
resObjektCreateTag = erzXMLHttpRequestObject();
resObjektRelated = erzXMLHttpRequestObject();
steps = new Array();
artists = new Array();
setups = new Array();
expandedTagBaumItems = new Array();
expandedTagBaumItems.push("0");
