			function createVoteWidget( parent, trackid, score ) {
				var image = new Element( 'img', {src: '/wp-content/plugins/radio/img/stars_'+score+'.png',
								 alt: 'Score'+score,
								 title: 'Score '+score,
								 trackid: trackid,
								 score: score} );
				parent.update( image );
				/* if ( !parent.hasClassName('novote') ) { */
				image.observe( 'click', function(event) {
								var score = (Math.round((event.clientX-this.viewportOffset().left)/11)+1);
								if ( score > 5 ) score = 5;
								parent = this;
	                        				new Ajax.Request('/wp-content/plugins/radio/ajax.php?action=vote&trackid='+this.readAttribute('trackid')+'&score='+score, {
	                            					method: 'get', evalJSON: true,  decay: 1, onComplete : function(transport) {
										var v = transport.responseJSON;	
										if ( v.state == 'OK' ) {				
											if ( parent.readAttribute('trackid') == v.trackid ) {
												parent.writeAttribute( 'src', '/wp-content/plugins/radio/img/stars_'+v.score+'.png' );
												parent.writeAttribute( 'title', 'Score '+v.score );
												parent.writeAttribute( 'score', v.score );
											}
										} else {
											alert( 'Sorry, you can\'t vote for this track!' );
										}
									}
						                });
							});
				image.observe( 'mouseout', function(event) {
								this.writeAttribute( 'src', '/wp-content/plugins/radio/img/stars_'+this.readAttribute('score')+'.png' );
								this.writeAttribute( 'title', 'Score '+this.readAttribute('score') );
							});
				image.observe( 'mousemove', function(event) {
								var score = (Math.round((event.clientX-this.viewportOffset().left)/11)+1);
								if ( score > 5 ) score = 5;
								this.writeAttribute( 'src', '/wp-content/plugins/radio/img/stars_'+score+'.png' );
								this.writeAttribute( 'title', 'Click to vote '+score+' for this track' );
							});
				/* } */
			}


			function refreshTrackData() {
	                        new Ajax.Request('/wp-content/plugins/radio/ajax.php?action=channelstate', {
	                            method: 'get', evalJSON: true,  decay: 1, onComplete : function(transport) {
				    	var r = transport.responseJSON;
					r.data.each(function(channel) {
						var current = $(channel.name+'_current');
						if ( current != null ) {
							current.update( channel.track );
						}
						var lastTen = $(channel.name+'_last_ten');
						if ( lastTen != null ) {
							lastTen.update('');
							channel.lastten.each(function(track) {
								if ( track.artists != '' && track.title != '' ) {
									var element = new Element('li', {class: 'track'}).update( track.artist+' - '+track.title );
									lastTen.insert( element );
								}
							});
						}
						var topTen = $(channel.name+'_top_ten');
						if ( topTen != null ) {
							topTen.update('');
							channel.topten.each(function(track) {
								if ( track.artists != '' && track.title != '' ) {
									var element = new Element('li', {class: 'track'}).update( track.artist+' - '+track.title );
									topTen.insert( element );
								}
							});
						}
						var currentScore = $(channel.name+'_current_score');
						if ( currentScore != null && currentScore.readAttribute('trackid') != channel.trackid ) {
							currentScore.writeAttribute( "trackid", channel.trackid );
							currentScore.update('');
							createVoteWidget( currentScore, channel.trackid, channel.score );
						}
					});
				    }
		                });
			}

function fileok() {
	statusupdater.stop();
	$('upload_status').hide();
	$('upload_ok').show();
}

function filefailed() {
	statusupdater.stop();
	$('upload_status').hide();
	$('upload_failed').show();
}


function echeck(str) {
		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false
		 }

 		 return true					
	}

function sendFile( id ) {
	if ( ! echeck( $('email').value ) ) {
		alert( 'Please enter your email!' );
	} else {
	$('hirsch_upload').submit();
	$('uploadform').hide();
	$('upload_status').show();
	statusupdater = new Ajax.PeriodicalUpdater('someinvalidid', '/wp-content/plugins/radio/ajax.php', {
	  parameters: { action: 'upload', upload_id: id },
 	  frequency: 3,
	  onSuccess: function(transport) {
	    	var obj = transport.responseJSON;
		var bar_width = Math.round( 360 / 100 * obj.done );
		$('done').setStyle( { width: bar_width+'px', background: '#840000', height: '16px' } );
		$('upload_info').update( obj.info );
	  }
	});
	}
	return false;
}

function connectMouseOverHooks() {
	$$('div.upload_choice').each(function(e) {
		e.observe('mouseover', function(event){
			Event.element(event).addClassName('upload_choice_selected');
			Event.element(event).removeClassName('upload_choice');
		});
		e.observe('mouseout', function(event){
			Event.element(event).addClassName('upload_choice');
			Event.element(event).removeClassName('upload_choice_selected');
		});
	});
	$$('div.soundcloud_track').each(function(e) {
		e.observe('mouseover', function(event){
			if ( !Event.element(event).hasClassName('track_time') ) {
				Event.element(event).addClassName('soundcloud_track_selected');
				Event.element(event).removeClassName('soundcloud_track');
			}
		});
		e.observe('mouseout', function(event){
			if ( !Event.element(event).hasClassName('track_time') ) {
				Event.element(event).addClassName('soundcloud_track');
				Event.element(event).removeClassName('soundcloud_track_selected');
			}
		});
	});
}

function formatTrackLength(millis) {
	var m = millis;
	var min = Math.floor(m / (60*1000));
	m -= min * 60 * 1000;
	var sec = Math.floor(m / 1000);
	return min+":"+(sec < 10 ? "0"+sec : sec);
}

