/* PRIVATE */
function _blackout(state) {
    $.log('_blackout: ' + state);
    if (state == "on") {
        var blackout = $('<div id="blackout"></div>');
        $('body').append(blackout);
        $('#blackout').fadeTo("slow", 0.75);

    } else {
        $('#blackout').fadeTo("slow", 0.0, 
        function() {
            $('#blackout').remove();
            $('#btnSubscribe').removeClass('active');
            $('#btnContact').removeClass('active');

        });

    }

}

function _hideHeader(state) {
    $.log('_hideHeader: ' + state);
    if (state == "on") {
        $('#news').slideUp(500, 
        function() {
            $('.header:last > h2')
            .animate({
                marginLeft: -60
            },
            500, 'easeOutQuint', 
            function() {})
            .empty()
            .append($('<a class="nav inactive">')
            .text('HOME >>'))
            .click(function() {
                _hideHeader('off');
            });

        });

    } else {
        $('.header:last > h2')
        .animate({
            marginLeft: 0
        },
        500, 'easeOutQuint', 
        function() {
            $('#news').slideDown(500, 
            function() {});
        })
        .empty()
        .text('RECENT RELEASE')
        .unbind('click');
        _showCurrentRelease(Palette.Releases[0]);
        $('a.nav', 'ul.nav.global').removeClass('active').addClass('inactive');

    }

}

function showSheet(clicked, el) {
    el.show();

    // get height of last paragraph
	var myOffset = $('#content').offset().top - $('#sheet').offset().top - 32;
	myOffset = (myOffset < 195) ? 195 : myOffset;
    $.log('offset ='+myOffset);
    // show contact/mailing list box
    $('#sheet').animate({height: myOffset},1000, 'linear',function() {})

    // black out the screen
    _blackout('on');

    // pop it to the front
    $(clicked).addClass('active');

    // listen for escape key
    $(clicked).bind('keypress', 
    function(e) {
        var keyCode = e.keyCode || window.event.keyCode;
        if (keyCode == "27") {
            _cancel();

        }

    });
    return false;
}
function _cancel() {
    $.log('_cancel()');
    $('#sheet').animate({height: 0},1000, 'linear', 
    function() {
        $('#mailinglist').hide();
        $('#contact').hide();

    });
    _blackout('off');

}

function _showEvents(data, target) {
    $.log('_showEvents');
    var elem = '';
    for (i = 0; i < data.length; i++) {
        var _date = data[i].date;
        var temp = _date.split('-');
        var _date2 = new Date(temp[0], temp[1] - 1, temp[2]);
        var _now = new Date().setHours(0, 0, 0, 0);
        if (_now <= _date2) {
            _date = _date2;
            var _name = data[i].name;
            var _location = data[i].location;
            var _set = data[i].set;
            var _curMonth = _date.getMonth() + 1;
            if (_curMonth.length == 1) {
                _curMonth = "0" + _curMonth;
            }
            var _curDate = _date.getDate();
            if (_curDate.length == 1) {
                _curDate = "0" + _curDate;
            }
            elem += '<div class="vevent">\n';
            elem += '\t<abbr class="dtstart" title="' + _date.getTime() + '">' + _curMonth + '.' + _curDate + '.' + _date.getFullYear() + '</abbr>\n';
            elem += '\t<span class="summary">' + _name + ' <span class="live">' + _set + '</span></span>\n';
            elem += '\t<span class="location">' + _location + '</span>\n';
            elem += '</div>\n';

        }

    }
    $(target).append(elem);

}

function _showNews(data, target) {
    $.log('_showNews');
    $(data).appendTo(target);

}

