//////////////////////////////////////////////////////////////
//Copyright 2006-2007 Yoogli
//requires js_ajax.js

var g_raceid=0;
var g_sresult_arr=new Array();
var g_display_arr=new Array();

var g_mylibrary=new Array();
var g_searchstr='';
var g_seedlist_arr =new Array();
var g_playlist_arr =new Array();
var g_spunplaylist=-1;
var g_maxresults=15;
var g_defaulttext='Enter Artist Name Here';
var g_lastsort=0;
var g_lastkeyword='';

function track_obj(artist,track,trackid)
{
    var obj = new Object();
    obj.artist   = artist;
    obj.track   = track;
    obj.trackid= trackid;
    obj.type='T';
    return obj;
}


function show_library_search(){
    show_element('filter_library_div');
    hide_element('search_database_div');
    sort_tracklist(g_lastsort);
    filteronkeyword(' '+document.getElementById('libraryfield').value);
}
function show_database_search(){
    show_element('search_database_div');
    hide_element('filter_library_div');
    g_display_arr = g_sresult_arr;
    sort_tracklist(g_lastsort);
    g_lastkeyword = document.getElementById('searchfield').value;
    display_tracklist(0);
}
function reset_search(){
    try
    {
        if (document.getElementById('search_lib_radio_id').checked)
           show_library_search();
    }
    catch(e){}
}

///////////////////////////////////////////////////////////////
//AJAX - Track Search
///////////////////////////////////////////////////////////////
function tracksearch_keypress(e)
{
    if (!is_enterpress_event(e))
         return true;
    tracksearch();
    return false;
}
function tracksearch()
{
    var str = document.getElementById('searchfield').value;
    if (str.length==0)
        return;
    if (str==g_defaulttext)
        return;

    g_lastkeyword = str;

    var paramsobj = new Object();
    paramsobj.string = str;



    AJAX.execute(ajax_tracksearch_all_setup,    ajax_tracksearch_response, paramsobj);
}
function ajax_tracksearch_all_setup(paramsobj)
{
    var myObject = new Object();
    myObject.action  = 'track_lookup';
    myObject.id      = g_raceid++;
    myObject.context = 'user';
    
    myObject.session = g_session;
    myObject.string  = paramsobj.string;
    
    
    return myObject;
}
function ajax_tracksearch_response(ajaxobj,paramsobj)
{
    var search_xml = XML.getDocumentTag(ajaxobj.responseXML);
    if (XML.getTextByName(search_xml,"result")=="fail")
    {
        alert( 'failure:' + XML.getTextByName(search_xml,"reason") );
    }
    else
    {
        var trackxml = XML.getChildrenByTagName(search_xml, "track");
        if (trackxml.length==0)
        { alert('There is a problem connecting to our server.  Your internet connection may have cut out, or our server is down.'); return; }

        parse_xml_searchresults( trackxml );
        g_lastsort=4;
        display_tracklist(0);
    }
}
function parse_xml_searchresults(tracks)
{
    g_sresult_arr=new Array();
    
    for(var i=0; i<tracks.length; i++)
    {
        //also available: "artist_id", "length", "genre", "rating_val"
        var artistid  = XML.getTextByName(tracks[i],"artist_id");
        var artname   = XML.getTextByName(tracks[i],"artist_name");
        var trackname = XML.getTextByName(tracks[i],"name");
        var ratingval = XML.getTextByName(tracks[i],"rating_val");
        var trackid   = XML.getTextByName(tracks[i],"track_id");
        var relevance = XML.getTextByName(tracks[i],"relevance");
        var bstatus   = XML.getTextByName(tracks[i],"buy_status");
        var bsource   = XML.getTextByName(tracks[i],"buy_source");
        var burl      = XML.getTextByName(tracks[i],"buy_url");
        //var bprice    = XML.getTextByName(tracks[i],"buy_price");
        var bprice    ='';
        var prevurl   = XML.getTextByName(XML.getChildrenByTagName(tracks[i],"preview")[0],"url");
        g_sresult_arr[i]=track_obj(artname, trackname,trackid,relevance);
        g_sresult_arr[i].relevance = relevance;
        g_sresult_arr[i].type='P';
        g_sresult_arr[i].buyurl  = spinyoogli_buyurl(g_session,bstatus,burl,bprice,bsource);
        if (g_sresult_arr[i].buyurl.length>0)
            g_sresult_arr[i].buytext = 'buy';
        else
            g_sresult_arr[i].buytext = '';
        //console.log(g_session+","+bstatus+","+burl+","+bprice+","+bsource);
        g_sresult_arr[i].prevurl = prevurl;
        

    }
    g_display_arr = g_sresult_arr;
}

