function moveSelected(dir)
{
	var tmp_size = $$('.selected_line').size();

	if (tmp_size == 0 && playlist.length)
	{
		$$('#playlist li#'+playlist[0])[0].className = 'selected_line';
		//$(playlist[0]).className = 'selected_line';
		dir = null;
	}
	
	var parent_obj = ($$('.selected_line')[0].descendantOf('search_sortable'))?'search_sortable':'playlist_sortable';

	switch (dir)
	{
		case 'down':
			var e1 = $(parent_obj).down('.selected_line');
			var e2 = e1.next('li');
			if (!e2)
			{
				return;
			}
			e1.className = 'media_item';
			e2.className = 'selected_line';

			if (parent_obj == 'search_sortable')
			{
				search_scroll.setValue(scrollWheelValue+=0.5);
				srScrollListener(scrollWheelValue+=0.5);
			} else {
				playlist_scroll.setValue(scrollWheelValue+=0.5);
				pScrollListener(scrollWheelValue+=0.5);
			}
		break;
   
		case 'up':
			var e1 = $(parent_obj).down('.selected_line');
			var e2 = e1.previous('li');
			if (!e2)
			{
				return;
			}
			e1.className = 'media_item';
			e2.className = 'selected_line';

			if (parent_obj == 'search_sortable')
			{
				search_scroll.setValue(scrollWheelValue-=0.5);
				srScrollListener(scrollWheelValue-=0.5);
			} else {
				playlist_scroll.setValue(scrollWheelValue-=0.5);
				pScrollListener(scrollWheelValue-=0.5);
			}
		break;
 }
}
function playSelected()
{
	var vid_obj = $$('.selected_line')[0].id;
	selected_video = vid_obj;
	playVid(selected_video);
}
function togglePlaySelected()
{
	togglePlay(!player_active);
	//return false;
}
function status(msg,custom_msg)
{
	msg = (msg == 'custom')? custom_msg : status_messages[msg];
	$('status_bar').update(msg);
}
function logout()
{

	clearPlaylistSelect();
	playlist_dirty = false;
	playlistAction('new');

	var url    = '/auth/ajaxlogout/';
	new Ajax.Request(url,
			{
			method     :'post',
			onComplete : logoutResponse
			});

	return false;
}
function logoutResponse(resp)
{
	hideOverlay();
	valid_user = false;
	$('login_is_active').hide();
	$('login_not_active').show();
	status('logged_out');
}

function login()
{
	clearFormErrors();
	$('login_loading').show();
	$('login_button').disabled = true;
	var url    = '/auth/ajaxlogin/';
	var params = $('login_form').serialize(true);
	new Ajax.Request(url,
			{
			method     :'post',
			parameters : params,
			onComplete : loginResponse
			});
	return false;
}
function loginResponse(resp)
{
	$('login_loading').hide();
	$('login_button').disabled = false;

	eval('var r='+resp.responseText);
	//valid_user = false;
	var error_msg = (r.error_msg)?r.error_msg:'Error while attempting to login.';
	if (r.status == 'error')
	{
		if (r.error_msg != null)
		{
			$('login_error').update(error_msg);
		} else {
			$H(r.form_errors).each(function(v)
			{
			$('login_'+v.key+'_error').update(v.value);
			});
		}
                valid_user = false;
                
	} else if (r.status == 'success')
	{
		valid_user = true;
		hideOverlay();
		status('logged_in');
		$('login_not_active').hide();
		$('login_is_active').show();
		setTimeout(function()
		{
			playlistAjax('load_list');
		},300);

	} else {
		showOverlay('login_reg');
	}
}
function clearFormErrors()
{
	$$('.error').each(function(o) {	o.update('');	});
}
function forgotPass()
{
	var params = $('forgot_pass_form').serialize(true);
        new Ajax.Request('/auth/forgotten/',{
				method     :	'post',
				parameters :	params
			});
	showOverlay('forgot_pass_complete');
	return false;
}
function register()
{
	clearFormErrors();
	$('register_loading').show();
	$('register_button').disabled = true;
	var url    = '/auth/ajaxregister/';
	var params = $('register_form').serialize(true);
	new Ajax.Request(url,
			{
				method     :'post',
				parameters : params,
				onComplete : registerResponse
			});
	return false;
}
function registerResponse(resp)
{
	$('register_loading').hide();
	$('register_button').disabled = false;
	eval('var r='+resp.responseText);
	if (r.status == 'error')
	{
		if (r.error_msg != null)
		{
			$('reg_error').update(error_msg);
		} else {
			$H(r.form_errors).each(function(v)
			{
				$('reg_'+v.key+'_error').update(v.value);
			});
		}
	} else if (r.status == 'success')
	{
		showOverlay('registered');
		
		valid_user = true;
		$('login_not_active').hide();
		$('login_is_active').show();
	}
}
var start_search = function()
{
	search();
	$('search_box').setStyle({ color: "#CCCCCC" });
	return false;
}
function search()
{
	$('search_box').blur();

	status('searching');

	var search_query = $('search_box').value;
	var url = '/search.php';
  
	var tmp_type1 = ($F('search_type_1'))?$F('search_type_1'):'';
	var tmp_type2 = ($F('search_type_2'))?$F('search_type_2'):'';
	var search_type =  tmp_type1 + tmp_type2;

	var tmp_s1 = ($F('search_method_1'))?$F('search_method_1'):'';
	var tmp_s2 = ($F('search_method_2'))?$F('search_method_2'):'';
	var tmp_s3 = ($F('search_method_3'))?$F('search_method_3'):'';
	var search_source =  tmp_s1 + ',' + tmp_s2 + ',' + tmp_s3;

	var params = new Hash();
	params.set('q',search_query);
	params.set('type',search_type);
	params.set('source',search_source);

	var params_str = params.toQueryString();

	ajax_objects.push(new Ajax.Request(url,
			{
				method     :'post',
				parameters : params_str,
				onComplete : searchResponse
			}));
	return false;
}

