var tag_ids = new Array();
var artist_ids = new Array(); 
var label_ids = new Array();

var action = "";

var tag_id;
var current_tag_id;
var tag_filter;

var artist_id;
var current_artist_id;
var artist_filter;

var label_id;
var current_label_id;
var label_filter;

var current_track_id;
var now_artist_id;
var now_label_id;

var playlist_status='on';
var favartist_status='on';
var favlabel_status='on';

var initialized='0';

var login;

var errors = 0;

function KeyDownHandler(i)
{
  if (event.keyCode == 13)
  {
    switch (i) {
        
        case "1":
        document.forms['tuningForm'].password_input.focus();
        break; 
        
        case "2":
        login();
        break; 
        
        case "3":
        document.forms['tuningForm'].register_password_input.focus();
        break; 
        
        case "4":
        document.forms['tuningForm'].register_email_input.focus();
        break; 
        
        case "5":
        register();
        break;  
        
        case "6":
        tagFilterChanged();
        break;
        
        case "7":
        artistFilterChanged();
        break;
        
        case "8":
        labelFilterChanged();
        break;                                                        
    }

    event.returnValue=false;
    event.cancel = true;
    
  }
}

function initRadio() {
    tune(); 
}

function alertState() {
    alert('registered');   
}

function playRadio(vars) {    
    action = "play";    
    makeRequest("/mods/play.php", vars); 
}

function catchError() {
    //errors++;
    //if (errors<=3) {
    //    playRadio('1=1');    
    //} else {
    //    niftyplayer('radioplayer').stop();
    //    alert('Repeated errors occur when trying to load audio files. Press `next` button to try again.');
    //    errors = 0;
    //}
    niftyplayer('radioplayer').stop();
    alert("Errors occur when trying to load audio file.");
}

function resetError() {
    errors = 0;    
}

function playTrack(track) {
    
    niftyplayer('radioplayer').registerEvent("onSongOver", "playRadio('1=1')");
    //niftyplayer('radioplayer').registerEvent("onError", "catchError()");
    //niftyplayer('radioplayer').registerEvent("onPlay", "resetError()");    
    
    track_info = track.split('<[SEPARATOR]>');
    if (initialized=='1') {
        niftyplayer('radioplayer').loadAndPlay(track_info[0]);
    } else {
        niftyplayer('radioplayer').load(track_info[0]);
    }
    
    current_track_id = track_info[17];
    now_artist_id = track_info[5];
    now_label_id = track_info[10];
    
    document.getElementById("downloadTrack").href = track_info[0];
    document.getElementById("downloadTrack2").href = track_info[0];
    
    document.getElementById("TrackTitle").innerHTML = track_info[1];
    document.getElementById("TrackReleaseTitle").innerHTML = track_info[3];
    document.getElementById("TrackArtistTitle").innerHTML = track_info[6];
    document.getElementById("TrackLabelTitle").innerHTML = track_info[11];
    
    //document.getElementById("allReleaseTracks").innerHTML = "listen all " + track_info[3] + "'s tracks";    
    document.getElementById("allReleaseTracks").href = "javascript:reset_tunes();add_release('Release: " + track_info[3] + "', '" + track_info[2] + "');tune();";
    
    //document.getElementById("allArtistTracks").innerHTML = "listen all " + track_info[6] + "'s tracks";
    document.getElementById("allArtistTracks").href="javascript:reset_tunes();add_artist('" + track_info[6] + "', '" + track_info[5] + "');tune();"
    
    //document.getElementById("allLabelTracks").innerHTML = "listen all " + track_info[11] + "'s tracks";
    document.getElementById("allLabelTracks").href="javascript:reset_tunes();add_label('" + track_info[11] + "', '" + track_info[10] + "');tune();"
    
    document.getElementById("ReleaseImage").src = track_info[4]!="" ? "/images/releases/" + track_info[4] : "/images/noimage.gif";
    document.getElementById("ReleaseImageBig").href = track_info[4]!="" ? "/images/releases/big_" + track_info[4] : "javascript:return false";
    
    document.getElementById("ArtistTitle").innerHTML = track_info[6];
    document.getElementById("ArtistLocation").innerHTML = track_info[7];
    document.getElementById("ArtistUrl").innerHTML = (track_info[9]!="http://" ? track_info[9] : '');
    document.getElementById("ArtistUrl").href = (track_info[9]!="http://" ? track_info[9] : '');
    document.getElementById("ArtistWiki").innerHTML = track_info[8]; 
    
    document.getElementById("ArtistImage").src = track_info[15]!="" ? "/images/artists/" + track_info[15] : "/images/noimage.gif";
    
    document.getElementById("LabelTitle").innerHTML = track_info[11];
    document.getElementById("LabelLocation").innerHTML = track_info[12];
    document.getElementById("LabelUrl").innerHTML = (track_info[14]!="http://" ? track_info[14] : '');
    document.getElementById("LabelUrl").href = (track_info[14]!="http://" ? track_info[14] : '');
    document.getElementById("LabelWiki").innerHTML = track_info[13];
    
    document.getElementById("LabelImage").src = track_info[16]!="" ? "/images/labels/" + track_info[16] : "/images/noimage.gif";
    
    document.getElementById("ReleaseTags").innerHTML = track_info[18]; 
      
    var resently_div = document.getElementById("ResentlyTracks"); 
    resently_div.innerHTML = track_info[19];
    
    initialized='1'; 
   
}

