
	function home(){
		window.location="http://taranaa.com";
	}

	function MM_preloadImages() { //v3.0
	  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
		if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}

	function MM_swapImgRestore() { //v3.0
	  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}

	function MM_findObj(n, d) { //v4.01
	  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	  if(!x && d.getElementById) x=d.getElementById(n); return x;
	}

	function MM_swapImage() { //v3.0
	  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}

	
	var rowCount = 0;
	var totalTracks = 0;
	var songCache = { };
	var editSongid = -1;
	var perfSongId = 0;
	var perfID = -1;
	var alphabet = 'A';
	var sortingColumn = 'title';
	var perfSortingColumn = 'performedBy';
	var tracksCache = null;
	var perfCache = null;
	var superadm = false;
	var admin = false;
	var member = false;
	var pages = [];
	var username = '';
	var refreshCallback;
	var cart = [];  //list of songs
	//var cart = {}; //map of {id, trackInfo} 
	

	function checkpw(){
		var utxt = document.getElementById("uname");
		var ptxt = document.getElementById("pw");
		username = utxt.value;
		SongSearch.login(utxt.value, ptxt.value, login);  
		
	}

	function login(data){    
			if(data == 'invalid'){
				alert("Invalid Login");
				admin = false;
				superadm = false;
				member = false;
				return;
			}
	
			else if(data == 'admin') {
				document.getElementById("trackEditForm").style.display = "block";
				$("login").style.display = "none";
				admin = true;
				showTracks(tracksCache);
			}                    
			else if(data == 'superadm') {
				document.getElementById("trackEditForm").style.display = "block";
				$("login").style.display = "none";
				superadm = true;
				admin = true;
				showTracks(tracksCache);
			}           
			else if(data == 'member'){
				member = true;
				$("login").style.display = "none";
			}
			else {
				alert("Invalid Login");
				admin = false;
				superadm = false;
				member = false;
				return;
			}
 
	}
	
	function signup(){
		if(confirm("Press OK if this is your correct email address : " + $("email").value) == false)
			return;

			var valid = false;
			var str = $("email").value;
			
			var at="@"
			var dot="."
			var lat=str.indexOf(at)
			var lstr=str.length
			var ldot=str.indexOf(dot)
			if (str.indexOf(at)==-1){		   
			   valid =  false
			}

			else if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){		   
			   valid =  false;
			}

			else if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){		    
			   valid =  false;
			}

			else if (str.indexOf(at,(lat+1))!=-1){		    
			   valid =  false;
			 }

			 else if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){		    
			   valid =  false;
			 }

			 else if (str.indexOf(dot,(lat+2))==-1){		    
			   valid =  false;
			 }

			 else if (str.indexOf(" ")!=-1){
			   valid =  false;
			 }
			 else {
				valid = true;
				SongSearch.signup($("email").value);
				alert($("email").value + " is added to our mailing list. Thank you.");
			 }
			 if(valid == false){
				alert("Invalid Email ID");
			 }
	}

	function addTrack(){
	}

	function getParameter ( queryString, parameterName ) {
		// Add "=" to the parameter name (i.e. parameterName=value)
		var parameterName = parameterName + "=";
		if ( queryString.length > 0 ) {
			// Find the beginning of the string
			begin = queryString.indexOf ( parameterName );
			// If the parameter name is not found, skip it, otherwise return the value
			if ( begin != -1 ) {
				// Add the length (integer) to the beginning
				begin += parameterName.length;
				// Multiple parameters are separated by the "&" sign
				end = queryString.indexOf ( "&" , begin );
				if ( end == -1 ) {
					end = queryString.length
				}
				// Return the string
				var param =  unescape ( queryString.substring ( begin, end ) );
				param = param.replace(/--/g, ' ');
				param = param.replace(/-and-/g, '&');
				return param;
			}
			// Return "null" if no parameter has been found
			return null;
		}
	}
	
	
	function indexSearch(){
	
		var queryString = window.top.location.search.substring(1);
		if ( queryString.length > 0 ){
			var map = new Object();          

			titleValue = getParameter(queryString, "title");                    
			if(titleValue)
				map.searchTitle = titleValue;

			albumValue = getParameter(queryString, "album");
			if(albumValue)
				map.searchAlbum = albumValue;
				
			singerValue = getParameter(queryString, "singers");                    
			if(singerValue)
				map.searchSingers = singerValue;
				
			musicValue = getParameter(queryString, "music");
			if(musicValue)
				map.searchMusic = musicValue;
			
			SongSearch.searchQuery(map, showTracks);    

		 }
		 else
			getTracks();
		
	
	}
	
	
	function getTracks(s){					
			
		if(s) alphabet = s;              
		if(pages[alphabet]){
			//alert("using cached page: " + s);
			showTracks(pages[alphabet]);
		}
		else{                        
			SongSearch.getTracksPage(alphabet, showTracks);
		}
		
		renameAddCartLinks();
		showViewCartLink();
		//hideCheckoutLink():
	}

	function showTracks(tracks){
	
			if(alphabet)
				pages[alphabet] = tracks;

			//alert("showTracks: " + alphabet + DWRUtil.toDescriptiveString(tracks, 9));
			tracksCache = tracks;  //save for later use : sorting

			perfSongId = -1;
			$('PerformanceTable').style.display = 'none';
			$('SongIndexTable').style.display = 'block';
			
			DWRUtil.removeAllRows("tracksPageBody", { filter:function(tr) {
				return (tr.id != "templateRow");
			}});
			//var song, id;                       
			if(sortingColumn == 'year')
				tracks.sort(function(t1, t2) { return (t2.year - t1.year); });
			else
				eval("tracks.sort(function(t1, t2) { return t1." + sortingColumn + ".localeCompare(t2." + sortingColumn + "); })");                                            
			
		   if(admin == true)
				$("headerAction").innerHTML = 'Action';
		   else
				$("headerAction").innerHTML = '&nbsp;';

			rowCount =  tracks.length;   
			for (var i = 0; i < rowCount; i++) {
				  var song = tracks[i];
				  var id = song.songid;                              
				  dwr.util.cloneNode("templateRow", { idSuffix:id });
				  dwr.util.setValue("tableTitle" + id, song.title);
				  dwr.util.setValue("tableAlbum" + id, song.album);
				  dwr.util.setValue("tableYear" + id, song.year);
				  dwr.util.setValue("tableSingers" + id, song.singers);
				  dwr.util.setValue("tableMusic" + id, song.music);
				  dwr.util.setValue("tableBuy" + id, 'Add');
				  
				  if(alphabet == '_new_'){
					dwr.util.setValue("tablePerformedBy" + id, song.createdDate);
					$('HeaderPerfDate').innerHTML = "Date Posted";
				  }
				  else{
					dwr.util.setValue("tablePerformedBy" + id, song.performedBy);
					$('HeaderPerfDate').innerHTML = "Top Performances";
				  }
				  //$("tablePerformedBy" + id).href = song.link;                          
				  var link = song.link;
				  
				  $("tableTitle" + id).onclick = getFunc2(song);
				  $("tablePerformedBy" + id).onclick = getFunc(song);
				  $("templateRow" + id).style.display = ""; //"table-row";
				  //if(i%2 == 1)
					 //$("templateRow" + id).style.backgroundColor = "rgb(100,100,100)"; //"#FFEEFF";
					
				  if(admin == true){
					$("tableAction" + id).style.display = "";
				   }
											   
				  songCache[id] = song;
			}                                         
			
			if(totalTracks == 0)
				SongSearch.getTrackCount(setTrackCount);
			else
				showTrackCount();
			
	}
	
	function setTrackCount(data){
		
		totalTracks = data;
		showTrackCount();
	}
	
	function showTrackCount(){
		$('trackCount').style.display = 'block';
		$("trackCount").innerHTML = "Displaying " + rowCount + " out of " + totalTracks + " tracks";
	}

	function getFunc(linkinfo){                
		var f = function(){songClicked(linkinfo);};  
		return f;
	}
	
	function getFunc2(song){                
		//var f = function(){showPerformances(song);};  changed on Jan 30 2011 to play tracks online.  
		var f = function(){trackPlayback(song);};  
		return f;
	}

	function getFunc3(linkinfo){                
		var f = function(){perfClicked(linkinfo);};  
		return f;
	}

	function getRatingFunction(linkinfo){                
		var f = function(){addRating(linkinfo);};  
		return f;
	}
	
	
	function postSave(data){
		alert("Saved: " + data);
	}
	
	function sort(col){
		sortingColumn = col;
		showTracks(tracksCache);                
	}
	
	function perfSort(col){
		perfSortingColumn = col;
		//refreshPerformances(perfCache);                
		refreshCallback(perfCache);
	}
	

	function songClicked(song){
		//alert("songClicked: " + song.songid + " : " + song.link);
		SongSearch.downloadCount(song.songid);
		//alert("downloadCount updated");
		self.location = song.link;
		return true;
	}
			
	function perfClicked(perf){
		//alert("perfClicked: " + perf.perfID + " : " + perf.link);
		//SongSearch.downloadCount(song.songid);
		//alert("downloadCount updated");
		self.location = song.link;
		return true;
	}
	

