// unob
document.observe("dom:loaded", function() {
	
	// mp3s
	$$('.dmp3').each(function(el) {
		el.observe('click',function(ev) {
			ev.stop();
			el.blur();
			if( el.hasClassName('playing') ) {
				stopAll();
			} else {
				stopAll();
				playOne( el );
			}
		});
	});
	
	$$('.d').each(function(el) {
		el.observe('mouseover',function(ev) {
			showhover('dh_'+el.id.replace('d_',''));
		});
		
		
	});
	
	$$('.dh').each(function(el) {
		el.observe('mouseout',function(ev) {
			hidehover(el.id);
		});
	});
	
	/* uncomment this block out to allow flash elements to fade - repositions though */
	/*
	document.observe('click', function(e) {
		$$('.flash').each(function(el){
			Effect.Fade(el, {duration: 1});
		});
	});
	*/
	
	// pretty gross kb nav
	document.observe('keypress', function(e) { 
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;

		ignore = /input|textarea/i;
		tag = (e.target || e.srcElement).tagName;
		if( ignore.test(tag)) return;

		var character = String.fromCharCode(code).capitalize();
		if( character == 'J' ) {
			// forward
			try {
                elNext();
			} catch( err ) {}
		} else if( character == 'K') {
			// back
			try {
                elPrev();
			} catch( err ) {}
		}
	});
});

function elPrev() {
    var scrollEls = $$('.d');
	
	var eloffs = new Array();
	scrollEls.each( function(el){
		o = new Object();
		offset = el.viewportOffset();
		o.obj = el;
		o.offset = offset['top'];
		eloffs.push( o );
	});
	
   	// find "smallest" negative
	var scrollLast;
	var l;
	var prev;
	t = eloffs.reverse();
	t.each( function( el ){
		if( !l ) {
			l = el;
		}
		if( el.offset < l.offset && (l.offset < 0 ) ) {
			prev = l;
		} else {
			l = el;
		}
		
		if( el.obj.id == eloffs.last().obj.id && !prev ) {
			prev = el;
			if( scrollLast == el ) {
				console.log("using prev page");
			}
		}
	});
	if( prev ) {
		scrollLast = prev.obj;
		return Effect.ScrollTo(prev.obj.id,{duration:0.4});
	} 
}

function elNext() {
    var scrollEls = $$('.d');
	
	var eloffs = new Array();
	scrollEls.each( function(el){
		o = new Object();
		offset = el.viewportOffset();
		o.obj = el;
		o.offset = offset['top'];
		eloffs.push( o );
	});
	
	
    // find smallest non-negative
	var scrollLast;
	var l;
	var next;
	eloffs.each( function( el ){
		if( !l ) {
			l = el;
		}
		
		if( el.offset > l.offset && (l.offset > 0 ) ) {
			next = l;
		} else {
			l = el;
		}
		
		if( el.obj.id == eloffs.last().obj.id && !next ) {
			next = el;
			if( scrollLast == el ) {
				console.log("using next page");
			}
		}
		
	});
	if( next ) {
		scrollLast = next.obj;
		return Effect.ScrollTo(next.obj.id,{duration:0.4});
	}
}


// misc
function stopAll() {
	$$('.dmp3').each(function(el) {
		if( el.hasClassName('playing') ) {
			el.removeClassName('playing');
			el.innerHTML = '<img src="/assets/base/images/play.png" alt=""/>';
		}
	});
	soundManager.stopAll();
}

function playOne( el ) {
	soundManager.play(el.id, locateMusic(el.id));
	el.addClassName('playing');
	el.innerHTML = '<img src="/assets/base/images/stop.png" alt=""/>';
}

function showhover( id ) {
	$(id).style.visibility = 'visible';
}
function hidehover( id ) {
	$(id).style.visibility = 'hidden';
}

function locateMusic( id ) {
	id = id.replace('dmp3_','');
	mhref = '';
	data.each( function( d ) {
		if( d.id == id ) {
			mhref = d.mp3.href;
			throw $break;
		}
	});
	
	if( mhref != '' ) {
		return mhref;
	}
	return false;
}

// soundManager setup
soundManager.url = '/assets/base/swf/';
soundManager.debugMode = false;