///////////////////////////////////////////////////////////////
//AJAX - Restart Session
///////////////////////////////////////////////////////////////
function renew_guest_session()
{
    var str = document.getElementById('searchfield').value;
    if (str.length==0)
        return;
    if (str==g_defaulttext)
        return;

    g_lastkeyword = str;

    var paramsobj = new Object();
    paramsobj.string = str;



    AJAX.execute(ajax_renewsession_setup,    ajax_renewsession_response, paramsobj);
}
function ajax_renewsession_setup(paramsobj)
{
    var myObject = new Object();
    myObject.action  = 'track_lookup';
    myObject.id      = g_raceid++;
    myObject.context = 'user';
    
    myObject.session = g_session;
    myObject.string  = paramsobj.string;
    return myObject;
}
function ajax_renewsession_response(ajaxobj,paramsobj)
{
    var search_xml = XML.getDocumentTag(ajaxobj.responseXML);
    if (XML.getTextByName(search_xml,"result")=="fail")
    {
        alert( 'failure:' + XML.getTextByName(search_xml,"reason") );
    }
    else
    {
        var trackxml = XML.getChildrenByTagName(search_xml, "track");
        if (trackxml.length==0)
        { alert('There is a problem connecting to our server.  Your internet connection may have cut out, or our server is down.'); return; }

        parse_xml_searchresults( trackxml );
        g_lastsort=4;
        display_tracklist(0);
    }
}
function parse_xml_searchresults(tracks)
{
    g_sresult_arr=new Array();
    
    for(var i=0; i<tracks.length; i++)
    {
        //also available: "artist_id", "length", "genre", "rating_val"
        var artistid  = XML.getTextByName(tracks[i],"artist_id");
        var artname   = XML.getTextByName(tracks[i],"artist_name");
        var trackname = XML.getTextByName(tracks[i],"name");
        var ratingval = XML.getTextByName(tracks[i],"rating_val");
        var trackid   = XML.getTextByName(tracks[i],"track_id");
        var relevance = XML.getTextByName(tracks[i],"relevance");
        var bstatus   = XML.getTextByName(tracks[i],"buy_status");
        var bsource   = XML.getTextByName(tracks[i],"buy_source");
        var burl      = XML.getTextByName(tracks[i],"buy_url");
        //var bprice    = XML.getTextByName(tracks[i],"buy_price");
        var bprice    ='';
        var prevurl   = XML.getTextByName(XML.getChildrenByTagName(tracks[i],"preview")[0],"url");
        g_sresult_arr[i]=track_obj(artname, trackname,trackid,relevance);
        g_sresult_arr[i].relevance = relevance;
        g_sresult_arr[i].type='P';
        g_sresult_arr[i].buyurl  = spinyoogli_buyurl(g_session,bstatus,burl,bprice,bsource);
        if (g_sresult_arr[i].buyurl.length>0)
            g_sresult_arr[i].buytext = 'buy';
        else
            g_sresult_arr[i].buytext = '';
        //console.log(g_session+","+bstatus+","+burl+","+bprice+","+bsource);
        g_sresult_arr[i].prevurl = prevurl;
        

    }
    g_display_arr = g_sresult_arr;
}
///////////////////////////////////////////////////////////////
//AJAX - Load Library
///////////////////////////////////////////////////////////////
//function get_library(){
//    ajax_static(library_response).execute();
//}

function get_library()
{


    AJAX.execute(ajax_libraryfetch_setup, ajax_library_response, new Object());
}
function ajax_libraryfetch_setup(paramsobj){
    var myObject = new Object();
    myObject.action  = 'library';
    myObject.id      = g_raceid++;
//play with the id to control caching vs refreshing
//    myObject.id      = g_raceid++;
    myObject.session = g_session;
    return myObject;
}
function ajax_library_response(ajaxobj, requestobj){
    var xml = XML.getDocumentTag(ajaxobj.responseXML);
    if (xml!= null)
    {
        g_mylibrary=new Array();

        var idx=0;

        var artists = XML.getChildrenByTagName(xml,"a");//        var artists = xml.getElementsByTagName("a");
        for (var i=0; i<artists.length; i++)
        {
            var track_artist= XML.getTextByName( artists[i], 'n');
            var tracks = XML.getChildrenByTagName(artists[i],"t");//artists[i].getElementsByTagName("t");
            for (var j=0; j<tracks.length; j++)
            {
                var track_name = XML.getTextByName( tracks[j], 'n');
                var track_id   = XML.getTextByName( tracks[j], 'i');
                var trackdata  = track_obj(track_artist, track_name, track_id);
                g_mylibrary.push( trackdata );
            }
        }
        g_mylibrary.sort( sort_by_artist );

        g_searchstr = '';
        for(var i=0; i<g_mylibrary.length; i++)
            g_searchstr+= ' '+g_mylibrary[i].artist+' - '+g_mylibrary[i].track+'[|['+i+']|]';
        g_searchstr = g_searchstr.toLowerCase();

        reset_search();
        g_lastsort=0;
    }
}



function searchkeyup(e)
{
    var e   =fixevent(e);
    var targ=findtarget(e);
    var word= ' '+targ.value.toLowerCase();
    filteronkeyword(word);
}
function filteronkeyword(searchtext)
{
    if (searchtext==(' ' + g_defaulttext) )
        return;

    searchtext = searchtext.toLowerCase();

    g_lastkeyword = searchtext;
    if (searchtext.length<=1)
    {
        g_display_arr = g_mylibrary;
        display_tracklist(0);
        return;
    }
    g_display_arr=new Array();
    var results =g_searchstr.split(searchtext);
    for(var i=1; i<results.length; i++)
    {
        var idx1 = results[i].indexOf('[|[');
        var idx2 = results[i].indexOf(']|]');
        if (idx1!=-1 && idx2!=-1 )
        {
           var idx = results[i].substring(idx1+3, idx2);
           if (isInt(idx))
               g_display_arr.push( g_mylibrary[idx] );
        }
    }
    display_tracklist(0);
}

///////////////////////////////////////////////////////////////
//AJAX - Display_Tracklist
///////////////////////////////////////////////////////////////

function sort_by_artist(a,b)
{
    if (a.artist > b.artist) return 1;
    if (a.artist < b.artist) return -1;
    if (a.track > b.track) return 1;
    if (a.track < b.track) return -1;
    return 0;
}

function sort_by_artist_rev(a,b)
{
    if (a.artist > b.artist) return -1;
    if (a.artist < b.artist) return 1;
    if (a.track > b.track) return -1;
    if (a.track < b.track) return 1;
    return 0;
}

function sort_by_track(a,b)
{
    if (a.track > b.track) return 1;
    if (a.track < b.track) return -1;
    if (a.artist > b.artist) return 1;
    if (a.artist < b.artist) return -1;
    return 0;
}

function sort_by_track_rev(a,b)
{
    if (a.track > b.track) return -1;
    if (a.track < b.track) return 1;
    if (a.artist > b.artist) return -1;
    if (a.artist < b.artist) return 1;
    return 0;
}

function sort_by_relevance(a,b)
{
    if (a.relevance > b.relevance) return 1;
    if (a.relevance < b.relevance) return -1;
    if (a.artist > b.artist) return 1;
    if (a.artist < b.artist) return -1;
    return 0;
}

function sort_by_relevance_rev(a,b)
{
    if (a.relevance > b.relevance) return -1;
    if (a.relevance < b.relevance) return 1;
    if (a.artist > b.artist) return -1;
    if (a.artist < b.artist) return 1;
    return 0;
}


