/* Gloabl Variables */

var realBase='http://www.playtribeswar.com/twitter/';
var tierLevel=[0,0,4,8,12,17,24,34,59,99];
var timerId=[];
var userId=0;
var progress=[];
var inventory=[];
var requirements=[];
var jobs=[];
var biz=[];
var bizStatus=[];
var attackTarget=0;
var clock=0;

var profilePic=[];
var sendList=[];
var selectedGift=-1;

/* Gift */

function selectGift(i){
	if(selectedGift!=-1){
		setClassName('item-'+selectedGift,'giftBox');
	}
	selectedGift=i;
	setClassName('item-'+i,'selectedGiftBox');
	byId('itemId').value=i;
}

function selectAll(){
	var e=null;
	for(var i=0;i<36;i++){
		e=byId('check-'+i);
		if(e!=null){
			e.checked=true;
		}
	}
}
function deselectAll(){
	var e=null;
	for(var i=0;i<36;i++){
		e=byId('check-'+i);
		if(e!=null){
			e.checked=false;
		}
	}
}


/* Top players */
function setSelectedTop(id){
	for(var i=1;i<=6;i++){
		setVisible('topTable-'+i,false);
		setClassName('topLink-'+i,'topCell');
	}
	setVisible('topTable-'+id,true);
	setClassName('topLink-'+id,'selectedTopCell');
}

/* Biz */

function setBizStatus(){
	for(var i=1;i<bizStatus.length;i++){
		if(bizStatus[i]==null){
			setVisible('bizAcquireButton-'+i,true);
			setValue('bizAcquirePrice-'+i, biz[i].price*10);
			setVisible('bizCollectButton-'+i,false);
			setVisible('bizUpgradeCapacity-'+i,false);
			setVisible('bizUpgradeOutput-'+i,false);
			setVisible('bizUpgradeQuality-'+i,false);
			setVisible('bizStock-'+i,false);
			setVisible('bizStockBar-'+i,false);
			setVisible('bizStockCurrent-'+i,false);
			setVisible('bizStatus-'+i,false);
		}else{
			setVisible('bizStatus-'+i,true);
			setVisible('bizStock-'+i,true);
			setVisible('bizStockBar-'+i,true);
			setVisible('bizStockCurrent-'+i,true);
			setVisible('bizAcquireButton-'+i,false);
			setVisible('bizCollectButton-'+i,true);
			var quality=(4+bizStatus[i].qualityLevel)*biz[i].quality;
			var output=(4+bizStatus[i].outputLevel)*biz[i].output;
			var capacity=(4+bizStatus[i].capacityLevel)*biz[i].capacity;
			var total=bizStatus[i].output*quality;
			setValue('bizQuality-'+i, quality);
			setValue('bizCapacity-'+i, capacity);
			setValue('bizOutput-'+i, output);
			if(total>0){
				setValue('bizTotal-'+i, total);
				setVisible('bizCollectButton-'+i, true);
			}else{
				setVisible('bizCollectButton-'+i, false);
			}
			
			if(bizStatus[i].capacityLevel==10){
				setVisible('bizUpgradeCapacity-'+i,false);
			}else{
				setVisible('bizUpgradeCapacity-'+i,true);
				setValue('bizUpgradeCapacityCost-'+i, biz[i].price*(4+bizStatus[i].capacityLevel));
			}
			if(bizStatus[i].outputLevel==10){
				setVisible('bizUpgradeOutput-'+i,false);
			}else{
				setVisible('bizUpgradeOutput-'+i,true);
				setValue('bizUpgradeOutputCost-'+i, biz[i].price*(4+bizStatus[i].outputLevel));
			}
			if(bizStatus[i].qualityLevel==5){
				setVisible('bizUpgradeQuality-'+i,false);
			}else{
				setVisible('bizUpgradeQuality-'+i,true);
				setValue('bizUpgradeQualityCost-'+i, biz[i].price*(4+bizStatus[i].qualityLevel));
			}
			setValue('bizProduct-'+i, biz[i].product[bizStatus[i].qualityLevel]);
			
			var r=byId('bizStock-'+i);
			var max=(bizStatus[i].capacityLevel+4)*biz[i].capacity;
			var width=300*(bizStatus[i].output/max);
			setValue('bizMax-'+i,max);
			setValue('bizCurrent-'+i,bizStatus[i].output);
			setWidth('bizStock-'+i, width);
		}
	}
}

