// engine definition
function MP_ENGINE(_images) {
  // data flags
  this.lastRowIndex=null;
  
  // data constants
  this.name='MIXTAPEPASS';
  this.defaultTabDetailText = 'Move mouse over mixtape covers to reveal further details.';
    
  // data containers
  this.images={};
  
  // loader functions
  this.TabsLoader=function(tabsArr,tabsDefault,defaultUrl,writeType,writeObj) {
    var html = ''; var txt = ''; var htmlTabs = []; var htmlBodyTabs = ''; var onoff = '';
	var tabsLength = tabsArr.length;
	this.resetTabDetail();
    html  = '<table cellspacing=0 width="100%" height="57" background="/images/mixtape_pass_35.gif">';
 	html += '<tr>';
 	html += '<td rowspan="2" class="tabspacer" width="12" height="57">&nbsp;</td>';  
	for(x=0; x<tabsLength; x++) {
	  onoff = (tabsArr[x]==tabsDefault) ? 'on' : 'off';
      txt  = '<td rowspan="2" class="tableft'+onoff+'">&nbsp;</td>';
	  txt += '<td class="tabtop'+onoff+'">&nbsp;</td>';
      txt += '<td rowspan="2" class="tabright'+onoff+'">&nbsp;</td>';
	  htmlTabs[x] = txt;
	  htmlBodyTabs += '<td class="tabbody'+onoff+'" id="MPTab_'+x+'_body" valign=middle align=left>';
	  if(tabsArr[x]==tabsDefault) { htmlBodyTabs += '<span>'+tabsArr[x]+'</span>'; }
	  else { htmlBodyTabs += '<a href="'+defaultUrl+'" onclick="return MIXPASS.changeTab([\''+tabsArr.join("','")+'\'],\''+tabsArr[x]+'\',\''+defaultUrl+'\',\''+writeObj+'\')" title="'+tabsArr[x]+'">'+tabsArr[x]+'</a>'; }
	  htmlBodyTabs += '</td>';
	  if(document.getElementById(writeObj+'_'+x+'_content')) {
	    document.getElementById(writeObj+'_'+x+'_content').className = 'tabcontent'+onoff;
	  }
	}
	html += htmlTabs.join('<td rowspan="2" class="tabspacer" width="6" height="57">&nbsp;</td>');
    html += '<td rowspan="2" class="tabspacer" width="14" height="57">&nbsp;</td>';
    html += '</tr>';
    html += '<tr>';
	html += htmlBodyTabs;
    html += '</tr>';
    html += '</table>';
	if(writeType==1) { document.writeln('<div id="'+writeObj+'_container">'+html+'</div>'); }
	else if(writeType==2 && writeObj && document.getElementById(writeObj+'_container')) {
	  document.getElementById(writeObj+'_container').innerHTML=html;
	  return false;
	}
  }
  
  // functions
  this.swapImg=function(obj,a) { if(obj&&this.images[a]) { obj.src=this.images[a].src; } };
  this.getRandomValue=function(vl) { var chars = 'abcdefghijklmnopqrstuvwxyz'; var charLength = chars.length; var val = ''; while(val.length < vl) { var rIndex = Math.floor(Math.random() * charLength); val += chars.charAt(rIndex); } return val; };
  this.getXY=function(obj) { var x = 0; var y=0; while(obj != null) { y += obj.offsetTop; x+= obj.offsetLeft; obj = obj.offsetParent; } return [ y,x ]; };
  this.urlencode=function(v) { return encodeURIComponent(v); };
  this.urldecode=function(v) { v = v.replace(/\+/g, ' '); return decodeURIComponent(v); };
  this.getBaseDomain=function() { return document.location.href.split("\/")[2]; };
  this.getBaseURL=function() { return location.protocol + '//' + this.getBaseDomain(); };
  this.changeDefaultValue=function(fe,dv,t,c) { if(fe&&((t==1&&fe.value==dv)||(t==2&&fe.value==''))) { fe.value=(t==1)?'':dv; fe.className=c; } };
  this.changeTab=function(tabsArr,tabsDefault,defaultUrl,writeObj) { return this.TabsLoader(tabsArr,tabsDefault,defaultUrl,2,writeObj); }
  this.updateTabsInfo=function(t) { if(document.getElementById('tabs_info')) { document.getElementById('tabs_info').innerHTML=t; } }
  this.updateTabDetail=function(t,dc,sc) { this.updateTabsInfo('<b>'+t+'</b><BR>Downloads: '+dc+' &nbsp;|&nbsp; Streams: '+sc); }
  this.resetTabDetail=function() { this.updateTabsInfo(this.defaultTabDetailText); }
  
  // pre load images
  for(var x=0, y=_images.length; x<y; x++) { this.images[_images[x]] = new Image(); this.images[_images[x]].src = this.getBaseURL() + _images[x]; }
  
  // return object reference
  return this;
}

// init engine
var MIXPASS = new MP_ENGINE([]);