function toggleSelection(e) {
	var element = Event.element(e);
	var trackid = element.readAttribute('trackid');
	var v = $('track_'+trackid);
	if ( v.value == "0" ) {
		$('track_img_'+trackid).src = '/wp-content/plugins/radio/img/check_on.png';
		v.value = "1";
	} else {
		$('track_img_'+trackid).src = '/wp-content/plugins/radio/img/check_off.png';
		v.value = "0";
	}
}

function addSoundcloudTrack( c, track ) {
	var div = new Element('div', {class: 'soundcloud_track unselectable', trackid: track.id});
	c.insert({bottom: div});
	div.observe('click', function(event){
		toggleSelection(event);
	});
	
	var check = new Element('input', {id: 'track_'+track.id, class: 'sctrack', name: 'trackselected['+track.id+']',type: 'hidden', value: '0'});
	div.insert({bottom: check});
	
	var box = new Element('img', {id: 'track_img_'+track.id, class: 'soundcloud_choice_img', src: '/wp-content/plugins/radio/img/check_off.png', trackid: track.id});
	div.insert({bottom: box});
	box.observe('mouseover', function(event){
		div.addClassName('soundcloud_track_selected');
		div.removeClassName('soundcloud_track');
	});
	box.observe('mouseout', function(event){
		div.addClassName('soundcloud_track');
		div.removeClassName('soundcloud_track_selected');
	});
	
	div.insert({bottom: track.title});
	
	var time = new Element('div', {class: 'track_time', trackid: track.id});
	time.update( formatTrackLength( track.duration ) );
	div.insert({bottom: time});
	time.observe('click', function(event){
		toggleSelection(event);
	});
}

function showSoundcloudAccount( v ) {
	if (!uploadCanceled) {
		$('soundcloud_progress').hide();
		var c = $('soundcloud'); 
		c.update('<h1 class="soundcloud_hi">Hi '+v.user.username+'!</h1>');
		c.insert({bottom: '<br />'});
		c.insert({bottom: '<p>select the tracks you want to send us below:</p>'});
		var token = new Element('input', {class: 'sctrack', name: 'token',type: 'hidden', value: v.t});
		c.insert({bottom: token});
		var secret = new Element('input', {class: 'sctrack', name: 'secret',type: 'hidden', value: v.s});
		c.insert({bottom: secret});
		
		if ( Object.isArray(v.tracks.track) ) {
			v.tracks.track.each(function(track) {
				addSoundcloudTrack( c, track );
			});
		} else {
			addSoundcloudTrack( c, track );
		}
		c.insert({bottom: '<br />'});
		
		var uploadBtn = new Element('input', {type: 'button', onclick: 'finishSoundcloudUpload(); return false;', name: 'Upload', value: 'Upload'});
		c.insert({bottom: uploadBtn});
		
		var cancelBtn = new Element('input', {type: 'button', onclick: 'cancelUpload(); return false;', name: 'Cancel', value: 'Cancel'});
		c.insert({bottom: cancelBtn});
		
		connectMouseOverHooks();
		$('soundcloud').show();
	}
}

function authorizeSoundcloud() {
	new Ajax.Request('/wp-content/plugins/radio/ajax.php', {
		method: 'post',
		parameters: "action=soundcloud_access&token="+connectResult.token+"&secret="+connectResult.secret,	
  		onSuccess: function(response) {
			if (!uploadCanceled) {
				authResult = response.responseJSON;
				if ( authResult.state == 'OK' ) {
					authWindow.close();
					$('soundcloud_status').update('listing your tracks on Soundcloud...');
					new Ajax.Request('/wp-content/plugins/radio/ajax.php', {
						method: 'post',
						parameters: "action=soundcloud_tracks&token="+authResult.token+"&secret="+authResult.secret,	
				  		onSuccess: function(tracks) {
							if (!uploadCanceled) {
								showSoundcloudAccount( tracks.responseJSON );
							}
						}
					});
				} else {
					window.setTimeout('authorizeSoundcloud()', 5000);
				}
			}
			uploadCanceled = false;
		}
	});
}

function connectToSoundcloud() {
	uploadCanceled = false;
	$('hirsch_upload').hide();
	$('soundcloud_status').update('connecting to Soundcloud...');
	$('soundcloud_progress').show();
	new Ajax.Request('/wp-content/plugins/radio/ajax.php', {
		method: 'post',
		parameters: "action=soundcloud_init",	
  		onSuccess: function(response) {
			if (!uploadCanceled) {
				$('soundcloud_status').update('waiting for your authorization...');
				connectResult = response.responseJSON;
				authWindow=window.open(connectResult.url,'Soundcloud Authorize', 'width=980,height=600');
				if (authWindow){
					authWindow.focus();
					window.setTimeout('authorizeSoundcloud()', 5000);
				} else {
					$('soundcloud_status').update('Please disable your popup blocker for hirschmilch.de and try again!');
				}
				
			}
			uploadCanceled = false;
		}
	});
}

function finishSoundcloudUpload() {
	postData = 'action=soundcloud_upload';
	$$('input.sctrack').each(function(e) {
			postData = postData+'&'+e.name+'='+e.value;
	});
	$('soundcloud').hide();
	$('soundcloud_status').update('downloading from Soundcloud...');
	$('soundcloud_progress').show();
	new Ajax.Request('/wp-content/plugins/radio/ajax.php', {
		method: 'post',
		parameters: postData,	
  		onSuccess: function(response) {
			$('soundcloud_progress').hide();
			$('upload_ok').show();
		}
	});
}

function cancelUpload() {
	location.reload();
	uploadCanceled = true;
}
