// Core Program

/***************** Model ****************/

model = new Object();

model.user = new Array();    //User information array
model.validation = new Array();
model.tours = new Array();
model.tours.events = new Array();

/**** Cache ****/

model.cache = new Object();

model.cache.addMain=function(id,html)
{
	if(!model.cache.main) model.cache.main=new Array();
	if(!model.cache.main[id]){
		model.cache.main[id] = html;
	}
}

model.cache.add=function(type,array)
{
	var check = searchCache(type,array.id);
	if(!check) {
		if(!model.cache[type]) model.cache[type] = new Array();
		model.cache[type].unshift(array);
	}
}

function searchCache(location,id)
{
	var array = model.cache[location];
	if(array){
		for(i=0;i<array.length;i++){
			if(array[i].id==id){
				return i+1;
			}
		}
	}
	return false;
}


/**** Model Update functions ****/

model.updateArtistlist=function(artists)
{
	this.artistlst.artists=artists;
}

/***************** Loading functions ****************/

function loadArtistMenu(artist)
{
	var cmdArr=new Array();
	var cmd=new Array();
	
	if(artist){
		if(model.albums && !model.albums[artist] || !model.albums){
			cmd.push(new Array('rpcCommand','content_get_albums_for_artist'));
			cmd.push(new Array('artist',artist));
			cmdArr.push(cmd);
			sendRPC(cmdArr);
		} else {
			render_Albumlist(model.albums[artist]);
		}
	} else {
		if(!model.artistlist){
			cmd.push(new Array('rpcCommand','content_get_artistlist'));
			cmdArr.push(cmd);
			sendRPC(cmdArr);
		} else {
			render_Artistlist(model.artistlist);
		}
	}
}

function loadBio(id)
{
	var headerCacheId = searchCache('header',id);
	var bioCacheId = searchCache('bio',id);
	
	if(headerCacheId && bioCacheId){
		render_Bio(model.cache.bio[bioCacheId-1]);
	} else {
		var cmdArr=new Array();
		
		if(!headerCacheId){
			var cmd=new Array();
			cmd.push(new Array('rpcCommand','content_get_window'));
			cmd.push(new Array('id',id));
			cmdArr.push(cmd);
		}
		
		var cmd=new Array();
		cmd.push(new Array('rpcCommand','content_get_bio'));
		cmd.push(new Array('id',id));
		cmdArr.push(cmd);
		
		sendRPC(cmdArr);
	}
}

function loadDownload(id)
{
	var headerCacheId = searchCache('header',id);
	var downloadCacheId = searchCache('download',id);
	
	if(headerCacheId && downloadCacheId){	
		render_Download(model.cache.download[downloadCacheId-1]);
	} else {
		var cmdArr=new Array();
		
		if(!headerCacheId){
			var cmd=new Array();
			cmd.push(new Array('rpcCommand','content_get_window'));
			cmd.push(new Array('id',id));
			cmdArr.push(cmd);
		}
		
		var cmd=new Array();
		cmd.push(new Array('rpcCommand','content_get_download'));
		cmd.push(new Array('id',id));
		cmdArr.push(cmd);
		
		sendRPC(cmdArr);
	}
}

function loadMain(id)
{
	if(model.cache.main && model.cache.main[id]){
		render_Main(model.cache.main[id]);	
	} else {
		var cmdArr=new Array();
		var cmd=new Array();
	
		cmd.push(new Array('rpcCommand','content_get_main'));
		cmd.push(new Array('id',id));
		cmdArr.push(cmd);
	
		sendRPC(cmdArr);
	}
}

/************* Process functions **********/

function process_content_get_artistlist_response(params)
{
	render_Artistlist(params.artists);
	model.artistlist=params.artists;
}

function process_content_get_albums_for_artist_response(params)
{
	render_Albumlist(params.albums);
	var artist=params.albums[0].artist;
	if(!model.albums) model.albums = new Array();
	model.albums[artist]=params.albums;
}

function process_content_get_bio_response(params)
{
	render_Bio(params);
	model.cache.add('bio',params);
}

function process_content_get_download_response(params)
{
	render_Download(params);
	model.cache.add('download',params);
}

function process_content_get_main_response(params)
{
	render_Main(params['body']);
	model.cache.addMain(params.id,params['body']);
}

function process_content_get_window_response(params)
{
	var header = new Array();
	header.id=params.id;
	header.artist=params.artist;
	header.title=params.title;
	header.genre=params.genre;
	header.download=params.download;
	header.shop=params.shop
	model.cache.add('header',header);
}

/************ Render functions *************/

function render_Artistlist(artists)
{
	var contentDiv = document.getElementById('content');
	var html=new String();

	html ='<h3>Our Artists</h3>';
	html+='<div class="portal"><p>';
	for(var i=0;i<artists.length;i++) {	
		var artist=artists[i];
		html+='<a onclick="loadArtistMenu(\''+artist+'\')">'+artist+'</a><br/>';  
	}
	html+='</p></div>';
	contentDiv.innerHTML=html;
	scrollTop('content');
}