function loadBuffer(url)
{
	last_buffer_url = url;
	var vb = $('vbuffer');
	vb.sendEvent("LOAD",url);
	vb.addModelListener('LOADED','bufferLoadingStatus');
}
function searchResponse(resp)
{
	eval("var response = "+resp.responseText);
	drawList('search_sortable',response);
}
function drawList(sortable_id,sortable_list)
{
	var new_list = '<ul id="'+sortable_id+'" style="">';
	var i = 0;
	var tmp_class = 'media_item';
	var sort_list = ['search_sortable','playlist_sortable'];

	var sortable_list_id = {'search_sortable'   :'searchlist',
				'playlist_sortable' :'playlist'
				};

	switch (sortable_id)
	{
		case 'playlist_sortable':
			playlist_scroll.setValue(0);
		break;
		case 'search_sortable':
			search_scroll.setValue(0);
		break;
	}
	scrollWheelValue = 0;
    
	while(typeof(sortable_list[i]) != 'undefined' && sortable_list[i]['title'] != '')
	{
		var tmp_title = sortable_list[i]['title'];
		var tmp_time  = formatTime(Math.round(sortable_list[i]['length']*60));
		if (parseFloat(sortable_list[i]['type_flag']) == 10)
		{
			tmp_title = "<small><strong>playlist: </strong></small>" + tmp_title;
			tmp_time  = '...';
		}

		new_list += '<li id="v_'+sortable_list[i]['unique_id']+'" style="z-index:1000" class="'+tmp_class+'" uid="'+sortable_list[i]['unique_id']+'" title="'+sortable_list[i]['title']+'" url="'+sortable_list[i]['url']+'" length="'+Math.round(sortable_list[i]['length']*60)+'" tf="'+sortable_list[i]['type_flag']+'" ><span class="option"></span><span class="time">'+tmp_time+'</span><span class="item_arrow"></span>'+tmp_title+'</li>';

		if (sortable_id == 'playlist_sortable')
		{
			playlist.push('v_'+sortable_list[i]['unique_id']);
		}

		i++;
	}

	if (sortable_id == 'playlist_sortable') { originalPlaylist = playlist.clone();	}

	new_list += '</ul>';

	$(sortable_list_id[sortable_id]).update(new_list);

	if (Prototype.Browser.IE)
	{
		$$('#'+sortable_id+' li').each(function(o) { Event.observe(o,'dblclick',itemListener); });
	}
   
	$$('#'+sortable_id+' li').each(function(o) { Event.observe(o,'click',itemListener); });
	$$('span.option').each(function(o) { Event.observe(o,'click',listOptionListener);  });

	if (i == 0 && sortable_id == 'search_sortable')
	{
		status('no_results');
	} else if (sortable_id == 'search_sortable') {
		status('custom','search completed. ' + i + ' result(s).');
	}


	search_sortable   = Sortable.create('search_sortable',
		{tag:'li',dropOnEmpty:true,containment:sort_list,constraint:false,zindex:1000,onUpdate:recolorLists});
	playlist_sortable = Sortable.create('playlist_sortable',
		{tag:'li',format:/(.*)/,dropOnEmpty:true,containment:sort_list,constraint:false,zindex:1000,onChange:function(o){checkDupId(o);},onUpdate:function(o){removeLastAdded();recolorLists();playlist_dirty = true;}});

}
function unselectText()
{
	moz=!Prototype.Broswer.IE;

	if (!moz) {
		oTextRange = document.selection.createRange();
		oTextRange.expand("word");
		oTextRange.execCommand("unselect");
	} else {
		oTextRange = window.getSelection();
		oTextRange.collapseToStart();
	}
}
function checkDupId(o)
{
		if (Prototype.Browser.IE)
		{
			remove_last_added = o;
			return;
		}
		var amount = (Prototype.Browser.IE)?1:2;
		if ($$('#playlist li#'+o.id).size() >= amount)
		{
			remove_last_added = o;
			if ($$('#playlist li#'+o.id).size())
			{
				var to = $$('#playlist li#'+o.id)[0];
				//new Effect.Highlight(to,{duration:0.4,restorecolor:'transparent'});
   			}
			return;
		}
}
function removeLastAdded()
{
	if (remove_last_added)
	{

			if (Prototype.Browser.IE)
			{

				setTimeout(function()
				{
					var count = 0;
					playlist.each(function(p)
					{
						if (p == remove_last_added.id)
						{
						 count ++;
						}
					});
					if (count == 2)
					{
						var tmp_id = remove_last_added.id;
						remove_last_added.remove();
						if ($$('#playlist li#'+tmp_id).size())
						{
							var to = $$('#playlist li#'+tmp_id)[0];
							//new Effect.Highlight(to,{duration:0.4,restorecolor:'transparent'});
						}
					}
				},500);
			} else {
				var o = $$('#playlist li#'+remove_last_added.id)[1];
				var old_obj = o.remove();
				remove_last_added = false;
			}
	}
}
function listOptionListener(e)
{
	var obj = Event.element(e);

	if (parseFloat(obj.ancestors()[0].getAttribute('tf')) == 10)
	{
		var u_id = obj.ancestors()[0].getAttribute('uid');
		playlist_dirty = false;
		playlistAction('new');
		playlistAjax('load','playlist_id='+u_id+'&load_type=playlist');
		return false;
	} else {
		playlistOption(obj,false);
	}
}

function playlistOption(obj,mode)
{
	mode = (typeof(mode) != 'undefined')?mode:false;
	var this_obj = (mode)?obj:obj.ancestors()[0];

	if (obj.descendantOf('search_sortable'))
	{

					var count = 0;
					playlist.each(function(p)
					{
						if (p == this_obj.id)
						{
						 count ++;
						}
					});
					if (count)
					{
						var tmp_id = this_obj.id;
						if (Prototype.Browser.IE)
						{
							var to =  $(tmp_id);
						} else {
							var to = $$('#searchlist li#'+tmp_id)[0];
						}
							new Effect.Highlight(to,{duration:0.4,restorecolor:'transparent'});


						return;
     					}



		playlist_dirty = true;

		var next_obj = this_obj.next('li');
		next_obj = (next_obj)?next_obj:this_obj.previous('li');

		var tmp_obj  = this_obj.remove();
		$('playlist_sortable').insert(tmp_obj,{position:'bottom'});

		//Sortable.sequence('search_sortable');
		recolorLists();
		if (next_obj)
		{
			next_obj.className = 'selected_line';
		}
	} else if (obj.descendantOf('playlist_sortable'))
	{

		playlist_dirty = true;
		var next_obj = this_obj.next('li');
		next_obj = (next_obj)?next_obj:this_obj.previous('li');

		var tmp_obj = this_obj.remove();

		if (tmp_obj.id == current_video)
		{
			stopVid(current_video);
			current_video = null;
		}

		//Sortable.sequence('playlist_sortable');
		recolorLists();
		if (next_obj)
		{
			next_obj.className = 'selected_line';
		}
	}

}
function recolorLists()
{
	if (!playlist_shuffle)
	{
		playlist = Sortable.sequence('playlist_sortable');
		originalPlaylist = playlist.clone();
 	}

	$$('.selected_line').each(function(i) { i.className = 'media_item';  });
	//unselectText();
}

function itemListener(event)
{

	var tmp_detail = 1;

	var vid_obj = Event.element(event);
	var vid_id  = vid_obj.id;
	var tf      = parseFloat(vid_obj.getAttribute('tf'));

	if (tf == 10)
	{
		var u_id = vid_obj.getAttribute('uid');
		playlist_dirty = false;
		playlistAction('new');
		playlistAjax('load','playlist_id='+u_id+'&load_type=playlist');
		return false;
	}
	recolorLists();
	if (!vid_id){return false;}

	if (document.all && !window.opera)
	{
		if (event.type == 'click')
		{
			tmp_detail = 1;
		} else if (event.type == 'dblclick')
		{
			tmp_detail = 2;
		}
	} else {
		tmp_detail = event.detail;
	}

	if (tmp_detail == 2)
	{
		if (vid_obj.descendantOf('search_sortable'))
		{
			playlistOption(vid_obj,true);
			playVid(vid_id);
		} else {
			playVid(vid_id);
		}
	} else {
		selectVid(vid_obj);
	}
}
function selectVid(vid_obj)
{
	selected_video = vid_obj.id;
	$(vid_obj).className='selected_line';
}
function playVid(vid_id)
{
	if (Prototype.Browser.IE)
	{
		initListeners = false;

		$('vplayer_box').innerHTML = '';
		var tmp_o = '<object id="vplayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9.0.115" width="100%" height="100%"> <param name=bgcolor value="#FFFFFF"> <param name=movie value="/flash/player.swf?config=config.xml&wmode=opaque"> <param name=allowfullscreen value="false"> <param name=allowscriptaccess value="always"> <param name="flashvars" value="wmode=opaque"></object>';

		$('vplayer_box').innerHTML = tmp_o;

		setTimeout(function()
		{
			player = $('vplayer');
			playVideo(vid_id);

		},300);

	} else {

		playVideo(vid_id);

	}
	
}
function playVideo(vid_id)
{
	var url = null;
	stopVid();
	if (player == null)
	{
		player = $('vplayerff');
	}

        // reset volume each song?
        // player.sendEvent('VOLUME',50);

        player.sendEvent('LOAD',{});

	$('share_current_media_button').show();

	current_video = '';
	current_video = vid_id;

        recolorLists();

	$$('#playlist li').each(function(o){
		if (o.id != current_video)
		{
			o.setStyle({fontWeight:'normal'});
		} else {
			o.setStyle({fontWeight:'bold'});
			url = o.getAttribute('url');
			o.className = 'selected_line';
		}
	});

	url = (url)?url:$(vid_id).getAttribute('url');
	var title = $(vid_id).title;
	$('song_title').update(title);
	$('song_title').setAttribute('title',title);


	player.sendEvent('LOAD',url);

	player.sendEvent('PLAY',true);

	if (!initListeners)
	{
		player.addModelListener('LOADED','loadingListener');
		player.addModelListener('TIME','timeListener');
		player.addModelListener('ERROR','errorListener');
		player.addModelListener('STATE','stateListener');
		initListeners = true;
	}
}