/* Jobs */

function checkRequirement(){
	var req=requirements;
	var inv=inventory;
	var j=-1, q=-1,it=-1;
	for(var i=0;i<req.length;i++){
		j=req[i].jobId;
		it=req[i].itemId;
		q=req[i].quantity;
		
		if(inv[it]==null || inv[it]<q){
			//mark red
			setClassName('jobRequirement-'+j+'-'+it,'jobRequirementRed');
			setClassName('jobRequirement-'+j+'-'+it+'-img','jobRequirementRedImg');
		}else{
			setClassName('jobRequirement-'+j+'-'+it,'jobRequirement');
			setClassName('jobRequirement-'+j+'-'+it+'-img','');
		}
	}
}


function hideJobs(){
	var l=user.level;
	for(var j=1;j<=9;j++){
		setVisible('moreJobs-'+j,false);
	}
	for(var i=0;i<jobs.length;i++){
		if(jobs[i].minLevel > user.level){
			setVisible('job-'+jobs[i].jobId,false);
			setVisible('moreJobs-'+jobs[i].tier,true);
		}else{
			setVisible('job-'+jobs[i].jobId,true);
		}
	}
}


function setProgressBar(){
	var i=0, id=0, e=null,p=0,l=0;
	for(i=0;i<jobs.length;i++){
		setVisible('jobLevel-'+jobs[i].jobId+'-1',false);
		setVisible('jobLevel-'+jobs[i].jobId+'-2',false);
		setVisible('jobLevel-'+jobs[i].jobId+'-3',false);
		setVisible('jobProgress-'+jobs[i].jobId,true);
		setVisible('jobMastered-'+jobs[i].jobId,false);
	}
	
	for(i=0;i<progress.length;i++){
		id=progress[i].jobId;
		p=progress[i].progress;
		l=progress[i].masteryLevel;
		e=byId('progressBar-'+id);
		if(e!=null){
			e.width=1.2*p;
			if(p==100){
				e.src='images/blue.png';
			}else{
				e.src='images/green.png'
			}
		}
		for(var j=1;j<l;j++){
			setVisible('jobLevel-'+id+'-'+j,true);
		}
		for(var j=l;j<=3;j++){
			setVisible('jobLevel-'+id+'-'+j,false);
		}
		if(p==100 && l==3){
			setVisible('jobLevel-'+id+'-3',true);
			setVisible('jobProgress-'+id,false);
			setVisible('jobMastered-'+id,true);
		}else{
			setValue('progress-'+id, p);
			setValue('masteryLevel-'+id, l);
			setVisible('jobProgress-'+id,true);
			setVisible('jobMastered-'+id,false);
		}
	}
}

function setLatestProgressBar(id){
	var e=null,p=0,l=0;
	var k=null;
	for(var i=0;i<progress.length;i++){
		if(progress[i].jobId==id) k=progress[i];
	}
	if(k==null) return;
	p=k.progress;
	l=k.masteryLevel;
	e=byId('progressBar-done');
	if(e!=null){
		e.width=1.2*p;
		if(p==100){
			e.src='images/blue.png';
		}else{
			e.src='images/green.png'
		}
	}
	setValue('progress-done', p);
}



function setSelectedTier(id){
	for(var i=1;i<=9;i++){
		setVisible('tier-'+i,false);
		setClassName('tierLink-'+i,'tierCell');
	}
	setVisible('tier-'+id,true);
	setClassName('tierLink-'+id,'selectedTierCell');
}