function editClicked(eleid) {
  // we were an id of the form "edit{id}", eg "edit42". We lookup the "42"
  var song = songCache[eleid.substring(4)];
  editSongid = song.songid;          
  dwr.util.setValues(song);
}

function deleteClicked(eleid) {
  if(superadm == false){
		alert("Restricted");
		return;
  }
		
  // we were an id of the form "delete{id}", eg "delete42". We lookup the "42"
  var song = songCache[eleid.substring(6)];
  alphabet = song.title.substring(0,1);
  if (confirm("Are you sure you want to delete " + song.title + "?")) {
	dwr.engine.beginBatch();
	SongSearch.deleteTrack(song.songid);
	getTracks();
	dwr.engine.endBatch();
  }
}


function saveTrack() {
  var songInfo = { id:-1, title:null, album:null, year:null, singers:null, music:null, performedBy:null, link:null, language:null, genre:null };
  songInfo.songid = editSongid;
  dwr.util.getValues(songInfo);
  alphabet = songInfo.title.substring(0,1);
  
  dwr.engine.beginBatch();
	 if(editSongid == -1)
		 SongSearch.saveTrack(songInfo, postSave);			
	 else
		 SongSearch.modifyTrack(songInfo, postSave);
	 editSongid = -1;
			
	 clearSong();
	 //getTracks();  this will use the cached page
	 SongSearch.getTracksPage(alphabet, showTracks);  //reload page for alphabet
  dwr.engine.endBatch();
}