/*
function sort_by_artist(a,b)        { return sort_advanced(1, "artist", "track"); }
function sort_by_artist_rev(a,b)    { return sort_advanced(-1, "artist", "track"); }
function sort_by_track(a,b)         { return sort_advanced(1, "track", "artist"); }
function sort_by_track_rev(a,b)     { return sort_advanced(-1, "track", "artist"); }
function sort_by_relevance(a,b)     { return sort_advanced(1, "relevance", "artist"); }
function sort_by_relevance_rev(a,b) { return sort_advanced(-1, "relevance", "artist"); }
function sort_advanced(c,a,b,f1,f2)
{
    if (a[f1] > b[f1]) return c;
    if (a[f1] < b[f1]) return 0-c;
    if (a[f2] > b[f2]) return c;
    if (a[f2] < b[f2]) return 0-c;
    return 0;
}
*/
function sort_tracklist(which)
{
    if (which==0)
        g_display_arr.sort(sort_by_artist);
    else if (which==1)
        g_display_arr.sort(sort_by_artist_rev);
    else if (which==2)
        g_display_arr.sort(sort_by_track);
    else if (which==3)
        g_display_arr.sort(sort_by_track_rev);
    else if (which==4)
        g_display_arr.sort(sort_by_relevance);
    else if (which==5)
        g_display_arr.sort(sort_by_relevance_rev);
    g_lastsort=which;
    display_tracklist(0);
}


function display_tracklist(page)
{
        
    var container_title='trackresults_title';
    var container_body ='trackresults';
    var function_name  ='display_tracklist';
    var nav_left  = 'trackresults_title_navleft';
    var nav_right = 'trackresults_title_navright';

    var titleText = display_list(page, container_title, nav_left, nav_right, container_body, function_name, g_display_arr);

//    document.getElementById(container_title).appendChild( document.createTextNode( titleText ) );
    var trackcount_el = document.getElementById('trackresults_bot');
    removeChildren(trackcount_el);

    if (g_display_arr.length>0)
    {
        trackcount_el.appendChild( document.createTextNode( titleText ) );
        display_sort_link(container_title);
    }
    else
    {

        var sortlinks_el = document.getElementById(container_title);
        var noresults_el = DOMelement('div');
        noresults_el.setAttribute('style','padding-top:10px');
        sortlinks_el.appendChild( noresults_el.createElement() );
        if (g_lastkeyword!=g_defaulttext)
            sortlinks_el.appendChild( document.createTextNode ( "No Results for '"+g_lastkeyword + "'") );
    }
}
function display_sort_link(container_title)
{
    var parent_sortlinks_el = document.getElementById(container_title);
    removeChildren(parent_sortlinks_el);

    var sorts = Array('artist','track','relevance');

    //--------------------
    if(navigator.appName == "Microsoft Internet Explorer")
    {
        for(var i=0; i<sorts.length; i++)
        {
            var whichsort = (i*2);//r is the default sort,
            if (g_lastsort== (whichsort+0) )//forward
                parent_sortlinks_el.appendChild(  document.createTextNode( ' \u2193 ' )  );//down
            if (g_lastsort== (whichsort+1) )//reverse
                parent_sortlinks_el.appendChild(  document.createTextNode( ' \u2191 ' )  );//up

            parent_sortlinks_el.appendChild(  createHrefElement('javascript:sort_tracklist('+((g_lastsort==whichsort)? (g_lastsort+1) : whichsort )+')', sorts[i], 'black')  );

            if (i<(sorts.length-1))//don't show on last iteration
                parent_sortlinks_el.appendChild(  document.createTextNode( ' | ' )  );
        }
     }
     else
     {
        var sortlinks_el = DOMelement('ul');
        sortlinks_el.setAttribute('class', "pb_spintabmenu");
        sortlinks_el = sortlinks_el.createElement();

        for(var i=0; i<sorts.length; i++)
        {
            var whichsort = (i*2);//r is the default sort,
            var sortlabel = sorts[i];
            var tab_el = DOMelement('li');

            if (g_lastsort== (whichsort+0) )//forward
                sortlabel =  ' \u2193 ' + sortlabel;//down
            if (g_lastsort== (whichsort+1) )//reverse
                sortlabel =  ' \u2191 ' + sortlabel;//up

            if (g_lastsort== (whichsort+0) || g_lastsort== (whichsort+1))
                tab_el.setAttribute('class','current');

            var list_el = tab_el.createElement();
            list_el.appendChild(  createHrefElement('javascript:sort_tracklist('+((g_lastsort==whichsort)? (g_lastsort+1) : whichsort )+')', sortlabel,'' )  );
            sortlinks_el.appendChild( list_el );
        }
        parent_sortlinks_el.appendChild(sortlinks_el);
    }
}

///////////////////////////////////////////////////////////////
//AJAX - Track Seed List add/remove (statechange)
///////////////////////////////////////////////////////////////
function init_spin()
{
    if (g_session>1)
        init_spin2();
    else
        AJAX.execute(init_spin_setup, init_spin_response, new Object() );
}
function init_spin_setup(paramsobj)
{
    var myObject     = new Object();
    myObject.action  = 'login_guest';
    return myObject;
}
function init_spin_response(ajaxobj,paramsobj)
{
    var guest_req = XML.getDocumentTag(ajaxobj.responseXML);
    var g_session = XML.getTextByName( guest_req, "session");
    setCookie( 'session', g_session, 14 , "/");
    init_spin2();
}