function showTier(id){
	if(id<6){
		showTierPage(1,id);
	}else{
		showTierPage(2,id);
	}
}

function showTierPage(id,t){
	var level=user.level;
	var low,high;
	if(id==1){
		low=1;
		high=5;
	}else{
		low=6;
		high=9;
	}
	var r=null,l=null;
	for(var i=1;i<=9;i++){
		r=byId('tierLink-'+i);
		l=byId('tierLock-'+i);
		setVisible('tier-'+i,false);
		if(level>tierLevel[i]){
			if(i>=low && i<=high){
				setVisible('tierLink-'+i,true);
			}else{
				setVisible('tierLink-'+i,false);
			}
			setVisible('tierLock-'+i,false);
		}else{
			setVisible('tierLink-'+i,false);
			if(i>=low && i<=high){
				setVisible('tierLock-'+i,true);
			}else{
				setVisible('tierLock-'+i,false);
			}
		}
	}
	
	if(id==1){
		setVisible('tierLink-easy',false);
		if(level<=tierLevel[6]){
			setVisible('tierLock-hard',true);
			setVisible('tierLink-hard',false);
		}else{
			setVisible('tierLock-hard',false);
			setVisible('tierLink-hard',true);
		}
	}else{
		setVisible('tierLink-easy',true);
		setVisible('tierLink-hard',false);
		setVisible('tierLock-hard',false);
	}
	
	setSelectedTier(t);
}



/* Inventory */

function setInventory(inv){
	var e=null;
	for(var i=0;i<inv.length;i++){
		setValue('inventory-'+i, inv[i]);
		if(inv[i]==0){
			setVisible('item-'+i,false);
		}
	}
}

function showType(id){
	for(var i=0;i<=5;i++){
		setVisible('itemTable-'+i,false);
		setClassName('typeCell-'+i,'typeCell');
	}
	setVisible('itemTable-'+id,true);
	setClassName('typeCell-'+id,'selectedTypeCell');
}

function showItem(id){
	var r=byId('inventoryItem-'+id);
	if(r!=null){
		r.style.backgroundColor='#331100';
	}
}

/* Status Bar */

function setStatusBar(user){
	var nv=expRequirement(user.level-(-1));
	var cv=expRequirement(user.level);	
	setValue('energy',user.energy);
	setValue('maxEnergy',user.maxEnergy);
	setValue('stamina',user.stamina);
	setValue('maxStamina',user.maxStamina);
	setValue('cash',user.cash);
	setValue('health',user.health);
	setValue('maxHealth',user.maxHealth);
	setValue('experience', user.experience);
	setValue('level', user.level);
	setValue('tribeSize', user.tribeSize);
	if(user.favor>0) 
	{	
		setValue('favor', user.favor);
		setVisible('favorSpan',true);
	}else{
		setVisible('favorSpan',false);
	}
	if(user.skillPoint>0){
		setValue('skillPoint', ' (+'+user.skillPoint+')');
	}else {
		setValue('skillPoint','');
	}
	setValue('nextLevelRequirement', nv);
	userId=user.userId;
	var	per= 200 * ( user.experience - cv )   / (nv-cv) ;
	byId('filledBar').width=per;
	
	setVisible('tutorialStartLink',user.name=='Shaka Kanu');
}

/* Shelter */

function setShelter(){
	setValue('shelterStore', user.store);
	byId('depositAmount').value=user.cash;
	byId('withdrawAmount').value=user.store;
}

/* Friends */

function setFriends(){
	setValue('friendsCount', user.tribeSize);
}

function selectFollower(id){
	
	for(var i=0;i<selectedFollowers.length;i++){
		if(selectedFollowers[i]==id){
			setClassName('follower-'+id,'followerBox');
			selectedFollowers.splice(i,1);
			return;
		}
	}
	
	setClassName('follower-'+id,'selectedFollowerBox');
	selectedFollowers[selectedFollowers.length]=id;
}