function upload(){
	if(superadm == true){
		if(confirm("Are you sure you want to upload tracks from file?"))
			SongSearch.upload();
	}
	else
		alert("Feature Not Available");
}

function clearSong() {
  dwr.util.setValues({ id:-1, title:null, album:null, year:null, singers:null, music:null, performedBy:null, link:null, language:null, genre:null });
  hideCheckoutLink();
}  

function newAdditions(){
	alphabet = '_new_';
	if(pages[alphabet]){
		//alert("using cached page");
		showTracks(pages[alphabet]);
	}
	else{                        
		SongSearch.getNewAdditions(showTracks);
	}
	hideCheckoutLink();
}


function Top20(){
	alphabet = '_top20_';
	if(pages[alphabet]){
		//alert("using cached page");
		showTracks(pages[alphabet]);
	}
	else{                        
		SongSearch.getTop20(showTracks);
	}            
}

function doSearch(){            
	dijit.byId("searchDialog").show();
	hideCheckoutLink();
}

function searchQuery(s){
	alphabet = '_search_';
	SongSearch.searchQuery(s, showTracks);
}

function reloadPerformances(){            
	SongSearch.getPerformances(perfSongId, refreshPerformances);
}

function trackPlayback(song){
    if(song){
		window.location="http://taranaa.com/online/TKPOnline.php?trackId=" + song.songid;	    
	}
}

function showPerformances(song){

	if(song){
		perfSongId = song.songid;
		$('PerformanceSongTitle').innerHTML = song.title + "   ... Performed By";                
	}            
	
	$('SongIndexTable').style.display = 'none';
	$('trackCount').style.display = 'none';                            
	$('PerformanceTable').style.display = 'block';
	
	SongSearch.getPerformances(perfSongId, refreshPerformances);
	refreshCallback = reloadPerformances;
	return true;
}


		
function addPerformance(s){
	if(s.performers.length < 1){
	   alert("Please enter your name in the Performed By field");
	   showPerformanceDialog();
	   return;
	}
	if(s.perfLink.length < 5){
	   alert("Please provide a link to your song on Taranaa Tarang");
	   showPerformanceDialog();
	   return;
	}

	var perfInfo = { songid:-1, email:null, performedBy:null, link:null };
	perfInfo.songid = perfSongId;
	perfInfo.email = username;
	perfInfo.performedBy = s.performers;
	perfInfo.link = s.perfLink;
	SongSearch.addPerformance(perfInfo, refreshPerformances);
}

