var shURL = "/layouts/SessionHandler.ashx";
var artistInputs = {name:'Kunstnernavn',grxnr:'Gramex-nummer',cprnr:'CPR-nummer',alias:'Navn / alias',address:'Adresse',postcode:'Postnr',city:'By',telephone:'Telefon',fax:'Fax',email:'Email',nationality:'Nationalitet',instrument:'Instrument',role:'Rolle'};
var reTrackInputs = {trackname:'Titel',company:'Pladeselskab',catalognr:'Katalognummer',tracknr:'Sk&aelig;ringsnummer',copytrackname:'Titel'};

var activeTrack=-1;


var tracks = {};
var tracks_artists = {};
var artists = {};

function artistFromForm() {
    var artist = {};
    $('#artist_form input, #artist_form select').each(function(i) {
        artist[this.id] = $(this).val();
    });
    return artist;
}

function addArtist() {
    var artist = artistFromForm();
    id = artists.nextIndex;
    artists[id] = artist;
    artists.nextIndex++;
    return id;
}

function addArtistToTrack(artistId) {   
    if(!tracks_artists[activeTrack]) {
        tracks_artists[activeTrack] = [];
    }
    tracks_artists[activeTrack][tracks_artists[activeTrack].length] = artistId;
}

function removeArtistFromTrack(artistId) {
    tracks_artists[activeTrack] = arrayRemove(tracks_artists[activeTrack],artistId);
}

function addTrack() {
   tracks[activeTrack] = $("#trackname_" + activeTrack).value;
}

function addEmptyTrack() {
    totalTracks++;
    tracks.nextIndex = totalTracks;
    if(formType == "Re") {
        $("#tracklist").append(makeReTrack(totalTracks));
    } else {
        $("#tracklist").append(makeTrack(totalTracks));
    }
    $.post(shURL, {action: 'set','UTracks':totalTracks});
}

function populateTracks() {
    var lines = "";
    
    if(totalTracks > 0) {
        for(var i=0;i<totalTracks;i++) {
            if(formType == "Re") {
                lines = lines + makeReTrack(i+1);
            } else {
                lines = lines + makeTrack(i+1);
            }
        }        
    }
    
    $("#tracklist").append(lines);
}

function trackNumber(nr) {
    var retnum = nr;
    if(retnum > 9) return retnum;
    return "0" + retnum;
}

function saveTrackName(nr) {
    tracks[nr] = $("#trackname_" + nr).val();
    $.post(shURL,{action:'set','tracks':JSON.stringify(tracks)});
}

function makeTrack(nr) {
    var ret = "<li id='track_" + nr + "'>";
    var ret = ret + "<strong class='tracknumber'>" + trackNumber(nr) + ": </strong> <input onblur=\"saveTrackName(" + nr + ")\" onfocus=\"activateTrack(" + nr + ");\" id='trackname_" + nr + "' type='text' class='text title' size='50' value='" + (tracks[nr]?tracks[nr]:"Uden titel") + "' />";
	var ret = ret + "</li>";
	return ret;
}

function activateTrack(nr) 
{
    if(nr == activeTrack) return;
    copyArtists = [];
    if(activeTrack >= 0) {
        $("#track_" + activeTrack).className="";
        $("#open_track").hide();
    }
    if(nr < (totalTracks+1)) {
        $("#trackname_" + nr).select();
        var li = $("#track_" + nr);
        li.className="open";
        activeTrack = nr;
        li.append($("#open_track").remove());
        $("#open_track").show();
        populateAvailableArtists();
        populateTrackArtists();
    } else {
        activeTrack = -1;
    }
}

function populateTrackArtists() {
    var lines = "";
    $.each(artists, function(key,artist) {
        if(typeof artist == "object") {
            if(arrayContains(tracks_artists[activeTrack], key)) {
                lines = lines + makeArtistLine(key);
            }
        }
    });
    $("#track_artists").empty().append(lines);
}

function populateAvailableArtists() {
    var lines = "";
    $.each(artists,function(key,artist) {
        if(typeof artist == "object") {
            if(!arrayContains(tracks_artists[activeTrack], key)) {
                lines = lines + makeArtistLine(key, true);
            }
        }
    });
    if(lines == "") { $("#existingLink").hide().removeClass('current');  $("#addCopy").hide(); } else { $("#existingLink").show(); }
    $("#available_artists").empty().append(lines);
}

