var countDownIntervalHandler;       //handler generated by setInterval function, we will need this, when all auctions ends
var updateUserIntervalHandler;
var auctions=new Array();
var runningAuctions=new Array();
var pausedAuctions=new Array();
var auctionsForUpdate=new Array();
var shopClosed=false;
$.ajaxSetup({ cache: false });

var ROOT_PATH='http://www.nabit.cz/';
var SERVER_NAME;
if (SERVER_NAME=top.location.host){
	switch (SERVER_NAME){
		case 'www.nabit.cz':
		case 'mall.nabit.cz':
		case 'nabit.cz':
			ROOT_PATH='http://'+SERVER_NAME+'/';
			break;

		case 'localhost':
			ROOT_PATH='http://'+SERVER_NAME+'/lorenzo/doc/nabit/';
			break;
		default:
			ROOT_PATH='http://'+SERVER_NAME+'/nabit/';
			break;
	}
}


var user=false;
var auctionDetailID=0;

function registerAuction(id, clicks, moneyPerClick, startingPrice, endTimeout, pauseTimeout, status, originalPrice){
	//var transformedTimeStamp=transformTimeStamp(endTimeout);
	//var hours=addLeadingZeros(transformedTimeStamp.shift(),2);
	//var minutes=addLeadingZeros(transformedTimeStamp.shift(),2);
	//var seconds=addLeadingZeros(transformedTimeStamp.shift(),2);
  
	auctions[id]={
		'id':id,
		'clicks':parseInt(clicks),
		'moneyPerClick':parseInt(moneyPerClick),
		'startingPrice':parseInt(startingPrice),
		'endTimeout':endTimeout,
		'pauseTimeout':parseInt(pauseTimeout),
		'originalPrice':parseInt(originalPrice),
		'status':status,
		'oldStatus':''
	};
	
	switch (status){
		case 'closed':
			closeAuction(id);
			break;
		case 'paused':
			pauseAuction(id);
			break;
		case 'running':
		default :
			runAuction(id);
			break;
	}
}

function setAuction(id, clicks, endTimeout, status, lastClick, pauseTimeout){
	auctions[id].endTimeout = endTimeout;
	if (auctions[id].clicks<clicks || auctions[id].status!=status) {
		auctions[id].clicks=parseInt(clicks);
		auctions[id].oldStatus=auctions[id].status;
		auctions[id].status=status;
		auctions[id].lastClick=lastClick;
		auctions[id].pauseTimeout=pauseTimeout;
		switch (status){
			case 'closed':
				closeAuction(id);
				break;
			case 'paused':
				pauseAuction(id);
				break;
			case 'running':
			default :
				runAuction(id);
				break;
		}
		
		updateAuction(id);
	}
}

function registerUser(tmp) {
	user = tmp;
}

function updateUser(){
	if (user){  
		$.getJSON(
			ROOT_PATH+'ajax.php?t=user',
			function(data, garbage) {
				if(data.success == 1) {
					user=data;
				}                      
		});
	}
	
	if (user){
		var clicks = $('span#clicksLeft');
			clicks.text(user.clicks);
	}
}


function updateAuction(id){
	auctionsForUpdate[id]=id;
}

function updateAuctions(){
	var updateUserTmp=false;
	var tmp = new Array();
	$.each(auctionsForUpdate, function(id, garbage){
		tmp[id]=garbage;
	});
	auctionsForUpdate = new Array();
	$.each(tmp, function(id, garbage){
		
		if(garbage && auctions[id]){
			updateUserTmp=true;
			var auction = $('.auction'+id);
			var actualPrice = (auctions[id].startingPrice + auctions[id].clicks*auctions[id].moneyPerClick)/100;
			
			if(auction.length > 0) {
				actual_price = auction.find('.actual_price');
				actual_price.animate({ color: '#f00'}, 500).animate({ color: '#000'}, 500);
        
				actual_price_value = actual_price.find('.value');
				actual_price_value.text(actualPrice.toFixed(2));
				last_click = auction.find('div.last_click span.value');
				last_click.text(auctions[id].lastClick);
			}
			if(id == auctionDetailID) {
				updateDetail(id);
			}
		}
	});
	
	if (updateUserTmp)
		updateUser();
}