function init_spin2()
{
    g_seedlist_arr = new Array();
    var list = document.getElementById('playlist');
    var count=0;
    var child = list.firstChild;
    while (child!=null)
    {
        var track_artist= child.getAttribute('artist');
        var track_name  = child.getAttribute('track');
        var track_id    = child.getAttribute('trackid');
        g_seedlist_arr.push( track_obj(track_artist,track_name,track_id) );
        count++;
        child = child.nextSibling;
    }
    if (g_seedlist_arr.length<1)
        alert('You must start the playlist with at least one track before DJ Yoogli can finish it for you.');
    else
    {
        display_spin_start();
        seedlist_addremove();
    }
}
function seedlist_addremove()
{
    AJAX.execute(ajax_listchange_setup, ajax_listchange_response, new Object());

}
function ajax_listchange_setup(paramsobj)
{
    var myObject         = new Object();
    myObject.action      = 'set_state';
    myObject.id          = g_raceid++;
    myObject.session     = g_session;
    for(var i=0; i<g_seedlist_arr.length; i++)
    {
        myObject['item_type_'+i] = 'track';
        myObject['item_'+i     ] = g_seedlist_arr[i].trackid;
    }
    myObject.item_max    = g_seedlist_arr.length;
    return myObject;
}
function ajax_listchange_response(ajaxobj,paramsobj)
{
//        if (httpstate.responseXML.g etElementsByTagName("set_state")[0].g etElementsByTagName("changed").length==1)
//            updateBoxes();
    spin_playlist();
}
function spin_try_again()
{
    display_spin_reset();
    init_spin();
}
function display_spin_reset()
{
    var list = document.getElementById('playlist');
    removeChildren(list);

    for(var i=0; i<g_seedlist_arr.length; i++)
    {
        var track_artist = g_seedlist_arr[i].artist;
        var track_name   = g_seedlist_arr[i].track;
        var track_id     = g_seedlist_arr[i].trackid;
        var el = createTrackElement( track_artist , track_name, track_id,'' ,'','');
        list.appendChild(el);
    }
    document.getElementById('playlist_title_div').innerHTML="<div style='padding-top:10px;'>Drag tracks here to start building your playlist</div>";
    document.getElementById('playlist_div').style.height='115px';

    show_element('init_spin_div','spin_options_div','playlist_div');
    hide_element('spinning_div','spun_options_div');
}
function display_spin_start()
{
    document.getElementById('playlist_title_div').innerHTML="<div style='padding-top:10px;'>Generating Playlist...</div>";
    document.getElementById('playlist_div').style.height='0px';

    show_element('spinning_div');
    hide_element('init_spin_div','spun_options_div','spin_options_div','playlist_div');
}
function display_spin_show()
{
    document.getElementById('playlist_div').style.height='339px';

    show_element('spun_options_div','playlist_div');
    hide_element('init_spin_div','spinning_div','spin_options_div');
}

///////////////////////////////////////////////////////////////
//AJAX - Spin Yoogli
///////////////////////////////////////////////////////////////
function spin_playlist()
{
    var mix_obj = document.getElementById('mixleng');
    var paramsobj = new Object();
    paramsobj.mixlength   = mix_obj.options[ mix_obj.selectedIndex ].text;
    paramsobj.new_content = slider_new_content_value();

    if (g_seedlist_arr.length==0){ alert('no songs selected'); return; }
    if (paramsobj.mixlength.length==0){ alert('please select playlist length'); return; }

    AJAX.execute(ajax_spinyoogli_setup, ajax_spinyoogli_response, paramsobj);


}
function ajax_spinyoogli_setup(paramsobj)
{
    var myObject = new Object();
    myObject.action     = 'spin';
    myObject.id         = g_raceid++;
    myObject.session    = g_session;
    myObject.length     = paramsobj.mixlength;
    myObject.new_content= paramsobj.new_content;
    return myObject;
}
function ajax_spinyoogli_response(ajaxobj,paramsobj)
{
    var spin_xml = XML.getDocumentTag(ajaxobj.responseXML);

    var result = XML.getTextByName(spin_xml,"result");
    var reason = XML.getTextByName(spin_xml,"reason");
    var errorc = XML.getTextByName(spin_xml,"error_code");
    var error='';

    if (result=="fail" || result=="no")
    {
        if (errorc=='1003')
            artist_link( XML.getChildrenByTagName(xmldoc, "artist_linking")[0] );//spin_xml.getElementsByTagName("artist_linking")[0]);
        else if (errorc=='1004')
            choose_genre( XML.getChildrenByTagName(xmldoc, "get_artist_genre")[0] );//spin_xml.getElementsByTagName("get_artist_genre")[0]);
        else
            error='failure:'+reason;
    }
    else if (result!="yes")
        error='unrecognized error';

    if (result=="yes")//result==yes
    {
        setTimeout("spinyoogli_progress()",2000);
    }
    else
    {
        display_spin_reset();
        if (error.length>0)
            alert(error);
    }
}


///////////////////////////////////////////////////////////////
//AJAX - Spin Yoogli - Progress
///////////////////////////////////////////////////////////////

function spinyoogli_progress()
{
    AJAX.execute(ajax_spinprogress_setup, ajax_spinprogress_response, new Object());

}
function ajax_spinprogress_setup(paramsobj)
{
    var myObject = new Object();
    myObject.action     = 'progress';
    myObject.id         = g_raceid++;
    myObject.session    = g_session;
    return myObject;
}

function ajax_spinprogress_response(ajaxobj,paramsobj)
{
        var spin_xml = XML.getDocumentTag(ajaxobj.responseXML);

    var running = XML.getTextByName(spin_xml, "running");
    var done    = XML.getTextByName(spin_xml, "done");
    var result  = XML.getTextByName(spin_xml, "result");
    var reason  = XML.getTextByName(spin_xml, "reason");
    var errorc  = XML.getTextByName(spin_xml,"error_code");

    if (running.length > 0)
    {
        setTimeout("spinyoogli_progress()",2000);
    }
    else if (result=="fail")
    {
        display_spin_reset();
        if (errorc=='1003')
            artist_link( XML.getChildrenByTagName(xmldoc, "artist_linking")[0] );//spin_xml.getElementsByTagName("artist_linking")[0]);
        else if (errorc=='1004')
            choose_genre( XML.getChildrenByTagName(xmldoc, "get_artist_genre")[0] );//spin_xml.getElementsByTagName("get_artist_genre")[0]);
        else
            error='failure:'+reason;
    }
    else if (done.length > 0)
    {
        spinyoogli_showresults(done);
    }
    else
    {
        display_spin_reset();
        alert('bad xml format');
    }
}

///////////////////////////////////////////////////////////////
//AJAX - Spin Yoogli - Display Playlist result
///////////////////////////////////////////////////////////////