function clickRemoveArtistFromTrack(id) {
    removeArtistFromTrack(id);
    $.post(shURL,{action:'set','tracks_artists':JSON.stringify(tracks_artists)});
    populateAvailableArtists();
    populateTrackArtists();
}

function clickAddArtistsToTrack() {
   $("#open_track input[@type='checkbox']").each(function() {
        if(this.checked) {
            addArtistToTrack(this.value);
        }
   });
   $.post(shURL,{action:'set','tracks_artists':JSON.stringify(tracks_artists)});
   populateAvailableArtists();
   populateTrackArtists();
}

function arrayContains(arr, val) {
    if(arr == null) return false;
    for(var i=0;i<arr.length;i++) {
        if(arr[i] == val) return true;
    }
    return false;
}

function arrayRemove(arr, val) {
    var newArr = [];
    for(var i = 0;i<arr.length; i++) {
        if(arr[i] != val)
            newArr[newArr.length] = arr[i];
    }
    return newArr;
}

function makeArtistLine(id, withcheckbox) {
    ret = "<li>";
    if(withcheckbox) {
        ret = ret + "<input type='checkbox' value='" + id + "' />";
    }
    var artist = artists[id];
    ret = ret + makeArtistShortDesc(artist);
    if(!withcheckbox) {
        //ret = ret + " <a href='#' onclick=\"clickRemoveArtistFromTrack(" + id + ");return false;\">remove</a>";
        ret = ret + " <a href=\"#\" onclick=\"clickRemoveArtistFromTrack(" + id + ");return false;\" class=\"btn btn-remove\"><img src=\"/img/remove.gif\" alt=\"fjern\" title=\"Fjern fra skæring\" /></a>";
    }
    return ret + "</li>";
}

function clickShowExisting(link) 
{
    $("#artist_form").hide();
    $(link).parent().children('a.current').removeClass('current');
    $(link).addClass('current');
    $("#addCopy").show();
}

function makeArtistShortDesc(artist) {
    return artist.name + ", " + artist.instrument + ", " + artist.role;
}

var editMode;
var editing;

function clickAddArtist(link) {
    editMode = "add";
    document.mainform.reset();
    repopTracks();
    var f = $("#artist_form");
    f.hide().remove().insertAfter($('#add'));
    f.slideDown('slow');
    $(link).addClass('current'); 
    $("#newartistLink").removeClass('current');
}

function clickNewArtist(link) {
    editMode = "add";
    //document.mainform.reset();
    repopTracks();
    var f = $("#artist_form");
    f.hide().remove().insertAfter($('#addCopy'));
    //f.slideDown('slow');
    f.show();
    $("#addCopy").hide();
    $(link).parent().children('a.current').removeClass('current');
    $(link).addClass('current');
    $("#new_link").removeClass('current');
    //$("html,body").animate({scrollTop: $("#add").offset().top},500);
    //$("#new_link").addClass('current');
}

function repopTracks() {
	$.each(tracks,function(key,track) {
            if(typeof track == "string") {
                $("#trackname_" + key).val(track);
            }
	});
}

function clickEditArtist(link,artistId) {
    editMode = "edit";
    editing = artistId;
    document.mainform.reset();
    repopTracks();
    var artist = artists[artistId];
    $('#artist_form input , #artist_form select').each(function(i) {
        if(artist[this.id] != null)
            $(this).val(artist[this.id]);    
    });
    var f = $("#artist_form");
    $(link).parent().append(f.hide().remove());
    f.slideDown('slow');
}

function clickCancelArtist() {
    //$("#new_link").removeClass('current');
    $('#artist_form').slideUp('slow', function(){ $('a.tab.current').removeClass('current') });
}

function makeArtistLink(artistId) {
    return "<li id=\"artist" + artistId + "\"><a href=\"#\" onclick=\"clickEditArtist(this," + artistId + ");return false;\">" + artists[artistId].name + "</a>, " + artists[artistId].instrument  + ", " + artists[artistId].role + "</li>";
}