/* Profile */

function setProfile(){
	setValue('profileMaxEnergy',user.maxEnergy);
	setValue('profileMaxHealth',user.maxHealth);
	setValue('profileMaxStamina',user.maxStamina);
	setValue('profileDefense',user.defense);
	setValue('profileAttack',user.attack);
	setValue('profileLevel',user.level);
	setValue('profileName',user.name);
	setValue('profileExperience', expRequirement(user.level-(-1))-user.experience);
	setValue('profileSkillPoint', user.skillPoint);
	
	if(user.skillPoint > 0){
		setVisible('skillPointMessage',true);
		setVisible('experienceMessage',false);
		for(var i=1;i<6;i++){
			setVisible('addSkillLink-'+i,true);
		}
	}else{
		setVisible('skillPointMessage',false);
		setVisible('experienceMessage',true);
		for(var i=1;i<6;i++){
			setVisible('addSkillLink-'+i,false);
		}
	}
	if(user.skillPoint > 1){
		setVisible('addSkillLink-3',true);
	}else{
		setVisible('addSkillLink-3',false);
	}
}

/* Fight */
function showFightTable(){
	if(user.stamina>0){
		setVisible('fightTable',true);
		setVisible('insufficientStamina',false);
	}else{
		setVisible('fightTable',false);
		setVisible('insufficientStamina',true);
	}
	
	setValue('fightAttack',user.attack);
	setValue('fightDefense', user.defense);
	setValue('fightTribeSize', user.tribeSize);
}

/* Heal */
function setHealPage(){
	if(user.health==user.maxHealth){
		setVisible('healButton',false);
		setVisible('healMessage',true);
	}else{
		setVisible('healButton',true);
		setVisible('healMessage',false);
	}
}


/* User Actions */
function doAccept(inviter){
	var params='userId='+userId+'&inviterId='+inviter;
	return post('accept.do', params);
}

function doTweet(){
	return post('tweet.do','userId='+userId);
}


function doCancel(){
	var params='userId='+userId;
	return post('cancel.do', params);
}

function doClaim(tier){
	var params='userId='+userId+'&tier='+tier;
	return post('claim.do',params);
}

function doAcceptGift(sender,receiver,item){
	var params='userId='+sender+'&targetId='+receiver+'&itemId='+item;
	return post('acceptGift.do', params);
}

function doWish(id){
	return post('tweet.do','userId='+userId+'&itemId='+id);
}

function doSetting(){
	var m=100;
	var f=100;
	var j=100;
	for(var i=0;i<5;i++){
		if(byId('fightTweet-'+i).checked){
			f=i*25;
		}
		if(byId('jobTweet-'+i).checked){
			j=i*25;
		}
	}
	var params='userId='+userId+'&message='+m+'&fight='+f+'&job='+j;
	return post('setting.do', params);
}

function doIgnore(inviter){
	var params='userId='+userId+'&inviterId='+inviter;
	return post('ignore.do', params);
}
function doFreeGift(){
	var e=null;
	var realSendList=[];
	var itemId=getValue('itemId');
	var params='userId='+userId+'&itemId='+itemId+'&send=';
	var cnt=0;
	for(var i=0;i<sendList.length;i++){
		e=byId('check-'+i);
		if(e!=null && e.checked==false){
			sendList[i]=null;
		}else{
			if(cnt>0){
				params+=',';
			}
			cnt++;
			params+=sendList[i];
			realSendList[realSendList.length]=sendList[i];
		}
	}
	
	return post('freeGift.do', params);
}
function doSend(){
	var e=null;
	var realSendList=[];
	var params='userId='+userId+'&send=';
	var cnt=0;
	for(var i=0;i<sendList.length;i++){
		e=byId('check-'+i);
		if(e!=null && e.checked==false){
			sendList[i]=null;
		}else{
			if(cnt>0){
				params+=',';
			}
			cnt++;
			params+=sendList[i];
			realSendList[realSendList.length]=sendList[i];
		}
	}
	
	return post('send.do', params);
}