function closeAuction(id){
	var auction = $('.auction'+id);
	if(auctionDetailID == id){
		var auctionDetail=$('#auctionDetailBox'+id);
		var auctionDetailBox=$('#auctionDetail'+id);
	}
	if(auction.length > 0) {
		auction.removeClass('paused');
		auction.removeClass('platinum');
		auction.removeClass('red');
		auction.addClass('closed');
		time_left = auction.find('span.time_left span.value');
		time_left.text('Aukce uzavřena');
		auction.find('a.bidding_button').replaceWith('<span class="closed_button">Ukončeno</span>');
		auction.find('a.topping_button').replaceWith('<span class="closed_button">Ukončeno</span>');
		auction.find('a.registering_button').replaceWith('<span class="closed_button">Ukončeno</span>');
		//bidding_button.css('cursor', 'auto');
	}
	
	if(auctionDetailBox) {
		auctionDetail.removeClass('paused');
		auctionDetail.removeClass('platinum');
		auctionDetail.removeClass('red');
		auctionDetail.addClass('closed');
		auctionDetailBox.find('span.time_left span.value').text('Aukce uzavřena');
		auctionDetailBox.find('a.bidding_button').replaceWith('<span class="closed_button">Ukončeno</span>');
		auctionDetailBox.find('a.topping_button').replaceWith('<span class="closed_button">Ukončeno</span>');
		auctionDetailBox.find('a.registering_button').replaceWith('<span class="closed_button">Ukončeno</span>');
		auctionDetailBox.find('a#add_robot').remove();
		//$('#auctionDetail'+id+' span.bidding_button').css('cursor', 'auto');
	}

	if (runningAuctions[id]){
		delete runningAuctions[id];
	}
	if (pausedAuctions[id])
		delete pausedAuctions[id];
}

function pauseAuction(id){
	if (runningAuctions[id]){
		delete runningAuctions[id];
	}
	
	pausedAuctions[id]=id;
	
	$('.auction'+id+' span.time_left span.value').text('Pauza');
	$('#miniAuction'+id+' span.time_left span.value').text('Pauza');
	$('.auction'+id).addClass('paused');
	if(auctionDetailID == id) {
		$('#auctionDetail'+id).addClass('paused');
		$('#auctionDetail'+id+' span.time_left span.value').text('Pauza');
	}
	
	if (auctions[id].pauseTimeout==0)
		auctions[id].pauseTimeout=1;
	
	setTimeout('unpauseAuction('+id+')',auctions[id].pauseTimeout*1000);
	closeShop();
}

function unpauseAuction(id){
	//auctions[id].status='';
	runAuction(id);
	openShop();
}

function runAuction(id){
	runningAuctions[id]=id;
	
  if (pausedAuctions[id]){
	  delete pausedAuctions[id];
  }
}

function countDown(){
	var allAuctionsStoped=true;
	var runningAuctionsString='';
	var tmp= new Array();
	for (var i=0;i<runningAuctions.length;i++){
		if (runningAuctions[i]){
			runningAuctionsString+='|'+runningAuctions[i];
			tmp[i]=i;
		}
	}
	
	//alert(runningAuctionsString);
	if (runningAuctionsString!=''){
		x=Math.floor(Math.random()*10);
		$.getJSON(
			//ROOT_PATH+'ajax.php?i='+runningAuctionsString+'&t=refresh',
			ROOT_PATH+'auctions'+x+'.json',
			function(auctions) {
				
				$.each(auctions, function(auctionId, auction){
					//setAuction(auction.i, auction.c, auction.e, auction.s, auction.l, auction.p);
					if (tmp[auctionId]){
						delete tmp[auctionId];
						setAuction(auction.i, auction.c, auction.e, auction.s, auction.l, auction.p);
					}
				});
				$.each(tmp, function(id, garbage){
					if (garbage){
						setAuction(id,0,'','closed','',0);
					}
				});
				updateAuctions();
			});
	}
	
	$.each(runningAuctions, function(auctionId, garbage){
		if (garbage && auctions[auctionId] && auctions[auctionId].endTimeout!='00:00:00'){
			allAuctionsStoped=false;
			if (auctions[auctionId].oldStatus=='paused'){
				$('.auction'+auctionId).removeClass('paused');
				$('.auction'+auctionId+' span.time_left span.value').text('');
				if(auctionDetailID == auctionId) {
					$('#auctionDetail'+auctionId).removeClass('paused');
					$('#auctionDetail'+auctionId+' span.time_left span.value').text('');
				}
			}
			if (auctions[auctionId].status!=='paused'){
				updateTime(auctionId, auctions[auctionId].endTimeout);
			}
		}
	});
}