function saveArtist() {
    if($("#name").val() == '') {
        alert('"Kunstnernavn" er et obligatorisk felt');
        $("#name").focus();
        return;
    }
    if(editMode == "add") {
        var artistId = addArtist();
        addArtistToTrack(artistId);
		$.post(shURL,{action:'set','tracks_artists':JSON.stringify(tracks_artists)});
		populateAvailableArtists();
        populateTrackArtists();
        $("#artists").append(makeArtistLink(artistId));
    } else {
        var artistId = editing;
        var artist = artistFromForm();
        artists[artistId] = artist;
        newLi = makeArtistLink(artistId);
        old = $("#artist" + artistId);
        old.after(newLi);
        old.remove();
    }
    populateAvailableArtists();
    $('#artist_form').slideUp('slow', function(){ $('a.tab.current').removeClass('current'); document.mainform.reset(); repopTracks(); });
    $.post(shURL, {action: 'set','artists':JSON.stringify(artists)});
}

function populateArtists() {
    var list = "";
    $.each(artists,function(key,artist) {
        if(typeof artist == 'object')
            list = list + makeArtistLink(key);
    });
    $("#artists").append(list);
}

function tracksSummary() {
    var text = "";
    num=1;
    count = 0;
    if(formType == "Re") {
        $.each(tracks,function(key, track) {
            if(typeof track == "object" && key != "JSON.stringify") {
                $.each(reTrackInputs,function(key,title) {
                    if(key != "JSON.stringify") {
                        text = text + title + ": " + track[key] + "<br/>";
                    }
                });
                text = text + "<br/>";
            }
        });
    } else {
        $.each(tracks,function(key,track) {
            if(typeof track == "string") {
                count++;
                text = text + count + ": \"" + track + "\"<br/>";
                num++;
                if(tracks_artists[key]) {
                    for(var j=0;j<tracks_artists[key].length;j++) {
                        text = text + " " + makeArtistShortDesc(artists[tracks_artists[key][j]]) + "<br/>";
                    }
                }
                text = text + "<br/>";
            }
        });
    }
    return text;
}

function artistsSummary() {
    var text = "";
    $.each(artists, function(key, artist) {
        if(typeof artist == "object" && key!="JSON.stringify") {
            $.each(artistInputs,function(key,title) {
                if(key != "JSON.stringify") {
                    text = text + title + ": " + artist[key] + "<br/>";
                }
            });
            text = text + "<br/>";
        }
    });
    return text;
}

var onedone = false;

function dataToText(url) {
    onedone = false;
    $.post(shURL, {action: 'set','artists_summary':artistsSummary()},possiblyRedirect);
    $.post(shURL, {action: 'set','tracks_summary':tracksSummary()},possiblyRedirect);
}

function possiblyRedirect() {
    if(onedone) {
        window.location='Bekraeft.aspx';
    } else {
        onedone = true;
    }
}


function makeReTrack(nr) {
    var ret = "<li id='track_" + nr + "'>";
    var ret = ret + "<strong class='tracknumber'>" + trackNumber(nr) + ": </strong> <input onfocus=\"activateReTrack(" + nr + ");\" id='trackname_" + nr + "' type='text' class='text title' size='50' value='" + (tracks[nr]?tracks[nr].trackname:"Uden titel") + "' />";
	var ret = ret + "</li>";
	return ret;
}

function activateReTrack(nr) {
    $("#open_track input").each(function(nr) {
        $(this).val("");
    });
    activeTrack = nr;
    $("#open_track").appendTo($("#track_" + nr));
    $("#open_track input").each(function(i) {

        if(tracks[nr] && tracks[nr][this.id]) {
            $(this).val(tracks[nr][this.id]);
            //console.log("(" + nr + ") " + this.id + ": " + tracks[nr][this.id]);
        }
    });
    $("#open_track").show();
}

function saveReTrack() {
    var track = {};
    $('#open_track input').each(function(i) {
        track[this.id] = $(this).val();
    });
    track['trackname'] = $("#trackname_" + activeTrack).val();
    tracks[activeTrack] = track;
    $.post(shURL,{action:'set','tracks':JSON.stringify(tracks)});
    $("#open_track").hide();
}

function validateArtists() {
    for(var i=1;i<=totalTracks;i++) {
        if(!tracks_artists[i] || tracks_artists[i].length < 1) {
            alert('Mindst en kunstner per track');
            return false;
        }
    }
    return true;
}