function _showCurrentRelease(data, target) {
    $.log('_showCurrentRelease');
    // should really have this all nicely generated in memory as dom, but not now
    var aNames = data.artistName.split(" &amp; ");
    var contributors = '';
    for (i = 0; i < aNames.length; i++) {
        contributors += '<span class="contributor"><span class="vcard"><span class="fn">' + aNames[i] + '</span></span></span>';
        contributors += (i < aNames.length - 1) ? ' &amp; ': '';

    }
    var elem = '<div class="halbum">\n';
    elem += '\t<p><span class="identifier">' + data.catalog + '</span> :\n';
    elem += contributors + ' : ';
    elem += '<span class="album-title">' + data.title + '</span></p>';
    elem += '<img class="photo" src="' + data.image + '" width="296" height"296" alt="' + data.catalog + ' Label Art - ' + data.artistName + ' - ' + data.title + '" border="0">';
    if (data.tracks.length > 1) {
        elem += "<ul>";
        for (i = 0; i < Math.floor(data.tracks.length / 2); i++) {
            elem += '<li class="track"><span class="haudio"><a rel="sample" href="' + data.tracks[i].audio + '"><span class="position">' + data.tracks[i].position + '</span>: <span class="audio-title">' + data.tracks[i].title + '</span></a></span></li>';

        }
        elem += '</ul><ul class="col-2">';
        for (i = Math.floor(data.tracks.length / 2); i < data.tracks.length; i++) {
            elem += '<li class="track"><span class="haudio"><a rel="sample" href="' + data.tracks[i].audio + '"><span class="position">' + data.tracks[i].position + '</span>: <span class="audio-title">' + data.tracks[i].title + '</span></a></span></li>';

        }
        elem += "</ul>";

    } else {
        elem += "<ul>";
        for (i = 0; i < data.tracks.length; i++) {
            elem += '<li class="track"><span class="haudio"><a rel="sample" href="' + data.tracks[i].audio + '"><span class="position">' + data.tracks[i].position + '</span>: <span class="audio-title">' + data.tracks[i].title + '</span></a></span></li>';

        }
        elem += "</ul>";

    }
	if (data.links) {
		if (data.links.length > 0) {
			elem += '<h3 style="clear:both;float:none;margin-top:10px;padding-top:10px;">Available on:</h3>'
			elem += '<ul>';
	        for (i = 0; i < data.links.length; i++) {
	            elem += '<li class="link"><a href="' + data.links[i].url + '">' + data.links[i].vendor + '</a></li>';
	        }
	        elem += "</ul>";
		}
	}
    //elem += '<a rel="payment" class="nav purchase" href="#">Purchase</a></div>';
    $('#content').children().remove(":not('.header')").end().append(elem);

}
function _showArtists(data, target) {
    $.log('_showArtists');
    var elem = $('<div><ul class="nav artists clearfix"></div>');
    $(data).each(function(i) {
        $('ul', elem).append($('<li>').append($('<a>').append(this.artistName).attr('id', "artist" + i).addClass('nav')));
        $(elem).append(
        $('<div id="artist' + i + '" class="artist">')
        .append('<img src="' + this.image + '" width="436" height="327" />')
        .append(this.bio)
        );

    });
    $('a:not(:last)', elem).css('paddingRight', '3px');
    $('div.artist:first', elem).addClass('active');
    $('a:first', $('ul', elem)).addClass('active');
    $('a', $('ul', elem)).click(function() {
        $('a', 'ul.artists').removeClass('active');
        $(this).addClass('active');
        $('div.artist').removeClass('active');
        var artistNumber = $(this).attr('id').substr(6, 7);
        $('div.artist:eq(' + artistNumber + ')').addClass('active');

    });
    $('#content').children().remove(":not('.header')").end().append(elem.children());
    $('html, body').animate({scrollTop: 0},'fast');

}
function _showReleases(data) {
    $.log('_showReleases');
    var elem = $('<table class="releases">');
    $(data).each(function() {
        var tempTracks = $('<ol>');
        $(this.tracks).each(function(i) {
            $(tempTracks).append($('<li>').append(this.position + ': ' + this.title));

        });
		var tempVendors = $('<ul class="vendors">');
		$(this.links).each(function(i) {
			if (this.vendor && this.vendor.indexOf('undef')) {
	            $(tempVendors).append($('<li class="'+this.vendor+'">').html('<a href="'+this.url+'">'+this.vendor+' &raquo;</a>'));
			}
		})	
        $(elem).append(
        $('<tr>')
        .addClass('closed')
        .append($('<td class="catalogNumber"><span>' + this.catalog + '</span></td>'))
        .append($('<td class="catalogArtist">' + this.artistName + '</td>'))
        .append($('<td class="catalogTitle">' + this.title + '</td>'))
        .click(function() {
            $(this).toggleClass('closed');
            $(this).next().toggleClass('hidden');

        })
        ).append(
        $('<tr>')
        .addClass('hidden')
        .addClass('catalogMoreInfo')
        .append($('<td>'))
        .append($('<td>').append('<img class="photo" src="' + this.image + '" width="148" height"148" alt="' + this.catalog + ' Label Art - ' + this.artistName + ' - ' + this.title + '" border="0">'))
        .append($('<td>').append(tempTracks).append(tempVendors))
        );

    });
    $('tr:even', elem).css('cursor', 'pointer').hover(
    function() {
        $(this).addClass("hover");
    },
    function() {
        $(this).removeClass("hover");
    }
    );
    $('#content').children().remove(":not('.header')").end().append(elem);
	$('html, body').animate({scrollTop: 0},'fast');

}
function _showAbout(data) {
    $.log('_showAbout');
    $('#content').children().remove(":not('.header')").end().append(data);

}
function _addEvents() {
    $.log('_addEvents');

    // add event handler to contact button
    $('#btnContact').click(function() {
		if(!$(this).hasClass('active')) {
        	showSheet(this, $('#contact'));
		}
    });

    // add event handler to subscribe button
    $('#btnSubscribe').click(function() {
		if(!$(this).hasClass('active')) {
	        showSheet(this, $('#mailinglist'));
		}
    });

    // go into both forms and attach cancel event to both cancel buttons
    $('input[@value=Cancel]').click(_cancel);

    // attach events to artists/releases/about
    $('#artists').click(function() {
        $.log('Clicked: Artists');
        $('ul.nav.global li a').removeClass('active');
        $('ul.nav.global li a').addClass('inactive');
        $(this).addClass('active').removeClass('inactive');
        window.scroll(0, 0);
        _showArtists(Palette.Artists, $('div:eq(1)', '#content'));
        _hideHeader('on');

    });

    $('#releases').click(function() {
        $.log('Clicked: Releases');
        $('ul.nav.global li a').removeClass('active');
        $('ul.nav.global li a').addClass('inactive');
        $(this).addClass('active').removeClass('inactive');
        window.scroll(0, 0);
        _showReleases(Palette.Releases, $('div:eq(1)', '#content'));
        _hideHeader('on');

    });

    $('#about').click(function() {
        $.log('Clicked: About');
        $('ul.nav.global li a').removeClass('active');
        $('ul.nav.global li a').addClass('inactive');
        $(this).addClass('active').removeClass('inactive');
        window.scroll(0, 0);
        _showAbout(Palette.About);
        _hideHeader('on');

    });

}

function _validate(formData, jqForm, options) {
    //_showRequest(formData, jqForm, options);
    $.log($(jqForm[0]));
    var email = $('input[name=email]', $(jqForm[0])).val();
    $.log('email = ' + email);
    if (email.match(/^([a-zA-Z0-9_'+*$%\^&!\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9:]{2,4})+$/i)) {
        $.log('email is ok');
        return true;
        _cancel();

    } else {
        $.log('email is not ok');
        return false;

    }

}

function _showRequest(formData, jqForm, options) {
    $.log('_showRequest');
    var queryString = $.param(formData);
    $.log('About to submit: \n\n' + queryString);
    return true;

}
function _showResponse(responseText, statusText) {
    $.log('_showResponse');
    alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + '\n\nThe output div should have already been updated with the responseText.');
    $('#output1').fadeIn('slow');

}
function toggleNews() {
    $('#news').slideUp('slow');
}
function decrypt(str) {
    var decrypted;
    for (i = 0; i < str.length; i++) {
        decrypted = decrypted + String.fromCharCode((str[i].charCodeAt() + 1));

    }
    return decrypted;

}