function spinyoogli_showresults(playlist)
{
    g_spunplaylist=playlist;

    var paramsobj = new Object();
    paramsobj.playlist_id = playlist;


    AJAX.execute(ajax_spinresults_setup, ajax_spinresults_response, paramsobj);
}
function ajax_spinresults_setup(paramsobj)
{
    var myObject = new Object();
    myObject.action     = 'get_playlist';
    myObject.id         = g_raceid++;
    myObject.session    = g_session;
    myObject.playlist_id= paramsobj.playlist_id;
    return myObject;
}

function ajax_spinresults_response(ajaxobj,paramsobj)
{
//    alert(ajaxobj.responseText);
        var xmlobj    = XML.getDocumentTag(ajaxobj.responseXML);

    var spin_type='0';
    var seed_str = XML.getTextByName(xmlobj , "RandomSeed");
    var spin_str = XML.getTextByName(xmlobj , "SpinUsed");
    var id_str   = XML.getTextByName(xmlobj , "id");

    if (spin_str=="RandomWalkSpin")
          spin_type='1';
    else if (spin_str=="GraphWalkSpin")
          spin_type='2';
//    document.getElementById('spindiv2title').innerHTML="Playlist: " + id_str +'-'+ spin_type + '-' + seed_str;
    spinyoogli_parse(xmlobj);
    spinyoogli_display(0);
    display_spin_show();
}

function spinyoogli_parse(xmlobj)
{
    var tracks = xmlobj.getElementsByTagName("track");

    g_playlist_arr=new Array();
    for(var i=0; i<tracks.length; i++)
    {
        var trackname = XML.getTextByName(tracks[i],"name");
        var artname   = XML.getTextByName(tracks[i],"artist_name");
        var leng      = XML.getTextByName(tracks[i],"length");
        var trackid   = XML.getTextByName(tracks[i],"track_id");
        var bstatus   = XML.getTextByName(tracks[i],"buy_status");
        var burl      = XML.getTextByName(tracks[i],"buy_url");
        var bprice    = XML.getTextByName(tracks[i],"buy_price");
        var bsource   = XML.getTextByName(tracks[i],"buy_source");
        var prevurl   = XML.getTextByName(XML.getChildrenByTagName(tracks[i], "preview")[0],"url");


        g_playlist_arr.push( track_obj( artname, trackname, trackid ) );
        g_playlist_arr[g_playlist_arr.length-1].type='P';
        g_playlist_arr[g_playlist_arr.length-1].buyurl  = spinyoogli_buyurl(g_session,bstatus,burl,bprice,bsource);
        g_playlist_arr[g_playlist_arr.length-1].buytext = spinyoogli_buytext(g_session,bstatus,burl,bprice,bsource);
        g_playlist_arr[g_playlist_arr.length-1].prevurl = prevurl;

    }
}
/*
function tester()
{
    g_playlist_arr=new Array();
    for(var i=0; i<4; i++)
    {
        g_playlist_arr.push( track_obj( 'jenkins', 'terrence', 12345 ) );
        g_playlist_arr[g_playlist_arr.length-1].type='P';
        g_playlist_arr[g_playlist_arr.length-1].buyurl  = 'http://www.google.com/';
        g_playlist_arr[g_playlist_arr.length-1].buytext = '0.98';
        g_playlist_arr[g_playlist_arr.length-1].prevurl = 'http://www.google.com/';
    }
    spinyoogli_display(0);
    display_spin_show();
}
*/
function spinyoogli_buyurl(session,bstatus,burl,bprice,bsource){
    //if (bstatus=='owns')
        //return "javascript:alert('I own this track');";
    //else if (bstatus=='available')
    //    return page_to_src("php_buy.php?session=")+escape(session)+"&url="+escape(burl);
    //else //if (bstatus='unavailable')
//        return  "";
    if(burl.length>0)
        return page_to_src("php_buy.php?session=")+escape(session)+"&url="+escape(burl);
    else //if (bstatus='unavailable')
        return  "";
}
function spinyoogli_buytext(session,bstatus,burl,bprice,bsource){
    if (bstatus=='owns')
        return "mine";
    else if (bstatus=='available')
        return "buy";//bprice;
    else //if (bstatus='unavailable')
        return  "";
}

function spinyoogli_display(page)
{
    var container_title='playlist_title_div';
    var container_body ='playlist';
    var function_name  ='spinyoogli_display';
    var nav_left  = 'playlist_title_navleft';
    var nav_right = 'playlist_title_navright';

    var titleText = display_list(page, container_title, nav_left, nav_right, container_body, function_name, g_playlist_arr);
    document.getElementById(container_title).appendChild( document.createTextNode( titleText ) );
}

function print_r(obj)
{
    var str2='';
    for(s in obj)
    {
//        var x = obj[s];
         str2+=  "Array["+s+"]"+obj[s]+"\n";
//        for(k in x)
//            str2+=  "Array["+s+"]["+k+"]"+x[k]+"\n";
    }
    return str2;
}

function build_track_string()
{
    /*
    var str='';
    var list = document.getElementById('playlist');
    var child = list.firstChild;
    while (child!=null)
    {
        var track_artist= child.getAttribute('artist');
        var track_name  = child.getAttribute('track');
        var track_id    = child.getAttribute('trackid');
        child = child.nextSibling;
        str+=","+track_id;
    }
    */

    var str='';
    for(var i=0; i<g_playlist_arr.length; i++)
        str+=","+g_playlist_arr[i].trackid;
    return str.substr(1);//trim last ,
}

function saveplaylist()
{
    if (g_isguest)
    {
        alert('You must be logged in to save a playlist.  Please login or sign up for an account');
        return;
    }
    var plname = prompt('Choose a name for this playlist:');
    if (plname==null || plname.length==0)
        return;

    var paramsobj = new Object();
    paramsobj.name = plname;
    paramsobj.tracks = build_track_string();
    paramsobj.playlist_id = g_spunplaylist;


    AJAX.execute(ajax_saveplaylist_setup, ajax_saveplaylist_results, paramsobj);
}
function ajax_saveplaylist_setup(paramsobj)
{
    var myObject = new Object();
    myObject.action     = 'save_playlist';
    myObject.id         = g_raceid++;
    myObject.session    = g_session;
    myObject.playlist_id= paramsobj.playlist_id;
    myObject.tracks     = paramsobj.tracks;
    myObject.name       = paramsobj.name;
    return myObject;
}