function doInvite(){
	
	var params='userId='+userId+'&send=';
	var cnt=0;
	for(var i=0;i<selectedFollowers.length;i++){
		if(cnt>0){
			params+=',';
		}
		cnt++;
		params+=selectedFollowers[i];
	}
	
	return post('send.do', params);
}

function doGift(itemId){
	var e=null;
	var realSendList=[];
	var params='userId='+userId+'&itemId='+itemId+'&send=';
	var cnt=0;
	for(var i=0;i<sendList.length;i++){
		e=byId('check-'+i);
		if(e!=null && e.checked==false){
			sendList[i]=null;
		}else{
			if(cnt>0){
				params+=',';
			}
			cnt++;
			params+=sendList[i];
			realSendList[realSendList.length]=sendList[i];
		}
	}
	
	return post('gift.do', params);
}

function doAcquire(bizId){
	var params='userId='+userId+'&bizId='+bizId;
	return post('acquire.do',params);
}

function doRecord(targetId){
	var params='userId='+userId+'&invite='+targetId+'&ingame=1';
	return post('record.do',params);
}

function doSell(bizId){
	var params='userId='+userId+'&bizId='+bizId;
	return post('sell.do',params);
}

function doUpgrade(bizId, type){
	var params='userId='+userId+'&bizId='+bizId+'&type='+type;
	return post('upgrade.do', params);
}

function doJob(id){
	var params='jobId='+id+'&userId='+userId;
	return post('jobs.do',params);
}
function doRemove(target){
	var params='userId='+userId+'&targetId='+target;
	return post('remove.do', params);
}

function doPray(action){
	var params='userId='+userId+'&action='+action;
	return post('pray.do',params);
}

function doDeposit(){
	var amt=getValue('depositAmount');
	var params='userId='+userId+'&action=1&amount='+amt;
	return post('shelter.do',params);
}
function doWithdraw(){
	var amt=getValue('withdrawAmount');
	var params='userId='+userId+'&action=2&amount='+amt;
	return post('shelter.do',params);
}

function doHeal(){
	var params='userId='+userId;
	return post('heal.do',params);
}

function doFight(target){
	var params='userId='+userId+'&targetId='+target;
	return post('fight.do',params);
}

function doAddSkill(type){
	var params='type='+type+'&userId='+userId;
	return post('profile.do',params);
}

function doChangeName(name){
	var params='name='+name+'&userId='+userId;
	return post('changeName.do',params);
}

function doInventory(id, quantity, action){
	var params='itemId='+id+'&userId='+userId+'&action='+action+'&quantity='+quantity;
	return post('inventory.do', params);
}

function favorBuy(id,q){
	doInventory(id,q,1);
}

function buy(id,e){
	var quantity=e.options[e.selectedIndex].value;

	doInventory(id,quantity,1);
}

function sell(id,e){
	var quantity=e.options[e.selectedIndex].value;

	doInventory(id,quantity,2);
}


/* Common */
function expRequirement(level){
	return (level*level)*6;
}

function runScript(node){
	var ob = document.getElementById("clientScript");
	if(ob!=null && ob.innerHTML!=null){
		eval(ob.innerHTML);
		//remove tag afterwards
		ob.parentNode.removeChild(ob);
	}
}


function showLoading(){
	setVisible('loading',true);
}

function hideLoading(){
	setVisible('loading',false);
}