function stopVid()
{
	if ($(current_video))
	{
		$(current_video).setStyle({fontWeight:'normal'});
	} else if ($(last_video))
	{
		$(last_video).setStyle({fontWeight:'normal'});
	}

	buffer_pos = 0;
	buffer_total = 0;
	progress_pos = 0;
	new_buffer_progress_pos = 0;
	buffer_progress_pos = 0;
	update_buffer_progress(0,0,true);


	last_video = current_video;
	update_progress(0,current_total_time);
	current_video = null;
	$('song_title').update('');
	$('share_current_media_button').hide();

	if (player != null)
	{

		player.sendEvent('STOP');
		togglePlayButton(false);
	}
}
function seekPos(event)
{
	var pbar_xy = $('progress_bar').cumulativeOffset();
	var m_x = Event.pointerX(event);
	var m_y = Event.pointerY(event);
	var pbar_width = $('progress_bg').getWidth();
	var new_pos = Math.round(((m_x - pbar_xy[0]) / pbar_width) * 100) / 100;
	var seek_pos = Math.round((current_total_time * new_pos)* 10)/10;
	seek_pos = Math.ceil(seek_pos);
	player.sendEvent('SEEK',seek_pos);
}
function volumeChange(v)
{
	volume_last_value = v;
	player.sendEvent('VOLUME',v);
}

function setVolume(v)
{
	volume_bar.setValue(v);
	volume_last_value = v;
	player.sendEvent('VOLUME',v);
}
function volumeMute()
{
	var tmp_value = volume_last_value;
	if (tmp_value == 0 || tmp_value == 100 )
	{
		setVolume(volume_value);
	} else {
		volume_value = tmp_value;
		setVolume(0);
	}
	return false;
}
function volumeFull()
{
	var tmp_value = volume_last_value;
	if (tmp_value == 100 || tmp_value == 0)
	{
		setVolume(volume_value);
	} else {
		volume_value = tmp_value;
		setVolume(100);
	}
	return false;
}
function togglePlayButton(toggle_status)
{
	if (!toggle_status)
	{
		$('play_status').className = 'play';
	} else {
		$('play_status').className = 'pause';
	}
}
function togglePlay(toggle)
{
	togglePlayButton(toggle);
	if (player !== null)
	{
		player_active = toggle;
		player.sendEvent('PLAY',toggle);
	}
	return false;
}
function toggleShuffle()
{
	if (playlist.length)
	{
		playlist_shuffle = (playlist_shuffle)?0:1;

		if (playlist_shuffle)
		{
			status('custom','Shuffle enabled');
			playlist.sort(function() {return 0.5 - Math.random()});
			Sortable.setSequence('playlist_sortable',playlist);
		} else {
			status('custom','Shuffle disabled');
			playlist = originalPlaylist.clone();
			Sortable.setSequence('playlist_sortable',originalPlaylist);
		}
	} else {
 		playlist_shuffle = 0;
 	}

 	$('shuffle_button').className = (playlist_shuffle)?'enabled':'disabled';

	return false;

}
function toggleRepeat()
{
	var repeat_class = 'none';
	switch (playlist_repeat)
	{
	case 0:
		playlist_repeat = 1;
		repeat_class = 'repeat_mode_single';
		status('custom','Repeat mode: Single');
	break;
	case 1:
		playlist_repeat = 2;
		repeat_class = 'repeat_mode_all';
		status('custom','Repeat mode: All');
	break;
	case 2:
		playlist_repeat = 0;
		repeat_class = 'repeat_mode_none';
		status('custom','Repeat mode: Off');
	break;
	}

	$('repeat_button').className = repeat_class;
	return false;
}

function toggleVideo()
{
	var player_box = $('vplayer_box');
	if (!showing_video)
	{
		player_box.show();
		player_box.style.width='300px';
		player_box.style.height='200px';
		showing_video = true;
	} else {
		player_box.style.width='0px';
		player_box.style.height='0px';
		showing_video = false;
	}
}
function toggleFullScreen()
{
	var player_box = $('vplayer_box');

	if (!fullscreen)
	{
		window_resized = false;
		old_dim = document.viewport.getDimensions();

		/* 
		//check dimensions
		// resize window to fill entire screen and move to 0,0 (top left corner)?
		// lets not monkey with visitors browser
		if ((Math.abs(old_dim.width - screen.availWidth) >= 20) &&
		(Math.abs(old_dim.height - screen.availHeight) >= 20))
		{
		//window_resized = true;
		//self.moveTo(0,0);
		//self.resizeTo(screen.availWidth,screen.availHeight);
		}
                */

	        $('playlistSelect').hide();
		$('sortby').hide();

	var dim = document.viewport.getDimensions();
	
        $('video_backdrop').setStyle({
		width:  '100%',
		height:	(dim.height - 110) + 'px'
	});
	$('video_backdrop').show();

	player_box.setStyle({
		width:  (dim.height) + 'px',
		height:	(dim.height - 110) + 'px',
		marginLeft: Math.round((dim.width - (dim.height))/2)+'px',
		marginTop: '0px'
	});


	player_box.show();


	fullscreen = true;

	$('fullscreen_button').className = 'enabled';


	} else {

		var dim = document.viewport.getDimensions();

		//if (window_resized)
		//{
		//self.resizeTo((old_dim.width+8),(old_dim.height+120));
		//}

		$('video_backdrop').hide();
		player_box.setStyle({
			width:'0px',
			height:'0px'
		});


		fullscreen = false;
		showing_video = false;
		$('fullscreen_button').className = 'disabled';

	        $('playlistSelect').show();
		$('sortby').show();
	}
	
	//setTimeout(function()
	//{
		//player.sendEvent('REDRAW');
	//},1000);
}