function tune() {
    
    var tag_var = "";
    var artist_var = "";
    var label_var = "";
    
    for (var t=0; t<tag_ids.length; t++) { tag_var = tag_var + tag_ids[t] + ","; }
    
    for (var a=0; a<artist_ids.length; a++) { artist_var = artist_var + artist_ids[a] + ","; }
    
    for (var l=0; l<label_ids.length; l++) { label_var = label_var + label_ids[l] + ","; }
    
    var vars = "tags=" + escape(encodeURI(tag_var)) + "&artists=" + escape(encodeURI(artist_var)) + "&labels=" + escape(encodeURI(label_var)) + "&releases=" + escape(encodeURI(document.forms["tuningForm"].release_tuning.value));
    
    action = "tune";
    
    makeRequest("/mods/tune.php", vars);
        
} 

function send_message() {
    
    var message = document.forms["tuningForm"].comment_message;
    
    if (message.value!='') {
        var name = document.forms["tuningForm"].comment_name;
        var vars = "name=" + escape(encodeURI(name.value)) + "&message=" + escape(encodeURI(message.value));
        action = "message";    
        makeRequest("/mods/chat.php", vars);
        document.getElementById("send_button").innerHTML="";                
    }
    
}

function downloadTrack() {
    if (current_track_id) {
        vars="track=" + current_track_id;
        makeRequest("/mods/download.php", vars);    
    }
} 

function playPlaylist() {    
    vars="playlist=1";    
    action = "playlist";    
    makeRequest("/mods/tune.php", vars);           
}

function playFavartist() {    
    //alert('play');
    vars="favartist=1";    
    action = "favartist";    
    makeRequest("/mods/tune.php", vars);           
}

function playFavlabel() {    
    vars="favlabel=1";    
    action = "favlabel";    
    makeRequest("/mods/tune.php", vars);           
}

function addToPlaylist() {
    vars = "action=add&track=" + current_track_id;
    makeRequest("/mods/playlist.php", vars);
    action = "addToPlaylist";
} 

function delFromPlaylist(tr) {
    vars = "action=del&track=" + tr;
    makeRequest("/mods/playlist.php", vars);
    action="delFromPlaylist";    
}

function addArtistToFavorites() {
    vars = "action=add&artist=" + now_artist_id;
    makeRequest("/mods/favorites.php", vars);
    action = "addArtistToFavorites";
}

function delArtistFromFavorites(artist) {
    vars = "action=del&artist=" + artist;
    makeRequest("/mods/favorites.php", vars);
    action = "delArtistFromFavorites";
}

function addLabelToFavorites() {
    vars = "action=add&label=" + now_label_id;
    makeRequest("/mods/favorites.php", vars);
    action = "addLabelToFavorites";
}

function delLabelFromFavorites(label) {
    vars = "action=del&label=" + label;
    makeRequest("/mods/favorites.php", vars);
    action = "delLabelFromFavorites";
}