function sortPerTracks(tracks){
	if(perfSortingColumn == 'ratings')
		tracks.sort(function(t1, t2) { return (t2.ratings - t1.ratings); });
	else if(perfSortingColumn == 'avgRating')
		tracks.sort(function(t1, t2) { return (t2.avgRating - t1.avgRating); });
	else
		eval("tracks.sort(function(t1, t2) { return t1." + perfSortingColumn + ".localeCompare(t2." + perfSortingColumn + "); })");                                            

}

function refreshPerformances(tracks){

	perfCache = tracks;

	//alert("refreshPerformances " + DWRUtil.toDescriptiveString(tracks,9));
	DWRUtil.removeAllRows("performancePageBody", { filter:function(tr) {
		return (tr.id != "perfTemplateRow");
	}});
	
	sortPerTracks(tracks);                                    
	rowCount =  tracks.length; 
	for (var i = 0; i < rowCount; i++) {
		  var song = tracks[i];
		  var id = song.perfID;                              
		  dwr.util.cloneNode("perfTemplateRow", { idSuffix:id });
		  dwr.util.setValue("perfTableTitle" + id, song.performedBy);
		  dwr.util.setValue("datePosted" + id, song.date);
		  dwr.util.setValue("perfRatings" + id, song.ratings);
		  
		  var NumericValue = parseFloat(song.avgRating);
		  dwr.util.setValue("avgRating" + id, NumericValue.toFixed(2));
		  
		  dwr.util.setValue("addRating" + id, 'Add Rating');
		  var link = song.link;
		  
		  $("perfTableTitle" + id).onclick = getFunc(song);
		  $("addRating" + id).onclick = getRatingFunction(song);
		  $("perfTemplateRow" + id).style.display = ""; //"table-row";

	}                   
						  
}

function refreshMySongs(tracks){
	//alert("refreshMySongs " + DWRUtil.toDescriptiveString(tracks,9));
	
	perfSongId = -1;
	perfCache = tracks;
	
	$('SongIndexTable').style.display = 'none';
	$('trackCount').style.display = 'none';                            
	$('PerformanceTable').style.display = 'block';
				
	perfSongId = -1;
	DWRUtil.removeAllRows("performancePageBody", { filter:function(tr) {
		return (tr.id != "perfTemplateRow");
	}});
	//var song, id;                       

	sortPerTracks(tracks);                        
	rowCount =  tracks.length; 
	for (var i = 0; i < rowCount; i++) {
		  var song = tracks[i];
		  var id = song.perfID;                              
		  dwr.util.cloneNode("perfTemplateRow", { idSuffix:id });
		  dwr.util.setValue("perfTableTitle" + id, song.title + " - " + song.performedBy);
		  dwr.util.setValue("datePosted" + id, song.date);
		  dwr.util.setValue("perfRatings" + id, song.ratings);
		  
		  var NumericValue = parseFloat(song.avgRating);
		  dwr.util.setValue("avgRating" + id, NumericValue.toFixed(2));
		  
		  dwr.util.setValue("addRating" + id, 'Add Rating');
		  var link = song.link;

		  $("perfTableTitle" + id).onclick = getFunc(song);                  
		  $("addRating" + id).onclick = getRatingFunction(song);
		  $("perfTemplateRow" + id).style.display = ""; //"table-row";

	}                                         
				
	$('PerformanceSongTitle').innerHTML = "Song Title - Performed By";                
	
}