function bufferLoadingStatus(o)
{
	status('custom','buffering; '+o.loaded + ' of ' +o.total);
}
function stateListener(o)
{
	switch(o.newstate)
	{
	case 'BUFFERING':
		if (o.oldstate == 'PLAYING')
		{
		status('custom','buffering');
		togglePlayButton(false);
		} else {
		status('custom','loading');
		}
	break;
	case 'ERROR':
		showOverlay('error',{error_msg:'An error was detected, the selected file was not able to load.'});
	break;
	case 'PLAYING':
		status('custom','playing');
		togglePlayButton(true);
	break;
	case 'PAUSED':
		status('custom','paused');
		togglePlayButton(false);
	break;
	case 'COMPLETED':

		if (player.getPlaylist()[0].duration == 0) { return false };

		if ((Math.round(current_time_pos) >= (Math.round(current_total_time)-2) || current_time_pos == 0) && current_total_time != 0)
		{
			status('custom','loading next in playlist');
			togglePlayButton(false);
			playlistAutoNext();

		} else {
			break;
		}

	break;

	case 'IDLE':
		/* no song being downloaded or played */
		//status('custom','IDLE');
	break;
	}
}
function errorListener(o)
{
	return;
	var tmp_message = '';
	tmp_message = '<br /><br />An error was detected, the selected media file did not load.<br />Try again or remove the file.<br /><br />';
	showOverlay('error',tmp_message);
}
function loadingListener(o)
{
	buffer_pos = o.loaded;
	buffer_total = o.total;
	update_buffer_progress(buffer_pos,buffer_total);
 
	/*    //buffer next video.. disabled
	if (buffer_pos >= (buffer_total -2))
	{
		var new_buffer_url = getNextVideo();

		if (new_buffer_url != last_buffer_url)
		{
		setTimeout(function(){loadBuffer(new_buffer_url);},1000);
		}
	}
	*/
}
function timeListener(o)
{
	current_total_time = o.duration;
	current_time_pos   = o.position;

	if (o.duration > 0)
	{
		update_progress(o.position,o.duration);
	}
}
function formatTime(time_num)
{
	var min = Math.floor(time_num/60);
	var sec = (time_num % 60);
	sec = (sec < 10)?"0"+sec:sec;
	// min = (min < 10)?"0"+min:min;
	return min + ":" + sec;
}

function update_progress(pos,total)
{
	var progress_bar_width = $('progress_bg').getWidth() - 0;

	progress_pos = (pos>0&&total>0)?Math.ceil((pos/total)*progress_bar_width):0;

	update_buffer_progress(buffer_pos,buffer_total,1);

	$('progress_played').setStyle({ width : progress_pos + "px" });
	$('progress_time').update(formatTime(Math.ceil(pos)));

	var remaining = (pos>0&&total>0)?Math.ceil(total-pos):0;
	$('progress_remaining').update('-'+ formatTime(remaining));
}
function update_buffer_progress(pos,total,update)
{

	var progress_bar_width = $('progress_bg').getWidth() - 0;

	if (pos == total && total)
	{
		new_buffer_progress_pos =  progress_bar_width - progress_pos;
	} else if (total) {
		new_buffer_progress_pos = Math.round((pos/total)*progress_bar_width)-progress_pos;
	} else {
		new_buffer_progress_pos = 0;
	}

	if ((new_buffer_progress_pos > buffer_progress_pos) || pos == total)
	{
		buffer_progress_pos = new_buffer_progress_pos;
		$('progress_buffer').setStyle({
			width : buffer_progress_pos + "px"
		});

	}

}
function updateOverlay()
{
	var dim = document.viewport.getDimensions();


	$('overlay_bg').setStyle({
			height: dim.height + 'px',
			width:	'100%'
	});

	$('overlay_window').setStyle({
			top:  Math.round((dim.height-400)/2)+'px',
			left: Math.round((dim.width-600)/2)+'px'
	});
}
function showOverlay(template_name,template_vars)
{

	var dim = document.viewport.getDimensions();

	if (typeof(templatePermissions[template_name]) != 'undefined' && !valid_user)
	{
		template_name = 'request_login';
	}

	var overlay_content = (template_vars)?templates[template_name].evaluate(template_vars):templates[template_name].evaluate({});

	$('overlay_bg').setStyle({
		height: dim.height + 'px',
		width:	'100%'
	});

	$('overlay_window').setStyle({
		top:  Math.round((dim.height-400)/2)+'px',
		left: Math.round((dim.width-600)/2)+'px'
	});
  
	$('overlay_window_content').update(overlay_content);

	if (!$('overlay_bg').visible())
	{
		$('overlay_bg').appear({ from: 0, to: 0.6, duration: 0.2, afterFinish:function()
		{
			$('overlay_window').show();
		}});
	}

	Event.observe(window,'resize',updateOverlay);

	return false;
}

function hideOverlay()
{
	$('overlay_bg').hide();
	$('overlay_window').hide();
	Event.stopObserving(window,'resize',updateOverlay);
}
function getPlaylist()
{
	if ($('playlist_sortable'))
	{
	var playlist_index = Sortable.serialize('playlist_sortable');
	return playlist_index;
	} else {
	return '';
	}
}
function getNextVideo()
{
	return $(playlist[playlistPos+1]).getAttribute('url');
}
function playlistAutoNext(via_button)
{
	via_button = (typeof(via_button) != 'undefined')?true:false;

	if (playlist_repeat == 1 && !via_button)
	{
		if (!_soft_replay)
		{
			playVid(current_video);
		} else {
			update_progress(0,current_total_time);
			togglePlayButton(true);
			player.sendEvent('SEEK',0);
		}

	} else if (playlist_repeat == 2 || via_button)
	{
		if (current_video == playlist[playlist.size()-1])
		{
			playlistPos = 0;
			//stopVid();
			playVid(playlist[0]);
		} else {
			playlistNext();
		}
	} else  {
		// play next in list.
		playlistNext();
	}

	return false;
}