function tagFilterChanged() {
    
    var filter = document.forms["tuningForm"].tag_filter;
    
    tag_filter = filter.value;
    
    if (filter.value) filter.style.backgroundColor="#f5f343";
    else filter.style.backgroundColor="#ffffff";
    
    var vars = "filter=" + escape(encodeURI(filter.value));
    
    action = "tag_filter_apply";
    
    makeRequest("/mods/tags.php", vars);
       
}

function artistFilterChanged() {
    
    var filter = document.forms["tuningForm"].artist_filter;
    
    artist_filter = filter.value;
    
    if (filter.value) filter.style.backgroundColor="#f5f343";
    else filter.style.backgroundColor="#ffffff";    
    
    var vars = "filter=" + escape(encodeURI(filter.value));
    
    action = "artist_filter_apply";
    
    makeRequest("/mods/artists.php", vars);
       
}

function labelFilterChanged() {
    
    var filter = document.forms["tuningForm"].label_filter;
    
    label_filter = filter.value;
    
    if (filter.value) filter.style.backgroundColor="#f5f343";
    else filter.style.backgroundColor="#ffffff";    
    
    var vars = "filter=" + escape(encodeURI(filter.value));
    
    action = "label_filter_apply";
    
    makeRequest("/mods/labels.php", vars);
       
}


function get_tags_by_char(ch) { 
 
    var vars = "char=" + ch;
    
    var tag_loader = document.getElementById("tag_loader");
    
    var tags_data = document.getElementById("tags_data");
    
    tags_data.innerHTML='';
    
    tag_loader.style.visibility="visible";
    
    if (tag_filter) vars = vars + "&filter=" + escape(encodeURI(tag_filter));
    
    tag_id = ch;
    
    action = "get_tags_by_char";
    
    makeRequest("/mods/tags.php", vars); 
    
}

function get_artists_by_char(ch) {
 
    var vars = "char=" + ch;
    
    var artist_loader = document.getElementById("artist_loader");
    
    var artists_data = document.getElementById("artists_data");
    
    artists_data.innerHTML='';
    
    artist_loader.style.visibility="visible";    
    
    if (artist_filter) vars = vars + "&filter=" + escape(encodeURI(artist_filter));
    
    artist_id = ch;
    
    action = "get_artists_by_char";
    
    makeRequest("/mods/artists.php", vars);  
    
}

function get_labels_by_char(ch) {
 
    var vars = "char=" + ch;
    
    var label_loader = document.getElementById("label_loader");
    
    var labels_data = document.getElementById("labels_data");
    
    labels_data.innerHTML='';
    
    label_loader.style.visibility="visible";
    
    if (label_filter) vars = vars + "&filter=" + escape(encodeURI(label_filter));
    
    label_id = ch;
    
    action = "get_labels_by_char";
    
    makeRequest("/mods/labels.php", vars);  
    
}

function makeRequest(url, vars) {
                                   
    var http_request = false;
    
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    
        http_request = new XMLHttpRequest();
        
        //if (http_request.overrideMimeType) {
            
        //    http_request.overrideMimeType('text/xml');
            
        //}
        
    } else if (window.ActiveXObject) { // IE
    
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
        try {
            http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
        }
        
    }
    
    if (!http_request) {
        alert('There is no possibility to send request. Check if java turn on in your browser.');
        return false;
    }
    
    http_request.onreadystatechange = function() { getContents(http_request); };    
    http_request.open('POST', url, true);
    http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    http_request.send(vars);
    
}