function ajax_saveplaylist_results(ajaxobj,paramsobj)
{
    //    alert('Playlist saved');
    var xmlobj    = XML.getDocumentTag(ajaxobj.responseXML);

    var result   = XML.getTextByName(xmlobj,"result");
    var playlist = XML.getTextByName(xmlobj,"playlist");
    if (result=="success")
    {
        //if (confirm('Click OK to view saved playlist'))
        location.href= aftersavespin(playlist);
    }
    else
    {
        alert('There was an error');
    }
}

///////////////////////////////////////////////////////////////
//AJAX - Spin Yoogli - Remove from Spin
///////////////////////////////////////////////////////////////
function remove_me(myself)
{
    var trackid = myself.parentNode.getAttribute('trackid');

    remove_track_from_ui(trackid);

    var displayval= document.getElementById('spun_options_div').style.display;
    if (displayval=='block')
        remove_track_from_backend(trackid);

}
function remove_track_from_ui(trackid)
{
    var list2 = document.getElementById("playlist");

    var child = list2.firstChild;
    while (child!=null)
    {
        if (child.getAttribute('trackid')==trackid)
        {
            list2.removeChild(child);
            child=null;//exit out
        }
        else
            child = child.nextSibling;
    }
}
function remove_track_from_backend(trackid)
{
    var paramsobj = new Object();
    paramsobj.trackid = trackid;

    AJAX.execute(ajax_spinremove_setup, ajax_spinremove_response, paramsobj);
}
function ajax_spinremove_setup(paramsobj)
{
    var myObject         = new Object();
    myObject.action      = 'remove';
    myObject.id          = g_raceid++;
    myObject.session     = g_session;
    myObject['track_0']  = paramsobj.trackid;
    myObject.item_max    = 1;
    return myObject;
}
function ajax_spinremove_response(ajaxobj,paramsobj)
{
    var remove_xml    = XML.getDocumentTag(ajaxobj.responseXML);

    var result    = XML.getTextByName(remove_xml, "result");

    if (result=='success')
        spinyoogli_showresults(g_spunplaylist);
    else if (result=='fail')
        alert('failure: '+XML.getTextByName(remove_xml,"reason"));
    else
        alert('unrecognized error');
}
function preview(prevurl_idx)
{
/*    var surl = 'http://hurl.samples.dmpcontent.com/scripts/hurl.do?cid=600192&clipid=000091401110014010';
    var track = 'Weird Science';
    var artist = 'Oingo Boingo';
    */

    var arr = null;
    var num = prevurl_idx*1;
    if ((num + 1)%1000==0)
    {
        arr = g_sresult_arr;
        prevurl_idx = (num +1)/1000;
    }
    else
        arr = g_playlist_arr;

    var surl = arr[prevurl_idx].prevurl;
    var track = arr[prevurl_idx].track;
    var artist = arr[prevurl_idx].artist;

    glob_preview(surl,artist,track);
}

///////////////////////////////////////////////////////////////
//Drag and drop list helper functions
///////////////////////////////////////////////////////////////

function createSpanElement(styletext,bodytext)
{
    element = DOMelement('span');
    element.setAttribute("style",styletext);
    element.innerText = bodytext;
    return element.createElement();
}

function createDivElement(styletext)
{
    element = DOMelement('div');
    element.setAttribute("style",styletext);
    return element.createElement();
}
function createHrefElement(url,linktext, el_class)
{
    element = DOMelement('a');
    element.setAttribute("href",url);
    element.setAttribute("class",el_class);
    element.innerText = linktext;
    return element.createElement();
}
function createNavHrefElement(url,linktext)
{
    element = DOMelement('a');
    element.setAttribute("href",url);
//    element.setAttribute("style",'color:#FF3333;');
//    element.setAttribute("onmouseover","this.style.color='#5481E8'");
//    element.setAttribute("onmouseout","this.style.color='#FF3333'");
    element.innerText = linktext;
    return element.createElement();
}
function createTrackElement(artistText, trackName, trackId, buyurl, buytext, prevurl)
{
    
    var tagText = artistText + ' - ' + trackName;
    var tNode;
    var element;
    try {
        element = document.createElement("<LI trackid='"+trackId+"' artist='"+escape_for_html(artistText)+"' track='"+escape_for_html(trackName)+"' title='"+escape_for_html(tagText)+"'>");//IE style='text-align:right;'
    } catch (e) {
        element = document.createElement( "LI" );
        element.setAttribute("trackid",trackId);
        element.setAttribute("title",tagText);
        element.setAttribute("artist",artistText);
        element.setAttribute("track",trackName);
//        element.setAttribute("style",'text-align:right;');
    }
    DragDrop.makeItemDragable(element);

    tagText = makeDotDotDot(tagText, 63);

    element.appendChild( createTrashElement1( tagText) );
    element.appendChild( createPrevElementA( prevurl) );
    element.appendChild( createBuyElement( buyurl, buytext) );
    element.appendChild( createPrevElementB( prevurl) );
    element.appendChild( createTrashElement2( tagText) );

    return element;
}

//IE:
//<li trackid='123' style='text-align:right'>
//   <div class=ietrash>Michael Jackson - Thriller</div>
//   <DIV class='ietrash2' onclick='remove_me(this)' title='remove track'>
//</li>
//Mozilla:
//<li trackid='123'>
//   <div class=moztrash onclick='alert(navigator.appName)'></div>
//   Michael Jackson - Thriller
//</li>

