var Drag = {

	obj : null,

	init : function(o, oRoot, minX, maxX, minY, maxY, bSwapHorzRef, bSwapVertRef, fXMapper, fYMapper)
	{
		o.onmousedown	= Drag.start;

		o.hmode			= bSwapHorzRef ? false : true ;
		o.vmode			= bSwapVertRef ? false : true ;

		o.root = oRoot && oRoot != null ? oRoot : o ;

		if (o.hmode  && isNaN(parseInt(o.root.style.left  ))) o.root.style.left   = "0px";
		if (o.vmode  && isNaN(parseInt(o.root.style.top   ))) o.root.style.top    = "0px";
		if (!o.hmode && isNaN(parseInt(o.root.style.right ))) o.root.style.right  = "0px";
		if (!o.vmode && isNaN(parseInt(o.root.style.bottom))) o.root.style.bottom = "0px";

		o.minX	= typeof minX != 'undefined' ? minX : null;
		o.minY	= typeof minY != 'undefined' ? minY : null;
		o.maxX	= typeof maxX != 'undefined' ? maxX : null;
		o.maxY	= typeof maxY != 'undefined' ? maxY : null;

		o.xMapper = fXMapper ? fXMapper : null;
		o.yMapper = fYMapper ? fYMapper : null;

		o.root.onDragStart	= new Function();
		o.root.onDragEnd	= new Function();
		o.root.onDrag		= new Function();
	},

	start : function(e)
	{
		var o = Drag.obj = this;
		e = Drag.fixE(e);
		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
		o.root.onDragStart(x, y);

		o.lastMouseX	= e.clientX;
		o.lastMouseY	= e.clientY;

		if (o.hmode) {
			if (o.minX != null)	o.minMouseX	= e.clientX - x + o.minX;
			if (o.maxX != null)	o.maxMouseX	= o.minMouseX + o.maxX - o.minX;
		} else {
			if (o.minX != null) o.maxMouseX = -o.minX + e.clientX + x;
			if (o.maxX != null) o.minMouseX = -o.maxX + e.clientX + x;
		}

		if (o.vmode) {
			if (o.minY != null)	o.minMouseY	= e.clientY - y + o.minY;
			if (o.maxY != null)	o.maxMouseY	= o.minMouseY + o.maxY - o.minY;
		} else {
			if (o.minY != null) o.maxMouseY = -o.minY + e.clientY + y;
			if (o.maxY != null) o.minMouseY = -o.maxY + e.clientY + y;
		}

		document.onmousemove	= Drag.drag;
		document.onmouseup		= Drag.end;

		return false;
	},

	drag : function(e)
	{
		e = Drag.fixE(e);
		var o = Drag.obj;

		var ey	= e.clientY;
		var ex	= e.clientX;
		var y = parseInt(o.vmode ? o.root.style.top  : o.root.style.bottom);
		var x = parseInt(o.hmode ? o.root.style.left : o.root.style.right );
		var nx, ny;

		if (o.minX != null) ex = o.hmode ? Math.max(ex, o.minMouseX) : Math.min(ex, o.maxMouseX);
		if (o.maxX != null) ex = o.hmode ? Math.min(ex, o.maxMouseX) : Math.max(ex, o.minMouseX);
		if (o.minY != null) ey = o.vmode ? Math.max(ey, o.minMouseY) : Math.min(ey, o.maxMouseY);
		if (o.maxY != null) ey = o.vmode ? Math.min(ey, o.maxMouseY) : Math.max(ey, o.minMouseY);

		nx = x + ((ex - o.lastMouseX) * (o.hmode ? 1 : -1));
		ny = y + ((ey - o.lastMouseY) * (o.vmode ? 1 : -1));

		if (o.xMapper)		nx = o.xMapper(y)
		else if (o.yMapper)	ny = o.yMapper(x)

		Drag.obj.root.style[o.hmode ? "left" : "right"] = nx + "px";
		Drag.obj.root.style[o.vmode ? "top" : "bottom"] = ny + "px";
		Drag.obj.lastMouseX	= ex;
		Drag.obj.lastMouseY	= ey;

		Drag.obj.root.onDrag(nx, ny);
		return false;
	},

	end : function()
	{
		document.onmousemove = null;
		document.onmouseup   = null;
		Drag.obj.root.onDragEnd(	parseInt(Drag.obj.root.style[Drag.obj.hmode ? "left" : "right"]), 
									parseInt(Drag.obj.root.style[Drag.obj.vmode ? "top" : "bottom"]));
		Drag.obj = null;
	},

	fixE : function(e)
	{
		if (typeof e == 'undefined') e = window.event;
		if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
		if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
		return e;
	}
};




var ytplayer=document.getElementById("myytplayer");

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}