function updateTime(auctionId, endTimeout) {
	var auction = $('.auction'+auctionId);
	
	if(auction.length > 0) {
		time = auction.find('span.time_left');
		time.find('span.value').text(endTimeout);
		
		if (Number(auctions[auctionId].endTimeout.replace(/:/g, "")) < 30) {
			time.addClass('ending');
		} else {
			time.removeClass('ending');
		}
	}
  
	
	//pokud existuje detail tak je potreba prenastavit i detail
	if(auctionId == auctionDetailID) {
		$('#auctionDetail'+auctionId+' span.time_left span.value').text(endTimeout);
		if (Number(auctions[auctionId].endTimeout.replace(/:/g, "")) < 30)
			$('#auctionDetail'+auctionId+' span.time_left').addClass('ending');
		else
			$('#auctionDetail'+auctionId+' span.time_left').removeClass('ending');
	}
}

function updateBidTable(auctionId) {
	$.getJSON(
		ROOT_PATH+'ajax.php?i='+auctionId+'&t=bidtable',
		function(data) {
			var bidding_price = (auctions[auctionId].startingPrice + auctions[auctionId].clicks*auctions[auctionId].moneyPerClick)/100;
			var result_exist = false;
			$.each(data, function(id, bid){
				result_exist = true;
				$('#last_bid_'+id).removeClass('display_none');
				$('#last_bid_'+id+' td.username').text(bid.user);
				$('#last_bid_'+id+' td.price span.value').text(bidding_price.toFixed(2));
				$('#last_bid_'+id+' td.datetime').text(bid.date+'.'+addLeadingZeros(bid.date_micro,2));
				if(bid.is_bot == 1)
					$('#last_bid_'+id+' td.type').text('robot');
				else
					$('#last_bid_'+id+' td.type').text('uživatel');
				
				bidding_price = bidding_price - (auctions[auctionId].moneyPerClick/100);
			});
			if(result_exist)
				$('p.bid_table_no_results').addClass('display_none');
		});
}

function updateDetail(id) {
	$('#auctionDetail'+id+' span.actual_price').animate({ color: 'red'}, 500).animate({ color: '#000001'}, 500);
	
	var actualPrice=(auctions[id].startingPrice + auctions[id].clicks*auctions[id].moneyPerClick)/100;
	$('#auctionDetail'+id+' span.actual_price span.value').text(actualPrice.toFixed(2));
	$('#auctionDetail'+id+' div.last_click span.value').text(auctions[id].lastClick);
	
	$('#buying_price').text(actualPrice.toFixed(2));
	
	var tmp = ((auctions[id].originalPrice)/100).toFixed(2);
	var winner_profit = tmp - parseFloat(actualPrice);
	$('#winner_profit').text(winner_profit.toFixed(2));
	
	updateBidTable(id);
}

function bidOnAuction(id) {
	$.getJSON(
		ROOT_PATH+'ajax.php?i='+id+'&t=bid',
		function(data, garbage) {
			if(data.success == 1 && user) {
				auctions[id].clicks++;
				auctions[id].endTimeout=data.end_timeout;
				auctions[id].lastClick=user.name;
				updateAuction(id);
				updateUser();
				updateAuctions();
			} else {
				my_alert(data.message);
			}
		});
	return false;
}

function topAuction(id) {
	$.getJSON(
		ROOT_PATH+'ajax.php?i='+id+'&t=top',
		function(data, garbage) {
			if(data.success == 1) {
				$('div.auction'+id+' div.priority_value span.value').text(data.priority);
				$('div#auctionDetail'+id+' div.priority_value span.value').text(data.priority);
				
				location.reload(true);
			} else {
				my_alert(data.message);
			}                      
		});
			
	return false;
}

function registerToAuction(id, status) {
	$.getJSON(
		ROOT_PATH+'ajax.php?i='+id+'&t=register',
		function(data, garbage) {
			if(data.success == 1) {
				var setRobotButton=$('#auctionDetail'+id+' a.add_robot_button');
				if (setRobotButton.length)
					setRobotButton.css('display','block');
				var className='bidding_button'
				var functionName='return bidOnAuction('+id+');';
				var text='Přihodit';
				if (status=='waiting'){
					className='topping_button'
					if (!user || !user.toppingAgreement)
						functionName='return my_confirm('+id+');';
					else
						functionName='return topAuction('+id+');';
					text='Topuj';
				}
				var button=$('.auction'+id+' a.registering_button');
				button.removeClass('registering_button').addClass(className).text(text).removeAttr('onclick');
				var tmp=button.get(0);
				if (tmp)
					tmp.onclick = new Function(functionName);
				if(auctionDetailID == id) {
					var detailButton=$('#auctionDetail'+id+' a.registering_button');
					detailButton.removeClass('registering_button').addClass(className).text(text).removeAttr('onclick');
					var tmp=detailButton.get(0);
					tmp.onclick = new Function(functionName);
					if (status !='waiting')
						detailButton.css('display','block');
				}
				updateUser();
			}
			my_alert(data.message);    
		});
		
	return false;
}