function createTrashElement1(tagText)
{
    var element;
    try {
        element = document.createElement("<DIV class='ietrash'>");//IE
        element.appendChild( document.createTextNode( tagText ) );
    } catch (e) {
        element = document.createElement( "DIV" );
        element.setAttribute("class","moztrash");
        element.setAttribute("onclick","remove_me(this)");
        element.setAttribute("title","remove track");
    }
    return element;
}
function createPrevElementA(prevurl)
{
    var element;
    try {
        document.createElement("<DIV  class='ietrash'>");//IE
        element= document.createTextNode( "" ) ;//intentional...
    } catch (e) {
        element = document.createElement( "DIV" );
        if (prevurl.length>0)
        {
            element.setAttribute("class","mozprev");
            element.setAttribute("onclick","preview('"+prevurl+"')");
            element.setAttribute("title","preview track");
        }
        else
            element.setAttribute("class","mozprev2");
    }
    return element;
}
function createBuyElement(buyurl,hypertext)
{
    var element;
    try {
        element  = document.createElement("<DIV class='iebuy'>");//IE
    } catch (e) {
        element = document.createElement( "DIV" );
          element.setAttribute("class","mozbuy");
    }
    if (hypertext=='mine')
    {
          element1 = DOMelement( "span" );
           element1.setAttribute("style","color:#999;font-size:80%");
           element1.innerText = hypertext;
           element.appendChild(element1.createElement());
    }
    else if (hypertext.length>0)
    {
          element1 = DOMelement( "A" );
           element1.setAttribute("href",buyurl);
           if (!buyurl.beginsWith('javascript:'))
               element1.setAttribute("target","_BLANK");
           element1.innerText = hypertext;
           element.appendChild(element1.createElement());
    }
    return element;
}
function createPrevElementB(prevurl)
{
    var element;
    try {
        if (prevurl.length>0)
            element = document.createElement("<DIV class='ieprev' onclick='preview(\""+escape_for_html(prevurl)+"\");' title='preview track'>");//IE
        else
            element = document.createElement("<DIV class='ieprev2'>");//IE
    } catch (e) {
        element = document.createTextNode( "" );//access text with tNode.nodeValue
    }
    return element;
}
function createTrashElement2(tagText)
{
    var element;
    try {
        element = document.createElement("<DIV class='ietrash2' onclick='remove_me(this)' title='remove track'>");//IE
    } catch (e) {
        element = document.createTextNode( tagText );//access text with tNode.nodeValue
    }
    return element;
}
function initialize_lists()
{
    var list = document.getElementById("trackresults");
    DragDrop.makeListContainer( list );
    list.onDragOver = function() { this.style["background"] = "#eeeeee"; };
    list.onDragOut = function() { this.style["background"] = "none"; };
      removeChildren(list);

    var list2 = document.getElementById("playlist");
    DragDrop.makeListContainer( list2 );
    list2.onDragOver = function() { this.style["background"] = "#eeeeee"; };
    list2.onDragOut = function() {this.style["background"] = "none"; };
    removeChildren(list2);

//    list.onDragOver = function() { this.style["border"] = "1px dashed #AAA"; };
//    list.onDragOut = function() {this.style["border"] = "1px solid white"; };

    document.getElementById('finishbutton').focus();
}


function display_list(page, container_title, navleft, navright, container_body, function_name, some_arr)
{
    
    var nav_prev,nav_next;
    var maxpage= (some_arr.length/g_maxresults)-1;
    var rtitle = document.getElementById(container_title);
    var nleft  = document.getElementById(navleft);
    var nright = document.getElementById(navright);
    removeChildren(rtitle);
    removeChildren(nleft);
    removeChildren(nright);

    if (page >0)
        nleft.appendChild( createNavHrefElement('javascript:'+function_name+'('+(page-1)+');', '\u25C4\u0020prev') );
    else
        nleft.appendChild( document.createTextNode( '. . .' )  );

    if (page < maxpage)
        nright.appendChild( createNavHrefElement('javascript:'+function_name+'('+(page+1)+');', 'next\u0020\u25BA') );
    else
        nright.appendChild( document.createTextNode( '. . .' )  );

    var from_idx  = (page* g_maxresults);
    var to_idx    = (page+1)* g_maxresults;
    if (to_idx > some_arr.length)
        to_idx = some_arr.length;

    var titleText = ' Tracks '+(from_idx+1)+ ' to ' + (to_idx) +' of ' + some_arr.length + ' ';
//    rtitle.appendChild(  document.createTextNode( titleText )  );

    var list = document.getElementById(container_body);
    removeChildren(list);

    for(var i=from_idx; i<to_idx; i++)
    {
        var track_artist = some_arr[i].artist;
        var track_name   = some_arr[i].track;
        var track_id     = some_arr[i].trackid;
        if (some_arr[i].type=='P')
        {
            var prevurl_idx ="";
            if (some_arr[i].prevurl.length>0)
            {
                prevurl_idx =i;
                if (container_body=='trackresults')
                    prevurl_idx = (prevurl_idx*1000) - 1;
            }
            prevurl_idx = prevurl_idx + "";
            list.appendChild( createTrackElement( track_artist , track_name, track_id, some_arr[i].buyurl, some_arr[i].buytext, prevurl_idx ) );
        }
        else
            list.appendChild( createTrackElement( track_artist , track_name, track_id, '', '', '' ) );
    }
    return titleText;
}
//-------------------------------------------
//-------------------------------------------

function artist_link(xmlnode)
{

}

//-------------------------------------------
function choose_genre(xmlNode)
{
    if (!confirm("DJ Yoogli doesn't know the genre of a few of the tracks you chose.  \n\nClick OK to tell us the genre.\nClick Cancel to go back and choose new tracks."))
        return;

    var artistXML = XML.getChildrenByTagName(xmlNode, "artist");
    YGGenre.artists = new Array();
    for (var i=0; i<artistXML.length; i++)
    {
        a = new Object();
        a.artist_name = XML.getTextByName(artistXML[i], "name");
        a.artist_id   = XML.getTextByName(artistXML[i], "id");
        YGGenre.artists.push(a);
    }

    YGGenre.genreChoosePrompt();
}