function getContents(http_request) {
    
    if (http_request.readyState == 4) {
        
        if (http_request.status == 200) {
            
            switch (action) {
             
                case "get_tags_by_char":
                var tags_data = document.getElementById("tags_data");
                var tag_loader = document.getElementById("tag_loader");
                tags_data.innerHTML = http_request.responseText;
                var all = document.getElementsByTagName('*');                
                for (var e = 0; e<all.length;e++) if (all[e].className=="al_sel") all[e].className = "al";
                var el = document.getElementById("tag_char_" + tag_id);  
                if (el) document.getElementById("tag_char_" + tag_id).className="al_sel";
                current_tag_id = tag_id;
                tag_loader.style.visibility="hidden";
                break;
                
                case "get_artists_by_char":
                var artists_data = document.getElementById("artists_data");
                var artist_loader = document.getElementById("artist_loader");
                artists_data.innerHTML = http_request.responseText;
                var all = document.getElementsByTagName('*');
                for (var e = 0; e<all.length;e++) if (all[e].className=="al_sel") all[e].className = "al";
                var el = document.getElementById("artist_char_" + artist_id);
                if (el) document.getElementById("artist_char_" + artist_id).className="al_sel";
                current_artist_id = artist_id;
                artist_loader.style.visibility="hidden";
                break;                    
                
                case "get_labels_by_char":
                var labels_data = document.getElementById("labels_data");
                var label_loader = document.getElementById("label_loader");
                labels_data.innerHTML = http_request.responseText;
                var all = document.getElementsByTagName('*');
                for (var e = 0; e<all.length;e++) if (all[e].className=="al_sel") all[e].className = "al";
                var el = document.getElementById("label_char_" + label_id);
                if (el) document.getElementById("label_char_" + label_id).className="al_sel";
                current_label_id = label_id;
                label_loader.style.visibility="hidden";
                break;
                
                case "tag_filter_apply":
                var tag_alphabet = document.getElementById("tag_alphabet");
                var tag_loader = document.getElementById("tag_loader");
                tag_alphabet.innerHTML = http_request.responseText;
                get_tags_by_char(current_tag_id);
                tag_loader.style.visibility="hidden";
                break;
                
                case "artist_filter_apply":
                var artist_alphabet = document.getElementById("artist_alphabet");
                var artist_loader = document.getElementById("artist_loader");
                artist_alphabet.innerHTML = http_request.responseText;
                get_artists_by_char(current_artist_id);
                artist_loader.style.visibility="hidden";
                break;  
                
                case "artist_filter_apply2":
                var artist_alphabet = document.getElementById("artist_alphabet");
                var artist_loader = document.getElementById("artist_loader");
                artist_alphabet.innerHTML = http_request.responseText;
                get_artists_by_char2(current_artist_id);
                artist_loader.style.visibility="hidden";
                break;                
                
                case "label_filter_apply":
                var label_alphabet = document.getElementById("label_alphabet");
                var label_loader = document.getElementById("label_loader");
                label_alphabet.innerHTML = http_request.responseText;
                get_labels_by_char(current_label_id);
                label_loader.style.visibility="hidden";
                break;                               
                
                case "tune":
                document.getElementById("found").innerHTML = "[" + http_request.responseText + " tracks were tuned ]";
                playRadio('1=1');
                document.getElementById("playerLoading").style.visibility="hidden";
                document.getElementById("player").style.visibility="visible";                
                if (login==true) {
                    document.getElementById("playlistHeader").innerHTML = ":: Playlist&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playPlaylist()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doPlaylist()\" id=\"PlaylistSwitcher\" name=\"PlaylistSwitcher\">close</a>&nbsp;]";
                    document.getElementById("favartistHeader").innerHTML = ":: Favorite Artists&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playFavartist()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doFavartist()\" id=\"FavartistSwitcher\" name=\"FavartistSwitcher\">close</a>&nbsp;]";
                    document.getElementById("favlabelHeader").innerHTML = ":: Favorite Labels&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playFavlabel()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doFavlabel()\" id=\"FavlabelSwitcher\" name=\"FavlabelSwitcher\">close</a>&nbsp;]";
                    doPlaylist(playlist_status);
                    doFavartist(favartist_status);
                    doFavlabel(favlabel_status);
                }
                break;
                
                case "playlist":
                document.getElementById("found").innerHTML = "[" + http_request.responseText + " tracks were tuned ]";
                playRadio('1=1'); 
                doPlaylist('on');
                document.getElementById("playlistHeader").innerHTML = ":: Playlist > <b>Now Playing</b>";                
                document.getElementById("favartistHeader").innerHTML = ":: Favorite Artists&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playFavartist()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doFavartist()\" id=\"FavartistSwitcher\" name=\"FavartistSwitcher\">close</a>&nbsp;]";
                document.getElementById("favlabelHeader").innerHTML = ":: Favorite Labels&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playFavlabel()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doFavlabel()\" id=\"FavlabelSwitcher\" name=\"FavlabelSwitcher\">close</a>&nbsp;]";
                doFavartist(favartist_status);
                doFavlabel(favlabel_status);
                break;    
                
                case "favartist":
                document.getElementById("found").innerHTML = "[" + http_request.responseText + " tracks were tuned ]";
                playRadio('1=1');
                doFavartist('on');
                document.getElementById("favartistHeader").innerHTML = ":: Favorite Artists > <b>Now Playing</b>";
                document.getElementById("playlistHeader").innerHTML = ":: Playlist&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playPlaylist()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doPlaylist()\" id=\"PlaylistSwitcher\" name=\"PlaylistSwitcher\">close</a>&nbsp;]";
                document.getElementById("favlabelHeader").innerHTML = ":: Favorite Labels&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playFavlabel()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doFavlabel()\" id=\"FavlabelSwitcher\" name=\"FavlabelSwitcher\">close</a>&nbsp;]";                                
                doPlaylist(playlist_status);
                doFavlabel(favlabel_status);
                break;    
                
                case "favlabel":
                document.getElementById("found").innerHTML = "[" + http_request.responseText + " tracks were tuned ]";
                playRadio('1=1');
                doFavlabel('on');
                document.getElementById("favlabelHeader").innerHTML = ":: Favorite Labels > <b>Now Playing</b>";
                document.getElementById("playlistHeader").innerHTML = ":: Playlist&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playPlaylist()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doPlaylist()\" id=\"PlaylistSwitcher\" name=\"PlaylistSwitcher\">close</a>&nbsp;]";
                document.getElementById("favartistHeader").innerHTML = ":: Favorite Artists&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:playFavartist()\">listen</a>&nbsp;]&nbsp;&nbsp;&nbsp;[&nbsp;<a href=\"javascript:doFavartist()\" id=\"FavartistSwitcher\" name=\"FavartistSwitcher\">close</a>&nbsp;]";
                doPlaylist(playlist_status);
                doFavartist(favartist_status);                
                break;                                           
                
                case "play":
                var track = http_request.responseText;
                if (track=='no') {
                    playRadio('reset_listened=1'); 
                    break;
                }
                playTrack(track);                 
                break;
                
                case "login":
                if (http_request.responseText=="1") {
                    alert("Login Successful!");
                    location.replace("/");
                } else {
                    alert("Sorry, but entered data is wrong! Try once again.");
                    document.forms["tuningForm"].login_input.value="";
                    document.forms["tuningForm"].password_input.value="";
                }
                break;
                
                case "logout":
                if (http_request.responseText=="1") {
                    alert("Logout Successful.");
                    location.replace("?logout=true");
                }
                break;
                
                case "register":
                if (http_request.responseText=="1") {
                    alert("Registration successful. Welcome!");
                    location.replace("/");
                } else {
                    alert("All fields must be filled in. Try once again.");                    
                }                 
                document.forms["tuningForm"].register_login_input.value="";
                document.forms["tuningForm"].register_password_input.value="";                
                document.forms["tuningForm"].register_email_input.value="";
                break;
                
                case "addToPlaylist":
                if (http_request.responseText=="1") alert("This track is already in playlist");
                else document.getElementById("playlist").innerHTML = http_request.responseText;
                break;
                
                case "addArtistToFavorites":
                if (http_request.responseText=="1") alert("This artist is already in favorites");
                else document.getElementById("favartist").innerHTML = http_request.responseText;
                break;   
                
                case "delArtistFromFavorites":
                document.getElementById("favartist").innerHTML = http_request.responseText;
                break; 
                
                case "addLabelToFavorites":
                if (http_request.responseText=="1") alert("This label is already in favorites");
                else document.getElementById("favlabel").innerHTML = http_request.responseText;
                break;   
                
                case "delLabelFromFavorites":
                document.getElementById("favlabel").innerHTML = http_request.responseText;
                break;                                               
                
                case "delFromPlaylist":
                document.getElementById("playlist").innerHTML = http_request.responseText;                
                break; 
                
                case "message":
                if (http_request.responseText=="-1") {
                    alert("Server Error.\nMessage not sent, just try once again.");   
                } else {
                    document.getElementById("comments").innerHTML=decodeURI(http_request.responseText);
                    document.forms["tuningForm"].comment_message='';                
                }
                document.getElementById("send_button").innerHTML='send';
                break;             
                
            }
            
        } else {
            
            alert('Server Error.');   
            
        }
    }
}