function post(target,params){
	var xmlHttp=createRequest();
	if(xmlHttp==null) return false;
	
	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4){
			setValue('response',xmlHttp.responseText);
			runScript(byId('response'));
			hideLoading();
		}
	}
	xmlHttp.open('POST',realBase+target,true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", params.length);
	xmlHttp.setRequestHeader("Connection", "close");

	xmlHttp.send(params);
	showLoading();
	return false;
}


function loadOverlay(target){
	loadOverlayParam(target, ('t='+(new Date()).getTime()));
}

function loadOverlayParam(target,param){
	var xmlHttp=createRequest();
	if(xmlHttp==null) return false;
	xmlHttp.onreadystatechange=function()
	{
		if(xmlHttp.readyState==4){
			setValue('response','');
			setValue('content',xmlHttp.responseText);
			runScript(byId('content'));
			hideLoading();
		}
	}
	xmlHttp.open('GET', realBase+target+'?userId='+userId+'&'+param, true);
	xmlHttp.send(null);
	showLoading();
	return false;
}

function countdownTimer(timeLeft, current, maxValue, interval, counterSpanId, valueSpanId, counterDivId, id, callback,params) {
	if(timerId[counterDivId]!=id){
		return;
	}
	if(current==maxValue){
		setVisible(counterDivId,false);
		return;
	}else{
		setVisible(counterDivId,true);
	}
	
	var timeText='';
	timeLeft--;
	if(timeLeft<0){
		setValue(valueSpanId,++current);
		if(current==maxValue){
			setVisible(counterDivId,false);
			return;
		}else{
			timeLeft=interval;
			if(callback!=null) {
				if(params!=null){
					callback(params);
				}else{
					callback();
				}
			}
		}
	}

	if (timeLeft >= 86400) {
		timeText = Math.floor(timeLeft/86400)+":";
		var hours = Math.floor(timeLeft/3600)%24;
		if (10 > hours) {
			timeText += "0"+hours+":";
		} else {
			timeText += hours+":";
		}
	} else {
		timeText = Math.floor(timeLeft/3600)+":";
	}

	if (timeLeft >= 3600) {
		var minutes = Math.floor(timeLeft/60)%60;
		if (10 > minutes) {
			timeText += "0"+minutes+":";
		} else {
			timeText += minutes+":";
		}
	} else {
		timeText = Math.floor(timeLeft/60)+":";
	}

	var seconds = timeLeft%60;
	if (10 > seconds) {
		timeText += "0"+seconds;
	} else {
		timeText += seconds;
	}
	var elem = byId(counterSpanId);
	if (elem) {
		setValue(counterSpanId,timeText);
		setTimeout(function() {countdownTimer(timeLeft, current, maxValue, interval, counterSpanId, valueSpanId, counterDivId, id);}, 1000);
	}
}

function createRequest()
{
	var xmlhttp=null;
	if (window.XMLHttpRequest)
	{
		xmlhttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	else
	{
		alert("Your browser does not support XMLHTTP!");
	}
	
	return xmlhttp; 
}

function byId(id){
	return document.getElementById(id);
}

function setValue(id,v){
	var f=byId(id);
	if(f!=null){
		f.innerHTML=v;
	}
}

function getValue(id){
	var f=byId(id);
	if(f!=null) return f.value;
	else return null;
}

function setVisible(id,v){
	var f=byId(id);
	if(f!=null){
		if(v){
			f.style.display='';
		}else{
			f.style.display='none';
		}
	}
}

function setWidth(id,w){
	var f=byId(id);
	if(f!=null){
		f.style.width=w+'px';
	}
}

function setClassName(id, c){
	var f=byId(id);
	if(f!=null){
		f.className=c;
	}
}

function removeRow(tableid, rowid){
	var table=byId(tableid);
	var row=byId(rowid);
	if(table!=null && row!=null){
		for(var i=0;i<table.rows.length;i++){
			if(table.rows[i]==row){
				table.deleteRow(i);
				break;
			}
		}
	}
}


function tickTock(){
	setTimeout(function (){clock++;tickTock();},1000);
}