var YGGenre = {
    artists : new Array(),
    genrehtml : "",

    genreChoosePrompt : function ()
    {
        if (YGGenre.artists.length==0)
        {
            return;
        }

        a = YGGenre.artists.shift();
        YGGenre.openGenreChooser(a.artist_id,a.artist_name);
    },
    openGenreChooser : function (artist_id,artist_name)
    {
       dialog_preload_images();
       id= g_windowid++;
       open_dialog_box( id, 250, 100, 'Select Genre', YGGenre.getGenreInnerHTML(artist_id,artist_name,id) );

       dialog = document.getElementById( 'dialog_div_id_'+id );
       handle = document.getElementById( 'handle_div_id_'+id );
       YGDrag.makeDraggable( dialog, handle );
    },
    getGenreInnerHTML : function(artist_id,artist_name,id)
    {
        html='';
        html+="<div align=center>Choose a genre for this artist:<br> ";
        html+=  "<span id='genre_choose_track_name' title='"+escape(artist_name)+"'>"+makeDotDotDot(artist_name,40)+"</span>";
        html+=  "<br>";
        html+=    YGGenre.getGenreDropdown();
        html+=  "<br>";
        html+=  "<input id='genre_choose_artist_id' value='"+artist_id+"' type=hidden>";
        html+=  "<input id='genre_choose_window_id' value='"+id+"' type=hidden>";
        html+=  "<input type=button value='send' onclick='YGGenre.submitGenre("+artist_id+");'>";
        html+="</div>";
        return html;
    },
    submitGenre : function (artist_id)
    {
        var paramsobj = new Object();
        paramsobj.genre_id = document.getElementById('genre_choose_select_id').value;
        paramsobj.artist_id= artist_id;
        AJAX.execute(YGGenre.submitGenrePrep, YGGenre.submitGenreCallback, paramsobj);
    },
    submitGenrePrep : function (paramsobj)
    {
        var myObject = new Object();
        myObject.action     = 'set_genre';
        myObject.id         = g_raceid++;
        myObject.session    = g_session;
        myObject.artist     = paramsobj.artist_id;
        myObject.genre      = paramsobj.genre_id;
        return myObject;
    },
    submitGenreCallback : function (ajaxobj,paramsobj)
    {//    alert(ajaxobj.responseText);
        var docxml    = XML.getDocumentTag(ajaxobj.responseXML);
        var result = XML.getTextByName( docxml, 'result' );
        if (result=='success')
        {
            close_dialog( document.getElementById('genre_choose_window_id').value );
            YGGenre.genreChoosePrompt();
        }
        else
            alert('An error has occurred');
    },
    getGenreDropdown : function ()
    {
        if (YGGenre.genrehtml.length!=0)
            return YGGenre.genrehtml;

        genre_list = YGGenre.getGenreList();

        optstr='';
        for(var i=0; i<genre_list.length; i++)
            optstr+="<option value="+genre_list[i].i+">"+genre_list[i].g+"</option>";
        optstr='<select id="genre_choose_select_id">'+optstr+'</select>';
        YGGenre.genrehtml = optstr;
        return YGGenre.genrehtml;
    },
    getGenreList : function ()
    {
        var l = new Array();
        l.push( {i:1, g:"Classical"} ) ;
        l.push( {i:2, g:"Latin"} ) ;
        l.push( {i:4, g:"Hip-Hop/Rap"} ) ;
        l.push( {i:5, g:"Rock"} ) ;
        l.push( {i:6, g:"Dance / Electronic"} ) ;
        l.push( {i:7, g:"New Age"} ) ;
        l.push( {i:8, g:"World/Reggae"} ) ;
        l.push( {i:9, g:"R&B"} ) ;
        l.push( {i:10, g:"Pop"} ) ;
        l.push( {i:11, g:"Jazz"} ) ;
        l.push( {i:12, g:"Alternative"} ) ;
        l.push( {i:13, g:"Soundtrack"} ) ;
        l.push( {i:14, g:"Rap"} ) ;
        l.push( {i:15, g:"Easy Listening"} ) ;
        l.push( {i:16, g:"Blues"} ) ;
        l.push( {i:17, g:"Gospel & Religious"} ) ;
        l.push( {i:18, g:"Country" } ) ;
        l.push( {i:19, g:"Folk" } ) ;
        l.push( {i:20, g:"Comedy" } ) ;
        l.push( {i:21, g:"Children's Music" } ) ;
        l.push( {i:22, g:"Trance" } ) ;
        l.push( {i:23, g:"Alternative & Punk" } ) ;
        l.push( {i:24, g:"Rock/Pop" } ) ;
        l.push( {i:25, g:"Acoustic" } ) ;
        l.push( {i:26, g:"Classic Rock" } ) ;
        l.push( {i:27, g:"Industrial" } ) ;
        l.push( {i:28, g:"Lo-Fi" } ) ;
        l.push( {i:29, g:"Emo" } ) ;
        l.push( {i:30, g:"Slow Rock" } ) ;
        l.push( {i:31, g:"Vocal"} ) ;
        l.push( {i:32, g:"Heavy Metal"} ) ;
        l.push( {i:33, g:"Hard Rock"} ) ;
        l.push( {i:34, g:"Instrumental Rock"} ) ;
        l.push( {i:35, g:"Punk Rock"} ) ;
        l.push( {i:36, g:"Holiday"} ) ;
        l.push( {i:37, g:"Grunge"} ) ;
        l.push( {i:38, g:"Nu Metal"} ) ;
        l.push( {i:39, g:"Books & Spoken"} ) ;
        l.push( {i:40, g:"Punk"} ) ;
        l.push( {i:41, g:"Lounge"} ) ;
        l.push( {i:42, g:"Power Ballad"} ) ;
        l.push( {i:43, g:"Alternative Metal"} ) ;
        l.push( {i:44, g:"Surf"} ) ;
        l.push( {i:45, g:"Hip-Hop"} ) ;
        l.push( {i:46, g:"Folk/Rock"} ) ;
        l.push( {i:47, g:"Rock & Roll"} ) ;
        l.push( {i:48, g:"New Wave"} ) ;
        l.push( {i:49, g:"Inspirational"} ) ;
        l.push( {i:50, g:"Post-Grunge"} ) ;
        l.push( {i:51, g:"Power Pop"} ) ;
        l.push( {i:52, g:"Tribal"} ) ;
        l.push( {i:53, g:"Japanese Music/Japanese Pop" } ) ;
        l.push( {i:54, g:"Ska" } ) ;
        l.push( {i:55, g:"Indie" } ) ;
        l.push( {i:56, g:"Misc" } ) ;
        l.sort(YGGenre.sortByGenre);
        return l;
    },
    sortByGenre : function (a,b)
    {
        if (a.g > b.g) return 1;
        if (a.g < b.g) return -1;
        return 0;
    }
}