function setRobot(id) {
	var error = '';
	var params= 'i='+id+'|';
	if ($('#set_robot_timeout').length){
		var timeout=$('#set_robot_timeout').val();
		if(isInt(timeout))
			params=params+'t'+timeout+'|';
	}
	if($('#set_robot_min').length && $('#set_robot_max').length) {
		var min = $('#set_robot_min').val();
		var max = $('#set_robot_max').val();
		
		if(min == '') {
			error += 'Minimalní cena musí být vyplněna\n';
		} else if(!isDouble(min)) {
			error += 'Minimalní cena musí být číslo\n';
		}
		if(max == '') {
			error += 'Maximalni cena musí být vyplněna\n';
		} else if(!isDouble(max)) {
			error += 'Maximalní cena musí být číslo\n';
		}
		
		if(min*1 > max*1) {
			error += 'Maximální cena musí být vyšší nebo stejná než minimální';
		}
		
		if(error != '') {
			my_alert(error);
			return false;
		}
		params=params+min+'|'+max;
	} else if($('#set_robot_max_clicks').length) {
		var max_clicks = $('#set_robot_max_clicks').val();
		
		if(max_clicks == '')
			error += 'Maximální počet kliků musí být vyplněn\n';
		else if(!isInt(max_clicks)) {
			error += 'Maximální počet kliků musí být celé číslo\n';
		}
		
		params=params+max_clicks;
	}
	$.getJSON(
		ROOT_PATH+'ajax.php?'+params+'&t=setRobot',
		function(data, garbage) {
			my_alert(data.message);
			if(data.success == 1) {
				displayBox('set_robot');
				$('#add_robot').remove();
			}  
		});
		
	return false;
}

function transformTimeStamp(timeStamp){
	var hours=0;
	var minutes=0;
	var seconds=0;
	
	if (timeStamp>0){
		seconds=timeStamp%60;
		minutes=Math.floor(timeStamp/60);
		hours=Math.floor(minutes/60);
		minutes=minutes%60;
	}
	
	return new Array(hours,minutes,seconds);
}

function addLeadingZeros(number,max){
	number=String(number);
	while (number.length<max){
		number='0'+number;
	}
	return number;
}

function registerDetail(id) {
	auctionDetailID = id;
}

function displayBox(id) {
	var display = $('#'+id).css('display');
	if(display == 'none')
		$('#'+id).css('display', 'block');
	else
		$('#'+id).css('display', 'none');
	
	return true;
}

function my_alert(message) {
	$("#dialog").dialog('destroy');
	$(function() {
		$('#dialog').dialog({
			bgiframe: true,
			modal: true,
			buttons: {'OK': function() {$(this).dialog('close');}},
			autoOpen: false
		});
	});
	
	text = '<p>'+message+'</p>';
	$('#dialog').html(text);
	$("#dialog").dialog('open');
	return false;
}

function my_confirm(id) {
	$("#dialog").dialog('destroy');
	$(function() {
		$('#dialog').dialog({
			bgiframe: true,
			modal: true,
			buttons: {'Ano': function() { setTopingAgreement(); topAuction(id); $(this).dialog('close'); }, 'Ne': function() { $(this).dialog('close');}},
			autoOpen: false
		});
	});
	
	text = '<p>Topování vás bude stát 1 kredit</p><input type="checkbox" name="toping_agreement" id="toping_agreement" /> Zapamatovat';
	$('#dialog').html(text);
	$("#dialog").dialog('open');
	return false;
}

function setTopingAgreement() {
	if($('#toping_agreement').attr('checked')) {
		$.getJSON(
			ROOT_PATH+'ajax.php?t=setTopingAgreement&i=1',
			function(data, garbage) {
				if(data.success != 1) {
					my_alert(data.message);
					user.toppingAgreement=true;
				}
			}
		);
	}	
}

function changePicture(location, path) {
	$('#'+location).attr('src',path);
	return true;
}

function isDouble(s) {
	return (s.toString().search(/^[0-9]+(\,[0-9]+)?$/) == 0);
}

function isInt(s) {
	return (s.toString().search(/^[0-9]+$/) == 0);
}

$(document).ready(function(){
  countDownIntervalHandler=setInterval('countDown()',1000);
  updateUserIntervalHandler=setInterval('updateUser()',5000);
});

function closeShop(){
	if (!shopClosed){
		$('#closed').animate({'top':'0'}, 500);
		shopClosed=true;
	}
}

function openShop(){
	if (shopClosed){
		$('#closed').animate({'top':'-185'}, 500);
		shopClosed=false;
	}
}