function playlistNext()
{
	var temp_video = current_video;

	playlist.each(function(p,i)
	{
	if (temp_video == p)
	{
		if (typeof(playlist[i+1]) != 'undefined')
		{
			//stopVid();
			playlistPos = i + 1;
			playVid(playlist[i+1]);
			return false;
		}
	}
	});

	return false;
}
function playlistPrev()
{
	playlist.each(function(p,i)
	{
	if (current_video == p)
	{
		if (typeof(playlist[i-1]) != 'undefined')
		{
			//stopVid();
			playVid(playlist[i-1]);
			return false;
		}
	}
	});

	return false;
}
function playlistAction(playlist_action,id,options)
{
	id      = (typeof(id) != 'undefined'||'null')?id:null;
	options = (typeof(options) != 'undefined')?options:null;


	if (typeof(templatePermissions[playlist_action]) != 'undefined' && !valid_user)
	{
		playlist_action = 'request_login';
	}

	if ((playlist_action == 'save' ||
		playlist_action == 'save_as' ||
		playlist_action == 'ask_save_as') && (playlist.length == 0 || playlist == null))
	{
		playlist_action = 'error';
		var error_msg = 'You have not selected any songs. Please add songs to your playlist before saving your playlist';
	}

	if (playlist_action == 'ask_remove'  && !current_playlist)
	{
		playlist_dirty = false;
		playlist_action = 'new';
	}

	var plist_index = '';
	switch (playlist_action)
	{
	case 'load':
		//playlist_scroll.setValue(0);

		selected_playlist = (_load_playlist)?_load_playlist:$('playlistSelect').options[$('playlistSelect').selectedIndex].value;
		_load_playlist = null;
		if (!playlist_dirty)
		{
			if (id == null)
			{
				id = selected_playlist;
			}
			if (id == '0')
			{
				playlistAction('new');
 				break;
			}
		current_playlist = null;
		vlparams = 'playlist_id='+id;
		playlistAjax(playlist_action,vlparams);
		} else {
			if (id == 0)
			{
				playlist_action = 'new';
			}
		_load_playlist = selected_playlist;
		showOverlay('ask_save',{origin:'load',playlist:selected_playlist});
		}
	break;

	case 'new':
		//playlist_scroll.setValue(0);
		if (!playlist_dirty)
		{
			playlist = [];
			current_playlist = null;
			drawList('playlist_sortable',{});
			$('playlistSelect').options[0].selected = true;
			_origin_new = null;
		} else {
			_origin_new = true;
			showOverlay('ask_save',{origin:'new'});
		}
	break;

	case 'ask_save_as':
		if (!current_playlist)
		{
			showOverlay('ask_new');
		} else {
			showOverlay('ask_save_as');
		}
	break;

	case 'save_as':
		new_playlist_name = $('save_as_playlist_name').value;
		plist_index =  getPlaylist();
		plist_index = 'playlist_name='+ new_playlist_name +'&' + plist_index;
                showOverlay('please_wait');		
		playlistAjax('create',plist_index);
	break;

	case 'remove':
		//playlist_scroll.setValue(0);
		if (!current_playlist)
		{
			playlist = [];
			current_playlist = null;
			drawList('playlist_sortable',{});
			$('playlistSelect').options[0].selected = true;
		} else {
			id = current_playlist;
			var vlparams = 'playlist_id='+id;
			showOverlay('please_wait');
			playlistAjax('remove',vlparams);
		}
	break;

	case 'ask_remove':
		id = current_playlist;
		showOverlay('ask_remove',{playlist_id:id});
	break;

	case 'list':
		playlistAjax('load_list');
	break;

	case 'save':
		var display  = true;
		var new_list = false;
		if (options != null)
		{
			display = (options.display == 1)?true:false;
			new_list = (options.create == 1)?true:false;
		}

		id = current_playlist;

		if (!id && new_list == false)
		{
			showOverlay('ask_new');
		} else {

			plist_index =  getPlaylist();

			if (new_list)
			{
				playlist_action = 'create';
				var new_playlist_name = $('new_playlist_name').value;
				var vlparams = 'playlist_name='+new_playlist_name;
			} else {
				var vlparams = 'playlist_id='+id;
			}
                	showOverlay('please_wait');
			vlparams = vlparams + '&' + plist_index;
			playlistAjax(playlist_action,vlparams,display);
     		}
	break;

	case 'request_login':
		showOverlay('request_login');
	break;

	case 'error':
		showOverlay('error',{error_msg:error_msg});
	break;

	}

	return false;
}
function playlistAjax(playlist_action,vlparams,display)
{
	display = (typeof(display) != 'undefined')?display:true;

	vlparams = (vlparams)?vlparams:'';

	var url    = '/playlists/'+playlist_action+'/';

	var params = 'action='+playlist_action+'&'+vlparams;
	new Ajax.Request(url,
	{
		method     :'post',
		parameters : params,
		onComplete : function(resp){playlistAjaxResponse(resp,display);}
	});
}
function playlistAjaxResponse(resp,display)
{
	eval("var response = " +resp.responseText);

	if (response.status == 'error')
	{
		if (response.type == 'login')
		{
			showOverlay('expired_login');
			clearPlaylistSelect();
			valid_user = false;
			$('login_is_active').hide();
			$('login_not_active').show();
		}
	}

	if (response.action == 'create')
	{
                hideOverlay();
		playlist_dirty = false;

		if (!_load_playlist)
		{
			current_playlist = response.playlist;

		} else if (!_origin_new)
		{
			playlistAction('load');
			showOverlay('please_wait');

		}
		
		if (_origin_new)
		{
			playlistAction('new');
		}

		setTimeout(function(){playlistAction('list');hideOverlay();},2000);

	}
	if (response.action == 'save')
	{
		hideOverlay();
		if (display)
		{
			status('playlist_saved');
		} else {
			status('playlist_saved');
		}
		playlist_dirty = false;
	
		if (_load_playlist)
		{
			setTimeout(function(){ playlistAction('load');   },1500);
		}
		if (_origin_new)
		{
			setTimeout(function(){	playlistAction('new');  },500);
		}

	}
	if (response.action == 'remove')
	{
		hideOverlay();
		status('playlist_removed');
		playlist_dirty   = false;
		current_playlist = null;
		playlistAction('list');
		playlistAction('new');

	}
	if (response.action == 'load')
	{
		//hideOverlay();
		current_playlist = response.playlist;
		drawList('playlist_sortable',response.song_list);
		recolorLists();
		playlist_dirty = false;
	}

	if (response.action == 'load_list')
	{
		var element = $('playlistSelect');
		while (element.firstChild)
		{
			element.removeChild(element.firstChild);
		}

		createSelectOption(element,'0','-new playlist-',false);

		var select_toggle = false;

		for (var i=0;i<response.playlists.length;i++)
		{
			select_toggle = false;
			if (current_playlist == response.playlists[i]['id'] && current_playlist)
			{
				select_toggle = true;
			}
			createSelectOption(element,response.playlists[i]['id'],response.playlists[i]['name'],select_toggle);

		}

	}

}
function clearPlaylistSelect()
{
		var element = $('playlistSelect');
		while (element.firstChild)
		{
			element.removeChild(element.firstChild);
		}

		createSelectOption(element,'0','-new playlist-',false);
}
function createSelectOption(element,id,text_value,status)
{
	status = (status)?true:false;
	var el = document.createElement('option');
	el.setAttribute('value',id);
	el.selected = status;
	var tel = document.createTextNode(text_value);
	el.appendChild(tel);
	element.appendChild(el);
	return el;
}
function sendPlaylist(playlist_action,vlparams)
{
	var url    = '/playlists/create/';

	var params = 'action='+playlist_action+'&'+vlparams;
	new Ajax.Request(url,
	{
		method     :'post',
		parameters : params,
		onComplete : playlistResponse
	});
	return false;
}
function playlistResponse(resp)
{
	eval("var response = " +resp.responseText);
 
	if (response.status == 'success')
	{
		hideOverlay();
		playlistAction('list');
		playlist_dirty = false;
	} else {
		showOverlay('error',{error_msg:'There was an error while saving the playlist.'});
	}
}
function share_current_media()
{

	if (fullscreen)
	{
		toggleFullScreen();
	}
	var title = $(current_video).getAttribute('title');
	var unique_id = (current_video != null)?$(current_video).getAttribute('uid'):null;
	if (unique_id != null && unique_id != 'undefined')
	{
		var url = 'http://www.videoplaylist.com/s/'+unique_id;
		showLink(url,title);
	} else {
		showOverlay('error',{error_msg:'Please select a song to share.'});
	}
	return false;
}
function share_current_playlist()
{
	var unique_id = current_playlist
	if (unique_id != null && unique_id != 'undefined')
	{
		var url = 'http://www.videoplaylist.com/p/'+unique_id;
		showLink(url,'Selected Playlist');
	} else {
		showOverlay('error',{error_msg:'Please select a saved playlist to share.<br />The current playlist has not been saved.'});
	}
	return false;
}
function showLink(url,title)
{
	showOverlay('show_link',{link_url:url,link_title:title,embed_link:url+'/embed/'});
}
function sendToFriend()
{
	showOverlay('send_to_friend');
}
function sendEmail()
{
	var url    = '/send_to_friend/';
	var params = $('friend_form').serialize(true);
	new Ajax.Request(url,
	{
		method     :'post',
		parameters : params,
		onComplete : sendEmailResponse
	});
	return false;
}
function sendEmailResponse(resp)
{
	showOverlay('send_to_friend_complete');
}
function requestLogin()
{
	showOverlay('request_login');
	return false;
}
function showLoading()
{
	if ( !$('loading_img').visible() ) {  $('loading_img').show();  }
}
function hideLoading()
{
	$('loading_img').hide();
}