function refreshRecentSongs(tracks){
	//alert("refreshRecentSongs " + DWRUtil.toDescriptiveString(tracks,9));

	perfSongId = -1;
	perfCache = tracks;
	
	$('SongIndexTable').style.display = 'none';
	$('trackCount').style.display = 'none';                            
	$('PerformanceTable').style.display = 'block';            
	
	perfSongId = -1;
	DWRUtil.removeAllRows("performancePageBody", { filter:function(tr) {
		return (tr.id != "perfTemplateRow");
	}});
	//var song, id;                       

	sortPerTracks(tracks);                        
	rowCount =  tracks.length; 
	for (var i = 0; i < rowCount; i++) {
		  var song = tracks[i];
		  var id = song.perfID;                              
		  dwr.util.cloneNode("perfTemplateRow", { idSuffix:id });
		  dwr.util.setValue("perfTableTitle" + id, song.title + " - " + song.performedBy);
		  dwr.util.setValue("datePosted" + id, song.date);
		  dwr.util.setValue("perfRatings" + id, song.ratings);
		  
		  var NumericValue = parseFloat(song.avgRating);
		  dwr.util.setValue("avgRating" + id, NumericValue.toFixed(2));
		  
		  dwr.util.setValue("addRating" + id, 'Add Rating');
		  var link = song.link;

		  $("perfTableTitle" + id).onclick = getFunc(song);                  
		  $("addRating" + id).onclick = getRatingFunction(song);
		  $("perfTemplateRow" + id).style.display = ""; //"table-row";

	}                                         
	
	$('PerformanceSongTitle').innerHTML = "Song Title - Performed By";                
				
}
		

function showPerformanceDialog(){
	if(member){
		if(perfSongId > 0)
			dijit.byId('performanceDialog').show();
		else 
			alert('Please select a song from the alphabetical index pages');                    
	}
	else
		alert('Please login using your email address and TKP playerID');
}

function showMySongs(){
	if(member){
		SongSearch.getMySongs(username, refreshMySongs);
		refreshCallback = showMySongs;                
	}
	else
		alert('Please login using your email address and TKP playerID');
}

function showRecentSongs(){
		SongSearch.getRecentSongs(refreshRecentSongs);
		refreshCallback = showRecentSongs;
}


function addRating(s){
	perfID = s.perfID;           
	perfSongId = s.songid;
	
	if(member)
		dijit.byId('ratingDialog').show();
	else
		alert('Please login using your email address and TKP playerID');
}


function submitRating(){
	var rating = $('slider1input').value;            
	//alert("refreshCallback: " + refreshCallback);
	SongSearch.addRating(perfID, username, rating, perfSongId, refreshCallback);
}


//invoked for add or remove
function addToCart(s){            
  // s is an id of the form "tableBuy{id}", eg "tableBuy42". We lookup the "42"
  var trackid = s.substring(8);
  
  //search for trackid in cart.
  var index = 0;
  if(cart.length > 0){
	for(x in cart){
		if(cart[x].songid == trackid){
			cart.splice(index,1);  //remove existing track from cart
			dwr.util.setValue("tableBuy" + trackid, 'Add')
			if(cart.length < 1){
				hideCheckoutLink();
			}
				
			return;
		}
		index++;
	}
  }
  
  cart.push(songCache[trackid]);  
  dwr.util.setValue("tableBuy" + trackid, 'Remove')
  showCheckoutLink();
  //alert("cart " + DWRUtil.toDescriptiveString(cart, 9));
	
}

function viewCart(){
	//alert("cart " + DWRUtil.toDescriptiveString(cart, 9));
	if(cart.length < 1){
		alert("Cart is empty. Please add a few tracks to your cart.");
		return;
	}
	alphabet = '_cart_';
	showTracks(cart);	
	hideViewCartLink();	
}

function checkout(){
	if(cart.length > 0){
		var custom = "";
		for(x in cart){
			custom += cart[x].songid + ":";			
		}	
		var n = custom.length;
		var custom = custom.substr(0,n-1);
		dwr.util.setValue("id_custom", custom);
		dwr.util.setValue("id_trackCount", cart.length);
		dwr.util.setValue("id_amount", cart.length * 2);
		
		dwr.util.setValue("id_custom2", custom);
		dwr.util.setValue("id_trackCount2", cart.length);
		dwr.util.setValue("id_amount2", cart.length * 2);
		dijit.byId("emailDialog").show();			
	}
	else{
		alert("The cart is empty. Please add a few tracks to your cart.");
	}

}

//change Add to Remove
function renameAddCartLinks(){

	if(cart.length > 0){
		for(x in cart){
			dwr.util.setValue("tableBuy" + cart[x].songid, 'Remove')
		}	
	}

}

function hideCheckoutLink(){
	$('ViewCart').style.display = 'block';
	$('Checkout').style.display = 'none';
}

function showCheckoutLink(){
	$('ViewCart').style.display = 'block';
	$('Checkout').style.display = 'block';
}

function hideViewCartLink(){
	$('ViewCart').style.display = 'none';
	$('Checkout').style.display = 'block';
}

function showViewCartLink(){
	$('ViewCart').style.display = 'block';
}