var page = {
			part:{ content:document.getElementById('content'), leftSide:document.getElementById('leftbar'), rightSide:document.getElementById('rightbar'), leftTop:document.getElementById('tlc'), leftBottom:document.getElementById('blc'), right:document.getElementById('rc'), columns:document.getElementById('columns'), columnsHolder:document.getElementById('bighold'), columnsDiv:document.getElementById('columns-holder'), resizeBar:document.getElementById('mainresize'), resizeBarVert:document.getElementById('vertresize'), albumHolder:document.getElementById('topaholder'), albumImageHolder:document.getElementById('album_img_hold'), albumInfo:document.getElementById('lefthold'), albumInfoText:document.getElementById('albumInfoHold'), correctVideo:document.getElementById('verify-vid'), manualVideo:document.getElementById('yt-manual'), searchBox:document.getElementById('se_box')},
			control:{ play:document.getElementById('ppb'), next:document.getElementById('nxtbtn'), prev:document.getElementById('prevbtn'), shuffle:document.getElementById('shuffb'), loop:document.getElementById('loopb'), mute:document.getElementById('mbtn'), volume:document.getElementById('volhold'), duration:document.getElementById('dur'), time:document.getElementById('ctime'), seeker:document.getElementById('seeker'), autoSeek:document.getElementById('seekit'), seekBar:document.getElementById('loaded'), seekButton:document.getElementById('thumb2'), viewHolder:document.getElementById('displayButtons'), listView:document.getElementById('sort_list'), artView:document.getElementById('sort_art'), textBox:document.getElementById('th1'), textBoxHolder:document.getElementById('texthold') },

			tab:{
				tabHolder:document.getElementById('tabholder'),
				boxHolder:document.getElementById('toptabs'),
				tabScroll1:document.getElementById('tabsize'),
				tabScroll2:document.getElementById('tabsizel'),
				user:{ isUser:document.getElementById('memberssec'), notUser:document.getElementById('needlogin'), playlists:document.getElementById('userlists') },
				nowPlaying:{ title:document.getElementById('NP-title'), artist:document.getElementById('NP-artist'), album:document.getElementById('NP-album'), date:document.getElementById('NP-added'), image:document.getElementById('np_thumb'), imageRef:document.getElementById('np_ref'), isit:'yes' },
				info:{
						title:document.getElementById('tinfo-song'),
						artist:document.getElementById('tinfo-artist'),
						album:document.getElementById('tinfo-album'),
						rating:document.getElementById('tinfo-rating'),
						userRating:document.getElementById('tinfo-prating'),
						playCount:document.getElementById('tinfo-count'),
						userPlayCount:document.getElementById('tinfo-pcount'),
						image:document.getElementById('tinfo-image'),
						lyricsButton:document.getElementById('tinfo-lyrics'),
						wikiInfo:document.getElementById('tinfo-wikiInfo'),
						wikiButton:document.getElementById('tinfo-wiki'),
						downButton:document.getElementById('tinfo-down')
				},
				lyrics:{
						title:document.getElementById('ly-title'),
						artist:document.getElementById('ly-artist'),
						image:document.getElementById('ly-image'),
						lyrics:document.getElementById('ly-lyrics')
				}
				},
			alertBox: {
					holder:document.getElementById('alertBox'),
					title:document.getElementById('alertTitle'),
					text:document.getElementById('alertText')
				},
			menu: {holder:document.getElementById('rightmenu'), subHolder:document.getElementById('rm_up_holder')},
			xmlHttp:function(){var xmlHttp=null; try {xmlHttp=new XMLHttpRequest();} catch (e){ try{xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");} catch (e){ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}	} return xmlHttp;}
 };

var globalVars = { windowHeight:0, windowWidth:0, autoNum:0, playType:'song', pagePlaylist:new Array(), shuffleOn:false, loopOn:false, artOn:false, menuId:0, menuRow:0, scrollHolder:'', actualcontainer:'', isScrollNeeded:0, searchBoxVis:0, searchBoxTime:false, hideSub:false, sorter:'name', asc:true, selectedRow:null, batchBusy:false };

var nowPlaying = {
	id:0,
	title:'',
	artist:'',
	album:'',
	download:'',
	image:'',
	ytid:'',
	date:'',
	total:0,
	orderedSongs: [],
	shuffledSongs: []
 };
 
 var songInfo = { id:'', title:'', artist:'', album:'', download:'', rating:'', userRating:'', playCount:'', userPlayCount:'', image:'', wikiInfo:'', wikiURL:'', genre:'', label:'', time:'', date:'', ytid:'', lyrics:'' };

var user = { isLoggedIn:false, username:'', playlists:new Array() };

var userConnections = { 'twitter':false, 'facebook':false, 'myspace':false};

var results = {song:new Array()};

var columns;

var colOne='';
var colName='';
var colArtist='';
var colAlbum='';
var colRate='';
var colDate='';
var colTime='';
var colCount='';

function setCookie(c_name,value,expiredays){ var exdate=new Date();exdate.setDate(exdate.getDate()+expiredays); document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString()); };
function get_cookie(cookie_name) { var results=document.cookie.match( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' ); if (results){ return (unescape(results[2]));} else {return null;} } ;

function loadPage(url) { 
var surl;
if(typeof(url)!='object' && typeof(url)!='undefined') { if(url!=0) {window.location.hash=url.replace(/(http:\/\/|http:\/\/www.)needtunes.net/i,"");} surl=window.location.hash.substring(1); if(surl!='') {
setTimeout(function(){ loaders.mainContent=new loadContent(surl, loadPage, 'GET', 'loadPage', null);},200); }}
else {
if (loaders.mainContent.xmlHttp.readyState!=4) { page.part.right.innerHTML='<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" height="100%"> <tr> <td align="center" valign="middle"><img src="images/loading.gif" width="197" height="56" /></td></tr></table>'; navBar(0); }
if (loaders.mainContent.xmlHttp.readyState==4){ page.part.right.innerHTML=loaders.mainContent.xmlHttp.responseText;  navBar(0);
var ev=document.getElementById('eval'); if(ev){eval(ev.innerHTML);} updateLinks();}
 } };
function updateLinks() { var atag=document.getElementsByTagName("a"); for (var i=0; i<atag.length; i++) { if(atag[i].target != '_blank') { atag[i].onclick=function(){ return false;}; atag[i].onmouseup=function(){ loadPage(this.href);}; } } 
var inTag=document.getElementsByTagName("input"); for (var i=0;i<inTag.length;i++) {
if (window.attachEvent) { inTag[i].attachEvent("onfocus",function(){document.onkeydown=function(){};}); inTag[i].attachEvent("onblur",function(){document.onkeydown=function(event) {keyPress(event); }});}
else if (window.addEventListener) {inTag[i].addEventListener("focus",function(){document.onkeydown=function(){};},true); inTag[i].addEventListener("blur",function(){document.onkeydown=function(event) {keyPress(event); };},true);}
}   } ;

var loaders = { 
	mainContent:{xmlHttp:'e' },	playerContent:{xmlHttp:'e'}, otherContent:{xmlHttp:'e'}
};

function loadContent(url, callback, type, context, params) { 
this.url=url; this.context=undefined;
try {this.xmlHttp=new XMLHttpRequest();} 
catch(e){ 
try{this.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");} 
catch(e){ this.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");}	
}

this.context=context; 
this.xmlHttp.open(type,this.url,true);
if(params) {this.xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); this.xmlHttp.setRequestHeader("Content-length", params.length); }
this.xmlHttp.send(params);
this.xmlHttp.onreadystatechange=callback;
}; 

function getNextRow(id) {
if(globalVars.shuffleOn) {var arrayObj=nowPlaying.shuffledSongs; var next=arrayObj.indexOf(id)+1;}
else					 {var arrayObj=nowPlaying.orderedSongs; var next=arrayObj.indexOf(id)+1;}
if(next>(nowPlaying.total-1)) {next=0;} 
return arrayObj[next];
};
function getPrevRow(id) {
if(globalVars.shuffleOn) {var arrayObj=nowPlaying.shuffledSongs; var prev=arrayObj.indexOf(id)-1;}
else					 {var arrayObj=nowPlaying.orderedSongs; var prev=arrayObj.indexOf(id)-1;}
if(prev<0) {prev=(nowPlaying.total-1);} 
return arrayObj[prev];
};

function searchIn() { 
if(!globalVars.searchBoxVis) {/*show it */page.part.searchBox.style.visibility='visible'; globalVars.searchBoxVis=1;}
if(globalVars.searchBoxTime)  {/*clear timout and set false*/clearTimeout(globalVars.searchBoxTime); globalVars.searchBoxTime=false;}
};

function searchOut() {
if(!globalVars.searchBoxTime && globalVars.searchBoxVis)  {/*set timout to hide*/ globalVars.searchBoxTime=setTimeout(function(){page.part.searchBox.style.visibility='hidden'; globalVars.searchBoxVis=0;}, 1000); }
};

function sbKey(event) {
if(event) {e=event;} else {e=window.event;}
if(e.keyCode==13) {searchSong();}
};

function songPlaylist(row) {
	nowPlaying.shuffledSongs.length=0;
	nowPlaying.orderedSongs.length=0;
	for(var no=0;no<globalVars.pagePlaylist.length;no++){nowPlaying.orderedSongs[no]=globalVars.pagePlaylist[no]; }
	nowPlaying.total=nowPlaying.orderedSongs.length;
	nowPlaying.shuffledSongs=nowPlaying.shuffledSongs.concat(nowPlaying.orderedSongs);
	nowPlaying.shuffledSongs=nowPlaying.shuffledSongs.sort(function(){return 0.5 - Math.random()});
	nowPlaying.shuffledSongs=nowPlaying.shuffledSongs.sort(function(){return 0.5 - Math.random()});
	songPlay(nowPlaying.orderedSongs[row]);
};

function songView(art) { 
var artB=page.control.artView; var listB=page.control.listView; var on=get_cookie('c_art'); var srcAOn; var srcLOff;
if(art) {if(!globalVars.artOn){srcAOn='-28px -31px'; srcLOff='0px 0px'; on=1; globalVars.artOn=true; }}
else	{if(globalVars.artOn){srcAOn='-28px 0px'; srcLOff='0px -31px'; on=0; globalVars.artOn=false;}}
artB.style.backgroundPosition=srcAOn; artB.onmouseout=function(){this.style.backgroundPosition=srcAOn}; listB.style.backgroundPosition=srcLOff; listB.onmouseout=function(){this.style.backgroundPosition=srcLOff};

setCookie('c_art',on,'0');
loadPage(0);
};

function navBar(nav) {
if(nav==1) {document.getElementById('navigation').style.visibility='visible';} else {document.getElementById('navigation').style.visibility='hidden';}	
}


function scrollObj(n, obj) { 
	var holder=obj.parentNode;
	var diff=holder.offsetWidth-obj.offsetWidth;
	if(diff<0) { 
	obj.style.left=obj.offsetLeft+(n)+'px';
	if(obj.offsetLeft>=0) {setTimeout(function(){scrollObj((-5), obj);},2000); }
	else if(obj.offsetLeft<diff) {setTimeout(function(){scrollObj(5, obj);},2000); }
	else {setTimeout(function(){scrollObj(n, obj);},250);}
	}
	else {obj.style.left='0px'; setTimeout(function(){scrollObj((-5), obj);},5000); }
};

function songOrder(csort, cord) {
document.getElementById('handle_'+globalVars.sorter).style.backgroundImage='url(images/listtopbg.gif)';
globalVars.sorter=csort;
if(cord=='ASC'){globalVars.asc=true;} else {globalVars.asc=false;}
results.song.sort(sortFunc); if(!globalVars.asc) {results.song.reverse();} pageList();
setCookie('c_sort',csort,'0'); setCookie('c_ord',cord,'0'); document.getElementById('handle_'+globalVars.sorter).style.backgroundImage='url(images/listbg-o.gif)';
for(var no=1;no<=columns.batch.count;no++){document.getElementById('name#batch#'+no).setAttribute('status','cleared');}
document.getElementById('columns-holder').scrollTop=0;
loadBatch(1);
};

function songNext() { 
songPlay(getNextRow(nowPlaying.id));
};

function songPrev() {
songPlay(getPrevRow(nowPlaying.id));
};

function songPlay(id) { 
page.part.correctVideo.style.visibility='hidden'; page.part.manualVideo.style.visibility='hidden'; page.part.manualVideo.style.display='none';
globalVars.playType='song'; var rand=Math.random();
if(songInfo.id!=id) {loaders.playerContent=new loadContent('getsonginfo.php?id='+id+'&r='+rand, loadPlay, 'GET', 0, null);}
else {playSong();}
};

function loadPlay() {
	if (loaders.playerContent.xmlHttp.readyState==1){}
	if (loaders.playerContent.xmlHttp.readyState==4 && loaders.playerContent.context==0){ 	
	eval(loaders.playerContent.xmlHttp.responseText);
	loaders.playerContent.context=1;
	playSong();
	}
	
	};
	
function playSong(){
	nowPlaying.id=songInfo.id;
	nowPlaying.title=songInfo.title;
	nowPlaying.artist=songInfo.artist;
	nowPlaying.album=songInfo.album;
	nowPlaying.download=songInfo.download;
	nowPlaying.ytid=songInfo.ytid;
	nowPlaying.date=songInfo.date;
	nowPlaying.image=songInfo.image;
	page.control.textBox.innerHTML=nowPlaying.title+' - '+nowPlaying.artist+' - '+nowPlaying.album;
	page.tab.nowPlaying.title.innerHTML=nowPlaying.title;
	page.tab.nowPlaying.artist.innerHTML=nowPlaying.artist;
	page.tab.nowPlaying.album.innerHTML=nowPlaying.album;
	page.tab.nowPlaying.image.src=nowPlaying.image+'&form=thumb';
	page.tab.nowPlaying.imageRef.src=nowPlaying.image+'&form=ref';
	document.getElementById('albumArt').src=nowPlaying.image+'&form=large';
	document.getElementById('albumArtRef').src=nowPlaying.image+'&form=ref';
	ytplayer.loadVideoById(nowPlaying.ytid, 0);	};

function onYouTubePlayerReady(playerId) { 
ytplayer = document.getElementById("myytplayer"); 
inter1 = window.setInterval(updateInfo, 1000);
updateInfo; updateVolume(); unMute();
ytplayer.addEventListener("onStateChange", "updatePlayerStatus");
ytplayer.addEventListener("onError", "playerError");
};

function playerError(errorCode) {if (globalVars.playType=='song') { autoFind(1);} else if (globalVars.playType=='auto') {autoFind(globalVars.autoNum+1);}};
function updatePlayerStatus(status){
		if (status == 1) {page.control.play.style.backgroundPosition='-40px 0px'; page.control.play.onclick=function(){ytplayer.pauseVideo();};}
		else if (status == 2) {page.control.play.style.backgroundPosition='0px 0px'; page.control.play.onclick=function(){ytplayer.playVideo();};}
		else if (status == 0) {page.control.play.style.backgroundPosition='0px 0px';
			if(ytplayer.getVideoBytesLoaded()>200){
				songCount(nowPlaying.id);
				if(globalVars.loopOn) {songNext();}
				else {page.control.play.onclick=function(){ytplayer.seekTo('0'); ytplayer.playVideo();}; }
			}
		}
		else if (status == 3) {page.control.play.style.backgroundPosition='0px 0px';} 
		else {} 
};


function getCurrentTimePercent() {return (ytplayer.getCurrentTime()/ytplayer.getDuration())*100;};

function updateCurrentTime(percent) {
if(isNaN(percent)) {page.control.seekButton.style.left='0%'; page.control.seeker.style.width='5px';}
else {
	var width=((page.control.autoSeek.offsetWidth-10)/100)*percent;
	page.control.seekButton.style.left=width+'px';
	page.control.seeker.style.width=Math.round(width)+7+'px';}
};

function getDurationMin(time) {
minVar = Math.floor(time/60); 
if (minVar < 10){minVar = "0" + minVar;}
secVar = Math.round(time%60); 
if (secVar < 10){secVar = "0" + secVar;}
return minVar+":"+secVar;
};

function seekPercent(percent) {ytplayer.seekTo((ytplayer.getDuration()/100)*percent);};

function updateInfo(){
updateCurrentTime(getCurrentTimePercent());	
page.control.seekBar.style.width=(((page.control.autoSeek.offsetWidth-10)/100)*((ytplayer.getVideoBytesLoaded()/ytplayer.getVideoBytesTotal())*100))+'px';
page.control.duration.innerHTML=getDurationMin(ytplayer.getDuration());
page.control.time.innerHTML=getDurationMin(ytplayer.getCurrentTime());
};

function mute() {
ytplayer.mute();
page.control.mute.src='images/header/mute.png';
page.control.mute.onclick= function(){unMute();};};

function unMute() {
ytplayer.unMute();
page.control.mute.src='images/header/unmute.png';
page.control.mute.onclick= function(){mute();};};

function updateVolume() {
var gv=ytplayer.getVolume();
var ngv=0;
if (gv<=20){ngv=20;}
else if (gv<=40){ngv=40;}
else if (gv<=60){ngv=60;}
else if (gv<=80){ngv=80;}
else if (gv<=100){ngv=100;}
page.control.volume.style.backgroundPosition='0px -'+ngv+'px'; };
function volIn(event) {
if(event) {e=event;} else {e=window.event;}
if(e.offsetX!=null){var ob_left=e.offsetX; } else {var ob_left=e.layerX;}
var r=0;
if(ob_left<=3) {r=20; }
else if(ob_left<=7) {r=40; }
else if(ob_left<=11) {r=60; }
else if(ob_left<=15) {r=80; }
else if(ob_left<=19) {r=100; }
page.control.volume.style.backgroundPosition='0px -'+r+'px'; 
};
function volOn(event) {
if(event) {e=event;} else {e=window.event;}
if(e.offsetX!=null){var ob_left=e.offsetX; } else {var ob_left=e.layerX;}
var r=0;
if(ob_left<=3) {r=20; }
else if(ob_left<=7) {r=40; }
else if(ob_left<=11) {r=60; }
else if(ob_left<=15) {r=80; }
else if(ob_left<=19) {r=100; }
ytplayer.setVolume(r);
page.control.volume.style.backgroundPosition='0px -'+r+'px'; 
};
	
function songShuffle() {
var si; var sov; var sout;
if(globalVars.shuffleOn) {globalVars.shuffleOn=false; si='0px 0px'; sov='0px -20px'; sout='0px 0px'; }
else{globalVars.shuffleOn=true; si='0px -20px'; sov='0px 0px'; sout='0px -20px'; }
page.control.shuffle.style.backgroundPosition=si;
page.control.shuffle.onmouseover=function(){this.style.backgroundPosition=sov; }
page.control.shuffle.onmouseout=function(){this.style.backgroundPosition=sout; }
setCookie('shuff',globalVars.shuffleOn,'0');
};

function songLoop() {
var si; var sov; var sout;
if(globalVars.loopOn) {globalVars.loopOn=false; si='-25px 0px'; sov='-25px -20px'; sout='-25px 0px'; }
else{globalVars.loopOn=true; si='-25px -20px'; sov='-25px 0px'; sout='-25px -20px'; }
page.control.loop.style.backgroundPosition=si;
page.control.loop.onmouseover=function(){this.style.backgroundPosition=sov; }
page.control.loop.onmouseout=function(){this.style.backgroundPosition=sout; }
setCookie('loop',globalVars.loopOn,'0');
};

function songCount(id) {
if(typeof(id)!='object' && typeof(id)!='undefined') {loaders.otherContent=new loadContent('saveobject.php?params='+escape('count|||id|'+id)+'&r='+Math.random(), songCount, 'GET', id, null);} 
else { if (loaders.otherContent.xmlHttp.readyState==4){ 
var count=loaders.otherContent.xmlHttp.responseText;
var id=loaders.otherContent.context;
var obj=document.getElementById('count_inner_'+id);
if(obj) {obj.innerHTML=count;} 
 } }
};

function autoFind(start){
if(typeof(start)!='object' && typeof(start)!='undefined') {globalVars.autoNum=start; globalVars.playType='auto'; loaders.otherContent=new loadContent('yt/findvid.php?q='+escape(nowPlaying.title.replace(/\'/, "")+' '+nowPlaying.artist)+'&p='+start, autoFind, 'GET', 'autoFind', null); } 

else {
if (loaders.otherContent.xmlHttp.readyState==4 && loaders.otherContent.context=='autoFind' ){ var vid; var startNo; eval(loaders.otherContent.xmlHttp.responseText); ytplayer.loadVideoById(vid, '0'); nowPlaying.ytid=vid; page.part.correctVideo.style.visibility='visible'; if (startNo>6 || loaders.otherContent.xmlHttp.responseText=='') { page.part.manualVideo.style.visibility='visible'; page.part.manualVideo.style.display='inline'; document.getElementById('yturl').value='Enter YouTube url here...'; document.getElementById('yt-manual-link').href='http://youtube.com/results?aq=f&search_query='+nowPlaying.title+' '+nowPlaying.artist+'&search_type=&hl=en-GB&gl=GB';} else { page.part.manualVideo.style.visibility='hidden'; page.part.manualVideo.style.display='none';} }
}};
function isCorrect(isit){ page.part.correctVideo.style.visibility='hidden'; page.part.manualVideo.style.visibility='hidden'; page.part.manualVideo.style.display='none';
if(isit) { var obj=document.getElementById('time_row_'+nowPlaying.id); if(obj) {obj.innerHTML=getDurationMin(ytplayer.getDuration());}
var url='yt/savevid.php?id='+nowPlaying.id+'&yt='+nowPlaying.ytid+'&dur='+getDurationMin(ytplayer.getDuration()); loaders.otherContent=new loadContent(url, function(){}, 'GET', '', null); }
else {autoFind((globalVars.autoNum+1));	}  };
function loadManualVideo() { var vid=document.getElementById('yturl').value.replace(/(http:\/\/youtube.com\/watch\?v\=|http:\/\/www.youtube.com\/watch\?v\=)/, ""); nowPlaying.ytid=vid; ytplayer.loadVideoById(vid, '0'); document.getElementById('yturl').value='Enter YouTube url here...'; page.part.manualVideo.style.visibility='hidden'; page.part.manualVideo.style.display='none'; };

function autoSeek(event) {
if(event) {e=event;} else {e=window.event;}
if(e.offsetX!=null){var ob_left=e.offsetX; } else {var ob_left=e.layerX;}
seekPercent(ob_left/(page.control.autoSeek.offsetWidth/100));
};

function pageLoadComplete() {
document.documentElement.style.overflow='hidden';
if(get_cookie('c_sort')) {globalVars.sorter=get_cookie('c_sort');} if(get_cookie('c_sord')){if(get_cookie('c_sord')=='ASC'){globalVars.asc=true;}else {globalVars.asc=false; }} 
if(!get_cookie('c_art')) {globalVars.artOn=true; songView();} else {if(get_cookie('c_art')==1){globalVars.artOn=false; songView('art');} else{globalVars.artOn=true; songView();}}	
if(get_cookie('loop')=="true"){globalVars.loopOn=false;} else {globalVars.loopOn=true;} songLoop();
if(get_cookie('shuff')=="true"){globalVars.shuffleOn=false;} else {globalVars.shuffleOn=true;} songShuffle();
setCookie('cen','yes','0'); if (get_cookie('cen')=='yes') {document.getElementById('splashscreen').style.visibility='hidden';}
scrollObj((-5), page.control.textBox);
userLogin(0,'function||setUserTab();');
if(get_cookie('tab')!=null) {selectTab(get_cookie('tab'));}
resizeWindow();
updateLinks();

if(get_cookie('HW')!=''){resizeHorizontal( ((globalVars.windowWidth/100)*get_cookie('HW'))-page.part.leftSide.offsetWidth );}
if(get_cookie('VH')!=''){resizeVerticle( ((globalVars.windowHeight/100)*get_cookie('VH'))-page.part.leftTop.offsetHeight-20 );}


	Drag.init(page.control.seekButton, null, 0, (page.control.autoSeek.offsetWidth-10), 0, 0);
	page.control.seekButton.onDragStart = function(x, y) { window.clearInterval(inter1);}
	page.control.seekButton.onDrag = function(x, y) {
 var seekpos = x/((page.control.autoSeek.offsetWidth-10)/100);
 seekPercent(seekpos);
 }
 page.control.seekButton.onDragEnd = function(x, y) {inter1 = window.setInterval(updateInfo, 1000);  var seekpos = x/((page.control.autoSeek.offsetWidth-10)/100); setTimeout(function() {seekPercent(seekpos);},500);}
	
};

function addRowEvents() {
	var divs=page.part.columns.getElementsByTagName('DIV');
	for(var no=0;no<divs.length;no++){
			if(divs[no].className=='outerlist')
			{
			divs[no].onclick=function(){ selectRow(this.getAttribute('row').replace("row", "")); };
			divs[no].ondblclick=function(){ songPlaylist(this.getAttribute('row').replace("row", "")); clearSelection(); };	
			}
	} 
	var imgs =page.part.columns.getElementsByTagName('IMG');
	for(var no=0;no<imgs.length;no++){
		if(imgs[no].className=='mopt'){
		imgs[no].onclick=function(event) {if(event){e=event;} else{e=window.event;} showMenu(this.parentNode.getAttribute('row').replace("row", ""), this.parentNode.getAttribute('rid'), e.clientX, e.clientY); };
		}
	} 
	updateLinks();
};

function Alert(title, text) {
page.alertBox.title.innerHTML=title;
page.alertBox.text.innerHTML=text;
var left=(globalVars.windowWidth/2)-(page.alertBox.holder.offsetWidth/2);
var top=(globalVars.windowHeight/2)-(page.alertBox.holder.offsetHeight/2)
page.alertBox.holder.style.left=left+'px';
page.alertBox.holder.style.top=top+'px';
page.alertBox.holder.style.visibility='visible';
};

function getSongInfo(id, rFunction) {
if(songInfo.id!=id) {
loaders.otherContent=new loadContent('getsonginfo.php?id='+id+'&r='+Math.random(), retrieveSongInfo, 'GET', rFunction, null);}
else {eval(rFunction.split('||')[1]); }
};
function retrieveSongInfo() { 
	if (loaders.otherContent.xmlHttp.readyState==4  && loaders.otherContent.context.split('||')[0]=='gsi' ){ 	
	eval(loaders.otherContent.xmlHttp.responseText);
	eval(loaders.otherContent.context.split('||')[1]);
} }; 

function rateOn(event, obj) {
if(event) {e=event;} else {e=window.event;}
if(e.offsetX!=null){var ob_left=e.offsetX; } else {var ob_left=e.layerX;}
var r=0;
if(ob_left<=18) {r=1; }
else if(ob_left<=36) {r=2; }
else if(ob_left<=54) {r=3; }
else if(ob_left<=72) {r=4; }
else if(ob_left<=90) {r=5; }
var oid=obj.id.split('_');
songRate(r, oid[2]);
};
function rateIn(event, obj) {
if(event) {e=event;} else {e=window.event;}
if(e.offsetX!=null){var ob_left=e.offsetX; } else {var ob_left=e.layerX;}
var r=0;
if(ob_left<=18) {r=1; }
else if(ob_left<=36) {r=2; }
else if(ob_left<=54) {r=3; }
else if(ob_left<=72) {r=4; }
else if(ob_left<=90) {r=5; }
obj.style.backgroundPosition='0px -'+(r*18)+'px';
};
function rateOut(obj) {
var inRate=obj.getAttribute('rate');
obj.style.backgroundPosition='0px -'+(inRate*18)+'px';
};

function songRate(r, id) {
if(typeof(r)!='object' && typeof(r)!='undefined') {if(user.isLoggedIn) {loaders.otherContent=new loadContent('saveobject.php?params='+escape('rate|||rate|'+r+'||id|'+id)+'&r='+Math.random(), songRate, 'GET', id, null);} else {pleaseLogin();}}
else {
		if (loaders.otherContent.xmlHttp.readyState==1){}
		if (loaders.otherContent.xmlHttp.readyState==4){ 	
		var rate=loaders.otherContent.xmlHttp.responseText;
		var id=loaders.otherContent.context; 
		if(rate=='login'+id){pleaseLogin();}
		else if(rate=='exists'+id) {Alert('Song Not Rated!','You have already rated this song.'); }
		else {var obj=document.getElementById('rating_row_'+id);
		if(obj) {obj.setAttribute('rate', rate); obj.style.backgroundPosition='0px -'+(rate*18)+'px';}
		}
		loaders.otherContent.context='fresh'; 
		}
} };

function showMenu(row, id, x, y) {
globalVars.menuRow=row; globalVars.menuId=id;
if((y+page.menu.holder.offsetHeight) > globalVars.windowHeight) {y=y-page.menu.holder.offsetHeight;}
if((x+page.menu.holder.offsetWidth) > globalVars.windowWidth) {x=x-page.menu.holder.offsetWidth;}
page.menu.holder.style.visibility='visible';
page.menu.holder.style.top=y+'px';
page.menu.holder.style.left=x+'px';	
page.menu.holder.onmouseout=function(){hideMenu('t');};
};

function showSubMenu() {
if((page.menu.holder.offsetTop+90+page.menu.subHolder.offsetHeight) > globalVars.windowHeight) {page.menu.subHolder.style.top=18-page.menu.subHolder.offsetHeight+'px';}
else {page.menu.subHolder.style.top='0px';}
page.menu.subHolder.style.visibility='inherit';
globalVars.hideSub=false;
page.menu.subHolder.onmouseout=function(){hideSubMenu('t');};
};

function hideMenu(t) {
if(t) {hmtimer=setTimeout(function(){page.menu.holder.style.visibility='hidden';},2000); page.menu.holder.onmouseover=function(){clearTimeout(hmtimer);};}
else {page.menu.holder.style.visibility='hidden';}
};
function hideSubMenu(t) {
if(t) {globalVars.hideSub=true; shmtimer=setTimeout(function(){if(globalVars.hideSub){page.menu.subHolder.style.visibility='hidden';}},1000); page.menu.subHolder.onmouseover=function(){globalVars.hideSub=false;}; document.getElementById('rm_user_lists').onmouseover=function(){globalVars.hideSub=false;}; }
else {page.menu.subHolder.style.visibility='hidden';}
};

function frm_play() {
	songPlaylist(globalVars.menuRow);
	hideMenu();
};
function frm_rate(r) {
	songRate(r, globalVars.menuId);
	hideMenu();
};
function frm_info() {
	setInfoTab(globalVars.menuId); selectTab('info');
	hideMenu();
};
function frm_lyrics() {
	setLyricsTab(globalVars.menuId); selectTab('lyrics');
	hideMenu();
};
function frm_addToList(title) { addToPlaylist(title, globalVars.menuId); hideMenu(); };
function frm_addToLib() { addToLib(globalVars.menuId); hideMenu(); };

function frm_deleteFromList(title) { if(typeof(title)!='object' && typeof(title)!='undefined') {var url='deletefromplaylist.php?title='+title+'&sid='+globalVars.menuId;	loaders.otherContent=new loadContent(url, frm_deleteFromList, 'GET', 'frm_deleteFromList', null); hideMenu();}
else {if (loaders.otherContent.xmlHttp.readyState==4 && loaders.otherContent.context=='frm_deleteFromList') {	var content=loaders.otherContent.xmlHttp.responseText; if(content=='login') {pleaseLogin();} else if(content=='deleted') {loadPage(0);} else {Alert('Song Not Removed!','There was an error removing this song.');} } } };

function frm_deleteFromLib(title) { if(typeof(title)!='object' && typeof(title)!='undefined') {var url='deletefromlib.php?sid='+globalVars.menuId;	loaders.otherContent=new loadContent(url, frm_deleteFromLib, 'GET', 'frm_deleteFromLib', null); hideMenu();}
else {if (loaders.otherContent.xmlHttp.readyState==4 && loaders.otherContent.context=='frm_deleteFromLib') {	var content=loaders.otherContent.xmlHttp.responseText; if(content=='login') {pleaseLogin();} else if(content=='deleted') {loadPage(0);} else {Alert('Song Not Removed!','There was an error removing this song.');} } } };

function frm_download(id) {
if(id) {window.open('http://needtunes.net/download.php?id='+id,'downloadWindow','width=450,height=400,toolbar=no,location=yes,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=yes,resizable=yes'); }
else {
window.open('http://needtunes.net/download.php?id='+globalVars.menuId,'downloadWindow','width=450,height=400,toolbar=no,location=yes,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=yes,resizable=yes');
	hideMenu(); }
};

function frm_deleteList(title) { if(typeof(title)!='object' && typeof(title)!='undefined') {var url='deleteplaylist.php?title='+title;	loaders.otherContent=new loadContent(url, frm_deleteList, 'GET', 'frm_deleteList', null); }
else {if (loaders.otherContent.xmlHttp.readyState==4 && loaders.otherContent.context=='frm_deleteList') {	var content=loaders.otherContent.xmlHttp.responseText; if(content=='login') {pleaseLogin();} else if(content=='deleted') {userLogin(0,'function||setUserTab();');} else {Alert('Playlist Not Removed!','There was an error removing this list.');} } } };

function selectTab(id) {
	var divs=page.tab.tabHolder.getElementsByTagName('DIV');
	for(var no=0;no<divs.length;no++){if(divs[no].className=='tab-s'){divs[no].className='tab';}}
	var divs2=page.part.leftTop.getElementsByTagName('DIV');
	for(var no=0;no<divs2.length;no++){if(divs2[no].className=='tabbox'){divs2[no].style.visibility='hidden';}}
	document.getElementById(id).style.visibility='visible'; document.getElementById('tab-'+id).className='tab-s';
	setCookie('tab',id,'0');
 };

function setLyricsTab(id) { if(id){getSongInfo(id, 'gsi||setLyricsTab();');} else { document.getElementById('lyricsView').innerHTML=''; page.tab.lyrics.title.innerHTML=songInfo.title; page.tab.lyrics.artist.innerHTML=songInfo.artist; page.tab.lyrics.lyrics.innerHTML=songInfo.lyrics; page.tab.lyrics.image.src=songInfo.image+'&form=thumb'; selectTab('lyrics'); } };

function setInfoTab(id) { if(id){getSongInfo(id, 'gsi||setInfoTab();');} else { 
page.tab.info.title.innerHTML=songInfo.title; page.tab.info.artist.innerHTML=songInfo.artist; page.tab.info.album.innerHTML=songInfo.album; page.tab.info.rating.innerHTML=songInfo.rating; page.tab.info.userRating.innerHTML=songInfo.userRating; page.tab.info.playCount.innerHTML=songInfo.playCount; page.tab.info.userPlayCount.innerHTML=songInfo.userPlayCount;
if(songInfo.wikiInfo!='MANUAL') { page.tab.info.wikiInfo.innerHTML=songInfo.wikiInfo; page.tab.info.wikiButton.onclick=function(){window.open(songInfo.wikiURL,'wiki','');}; } else {page.tab.info.wikiInfo.innerHTML='';}
page.tab.info.downButton.onclick=function() {frm_download(''+songInfo.id+''); };
page.tab.info.image.src=songInfo.image+'&form=thumb';
document.getElementById('infoView').innerHTML='';
page.tab.info.lyricsButton.onclick=function(){setLyricsTab(songInfo.id);}; selectTab('info'); } };

function setUserTab() {
if (user.isLoggedIn) {var notU='hidden'; var isU='inherit'; var playlistContent=''; for(var no=0; no<user.playlists.length; no++) {playlistContent=playlistContent+'<div class="plitem" onmouseover="this.childNodes[2].style.visibility=\'visible\';" onmouseout="this.childNodes[2].style.visibility=\'hidden\';"><img src="images/page.png" width="16" height="16" alt="'+user.playlists[no]+'" style="float:left;" /><span onclick="loadPage(\'/list.php?title='+escape(user.playlists[no])+'\')" class="plitemtxt">'+user.playlists[no]+'</span><div style="visibility:hidden; position:relative; left:10px; width:33px; float:left; cursor:pointer;" ><img src="images/pencil.png" title="Rename Playlist" /><img src="images/cancel.png" title="Delete Playlist" onclick="removePlaylist(\''+addslashes(user.playlists[no])+'\');" /></div></div>'; } page.tab.user.playlists.innerHTML=playlistContent;} else {var notU='inherit'; var isU='hidden';}
page.tab.user.notUser.style.visibility=notU; page.tab.user.isUser.style.visibility=isU;
 };
 
function addslashes(str) {return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\u0000/g, "\\0");}

 
 function removePlaylist(title) {
	var sure = confirm("Are you sure you want to delete the playlist \""+title+"\"? (this action cannot be undone!)");
	if(sure) { frm_deleteList(title);}
	else {}
 }
 
 function newListShow() {document.getElementById('makenew').innerHTML='<input id=\'newlist\' name=\'newlist\' type=\'text\' value=\'Playlist Title\' style=\'height:13px; border-width:1px; width:70px; position:relative; top:-1px; font-size:11px; float:left;\' /><img src=\'images/accept.png\' width=\'16\' height=\'16\' style=\'float:left;\' onclick=\'newListHide(true);\' /><img src=\'images/cancel.png\' width=\'16\' height=\'16\' style=\'float:left;\' onclick=\'newListHide(false);\' />'; document.getElementById('newlist').focus(); document.getElementById('newlist').select();}
 
 function newListHide(n) { if(n){addToPlaylist(document.getElementById('newlist').value, 'ABCD');} document.getElementById('makenew').innerHTML="<span onclick=\'newListShow();\'>Create New</span>"; setTimeout(function(){userLogin(0,'function||setUserTab();');},1000);
 }

function scrollTab(n,S) { var th1=page.tab.tabHolder; var apply=false;
if(S=='C') {clearTimeout(mtab); resizeTabs();}
if(n==n) {n=th1.offsetLeft;}
if(S=='L') {if(n>(page.tab.boxHolder.offsetWidth-(th1.offsetWidth+10))){n=n-5; apply=true;} }
else if(S=='R') {if(n<0){n=n+5; apply=true;}else{th1.style.left='0px';} }
if(apply) {th1.style.left=n+'px'; mtab=setTimeout(function(){scrollTab(n, S);},50);  } };

function updateUserSPLists() { var searcht=document.getElementById('currentSearchTerm').innerHTML.split('#'); var searchtype=searcht[0]; var searchterm=searcht[1]; var rmr=document.getElementById('rm_removelist'); var rmrl=document.getElementById('rm_removelib'); if(searchtype=='list'){rmr.style.visibility='inherit'; rmr.style.display=''; rmr.onclick=function(){frm_deleteFromList(searchterm);};} else {rmr.style.visibility='hidden'; rmr.style.display='none'; rmr.onclick=function(){};}

if(searchtype=='lib'){rmrl.style.visibility='inherit'; rmrl.style.display='';} else {rmrl.style.visibility='hidden'; rmrl.style.display='none';}

var ULists=document.getElementById('userListsDiv').innerHTML; document.getElementById('rm_user_lists').innerHTML=ULists; var itwidth=document.getElementById('rm_user_lists').offsetWidth; document.getElementById('rm_up_holder').style.width=itwidth+'px'; document.getElementById('rm_up_holder').style.right=-(itwidth+6)+'px'; };
function addToPlaylist(title, sid) {
if(typeof(title)!='object' && typeof(title)!='undefined') {	var url='addtoplaylist.php?title='+title+'&sid='+sid; loaders.otherContent=new loadContent(url, addToPlaylist, 'GET', sid, null); }
else {if (loaders.otherContent.xmlHttp.readyState==4) {	var content=loaders.otherContent.xmlHttp.responseText; if(content=='login') {pleaseLogin();} else if(content=='allin') {if(loaders.otherContent.context=='ABCD'){Alert('Error Adding Playlist!','This Playlist already exists. Try another title.');} else {Alert('Error Adding Song To Playlist!','This song is already in your playlist.');}} else if(content=='added') {if(loaders.otherContent.context=='ABCD'){Alert('Playlist Created!','Your playlist has been created.');} else {Alert('Song Added To Playlist!','This song has been added to your playlist.');}}} }  };

function addToLib(sid) {
if(typeof(sid)!='object' && typeof(sid)!='undefined') {	var url='addtolibrary.php?sid='+sid; loaders.otherContent=new loadContent(url, addToLib, 'GET', sid, null); }
else {if (loaders.otherContent.xmlHttp.readyState==4) {	var content=loaders.otherContent.xmlHttp.responseText; if(content=='login') {pleaseLogin();} else if(content=='allin') {Alert('Error Adding Song To Library!','This song is already in your library.');} else if(content=='added') {Alert('Song Added To Library!','This song has been added to your library.');}} }  };

function pleaseLogin() {selectTab('usert'); userLogin(0,'function||setUserTab();'); Alert('Please Login!', 'You must be logged in to do this.<br />Please login on the left side of the page.'); };
function userLogin(i, callback) { if(i==1) {var user=document.getElementById('user').value;	var pass=document.getElementById('pass').value; var params='Username='+user+'&Password='+pass; var type='POST'; } else { var params=null; var type='GET'; }
loaders.otherContent=new loadContent('clogin.php', userCheckStatus, type, callback, params); };
function userCheckStatus() { if (loaders.otherContent.xmlHttp.readyState==4 && loaders.otherContent.context.split('||')[0] =='function') {eval(loaders.otherContent.xmlHttp.responseText); eval(loaders.otherContent.context.split('||')[1]); } };
function resizeHorizontal(x){ var newPerWidth=Math.round((page.part.leftSide.offsetWidth+x)/(globalVars.windowWidth/100));
if(newPerWidth<5) { newPerWidth=5;} if(newPerWidth>95) {newPerWidth=95;}
var lb=page.part.leftSide; var rb=page.part.rightSide; var bar=page.part.resizeBar;
lb.style.width=newPerWidth+'%'; rb.style.width=(100-newPerWidth)+'%'; rb.style.marginLeft=newPerWidth+'%';
bar.style.left='0px'; bar.style.float='right';
setCookie('HW',newPerWidth,'0'); resizeWindow();}; 
function resizeVerticle(y) {
var newPerHeight=Math.round((page.part.leftTop.offsetHeight+y)/((globalVars.windowHeight-60)/100));
if(newPerHeight<5) { newPerHeight=5;} if(newPerHeight>95) {newPerHeight=95;}
var tb=page.part.leftTop; var bb=page.part.leftBottom; var bar=page.part.resizeBarVert;
tb.style.height=newPerHeight+'%'; bb.style.height=(100-newPerHeight)+'%'; bb.style.top=newPerHeight+'%';
bar.style.top='0px'; bar.style.float='left';
setCookie('VH',newPerHeight,'0'); resizeWindow();}; 
function resizeWindow() {
	function windowHeight(){if(typeof(window.innerHeight)=='number' ){return window.innerHeight;} else if(document.documentElement.clientHeight){return document.documentElement.clientHeight;} else if(document.body.clientHeight){return document.body.clientHeight;}}; function windowWidth() {if(typeof(window.innerWidth)=='number'){return window.innerWidth;} else if(document.documentElement.clientWidth){return document.documentElement.clientWidth;}	else if(document.body.clientWidth){return document.body.clientWidth;} };
	globalVars.windowHeight=windowHeight(); globalVars.windowWidth=windowWidth();
	var contentHeight=globalVars.windowHeight-60;
	var db=document.getElementById('displayButtons'); var th=document.getElementById('texthold'); var hider=document.getElementById('cntr_hider');
	if (globalVars.windowWidth<530) {db.style.left='260px'; th.style.width='185px'; hider.style.visibility='visible'; hider.style.display='';}
	else {db.style.left='477px'; th.style.width='400px'; hider.style.visibility='hidden'; hider.style.display='none';}
	var vidhold=document.getElementById('blc');	if (vidhold.offsetHeight<160 || vidhold.offsetWidth<160) { document.getElementById('ytlogo').style.visibility='hidden';}
	else { document.getElementById('ytlogo').style.visibility='visible';}
	if(contentHeight>0) {page.part.content.style.height=contentHeight+'px'; page.part.leftSide.style.height=contentHeight-20+'px';}
	var minx=(((contentHeight-20)/100)*get_cookie('VH'))-10; var wminx=((globalVars.windowWidth/100)*get_cookie('HW'))-10;
	Drag.init(page.part.resizeBarVert, null, 0, 0, -minx, (contentHeight-minx-22));
	page.part.resizeBarVert.onDragEnd = function(x, y) {resizeVerticle(y);}
	var wminx=((globalVars.windowWidth/100)*get_cookie('HW'))-10;
	Drag.init(page.part.resizeBar, null, -wminx, (globalVars.windowWidth-wminx-2), 0, 0);
	page.part.resizeBar.onDragEnd = function(x, y) {resizeHorizontal(x);}
	resizeTabs();
	if(page.part.albumHolder){page.part.albumHolder.style.height=contentHeight-37+'px'; albumImageHolder}
	if(page.part.columnsHolder) {resizeColumns();}
	if(document.getElementById('coverhold') != null){ instanceOne.refresh();}
 } ;
  
function resizeTabs(){ var tabwid=page.tab.tabHolder.offsetWidth; var tt=page.tab.boxHolder.offsetWidth;
var ts=page.tab.tabScroll1; var tr=page.tab.tabScroll2;
var th1=page.tab.tabHolder.offsetLeft; var visi; var tl=tt-(tabwid+10);
if (tt<tabwid && th1>=tl) {visi='visible'; } else {visi='hidden'; } ts.style.visibility=visi;
if (th1<0) {visi='visible'; } else { visi='hidden';} tr.style.visibility=visi; };


function startColumns() {
page.part.columns=document.getElementById('columns'); page.part.columnsHolder=document.getElementById('bighold'); page.part.columnsDiv=document.getElementById('columns-holder');
page.part.albumImageHolder=document.getElementById('album_img_hold');
page.part.albumInfo=document.getElementById('lefthold');
page.part.albumInfoText=document.getElementById('albumInfoHold');

columns = { id:new Array(), obj:new Array(), header:new Array(), left:new Array(), width:new Array(), moveLeft:new Array(), newColumn: new Array(), resize:new Array(), targetColumn:new Array(), totalHeight:0, totalWidth:0, viewHeight:0, viewWidth:0, batch:{count:0, obj:new Array(), height:new Array(), totalHeight:0 } };
if (get_cookie('col_one')){orderColumns();} 
else {saveColumns();}
resizeColumns();};


function createCol(kn, classi, id) {
var obj=document.createElement("div");
obj.className=classi;
obj.id=id+kn;
obj.style.left=columns.left[kn]+'px';
obj.style.width=columns.width[kn]+'px';
obj.style.height=columns.totalHeight+'px';
page.part.columns.insertBefore(obj, columns.obj[kn]);
return obj;
};


function startD(kn) { var vb=columns.obj[kn]; columns.header[kn].parentNode.style.zIndex='12'; vb.style.zIndex='5'; vb.style.opacity='0.7'; vb.style.filter='alpha(opacity=70)'; vb.style.height='auto';
columns.newColumn[kn]= document.createElement("div");
columns.newColumn[kn].className='mbox';
columns.newColumn[kn].id='move_'+kn;
columns.newColumn[kn].style.left=columns.left[kn]+'px';
columns.newColumn[kn].style.width=columns.width[kn]+'px';
columns.newColumn[kn].style.height=columns.obj[kn].offsetHeight+'px';
page.part.columns.insertBefore(columns.newColumn[kn],columns.obj[kn]);
columns.targetColumn[kn]= document.createElement("div");
columns.targetColumn[kn].className='nbox';
columns.targetColumn[kn].id='mover_'+kn;
columns.targetColumn[kn].style.zIndex='4';
columns.targetColumn[kn].style.left=columns.left[kn]+'px';
columns.targetColumn[kn].style.width=columns.width[kn]+'px';
columns.targetColumn[kn].style.height=columns.obj[kn].offsetHeight+'px';
page.part.columns.insertBefore(columns.targetColumn[kn],columns.obj[kn]);	};

function inD(kn, x) {
var vb=document.getElementById('mover_'+kn); var hb=document.getElementById('handle_'+columns.id[kn]); vb.style.left=(columns.left[kn]+x)+'px'; hb.style.left=(x)+'px'; var halfW=columns.width[kn-1]/2; var halfW2=columns.width[kn+1]/2; var tempwidth;
if ((x>=(-halfW) && x<=halfW2 && kn!=1) || (kn==1 && x<halfW2)){vb.style.left=columns.left[kn]+'px'; vb.style.width=columns.width[kn]+'px';}
else {tempwidth=0;
for(var nno=kn+1;nno<columns.obj.length;nno++) {tempwidth=tempwidth+(columns.width[nno]/2);
if (x>tempwidth) { tempwidth=tempwidth+(columns.width[nno]/2); vb.style.left=(columns.left[kn]+columns.width[kn]+tempwidth-columns.width[nno])+'px'; vb.style.width=columns.width[nno]+'px';}}
tempwidth=0;
for(var nno=kn-1;nno>0;nno--){tempwidth=tempwidth+(columns.width[nno]/2);
if (x<-tempwidth) { tempwidth=tempwidth+(columns.width[nno]/2); vb.style.left=(columns.left[kn]-tempwidth)+'px'; vb.style.width=columns.width[nno]+'px';}}
}		 };



function endD(kn, x){
var vb=columns.obj[kn]; var hb=columns.header[kn].parentNode; hb.style.zIndex='10'; vb.style.zIndex='1'; vb.style.opacity='1'; vb.style.filter='alpha(opacity=100)';
document.getElementById('move_'+kn).parentNode.removeChild(document.getElementById('move_'+kn)); document.getElementById('mover_'+kn).parentNode.removeChild(document.getElementById('mover_'+kn));
var halfW=columns.width[kn-1]/2; var halfW2=columns.width[kn+1]/2;
if (x>=(-halfW) && x<=halfW2 && kn!=1){ vb.style.left='0px'; hb.style.left='0px'; }
else if (kn==1 && x<halfW2) { vb.style.left='0px'; hb.style.left='0px'; }
else { 
var totwid=0; for(var nno=kn+1;nno<columns.obj.length;nno++){var totwid=totwid+(columns.width[nno]/2); if(x>totwid){var nextkn=parseInt(nno)+1; totwid=totwid+(columns.width[nno]/2);} }
totwid=0; for(var nno=kn-1;nno>0;nno--) { var totwid=totwid+(columns.width[nno]/2); if(x<-totwid){ var nextkn=parseInt(nno); totwid=totwid+(columns.width[nno]/2);} }
columns.obj[kn].style.height='auto'; var clone=vb.cloneNode(true); clone.id='new_'+kn;
vb.parentNode.insertBefore(clone, columns.obj[nextkn]); vb.parentNode.removeChild(vb); clone.style.left='0px'; clone.id=columns.id[kn];
var clone2=hb.cloneNode(true); clone2.id='new_handle_'+columns.id[kn];
hb.parentNode.insertBefore(clone2, document.getElementById('handle_'+columns.id[nextkn])); hb.parentNode.removeChild(document.getElementById('handle_'+columns.id[kn]));
clone2.style.left='0px'; clone2.id='handle_'+columns.id[kn];
	}
saveColumns();	resizeColumns(); };
function resizeColumns() {
page.part.columns.style.width=listWidth()+'px';
columns.totalHeight=page.part.columns.offsetHeight; columns.totalWidth=page.part.columns.offsetWidth; columns.viewHeight=page.part.columnsHolder.offsetHeight; columns.viewWidth=page.part.columnsHolder.offsetWidth;
if(page.part.albumImageHolder) {document.getElementById('topaholder').style.height=document.getElementById('rc').offsetHeight-38+'px'; var aihsize=(page.part.albumInfo.offsetHeight-20); page.part.albumImageHolder.style.height=aihsize+'px'; page.part.albumImageHolder.style.width=aihsize+'px'; page.part.albumInfoText.style.width=columns.viewWidth-(aihsize+40)+'px'; page.part.albumInfoText.style.left=aihsize+30+'px'; document.getElementById('wikiBar').style.top=aihsize-2+'px'; if ((columns.viewWidth-(aihsize+40)-200)<200) {var visi='hidden';} else {var visi='visible';} document.getElementById('album_wiki_link').style.visibility=visi; }
page.part.columnsDiv.style.height=page.part.columnsHolder.offsetHeight-18+'px';
var divs=page.part.columns.getElementsByTagName('DIV'); var i=0; for(var no=0;no<divs.length;no++){
	if(divs[no].className=='col'){i=i+1; columns.id[i]=divs[no].getAttribute('id'); columns.obj[i]=divs[no]; columns.header[i]=document.getElementById('ahandle_'+columns.id[i]); columns.left[i]=columns.obj[i].offsetLeft; columns.width[i]=columns.obj[i].offsetWidth; columns.moveLeft[i]=columns.totalWidth-columns.left[i]-columns.width[i];
if(divs[no].getAttribute('id')!='one') { Drag.init(columns.header[i], columns.obj[i], -columns.left[i]+30, columns.moveLeft[i], 0, 0);
columns.obj[i].onDragStart=function(x, y){startD(returnKeyNo(this.id));};
columns.obj[i].onDrag=function(x, y) {inD(returnKeyNo(this.id), x);};
columns.obj[i].onDragEnd=function(x, y) {endD(returnKeyNo(this.id), x);};
columns.resize[i]=document.getElementById(columns.id[i]+'_res');
Drag.init(columns.resize[i], null, columns.resize[i].offsetLeft-columns.width[i]+60, 400, 0, 0);
columns.resize[i].onDragStart=function(x, y) {page.part.columns.style.width='3000px';};
columns.resize[i].onDrag=function(x, y){x=x+2; var kn=returnKeyNo(this.id.replace('_res', '')); columns.obj[kn].style.width=x+'px'; columns.header[kn].parentNode.style.width=x+'px';};
columns.resize[i].onDragEnd=function(x, y) {  startD(2); inD(2, 1); endD(2, 1);  resizeColumns();}; }
 }}
addRowEvents(); };
function returnKeyNo(name) { var i=0; var divs = page.part.columns.getElementsByTagName('DIV');
for(var no=0;no<divs.length;no++){ if(divs[no].className=='col'){ i=i+1; if(divs[no].id==name){return i;} } } };
function listWidth() { var tot=0; for(var no=1;no<columns.width.length;no++){tot=tot+columns.width[no];} return tot;};
function saveColumns() { var divs=page.part.columns.getElementsByTagName('DIV'); var i=0; for(var no=0;no<divs.length;no++){
			if(divs[no].className=='col'){
				i=i+1; var cid = divs[no].getAttribute('id');
				setCookie('col_'+cid,i,'0'); setCookie('col_wid_'+cid,document.getElementById(cid).offsetWidth,'0');}  } }; 
function orderColumns() { var divs = page.part.columns.getElementsByTagName('DIV'); var newOrder= new Array(); var newOrder2= new Array(); var oldItems= new Array(); var colWid= new Array();
	var i=0; for(var no=0;no<divs.length;no++){
			if(divs[no].className=='col'){ i=i+1;
			var obid=divs[no].getAttribute('id');
			var obnum=parseInt(get_cookie('col_'+obid));
			var vb=document.getElementById(obid);
			newOrder[obnum]=document.getElementById(obid).cloneNode(true);
			newOrder[obnum].id='new_'+obid;
			newOrder2[obnum]=document.getElementById('handle_'+obid).cloneNode(true);
			newOrder2[obnum].id='new_handle_'+obid;
			colWid[obnum]=parseInt(get_cookie('col_wid_'+obid));
			oldItems[obnum]=obid;
			}
	} for (var no=1;no<=newOrder.length-1;no++) {
		var cloneid=newOrder[no];
		var vb=document.getElementById(oldItems[no]);	
		vb.parentNode.appendChild(cloneid);
		document.getElementById('columns').removeChild(document.getElementById(oldItems[no]));
		document.getElementById('new_'+oldItems[no]).id=oldItems[no];	
		document.getElementById(oldItems[no]).style.left='0px';	
		document.getElementById(oldItems[no]).className='col';	
		document.getElementById(oldItems[no]).style.width=colWid[no]+'px';	
		vb = null; var hb=document.getElementById('handle_'+oldItems[no]);	
		hb.parentNode.appendChild(newOrder2[no]);
		hb.parentNode.removeChild(document.getElementById('handle_'+oldItems[no]));
		document.getElementById('new_handle_'+oldItems[no]).id='handle_'+oldItems[no];	
		document.getElementById('handle_'+oldItems[no]).style.left='0px';
		document.getElementById('handle_'+oldItems[no]).style.width=colWid[no]+'px';
		document.getElementById(oldItems[no]+'_res').style.left=colWid[no]-2+'px';
		}		
	resizeColumns(); };
	

function scrollColumns(obj){var h=obj.scrollLeft; document.getElementById('col_headers_holder').scrollLeft=h; if(globalVars.isScrollNeeded==1) { scrollingHolder();} } ;
function selectRow(num) {
globalVars.selectedRow=num;
if(num<0) {selectRow(0);} else if(num>results.song.length-1) {selectRow(results.song.length-1); } else {
if(document.getElementById("coverhold")!= null) {instanceOne.glideTo(num);}
var rn='row'+num; var divs = page.part.columns.getElementsByTagName('DIV');
for(var no=0;no<divs.length;no++){ if(divs[no].className=='outerlist'){ divs[no].style.backgroundColor='transparent'; divs[no].style.color='#666666'; if(divs[no].childNodes[0].className=='downa'){divs[no].childNodes[0].style.visibility='hidden';} if(divs[no].getAttribute('row') == rn) {divs[no].style.backgroundColor='#38B1FE'; divs[no].style.color='#FFFFFF'; if(divs[no].childNodes[0].className=='downa'){divs[no].childNodes[0].style.visibility='visible';}}
			} }}  };
function clearSelection() {
if(document.selection && document.selection.empty){document.selection.empty();}
else if(window.getSelection) {var sel=window.getSelection(); if(sel && sel.removeAllRanges) {sel.removeAllRanges();} } };

function rowToView(row,up) { var vReg=document.getElementById('columns-holder').offsetHeight; var cSc=document.getElementById('columns-holder').scrollTop;
if(up){if((row*18)+18<cSc){document.getElementById('columns-holder').scrollTop=((row+1)*18);}}
else{ if(((row+1)*18)>(vReg+cSc)) {document.getElementById('columns-holder').scrollTop=-vReg+(row*18)+18} }
};

function scrollLoader() {
globalVars.isScrollNeeded=1;
globalVars.scrollHolder=document.getElementById('columns-holder');
globalVars.actualcontainer=document.getElementById('name_content');
columns.batch.count=globalVars.actualcontainer.childNodes.length; 
for(var no=1;no<=columns.batch.count;no++){
columns.batch.obj[no]=document.getElementById('name#batch#'+no);
columns.batch.height[no]=columns.batch.obj[no].offsetHeight;
columns.batch.totalHeight=columns.batch.totalHeight+columns.batch.height[no];}
};

function findCurrentBatch(no) {
var cH=0; var wB=0; 
for(var num=1;num<=columns.batch.count;num++){cH=cH+columns.batch.height[num]; if (wB==0 && no<=cH) {wB=num;} }
if (no>columns.batch.totalHeight) {wB=num;}
return wB;
};

function scrollingHolder() {
var cB=findCurrentBatch(globalVars.scrollHolder.scrollTop); var nB=cB+1;
if(nB<=columns.batch.count) { if(columns.batch.obj[cB].getAttribute('status')=='cleared') {loadBatch(cB);} else if(columns.batch.obj[nB].getAttribute('status')=='cleared') {loadBatch(nB);} }
};

function loadBatch(num) {
var obj; function setAsLoaded(obj, con) {obj.innerHTML=con; obj.className='batch'; obj.setAttribute('status', 'loaded');};
colOne=''; colName=''; colArtist=''; colAlbum=''; colRate=''; colDate=''; colTime=''; colCount='';

var lmax; if(num<1){num=1;} var lmin=100*(num-1);
if(num==columns.batch.count) {lmax=lmin+results.song.length-(Math.floor(results.song.length/100)*100);} else {lmax=100*num;}
if(columns.batch.obj[num].getAttribute('status')=='loaded') {lmin=0; lmax=0; }
for(var no=lmin; no<lmax;no++) {
		colOne=colOne+'<div class="outerlist" row="row'+no+'" rid="'+results.song[no]['id']+'"><img src="images/s_more.png" class="mopt" /></div>';
		colName=colName+'<div class="outerlist" row="row'+no+'"><img src="images/download.gif" width="15" height="18" border="0" class="downa" onclick="frm_download('+results.song[no]['id']+');"/><span class="coltext">'+results.song[no]['name']+'</span></div>';
		colArtist=colArtist+'<div class="outerlist" row="row'+no+'" ><img src="images/download.gif" width="15" height="18" border="0" class="downa" onclick="frm_download('+results.song[no]['id']+');"/><span class="coltext">'+results.song[no]['artist']+'</span></div>';
		colAlbum=colAlbum+'<div class="outerlist" row="row'+no+'" ><img src="images/download.gif" width="15" height="18" border="0" class="downa" onclick="frm_download('+results.song[no]['id']+');"/><span class="coltext"><a href="album.php?artist='+results.song[no]['artist']+'&album='+results.song[no]['album']+'">'+results.song[no]['album']+'</a></span></div>';
		colRate=colRate+'<div class="outerlist" row="row'+no+'" ><img alt="" src="images/star.png" id="rating_row_'+results.song[no]['id']+'" onclick="rateOn(event, this);" onmousemove="rateIn(event, this);" onmouseout="rateOut(this);" rate="'+results.song[no]['rating']+'" style="position:relative; width:90px; height:18px; background-image:url(images/rate.png); background-position: 0px -'+(results.song[no]['rating']*18)+'px;"></div>';
		colTime=colTime+'<div class="outerlist" row="row'+no+'" ><span class="coltext" id="time_row_'+results.song[no]['id']+'">'+results.song[no]['time']+'</span></div>';
		colCount=colCount+'<div class="outerlist" row="row'+no+'" ><span class="coltext" id="count_inner_'+results.song[no]['id']+'">'+results.song[no]['count']+'</span></div>';
		colDate=colDate+'<div class="outerlist" row="row'+no+'" ><span class="coltext">'+results.song[no]['date']+'</span></div>';
		if(document.getElementById('coverhold_images') != null){
		document.getElementById('coverhold_images').childNodes[no].alt=results.song[no]['name']+' - '+results.song[no]['artist'];
		document.getElementById('coverhold_images').childNodes[no].src='getimage.php?form=artjpg&id='+results.song[no]['id'];
		}
	}
setAsLoaded(document.getElementById('one#batch#'+num),colOne);
setAsLoaded(document.getElementById('name#batch#'+num),colName);
setAsLoaded(document.getElementById('artist#batch#'+num),colArtist);
setAsLoaded(document.getElementById('album#batch#'+num),colAlbum);
setAsLoaded(document.getElementById('rating#batch#'+num),colRate);
setAsLoaded(document.getElementById('time#batch#'+num),colTime);
setAsLoaded(document.getElementById('count#batch#'+num),colCount);
setAsLoaded(document.getElementById('date#batch#'+num),colDate);
if(document.getElementById('coverhold') != null){instanceOne.refresh();}
addRowEvents(); globalVars.selectedRow=null; globalVars.batchBusy=false;
};

function sortFunc(first, last) {if(first[globalVars.sorter]<last[globalVars.sorter]) {return -1;} else {return 1;}};
function evalRow(sid,sname,sartist,salbum,stime,sdate,sgenre,srating,scount){results.song.push({id:sid, name:sname, artist:sartist, album:salbum, time:stime, date:sdate, genre:sgenre, rating:srating, count:scount});};

function sortButtons(obj, vis) {obj.childNodes[0].childNodes[1].style.visibility=vis;};

function displayResults() {
if (loaders.mainContent.xmlHttp.readyState==4){results.song=new Array(); eval(loaders.mainContent.xmlHttp.responseText);results.song.sort(sortFunc); if(!globalVars.asc) {results.song.reverse();} pageList(); document.getElementById('handle_'+globalVars.sorter).style.backgroundImage='url(images/listbg-o.gif)';
startColumns(); scrollLoader(); loadBatch(1); addRowEvents(); updateUserSPLists(); document.getElementById('resLoadingDiv').style.visibility='hidden'; globalVars.selectedRow=null;
}};

function pageList() {
globalVars.pagePlaylist=new Array();
for(var no=0;no<results.song.length;no++) {globalVars.pagePlaylist[no]=results.song[no]['id'];}
}

function searchSong() {loadPage('/list.php?search='+document.getElementById('searchbox').value); };

pageLoadComplete();

function keyPress(event) {
event = event || window.event;
	switch(event.keyCode){
	case 38: //up
	if(document.getElementById('columns-holder') != null) {
	selectRow(globalVars.selectedRow-1);
	rowToView(globalVars.selectedRow-1,1);
	if (event.preventDefault) {event.preventDefault();} else {return false;}
	}
	break;
	case 40: //down
	if(document.getElementById('columns-holder') != null) {
	selectRow((globalVars.selectedRow-1)+2);
	rowToView((globalVars.selectedRow-1)+2,0);
	if (event.preventDefault) {event.preventDefault();} else {return false;}
	}
	break;
	case 32: //space bar
	if(ytplayer) {var pp=ytplayer.getPlayerState(); if(pp==1) {ytplayer.pauseVideo();} else if(pp==2) {ytplayer.playVideo();} if (event.preventDefault) {event.preventDefault();} else {return false;}}
	break;
	case 13: //enter
	if(document.getElementById('alertBox').style.visibility=='visible') {document.getElementById('alertBox').style.visibility='hidden';}
	else { 	if(globalVars.selectedRow!=null) {songPlaylist(globalVars.selectedRow);} }
	break;	
	}
};
document.onkeydown=function(event) {keyPress(event); };

function lbKey(event) {event = event || window.event; if(event.keyCode==13){userLogin(1, 'function||setUserTab();');} };
																							
																							
function ImageFlow ()
{

	
	this.defaults =
	{
		ImageFlowID:        'imageflow',    
		preloadImages:      false,           
		reflections:        true,           
		reflectionP:        0.5,            
		reflectionPNG:      false,          
		reflectionGET:      '',             
		imageFocusMax:      4,              
		imageFocusM:        1.0,            
		imageCursor:        'default',      
		startID:            1,              
		startAnimation:     false,          
		slider:             true,           
		sliderCursor:       'e-resize',     
		sliderWidth:        14,             
		xStep:              150,            
		captions:           true,           
		opacity:            false,          
		opacityArray:       [10,8,6,4,2],   
		onClick:            function(){ document.location = this.url; },   
		tsearch:            'none',
		tttype:				'search'
	};

	
	var thisObject = this;

	
	this.init = function(options)
	{
		
		var optionsArray = new Array('ImageFlowID', 'preloadImages', 'reflections', 'reflectionP', 'reflectionPNG', 'reflectionGET', 'imageFocusMax', 'imageFocusM', 'imageCursor', 'startID', 'startAnimation', 'slider', 'sliderCursor', 'sliderWidth', 'xStep', 'captions', 'opacity', 'opacityArray', 'onClick', 'tsearch', 'tttype');
		var max = optionsArray.length;
		for (var i = 0; i < max; i++)
		{
			var name = optionsArray[i];
			this[name] = (options !== undefined && options[name] !== undefined) ? options[name] : thisObject.defaults[name];
		}

		
		var ImageFlowDiv = document.getElementById(thisObject.ImageFlowID);
		if(ImageFlowDiv)
		{
			
			ImageFlowDiv.style.visibility = 'visible';
			this.ImageFlowDiv = ImageFlowDiv;

			
			if(this.createStructure())
			{
				this.imagesDiv = document.getElementById(thisObject.ImageFlowID+'_images');
				this.captionDiv = document.getElementById(thisObject.ImageFlowID+'_caption');
				this.scrollbarDiv = document.getElementById(thisObject.ImageFlowID+'_scrollbar');
				this.sliderDiv = document.getElementById(thisObject.ImageFlowID+'_slider');

				this.indexArray = [];
				this.current = 0;
				this.imageID = 0;
				this.target = 0;
				this.memTarget = 0;
				this.firstRefresh = true;
				this.firstCheck = true;
				this.busy = false;

				
				if(this.slider === false)
				{
					this.scrollbarDiv.style.display = 'none';
				}

				
				var mdivh=document.getElementById('content').offsetHeight;
				var height= Math.round((mdivh/10)*6);
				var width=Math.round(height/0.5085);
				document.getElementById(thisObject.ImageFlowID+'_loading_txt').style.paddingTop = ((height * 0.5) -22) + 'px';
				ImageFlowDiv.style.height = height + 'px';

				
				this.loadingProgress();
			}
		}
	};

	
	this.createStructure = function()
	{
		
		var imagesDiv = document.createElement('div');
		imagesDiv.setAttribute('id',thisObject.ImageFlowID+'_images');
		imagesDiv.setAttribute('class','images');
		imagesDiv.setAttribute('className','images');

		
		var node = null;
		var max = this.ImageFlowDiv.childNodes.length;
		for(var index = 0; index < max; index++)
		{
			node = this.ImageFlowDiv.childNodes[index];
			if (node && node.nodeType == 1 && node.nodeName == 'IMG')
			{
				
				if(thisObject.reflections === true)
				{
					var version = '2';
					if(thisObject.reflectionPNG === true)
					{
						version = '3';
					}

				}
				
				var imageNode = node.cloneNode(true);
				imagesDiv.appendChild(imageNode);
			}
		}

		
		var loadingP = document.createElement('p');
		var loadingText = document.createTextNode(' ');
		loadingP.setAttribute('id',thisObject.ImageFlowID+'_loading_txt');
		loadingP.appendChild(loadingText);

		
		var loadingDiv = document.createElement('div');
		loadingDiv.setAttribute('id',thisObject.ImageFlowID+'_loading');
		loadingDiv.setAttribute('class','loading');
		loadingDiv.setAttribute('className','loading');

		
		var loadingBarDiv = document.createElement('div');
		loadingBarDiv.setAttribute('id',thisObject.ImageFlowID+'_loading_bar');
		loadingBarDiv.setAttribute('class','loading_bar');
		loadingBarDiv.setAttribute('className','loading_bar');
		loadingDiv.appendChild(loadingBarDiv);

		
		var captionDiv = document.createElement('div');
		captionDiv.setAttribute('id',thisObject.ImageFlowID+'_caption');
		captionDiv.setAttribute('class','caption');
		captionDiv.setAttribute('className','caption');

		
		var scrollbarDiv = document.createElement('div');
		scrollbarDiv.setAttribute('id',thisObject.ImageFlowID+'_scrollbar');
		scrollbarDiv.setAttribute('class','scrollbar');
		scrollbarDiv.setAttribute('className','scrollbar');
		var sliderDiv = document.createElement('div');
		sliderDiv.setAttribute('id',thisObject.ImageFlowID+'_slider');
		sliderDiv.setAttribute('class','slider');
		sliderDiv.setAttribute('className','slider');
		scrollbarDiv.appendChild(sliderDiv);
		var sliderLeft = document.createElement('DIV');
		sliderLeft.setAttribute('class','img_left');
		sliderLeft.setAttribute('className','img_left');
		var sliderRight = document.createElement('DIV');
		sliderRight.setAttribute('class','img_right');
		sliderRight.setAttribute('className','img_right');
		scrollbarDiv.appendChild(sliderLeft);
		scrollbarDiv.appendChild(sliderRight);

		
		var success = false;
		if (thisObject.ImageFlowDiv.appendChild(imagesDiv) &&
			thisObject.ImageFlowDiv.appendChild(loadingP) &&
			thisObject.ImageFlowDiv.appendChild(loadingDiv) &&
			thisObject.ImageFlowDiv.appendChild(captionDiv) &&
			thisObject.ImageFlowDiv.appendChild(scrollbarDiv))
		{
			
			for(index = 0; index < max; index++)
			{
				node = this.ImageFlowDiv.childNodes[index];
				if (node && node.nodeType == 1 && node.nodeName == 'IMG')
				{
					this.ImageFlowDiv.removeChild(node);
				}
			}
			success = true;
		}
		return success;
	};


	
	this.loadingProgress = function()
	{
		var p = thisObject.loadingStatus();
		if(p < 100 || thisObject.firstCheck === true && thisObject.preloadImages === true)
		{
			
			if(thisObject.firstCheck === true && p == 100)
			{
				thisObject.firstCheck = false;
				window.setTimeout(thisObject.loadingProgress, 100);
			}
			else
			{
				window.setTimeout(thisObject.loadingProgress, 40);
			}
		}
		else
		{
			
			document.getElementById(thisObject.ImageFlowID+'_loading_txt').style.display = 'none';
			document.getElementById(thisObject.ImageFlowID+'_loading').style.display = 'none';

			
			window.setTimeout(thisObject.addResizeEvent, 1000);

			
			window.onunload = function()
			{
				document = null;
			};

			
			thisObject.initMouseWheel();
			thisObject.MouseDrag.init();
			thisObject.Key.init();

			
			thisObject.refresh(true);

			
			document.getElementById(thisObject.ImageFlowID+'_scrollbar').style.visibility = 'visible';

			
			var startID = thisObject.startID-1;
			if (startID < 0 )
			{
				startID = 0;
			}
			if (startID > thisObject.max)
			{
				startID = thisObject.max -1;
			}
			thisObject.glideTo(startID);

			
			if(thisObject.startAnimation === true)
			{
				thisObject.moveTo(5000);
			}
		}
	};


	
	this.loadingStatus = function()
	{
		/*var max = thisObject.imagesDiv.childNodes.length;
		var i = 0, completed = 0;
		var image = null;
		for(var index = 0; index < max; index++)
		{
			image = thisObject.imagesDiv.childNodes[index];
			if (image && image.nodeType == 1 && image.nodeName == 'IMG')
			{
				if (image.complete === true)
				{
					completed++;
				}
				i++;
			}
		}
		var finished = Math.round((completed/i)*100);
		var loadingBar = document.getElementById(thisObject.ImageFlowID+'_loading_bar');
		loadingBar.style.width = finished+'%';

		var loadingP = document.getElementById(thisObject.ImageFlowID+'_loading_txt');
		var loadingTxt = document.createTextNode('loading images '+completed+'/'+i);
		loadingP.replaceChild(loadingTxt,loadingP.firstChild);
		return finished;*/
		return 100;
	};


	
	this.refresh = function()
	{
		
		var mdivh=document.getElementById('content').offsetHeight;
		var mdivw=document.getElementById('rc').offsetWidth;
		this.maxHeight= Math.round((mdivh/10)*6);
		this.iWidth=Math.round(thisObject.maxHeight/0.5085);
		this.maxFocus = thisObject.imageFocusMax * thisObject.xStep;
		this.size = thisObject.iWidth * 0.6;
		this.scrollbarWidth = Math.round(thisObject.iWidth * 0.6);
		this.sliderWidth = thisObject.sliderWidth * 0.5;
		var goLeft=(mdivw-thisObject.iWidth)/2;

		
		thisObject.ImageFlowDiv.style.height = thisObject.maxHeight + 'px';
		thisObject.ImageFlowDiv.style.left = goLeft + 'px';

		
		thisObject.imagesDiv.style.height = Math.round(thisObject.iWidth * 0.338) + 'px';

		
		thisObject.captionDiv.style.width = thisObject.iWidth + 'px';
		thisObject.captionDiv.style.marginTop = Math.round(thisObject.iWidth * 0.03) + 'px';

		
		thisObject.scrollbarDiv.style.width = thisObject.scrollbarWidth + 'px';
		thisObject.scrollbarDiv.style.marginTop = Math.round(thisObject.iWidth * 0.02) + 'px';
		thisObject.scrollbarDiv.style.marginLeft = Math.round(thisObject.iWidth * 0.2) + 'px';

		
		thisObject.sliderDiv.style.cursor = thisObject.sliderCursor;
		thisObject.sliderDiv.onmousedown = function(){ thisObject.MouseDrag.start(this); return false;};

		
		var multi = (thisObject.reflections === true) ? thisObject.reflectionP + 1 : 1;

		
		var max = thisObject.imagesDiv.childNodes.length;
		var i = 0;
		var image = null;
		for (var index = 0; index < max; index++)
		{
			image = thisObject.imagesDiv.childNodes[index];
			if(image !== null && image.nodeType == 1 && image.nodeName == 'IMG')
			{
				this.indexArray[i] = index;

				
				image.url = image.getAttribute('longdesc');
				image.xPosition = (-i * thisObject.xStep);
				image.i = i;

				
				if(thisObject.firstRefresh)
				{
					if(image.getAttribute('width') !== null && image.getAttribute('height') !== null)
					{
						image.w = image.getAttribute('width');
						image.h = image.getAttribute('height') * multi;
					}
					else{
						image.w = image.width;
						image.h = image.height;
					}
				}
				
				if((image.w) > (image.h / (thisObject.reflectionP + 1)))
				{
					
					image.pc = 118;
					image.pcMem = 118;
				}
				else
				{
					
					image.pc = 100;
					image.pcMem = 100;
				}

				
				image.style.cursor = thisObject.imageCursor;
				i++;
			}
		}
		this.max = thisObject.indexArray.length;

		
		if(thisObject.firstRefresh)
		{
			thisObject.firstRefresh = false;
		}

		
		thisObject.moveTo(thisObject.current);
		thisObject.glideTo(thisObject.imageID);
	};


	
	this.moveTo = function(x)
	{
		this.current = x;
		this.zIndex = thisObject.max;

		
		for (var index = 0; index < thisObject.max; index++)
		{
			var image = thisObject.imagesDiv.childNodes[thisObject.indexArray[index]];
			var currentImage = index * -thisObject.xStep;

			
			if ((currentImage + thisObject.maxFocus) < thisObject.memTarget || (currentImage - thisObject.maxFocus) > thisObject.memTarget)
			{
				image.style.visibility = 'hidden';
				image.style.display = 'none';
			}
			else
			{
				var z = Math.sqrt(10000 + x * x) + 100;
				var xs = x / z * thisObject.size + thisObject.size;

				
				image.style.display = 'block';

				
				var newImageH = (image.h / image.w * image.pc) / z * thisObject.size;
				var newImageW = 0;
				switch (newImageH > thisObject.maxHeight)
				{
					case false:
						newImageW = image.pc / z * thisObject.size;
						break;

					default:
						newImageH = thisObject.maxHeight;
						newImageW = image.w * newImageH / image.h;
						break;
				}
				var newImageTop = (thisObject.iWidth * 0.36 - newImageH) + ((newImageH / (thisObject.reflectionP + 1)) * thisObject.reflectionP);

				
				image.style.left = (xs - (image.pc / 2) / z * thisObject.size)-35 + 'px';
				if(newImageW && newImageH)
				{
					image.style.height = newImageH + 'px';
					image.style.width = newImageW + 'px';
					image.style.top = newImageTop + 'px';
				}
				image.style.visibility = 'visible';

				
				switch ( x < 0 )
				{
					case true:
						this.zIndex++;
						break;

					default:
						this.zIndex = thisObject.zIndex - 1;
						break;
				}

				
				switch ( image.i == thisObject.imageID )
				{
					case false:
						image.onclick = function(){ thisObject.glideTo(this.i);};
						break;

					default:
						this.zIndex = thisObject.zIndex + 1;
						if(image.url !== '')
						{
							if(thisObject.tttype=='list') {
								image.ondblclick = function(){songPlaylist(thisObject.imageID);}
							}
							else { image.ondblclick = function(){songPlaylist(thisObject.imageID);}
							}
						}
						break;
				}
				image.style.zIndex = thisObject.zIndex;
			}
			x += thisObject.xStep;
		}
	};

	
	this.glideTo = function(imageID)
	{
		var x = -imageID * thisObject.xStep;
		this.target = x;
		this.memTarget = x;
		this.imageID = imageID;

		
		if(thisObject.imagesDiv.childNodes[imageID]!=null){var caption = thisObject.imagesDiv.childNodes[imageID].getAttribute('alt');}
		else {var caption = ''}
		if (imageID>90 && caption == '... - ...' && !globalVars.batchBusy) { globalVars.batchBusy=true; loadBatch(Math.floor(imageID/100)+1);}
		if (caption === '' || thisObject.captions === false)
		{
			caption = '&nbsp;';
		}
		thisObject.captionDiv.innerHTML = caption;

		
		if (thisObject.MouseDrag.busy === false)
		{
			this.newSliderX = (imageID * thisObject.scrollbarWidth) / (thisObject.max-1) - thisObject.MouseDrag.newX;
			thisObject.sliderDiv.style.marginLeft = (thisObject.newSliderX - thisObject.sliderWidth) + 'px';
		}

		
		if(thisObject.opacity === true || thisObject.imageFocusM !== thisObject.defaults.imageFocusM)
		{
			
			thisObject.setOpacity(thisObject.imagesDiv.childNodes[imageID], thisObject.opacityArray[0]);
            thisObject.imagesDiv.childNodes[imageID].pc = thisObject.imagesDiv.childNodes[imageID].pc * thisObject.imageFocusM;
 
			
			var opacityValue = 0;
			var rightID = 0;
			var leftID = 0;
			var last = thisObject.opacityArray.length;

			for (var i = 1; i < (thisObject.imageFocusMax+1); i++)
			{
				if((i+1) > last)
				{
					opacityValue = thisObject.opacityArray[last-1];
				}
				else
				{
					opacityValue = thisObject.opacityArray[i];
				}

				rightID = imageID + i;
				leftID = imageID - i;

				if (rightID < thisObject.max)
				{
					thisObject.setOpacity(thisObject.imagesDiv.childNodes[rightID], opacityValue);
					thisObject.imagesDiv.childNodes[rightID].pc = thisObject.imagesDiv.childNodes[rightID].pcMem;
				}
				if (leftID >= 0)
				{
					thisObject.setOpacity(thisObject.imagesDiv.childNodes[leftID], opacityValue);
					thisObject.imagesDiv.childNodes[leftID].pc = thisObject.imagesDiv.childNodes[leftID].pcMem;
				}
			}
		}

		
		if (thisObject.busy === false)
		{
			window.setTimeout(thisObject.animate, 50);
			thisObject.busy = true;
		}
	};


	
	this.animate = function()
	{
		switch (thisObject.target < thisObject.current-1 || thisObject.target > thisObject.current+1)
		{
			case true:
				thisObject.moveTo(thisObject.current + (thisObject.target-thisObject.current)/3);
				window.setTimeout(thisObject.animate, 50);
				thisObject.busy = true;
				break;

			default:
				thisObject.busy = false;
				break;
		}
	};


	
	this.setOpacity = function(object, value)
	{
		if(thisObject.opacity === true)
		{
			object.style.opacity = value/10;
			object.style.filter = 'alpha(opacity=' + value*10 + ')';
		}
	};


	
	this.initMouseWheel = function()
	{
		if(window.addEventListener)
		{
			thisObject.ImageFlowDiv.addEventListener('DOMMouseScroll', thisObject.eventMouseWheel, false);
		}
		thisObject.ImageFlowDiv.onmousewheel = thisObject.eventMouseWheel;
	};


	
	this.eventMouseWheel = function(event)
	{
		var delta = 0;
		if (!event)
		{
			event = window.event;
		}
		if (event.wheelDelta)
		{
			delta = event.wheelDelta / 120;
		}
		else if (event.detail)
		{
			delta = -event.detail / 3;
		}
		if (delta)
		{
			thisObject.handleMouseWheel(delta);
		}
		if (event.preventDefault)
		{
			event.preventDefault();
		}
		event.returnValue = false;
	};


	
	this.handleMouseWheel = function(delta)
	{
		var change = false;
		var newImageID = 0;
		if(delta > 0)
		{
			if(thisObject.imageID >= 1)
			{
				newImageID = thisObject.imageID -1;
				change = true;
			}
		}
		else
		{
			if(thisObject.imageID < (thisObject.max-1))
			{
				newImageID = thisObject.imageID +1;
				change = true;
			}
		}

		
		if (change === true)
		{
			thisObject.glideTo(newImageID);
		}
	};


	
	this.MouseDrag =
	{
		object: null,
		objectX: 0,
		mouseX: 0,
		newX: 0,
		busy: false,

		
		init: function()
		{
			thisObject.addEvent(thisObject.ImageFlowDiv,'mousemove',thisObject.MouseDrag.drag);
			thisObject.addEvent(thisObject.ImageFlowDiv,'mouseup',thisObject.MouseDrag.stop);
			thisObject.addEvent(document,'mouseup',thisObject.MouseDrag.stop);

			
			thisObject.ImageFlowDiv.onselectstart = function()
			{
				var selection = true;
				if (thisObject.MouseDrag.busy === true)
				{
					selection = false;
				}
				return selection;
			};
		},

		start: function(o)
		{
			thisObject.MouseDrag.object = o;
			thisObject.MouseDrag.objectX = thisObject.MouseDrag.mouseX - o.offsetLeft + thisObject.newSliderX;

		},

		stop: function()
		{
			thisObject.MouseDrag.object = null;
			thisObject.MouseDrag.busy = false;
		},

		drag: function(e)
		{
			var posx = 0;
			if (!e)
			{
				e = window.event;
			}
			if (e.pageX)
			{
				posx = e.pageX;
			}
			else if (e.clientX)
			{
				posx = e.clientX + document.body.scrollLeft	+ document.documentElement.scrollLeft;
			}
			thisObject.MouseDrag.mouseX = posx;

			if(thisObject.MouseDrag.object !== null)
			{
				var newX = (thisObject.MouseDrag.mouseX - thisObject.MouseDrag.objectX) + thisObject.sliderWidth;

				
				if(newX < ( - thisObject.newSliderX))
				{
					newX = - thisObject.newSliderX;
				}
				if(newX > (thisObject.scrollbarWidth - thisObject.newSliderX))
				{
					newX = thisObject.scrollbarWidth - thisObject.newSliderX;
				}

				
				var step = (newX + thisObject.newSliderX) / (thisObject.scrollbarWidth / (thisObject.max-1));
				var imageID = Math.round(step);
				thisObject.MouseDrag.newX = newX;
				thisObject.MouseDrag.object.style.left = newX + 'px';
                if(thisObject.imageID !== imageID)
                {
                    thisObject.glideTo(imageID);
                }
				thisObject.MouseDrag.busy = true;
			}
		}
	};

	
	this.Key =
	{
		
		init: function()
		{
			document.onkeyup = function(event){ thisObject.Key.handle(event); };
		},

		
		handle: function(event)
		{
			var charCode  = thisObject.Key.get(event);
			switch (charCode)
			{
				
				case 39:
					thisObject.handleMouseWheel(-1);
					break;

				
				case 37:
					thisObject.handleMouseWheel(1);
					break;
			}
		},

		
		get: function(event)
		{
			event = event || window.event;
			return event.keyCode;
		}
	};


	
	this.addEvent = function( obj, type, fn )
	{
		if (obj.addEventListener)
		{
			obj.addEventListener( type, fn, false );
		}
		else if (obj.attachEvent)
		{
			obj["e"+type+fn] = fn;
			obj[type+fn] = function(){ obj["e"+type+fn]( window.event ); };
			obj.attachEvent( "on"+type, obj[type+fn] );
		}
	};

	
	this.addResizeEvent = function()
	{
		var otherFunctions = window.onresize;
		if(typeof window.onresize != 'function')
		{
			window.onresize = function()
			{
				thisObject.refresh();
			};
		}
		else
		{
			window.onresize = function(){
				if (otherFunctions)
				{
					otherFunctions();
				}
				thisObject.refresh();
			};
		}
	};
}