function playerReady(o)
{

	if (typeof(o) != 'undefined')
	{
		if (o['id'] == 'vplayer' || o['id'] == 'vplayerff' )
		{
			player = $(o['id']);
			player_loaded = true;
			player.sendEvent('VOLUME',50);
		}
	}

}
function srScrollListener(v)
{
	var sr_height = $('search_sortable').getHeight()-800;

	wdim = document.viewport.getDimensions();
	if ((wdim.height-185) >= sr_height)
	{
		if (v) { search_scroll.setValue(0); }
		return false;
	}
	var offset = Math.round((sr_height) * (v/100));

	$('searchlist').setStyle({ marginTop: '-'+offset+'px' });
}
function pScrollListener(v)
{
	var p_height = $('playlist_sortable').getHeight()-800;

	wdim = document.viewport.getDimensions();
	if ((wdim.height-185) >= p_height)
	{
		if (v) { playlist_scroll.setValue(0);}
		return false;
	}
	var offset = Math.round((p_height) * (v/100));

	$('playlist').setStyle({ marginTop: '-'+offset+'px' });
}
function scrollWheelListener(event)
{

	var delta = 0;
	if (!event) event = window.event;

	if (event.wheelDelta)
	{
		delta = event.wheelDelta / 120;
		if (window.opera) { delta = -delta; }
	}
	else if (event.detail) // W3C
	{
		delta = -event.detail / 3;
	}

	scrollWheelValue -= (delta*4);
	scrollWheelValue = (scrollWheelValue > 100)?100:scrollWheelValue;
	scrollWheelValue = (scrollWheelValue < 0)?0:scrollWheelValue;


	if (active_list == 'search')
	{
		search_scroll.setValue(scrollWheelValue);
		//srScrollListener(scrollWheelValue);
	} else {
		playlist_scroll.setValue(scrollWheelValue);
		//pScrollListener(scrollWheelValue);
	}
  
	// stop event from bubbling
	if (event.preventDefault)
	{
		event.preventDefault();
	}
	event.returnValue = false;
}
function startImagePreload()
{
	new Effect.Opacity('loading_window', { from: 1.0, to: 0.7, duration: 0.1 });

	// loop thru images
	image_preload_list.each(function(i)
	{
		setTimeout(function()
		{
		preloadImage(i);
		},50);

	});

	/*
	// Should we preload the themes css files?
	// loop thru themes
	setTimeout(function()
	{
	theme_preload_list.each(function(t)
	{

		new Ajax.Request('/css/'+t+'.css',{method:'get',onComplete:function(){updateImageStatus();}});
	});
	},7000);
	*/

	// load gray as default
	addCSS('/css/gray.css');
}
function preloadImage(i)
{
	var tmp_img = new Image();
		tmp_img.src = '/images/'+i;
		tmp_img.onload = function(){updateImageStatus();}
	preloaded_images.push(tmp_img);
}
function updateImageStatus()
{
	if (preloading_count == 5)
	{
	//new Effect.Opacity('loading_window', { from: 1.0, to: 0.7, duration: 0.1 });
	}
	if (preloading_count <= 5)
	{
		preloading_count ++;
		var new_width =  Math.round(400 * (preloading_count/5));
		//$('preloading_progress_bar').style.width = new_width + 'px';
		$('preloading_progress_bar').setStyle({
			width: new_width + 'px'
		});

		if (preloading_count == 6)
		{
			hideLoadingWindow();
		}
	}
}
function hideLoadingWindow()
{
	$('loading_window').hide();
	$('playlistSelect').show();
	$('sortby').show();
}
function sortItem(unique_id,title,length)
{
	this.Title     = title;
	this.Length    = length;
	this.unique_id = unique_id;
}
function sortBy(sortType)
{
	$('sortby').options[0].selected = true;
	var search_array = Sortable.sequence('search_sortable');
 
	if (!search_array.length){return false;}

	var playlist_sort = [];
	search_array.each(function(i)
	{
		playlist_sort[playlist_sort.length++] = new sortItem(i,$('v_'+i).getAttribute('title'), $('v_'+i).getAttribute('length'));
	});

	switch (sortType)
	{
	case 'title':
		if (!lastTitleSort)
  		{
		playlist_sort.sort(sortByTitleAsc);
		lastTitleSort=true;
		lastLengthSort = false;
		} else {
		playlist_sort.sort(sortByTitleDesc);
 		lastTitleSort=false;
		lastLengthSort = false;
 		}
	break;
	case 'length':
		if (!lastLengthSort)
		{
		playlist_sort.sort(sortByLengthDesc);
		lastLengthSort = true;
		lastTitleSort=false;
		} else {
		playlist_sort.sort(sortByLengthAsc);
		lastLengthSort = false;
		lastTitleSort=false;
		}
	break;
	}
	var new_sort_list = [];
	playlist_sort.each(function(i)
	{
		new_sort_list.push(i.unique_id);
	});
	Sortable.setSequence('search_sortable',new_sort_list);
}
function updateContentWindow()
{
	var dim = document.viewport.getDimensions();

	//$('body').style.width=dim.width+"px";
	//$('body').style.height=dim.height+"px";
	
	if (fullscreen)
	{


		$('video_backdrop').setStyle({
			width:  '100%',
			height:	(dim.height - 110) + 'px'
		});

		var player_box = $('vplayer_box');
		var p_width = Math.ceil((dim.height - 110)*1.333);
		player_box.setStyle({
			width:  p_width + 'px',
			height:	(dim.height - 110) + 'px',
			marginLeft: Math.round((dim.width - p_width)/2)+'px',
			marginTop: '0px'
		});

	}


	var new_height = (dim.height - 170);
	//var tmp_width = (dim.width>=800)?dim.width:800;
	var tmp_width = dim.width;
	var search_width = Math.round(tmp_width /2)-1;
	var playlist_width = Math.round(tmp_width /2)-2;
	var sbheight = dim.height - 180;

	if (Prototype.Browser.IE)
	{
		$('content_window').setStyle({width:dim.width+'px'});
 	}

	$('search_window').setStyle({ 
				height : sbheight+'px'
				//width  : search_width+'px'
				});

	if (Prototype.Browser.IE)
	{
	$('playlist_window').setStyle({
				height : sbheight+'px',
				width  : playlist_width+'px'
				});
	} else {
	$('playlist_window').setStyle({
				height : sbheight+'px'
				});
		
	}

	if (search_scroll)
	{
		search_scroll.trackLength = sbheight;
	}
	if (playlist_scroll)
	{
		playlist_scroll.trackLength = sbheight;
	}



}
function toggleActiveList(toggle)
{
	active_list = (toggle)?'search':'playlist';
	status(active_list+'_list');
}
Ajax.Request.prototype.stop = function() {
	this.options.onComplete = undefined;
	(this.onComplete || Prototype.emptyFunction).apply(this, arguments);
}
function changeCSS(new_css)
{
	new_css = (typeof(new_css) != 'undefined')?new_css:false;

	if (new_css)
	{
		status('custom','Click to change to the '+new_css +' theme.');
		updateCSS('/css/'+new_css+'.css',true);
	} else {
		updateCSS(last_css,false);
		status('default');
	}
}
var updateCSS = function (url,hover)
{
	hover = (typeof(hover) != 'undefined')?hover:false;

	if (!hover)
	{
		last_css = url;
	}
	$('cssTheme').setAttribute('href',url);
}
var addCSS = function (url)
{
	last_css      = url;

	var headID    = document.getElementsByTagName("head")[0];
	var cssNode   = document.createElement('link');
	cssNode.type  = 'text/css';
	cssNode.rel   = 'stylesheet';
	cssNode.id    = 'cssTheme';
	cssNode.href  = url;
	cssNode.media = 'screen';
	headID.appendChild(cssNode);
}
function sortByTitleAsc(a, b)
{
	var x = a.Title.toLowerCase();
	var y = b.Title.toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
function sortByTitleDesc(a, b) 
{
	var x = a.Title.toLowerCase();
	var y = b.Title.toLowerCase();
	return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}
function sortByLengthAsc(a, b) 
{
	var x = parseFloat(a.Length);
	var y = parseFloat(b.Length);
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
function sortByLengthDesc(a, b) 
{
	var x = parseFloat(a.Length);
	var y = parseFloat(b.Length);
	return ((x < y) ? 1 : ((x > y) ? -1 : 0));
}
var templatePermissions  = {
				//'new'         : true,
				'save'        : true,
				'save_as'     : true,
				'load'        : true,
				'ask_save_as' : true,
				'ask_save'    : true,
				'ask_new'     : true,
				'ask_remove'  : true
			};

var templates = {};
templates['login_reg']   	= new Template('<div class="formClass" style="float:left;width:240px;"><form id="login_form" onsubmit="return login();"><strong>Already a member?</strong><br /><br /><label>Username:</label><br /><input class="input" type="text" name="username" /><br /><span class="error" id="login_username_error">#{username}</span><br /><label>Password:</label><br /><input class="input" type="password" name="password" /><br /><span class="error" id="login_password_error">#{password}</span><br /><input type="checkbox" name="remember" value="1" /><label>Remember me</label><br /><input id="login_button" type="submit" value="Log In" /> <img id="login_loading" src="images/bloading.gif" style="display:none;"></form><span class="error" id="login_error">#{login_error_msg}</span><br /><br /><br /><a href="#" onclick="return showOverlay(\'forgot_pass\');">Help. I forgot my password.</a></div><div class="formClass" style="float:left;width:220px;"><form id="register_form" onsubmit="return register();"><strong>Not a member yet? Register!</strong><br /><br /><label>Username:</label><br /><input class="input" type="text" name="username" /><br /><span class="error" id="reg_username_error">#{username}</span><br /><label>Password:</label><br /><input class="input" type="password" name="password" /><br /><span class="error" id="reg_password_error">#{password}</span><br /><label>Retype Password:</label><br /><input class="input" type="password" name="password_confirm" /><br /><span class="error" id="reg_password_confirm_error">#{password_confirm}</span><br /><label>E-mail Address:</label><br /><input class="input" type="text" name="email" /><br /><span class="error" id="reg_email_error">#{email}</span><br /><span>We only use your e-mail address for validating your account</span><br><input id="register_button" type="submit" value="Register" /> <img id="register_loading" src="images/bloading.gif" style="display:none;"><input type="hidden" name="terms" value="1" /></form><span class="error" id="reg_error">#{reg_error_msg}</span><br /></div>');
templates['error']       	= new Template('<b>ERROR<b><br/>#{error_msg}<br/><br/>');
templates['help']        	= new Template('<strong onclick="showOverlay(\'about\');">Help</strong><br/><br/><div class="label">ESC key:</div><div class="text">Close popup windows</div><br /><div class="label">Spacebar:</div><div class="text">Play / Pause</div><br /><div class="label">Arrow left / right:</div><div class="text">Previous / next song</div><br /><div class="label">Arrow up / down:</div><div class="text">Scroll in playlist</div><br /><div class="label">Enter key:</div><div class="text">Play selected song</div><br /><div class="label">Single click:</div><div class="text">Select song</div><br /><div class="label">Double clicking:</div><div class="text">Play song + Add to Playlist</div><br /><br /><div class="text">Dragging a song to the player will add it to the playlist.</div><br /><br/>');
templates['save']        	= new Template('Your playlist has been saved.');
templates['ask_save_as'] 	= new Template('<strong>Save Playlist As New Playlist</strong><br /><br /><form onsubmit="return playlistAction(\'save_as\');"><label>Save As Playlist Name</label><br /><input class="input" id="save_as_playlist_name" type="text" name="" value="" maxlength="25"><br /><br /><input type="submit" value="Create" /></form>');
templates['ask_new']     	= new Template('<strong>Create a New Playlist</strong><br /><br /><form onsubmit="return playlistAction(\'save\',null,{display:1,create:1});"><label>Playlist Name</label><br /><input class="input" id="new_playlist_name" type="text" name="" maxlength="25"><br /><br /><input type="submit" value="Create" /></form>');
templates['ask_save']    	= new Template('<strong>You have made changes to your playlist.</strong><br /><br />Would you like to Save your changes and/or Continue?<br /><br /><input type="button" value="Save and Continue" onclick="playlistAction(\'save\',0,{display:0});setTimeout(function(){playlist_dirty=false;},500);"><input type="button" value="Continue without saving" onclick="playlist_dirty=false;playlistAction(\'#{origin}\');hideOverlay();">');
templates['ask_remove']  	= new Template('<strong>Remove Playlist</strong><br /><br />Are you sure you would like to remove the current playlist?<br /><br /><form onsubmit="return playlistAction(\'remove\',\'#{playlist_id}\');"><input type="submit" value="Remove Playlist"><input type="button" value="Cancel" onclick="hideOverlay();"></form><br />');
templates['forgot_pass']	= new Template('<strong>Forgot Your Password?</strong><br/><br />Fill out this form and the system will email you a link to reset your password.<form id="forgot_pass_form" onsubmit="return forgotPass();"><br />Email Address<br /><input type="text" name="login" class="input" value=""><br /><br /><input type="submit" value="Request Password"></form><br />');
templates['forgot_pass_complete'] = new Template('<strong>Your password has been sent to your email address.</strong>');
templates['logged_in']   	= new Template('You are logged in.');
templates['already_logged_in'] 	= new Template('You are already logged in.');
templates['registered']  	= new Template('You have successfully registered an account, and you are now logged in.');
templates['logout']      	= new Template('Are you sure you would like to log out? <form onsubmit="return logout();"><input type="submit" value="Yes, I want to log out"></form>');
templates['logged_out']  	= new Template('You have logged out.');
templates['request_login'] 	= new Template('You are not logged in, you will need to login to perform the requested action.<br /><br /><a href="#" title="login" onclick="return showOverlay(\'login_reg\');">login</a> / <a href="#" title="login" onclick="return showOverlay(\'login_reg\');">register</a><br /><br />');
templates['send_to_friend'] 	= new Template('<strong>Share this...</strong><br />Link URL: #{share_url}<br /><br /><form id="friend_form" onsubmit="return sendEmail();"><input type="hidden" name="share_url" value="#{share_url}" />Your Friends Name<br /><input type="text" name="friend_name" value="" class="input"><br />Friends Email Address<br /><input type="text" name="friend_email" value="" class="input"><br />Message<br /><textarea name="friend_text" class="input"></textarea><br /><br /><input type="submit" value="Send to Friend"></form><br /><br /><br />');
templates['send_to_friend_complete'] = new Template('<strong>Your shared link and message have been sent to your friends email address.</strong>');
templates['show_link']   	= new Template('<strong>Send To Friend</strong><br /><a href="#" onclick="return showOverlay(\'send_to_friend\',{share_url:\'#{link_url}\'});">Send this link to a friend</a><br /><br /><strong>#{link_title}</strong><br /><strong>Link</strong><br /><textarea style="width:100%;" onclick="this.select();" readonly>#{link_url}</textarea><br /><br /><br /><strong>Embed Code</strong><br /><textarea style="width:100%;" onclick="this.select();" readonly><embed src="#{embed_link}"></embed></textarea><br /><br /><br />');
templates['about']		= new Template('<strong>About AjaxMediaPlayer</strong><center><br /><br />Thanks for using AjaxMediaPlayer 1.23<br /><br />Prototype.js Version: 1.6.0.3<br />Scriptaculous Version: 1.8.2<br />JW Flash Player Version: 4.3<br />Powered by Youtube API<br /><br />Supports: Firefox 2/3, IE 6/7, Opera 9, Chrome 1, Safari 2<br /><br />Ajax Meida Player (c) 2009<br />Wild West Code.com<br />http://www.wildwestcode.com/<br /><br />All Rights Reserved. <br /></center>');  /* please do not modify about screen content */
templates['please_wait']	= new Template('<strong>Please Wait</strong><br />Your request is processing ...<br />');
templates['expired_login'] 	= new Template('The server replied: <b>"Your login is expired."</b><br />You are no longer logged in.<br />You will need to login to perform the requested action.<br /><br />If this problem continues, make sure your browser allows cookies and try checking the \'remember me\' box while signing in.<br /><br /><a href="#" title="login" onclick="return showOverlay(\'login_reg\');">login</a> / <a href="#" title="login" onclick="return showOverlay(\'login_reg\');">register</a><br /><br />');

var status_messages = 	{
				'default'          : 'Search for songs by Artist, Song Title, Tags, Description.',
				'search_list'      : 'Click & Drag the song (or use the plus-sign) to add it to your playlist.',
				'playlist_list'    : 'Click & Drag the song (or use the x-sign) to remove it from your playlist.',
				'searching'        : 'Please wait while searching...',
				'no_results'       : 'No search results where found.',
				'playlist_saved'   : 'Playlist saved.',
				'playlist_removed' : 'Playlist removed.',
				'logged_out'       : 'You have logged out.',
				'logged_in'        : 'You are logged in.',
				'help'             : 'Click to show help screen'
			};


var initListeners	= false;
var player		= null;
var player_active       = false;
var player_loaded       = false;
var playlist            = [];
var originalPlaylist	= [];
var playlistPos         = 0;
var shufflePlaylist     = null;
var shufflePos          = 0;
var valid_user          = false;
var volume_bar          = null;
var volume_value        = 50;
var volume_last_value   = 50;
var fullscreen          = false;
var showing_video       = false;
var current_video       = null;
var last_video          = null;
var selected_video      = null;
var progress_pos        = 0;
var last_buffer_url     = '';
var buffer_progress_pos = 0;
var buffer_pos          = 0;
var buffer_total        = 0;
var current_total_time  = 0;
var current_time_pos    = 0;
var autocompleter       = null;
var ajax_requests       = 0;
var ajax_objects        = [];
var old_dim             = null;
var search_sortable     = null;
var playlist_sortable   = null;
var scrollWheelValue    = 0;
var playlist_dirty      = false;
var playlist_shuffle    = 0;
var playlist_repeat     = 0;
var _soft_replay	= false;
var selected_playlist   = null;
var current_playlist    = null;
var default_playlist    = null;
var default_song        = null;
var search_scroll       = null;
var playlist_scroll     = null;
var lastTitleSort       = false;
var lastLengthSort      = false;
var window_resized      = false;
var remove_last_added 	= false;
var last_css            = 'gray';
var active_list         = 'search';
var _origin_new 	= null;
var _load_playlist	= null;
var preloading_count    = 0;
var preloaded_images    = [];
var image_preload_list  = ["loading.gif","list_bg.gif","popup_corners.png","sprites_standard.png","theme_gray.png","theme_blue.png","theme_red.png","theme_pink.png","theme_green.png"]; //,"sprites_blue.png","sprites_red.png","sprites_pink.png","sprites_green.png"];
var theme_preload_list  = ['gray','blue','red','pink','green'];

//Event.observe(window,'load', function()
//{


	updateContentWindow();
	Event.observe('progress_bar','click',seekPos);

	Event.observe('overlay_bg','click',hideOverlay);
	Event.observe('search_box','focus',function(){$('search_box').value='';$('search_box').setStyle({color:"#000000"});status('default');});
	Event.observe('search_box','mouseover',function(){status('default');});
	Event.observe(window,'resize',updateContentWindow);
	Event.observe('search_window','mouseover',function(){toggleActiveList(true);});
	Event.observe('playlist_window','mouseover',function(){toggleActiveList(false);});
	Event.observe('fullscreen_button','mouseover',function(){status('custom','Fullscreen Hint: Press F11 to fill entire screen.');});
	Event.observe('fullscreen_button','mouseout',function(){status('default');});

	volume_bar = new Control.Slider('volume_handle', 'volume_bar', {
		axis        : 'horizontal',
		range       : $R(0,100),
		values      : $R(0, 100),
		minimum     : 0,
		maximum     : 100,
		sliderValue : 50,
		onSlide     : volumeChange,
		onChange    : volumeChange
	});


	search_scroll = new Control.Slider('sr_handle', 'search_scrollbar', {
		axis        : 'vertical',
		range       : $R(0,100),
		values      : $R(0, 100),
		minimum     : 0,
		//maximum     : 100,
		zindex      : 10,
		sliderValue : 0,
		onSlide     : srScrollListener,
		onChange    : srScrollListener
	});

	playlist_scroll = new Control.Slider('p_handle', 'playlist_scrollbar', {
		axis        : 'vertical',
		range       : $R(0,100),
		values      : $R(0, 100),
		minimum     : 0,
		maximum     : 100,
		zindex      : 10,
		sliderValue : 0,
		onSlide     : pScrollListener,
		onChange    : pScrollListener
	});

Ajax.Responders.register({
	onCreate: function() {
		ajax_requests++;
		// stop request code.
		//if (ajax_objects.length >= 1)
		//{
			//var tmp_obj = ajax_objects.shift();
			//tmp_obj.stop();
		//}
		showLoading();
	},
	onException: function() {
		ajax_requests--;
	},
	onComplete: function() {
		ajax_requests--;
		if (ajax_requests <= 0 || Ajax.activeRequestCount == 0) { hideLoading(); }
	}
});

var autocompleter =  new Ajax.Autocompleter(
				         'search_box',
				         'search_suggest',
				         'suggest.php',
				         	{
							paramName	: "q",
						  	minChars	: 4,
						  	frequency	: 0.7
					  	}
					 );



/* scroll wheel listener */
	if(window.addEventListener) document.addEventListener('DOMMouseScroll', scrollWheelListener, false);
/* scroll wheel listener */
	document.onmousewheel = scrollWheelListener;


/* image preloading... */
	startImagePreload();
	
/* finialize player setup */
	setTimeout(function()
	{
		if (valid_user)
		{
			playlistAjax('load_list');
		}
		//hideLoadingWindow();
 		if (!player_loaded)
 		{
			if (Prototype.Browser.IE)
			{
				player = $('vplayer');
			} else {
				player = $('vplayerff');
			}
			if (player) {	player_loaded = true;	}
		}

	},1000);

//});