function render_Albumlist(albums)
{
	var contentDiv = document.getElementById('content');
	var html = new String();
	html+='<h3>Our albums for '+albums[0].artist+'</h3>';
	for(var i=0;i<albums.length;i++){
		var album=albums[i];
		html+='<div class="rounded clickable" onclick="loadBio(\''+album.id+'\')"><div class="head"></div><div class="roundedBody">';
		html+='<img src="./images/covers/'+album.id+'.jpg" alt="Cover" /><table>';
		html+='<tr><th scope="row">Artist:</th><td>'+album.artist+'</td></tr>';
		html+='<tr><th scope="row">Title:</th><td>'+album.title+'</td></tr>';
		html+='<tr><th scope="row">Genre:</th><td>'+album.genre+'</td></tr>'; 
		html+='</table></div><div class="foot"></div></div>';	
	}
	contentDiv.innerHTML=html;	
	scrollTop('content');
}

function render_Bio(bio)
{
	var headerCacheId = searchCache('header',bio.id);
	if(headerCacheId){
		var contentDiv = document.getElementById('content');
		var wndw = model.cache.header[headerCacheId-1];
		var html = new String();
		
		html+=render_Header('bio',wndw);
		html+='<div class="story">'+bio.text;
		if(bio && bio['link']!='false') html+='<p>For more information: <a href="http://'+bio['link']+'" target="_blank">'+bio['link']+'</a></p>';
		html+='</div>';
		contentDiv.innerHTML=html;
		scrollTop('content');
	} else {
		alert('Error loading data :: Data model out of sync.\nPlease report this problem at info@corazong.com');
	}
}

function render_Download(params)
{
	var id=params.id;
	var tracks=params.tracks;
	var headerCacheId = searchCache('header',id);

	if(headerCacheId){
		var contentDiv = document.getElementById('content');
		var wndw = model.cache.header[headerCacheId-1];
		var html=new String();

		html+=render_Header('download',wndw);
		html+='<div class="story"><table width="400">';
		html+='<tr><th width="40" scope="row">Track</th><th scope="row">Title</th><th scope="row">Time</th></tr>';
		for(var i=0;i<tracks.length;i++){
			var track=tracks[i];
			html+='<tr><th scope="row">'+track.nr+'</th><td><a href="http://www.soundcream.com/soundcream/download?song_id='+track['link'];
			html+='">'+track.title+'</a></td><td>'+formatTime(track.time)+'</td></tr>';
		}
		html+='</div>';
		contentDiv.innerHTML=html;	
		scrollTop('content');
	} else {
		alert('Error loading data :: Data model out of sync.\nPlease report this problem at info@corazong.com');
	}
}

function render_Header(type,wndw)
{
	var html=new String();

	//Bio Tab
	if(type=='bio'){ 
		html+='<div class="tab sel">Biography</div>'; 
	} else { 
		html+='<div class="tab" onclick="loadBio(\''+wndw.id+'\')">Biography</div>';
	}
	//Download Tab
	if(wndw.download=='true' && type=='download') {
		html+='<div class="tab sel">Downloads</div>';
	} else if(wndw.download=='true'){
		html+='<div class="tab" onclick="loadDownload(\''+wndw.id+'\')">Downloads</div>';
	}
	//Shop Tab
	if(wndw.shop=='true') html+='<div class="tab" onclick="loadItemdetails(\''+wndw.id+'\')">Shop</div>';
	
	html+='<div class="rounded"><div class="head tabHead"></div><div class="roundedBody">';
	html+='<img src="./images/covers/'+wndw.id+'.jpg" alt="Cover" /><table>';
	html+='<tr><th scope="row">Artist:</th><td>'+wndw.artist+'</td></tr>';
	html+='<tr><th scope="row">Title:</th><td>'+wndw.title+'</td></tr>';
	html+='<tr><th scope="row">Genre:</th><td>'+wndw.genre+'</td></tr></table>';
	html+='</div><div class="foot"></div></div>';
	
	return html;
}

function render_Main(bdy)
{
	var contentDiv = document.getElementById('content');
	var html='<div class="story">'+bdy+'</div>'; 
	contentDiv.innerHTML=html;	
	scrollTop('content');
}

/*************** Helper functions ***************/

function formatTime(time)
{
	var r = time/60;
	var m = Math.floor(r);
	var sec = time % 60;
	if(sec<10){
		sec = '0'+sec;
	}
	var songtime = m+':'+sec;
	return songtime;
}

function scrollTop(divid)
{
	var div = document.getElementById(divid);
	div.scrollTop=0;	
}
