function Offertable() 
{
	
	this.RenderAllBettypes = false;
	this.RenderBettypeId = -1;
	this.RenderTo = false;
	
	this.counter = 0;
	this.counterContest = 0;
	this.counterBettype = 0;
	
	this.Stopped = false;
	
	this.currentTime;
	this.data = [];
	this.contestsBufferDiv;
	
	this.addBet = offertable_addbet;
	
	this.Clear = offertable_clear;
	this.ContestTitle = offertable_contest_title;
	
	this.ImportJSON = offertable_import_json;
	
	this.lastContestDiv;
	this.lastBettypesDiv;
	this.lastBettypeDiv;
	
	this.RenderStatus = 0;
	
	this.Render = offertable_render;
	this.RenderBettypeSelector = offertable_render_bettype_selector;
	this.RenderBettype = offertable_render_bettype
	this.RenderBettypes = offertable_render_bettypes;
	this.RenderContest = offertable_render_contest;
	this.RenderBets = offertable_render_bets;
	this.RenderSpacer = offertable_render_spacer;
	this.RenderInit = offertable_render_init;
	this.RenderFinalize = offertable_render_finalize;
	
	this.RenderLoader = offertable_renderloader;
	this.RemoveLoader = offertable_removeloader;
	
	this.special; // internal - testing
	
}

function offertable_clear() {
	
	if (!this.RenderTo) {

		document.getElementById('offertable').innerHTML = '';
		this.counter = 0;
		this.contestsDivCounter = 0;
		
	} else {
		
		this.RenderTo.innerHTML = '';
		
	}
		
}

function offertable_contest_title(data) {
	
	result = (data['sport'] == data['contest'])?data['sport']:data['sport'] + ' - ' + data['contest'];
	//result += (data['category'] == data['contest'])?'':' - ' + data['contest'];
	//result = data['contest'];
	
	return result;
	
}

offertable_addbet = function (id, type) {
	if (id > 0) {
		betslip.addBet(id, type);
	}
}

function offertable_render_bets() {
	
	i = this.counterBettype;
	
	var data = this.data['contests'][this.counterContest];
	
	results = data['bettypes'][i]['results'];
	sport_id = data['contest']['sport_id'];
	contest_id = data['contest']['contest_id'];
	bettype_id = data['bettypes'][i]['id'];
	bettype = data['bettypes'][i]['name'];
	
	data = this.data['contests'][this.counterContest]['bettypes'][i]['items'];
	
	for(var i=0;i<data.length;i++) {
		
		if (Date.parse(data[i]['datejs']) > this.currentTime) {
		
			var bet_rates = document.createElement('tr');
			bet_rates.className='offertable_bet';
			bet_rates.id = data[i]['id'];
			bet_rates.data = data[i];
			bet_rates.onmouseover = function()   {
			 										this.className='offertable_bet hover';
												};
			bet_rates.onmouseout = function()   {
			 										this.className='offertable_bet';
												};
												
			bet_rate_left = document.createElement('td');
			bet_rate_left.className='offertable_bet_left';
			
			bet_rate = document.createElement('span');
			bet_rate.className='offertable_bet_code';
			bet_rate.innerHTML=data[i]['code'];
			bet_rate_left.appendChild(bet_rate);
			
			bet_rate = document.createElement('span');
			bet_rate.className='offertable_bet_start';
			bet_rate.innerHTML=data[i]['start'];
			bet_rate_left.appendChild(bet_rate);
			
			bet_rate = document.createElement('span');
			bet_rate.className='offertable_bet_competitors';
			
			bet_rate_competitors = document.createElement('span');
			bet_rate_competitors.className='offertable_bet_competitors';
			bet_rate_competitors.innerHTML=data[i]['competitors'];
			if ( (typeof(data[i]['special']) !== 'undefined') && (data[i]['special'] != '') && (data[i]['special'] != 'undefined') ) {
				bet_rate_competitors.innerHTML+=' [' + data[i]['special'] + ']';
			}
			if ( (typeof(data[i]['comment']) !== 'undefined') && (data[i]['comment'] != '') && (data[i]['comment'] != 'undefined') ) {
				bet_rate_comment = document.createElement('span');
				bet_rate_comment.className='offertable_bet_comment';
				bet_rate_comment.innerHTML=data[i]['comment'];
				bet_rate_competitors.appendChild(bet_rate_comment);
			}
			bet_rate.appendChild(bet_rate_competitors);
			
			bet_rate_left.appendChild(bet_rate);
			
			bet_rates.appendChild(bet_rate_left);
												
			
			for(var j=0;j<results.length;j++) {
				
				if (data[i]['rates'][j] > 0) {
					
					bet_rate = document.createElement('td');
					
					var extra_sufix = (contest_id == 999999)?'_extra':'';
					
					bet_rate.id = data[i]['id'] + '_' + results[j]['type'] + extra_sufix;
					rate = (parseFloat(data[i]['rates'][j]));
					precision = (rate>=100)?1:2;
					bet_rate.innerHTML= rate.toFixed(precision);
					bet_rate.rate = rate;
					if (data[i]['extra'] == 1) {
						bet_rate.sport_id = data[i]['sport_id'];
						bet_rate.contest_id = data[i]['contest_id'];
					} else {
						bet_rate.sport_id = sport_id;
						bet_rate.contest_id = contest_id;
					}
					bet_rate.code = data[i]['code'];
					bet_rate.event_id = data[i]['event_id'];
					bet_rate.min_bet = data[i]['min_bet'];
					bet_rate.max_bet = data[i]['max_bet'];
					bet_rate.bettype_id = bettype_id;
					bet_rate.bettype = bettype;			
					bet_rate.className='offertable_bet_rate';
					bet_rate.onmouseover = function() { 
															if (this.className=='offertable_bet_rate') this.className='offertable_bet_rate mo';
															if (this.className=='offertable_bet_rate bet_selected') this.className='offertable_bet_rate bet_remove';
													};
					bet_rate.onmouseout = function() { 
															if (this.className=='offertable_bet_rate mo') this.className='offertable_bet_rate';
															if (this.className=='offertable_bet_rate bet_remove') this.className='offertable_bet_rate bet_selected'; 
													};
					bet_rate.onclick = function() {
															params = this.id.split('_');
															if ((this.className=='offertable_bet_rate') || (this.className=='offertable_bet_rate mo')) {
																betslip.addBet(params[0], params[1], this.rate, this.sport_id, this.contest_id, this.event_id, this.bettype_id, this.bettype, this.min_bet, this.max_bet);
																return;
															}
															if ((this.className=='offertable_bet_rate bet_selected') || (this.className=='offertable_bet_rate bet_remove')) {
																betslip.removeBet(params[0], params[1]);
																return;
															}
													};
					bet_rates.appendChild(bet_rate);
					
				} else {
					
					bet_rate = document.createElement('td');
					bet_rate.className='offertable_bet_rate_none';
					bet_rates.appendChild(bet_rate);
					
				}
				
			}

			this.lastBettypeDiv.getElementsByTagName('tbody')[0].appendChild(bet_rates);
		
		}
		
	}
	
	this.RenderStatus = 3;
	
	this.counterBettype++;
	
}

function offertable_render_bettype() {
	
	var data = this.data['contests'][this.counterContest];
	i = this.counterBettype;
	
	if (
			(i > (data['bettypes'].length - 1)) ||
			((this.RenderBettypeId == -1) && (!this.RenderAllBettypes) && (i > 0))
		) 
	{
		
		this.lastContestDiv.appendChild(this.lastBettypesDiv);
		this.counterBettype = 0;
		this.RenderStatus = 0;
		//this.RenderFinalize();
		this.counterContest++;
		
		return;
		
	}
	
	if (this.RenderBettypeId > -1) {
		if (this.RenderBettypeId != data['bettypes'][i]['id']) { 
			this.counterBettype++;
			return;
		}
	}
	
	var bettype = document.createElement('div');
	bettype.className='offertable_bettype';
	bettype.id='ots_' + data['contest']['day'] + '_' + data['contest']['sport_id'] + '_' + data['contest']['contest_id'] + '_' + data['bettypes'][i]['id'];
	
	var bettype_table = document.createElement('table');
	bettype_table.className='offertable_bettype';
	
	var bettype_tbody = document.createElement('tbody');
	bettype_tbody.className='offertable_bettype';
	
	//if (i>0) bettype.style.display = 'none';
	
	var bettype_results = document.createElement('tr');
	bettype_results.className='offertable_bettype_results';
	
	bettype_result = document.createElement('td');
	bettype_result.className='offertable_bettype_result_rest';
	
	bettype_result_name = document.createElement('span');
	bettype_result_name.innerHTML = data['bettypes'][i]['name_long'];
	bettype_result.appendChild(bettype_result_name);
	
	if (typeof(data['bettypes'][i]['comment']) !== 'undefined') {
	
		bettype_result_comment = document.createElement('span');
		bettype_result_comment.className='offertable_bettype_result_rest_comment'
		bettype_result_comment.innerHTML = data['bettypes'][i]['comment'];
		bettype_result.appendChild(bettype_result_comment);
		
	}
	
	bettype_results.appendChild(bettype_result);
	
	for(var j=0;j<data['bettypes'][i]['results'].length;j++) {
		
		bettype_result = document.createElement('td');
		bettype_result.className='offertable_bettype_result';
		bettype_result.innerHTML=data['bettypes'][i]['results'][j]['type'];
		bettype_results.appendChild(bettype_result);
		
	}
	
	bettype_tbody.appendChild(bettype_results);
	
	bettype_table.appendChild(bettype_tbody);
	
	bettype.appendChild(bettype_table);
	
	this.lastBettypeDiv = bettype;
	
	if (!this.RenderTo) {
		this.lastBettypesDiv.appendChild(this.lastBettypeDiv);
	} else {
		this.RenderTo.appendChild(this.lastBettypeDiv);
	}

	this.RenderStatus = 4;
	
}

function offertable_render_bettypes() {
	
	var data = this.data['contests'][this.counterContest];
	
	var bettypes = document.createElement('div');
	bettypes.className='offertable_bettypes';
	bettypes.id='ot_bt_' + data['contest']['day'] + '_' + data['contest']['sport_id'] + '_' + data['contest']['contest_id'];
	
	this.lastBettypesDiv = bettypes;
	
	this.RenderStatus = 3;

}

function offertable_render_bettype_selector() {
	
	var data = this.data['contests'][this.counterContest]['bettypes'];
	contest = this.data['contests'][this.counterContest]['contest'];
	
	var bettypeselector = document.createElement('div');
	bettypeselector.className='offertable_bettypeselector';
	
	if ((contest['sport_id'] != 1000) && (data.length > 1)) {
	
		var bettypeselector_inside = document.createElement('div');
		bettypeselector_inside.className='offertable_bettypeselector_inside';
	
		for(i=0;i<Math.ceil(data.length/3);i++) {
			
			for (j=0;j<3;j++) {
				var bettypebox = document.createElement('div');
				bettypebox.className='offertable_bettypebox';
	
				if ((i*3)+j < data.length) {
					var bettype = document.createElement('a');
					bettype.className='offertable_bettype';
					bettype.href='javascript:sspec(' + contest['day'] + ',' + contest['sport_id'] + ',' + contest['contest_id'] + ',' + data[(i*3)+j]['id'] + ',' + contest['sport_no'] + ',' + contest['contest_no'] + ');';
					bettype.innerHTML=data[(i*3)+j]['name_long'];
			
					bettypebox.appendChild(bettype);
					
					bettypeselector_inside.appendChild(bettypebox);
					
				}
			
				
			}
			
		}
		
		if (data.length > 1) {
			
			var bettypebox = document.createElement('div');
			bettypebox.className='offertable_bettypebox';
		
			var bettype = document.createElement('a');
			bettype.className='offertable_bettype';
			bettype.href='javascript:sspecall(' + contest['day'] + ',' + contest['sport_id'] + ',' + contest['contest_id'] + ',' + contest['sport_no'] + ',' + contest['contest_no'] + ');';
			bettype.innerHTML=offertable_bettypes_all;
			
			bettypebox.appendChild(bettype);
			bettypeselector_inside.appendChild(bettypebox);
			
		}

		bettypeselector.appendChild(bettypeselector_inside);
		
		this.lastContestDiv.appendChild(bettypeselector);
	
	}
	
	this.RenderStatus = 2;

}

function offertable_render_contest() {
	
	if (this.counterContest > (this.data['contests'].length - 1)) {
		this.RenderStatus = -1;
		return;
	}
	
	var data = this.data['contests'][this.counterContest];
	
	offertable.RemoveLoader();
	
	if (Date.parse(data['contest']['startjs']) > this.currentTime) {
	
		var contest_fragment = document.createDocumentFragment();
		
		var contest = document.createElement('div');
		contest.className='offertable_contest'
		contest.id = 'ot_' + data['contest']['day'] + '_' + data['contest']['sport_id'] + '_' + data['contest']['contest_id'];
		
		var contest_title_wrapper = document.createElement('div');
		contest_title_wrapper.className='offertable_contest_title';
		
		var contest_title = document.createElement('span');
		contest_title.className='offertable_contest_title';
		//contest_title.innerHTML = this.ContestTitle(data['contest']);
		contest_title.innerHTML = (data['contest']['sport'] == data['contest']['contest'])?data['contest']['sport']:data['contest']['sport'] + ' - ' + data['contest']['contest'];
		contest_title_wrapper.appendChild(contest_title);
		
		if ((data['contest']['contest'] != data['contest']['comment']) && (data['contest']['comment'] != '')) {
		
			var contest_comment = document.createElement('span');
			contest_comment.className='offertable_contest_title_comment';
			contest_comment.innerHTML = ' - ' + data['contest']['comment'];
			contest_title_wrapper.appendChild(contest_comment);
			
		}
		
		var contest_title_minmax = document.createElement('div');
		contest_title_minmax.className='offertable_contest_minmax';
		contest_title_minmax.expanded = true;
		contest_title_minmax.onclick = function() { 
										this.expanded = !this.expanded;
										this.style.backgroundPosition = (this.expanded)?'0px -12px':'0px 0px';	
										document.getElementById('ot_body_' + data['contest']['day'] + '_' + data['contest']['sport_id'] + '_' + data['contest']['contest_id']).style.display=(this.expanded)?'block':'none';
									};
		
		contest_title_wrapper.appendChild(contest_title_minmax);
		
		contest.appendChild(contest_title_wrapper);
		
		var contest_body = document.createElement('div');
		contest_body.id = 'ot_body_' + data['contest']['day'] + '_' + data['contest']['sport_id'] + '_' + data['contest']['contest_id'];
		contest_body.expanded = true;
		
		contest.appendChild(contest_body);
		
		contest_fragment.appendChild(contest);
		
		if (!this.RenderTo) {
			this.contestsBuffer.appendChild(contest_fragment);
		} else {
			this.contestsBuffer = contest_fragment;
		}
		
		this.RenderLoader();
		
		this.lastContestDiv = contest_body;
		
		this.RenderStatus = 1;
		
	} else {
		
		this.RenderStatus = 0;
		
	}	
	
	return true;
	
}

function offertable_render_init() {
	
	if (!this.RenderTo) {
		this.contestsBuffer = document.createElement('div');
	}
	this.counter = 0;
	this.counterContest = 0;
	this.counterBettype = 0;
	
	this.betTypesDivs = [];
	
}

function offertable_render_finalize() {
	
	try
	{
		if (!this.RenderTo) {
			document.getElementById('offertable').appendChild( this.contestsBuffer );
		} else {
			document.getElementById('offertable').firstChild.replaceChild( this.contestsBuffer, this.RenderTo );
			this.RenderTo = false;
			this.RenderBettypeId = -1;
			this.RenderAllBettypes = false;
		}
	} catch (ex) {
		
	}
	
}

function offertable_render() {
	
	// alert(this.RenderStatus);
	
	if (this.Stopped) {
		return false;
	}
	
	switch (this.RenderStatus) {
			
		case 0:
			this.RenderContest();
			break;
		case 1:
			this.RenderBettypeSelector();
			break;
		case 2:
			this.RenderBettypes();
			break;
		case 3:
			this.RenderBettype();
			break;
		case 4:
			this.RenderBets();
			break;
		
	}
	
	this.counter++;
	
	return true;

}

function offertable_render_spacer() {
	
	var clear = document.createElement('div');
	clear.className='offertable_clear';
	document.getElementById('offertable').appendChild(clear);
	
}

function offertable_renderloader() {

	try
	{
		var loader = document.createElement('div');
		loader.id = 'offertable_loader';
		loader.className='offertable_loader';
		loader.innerHTML='Ponuda se učitava...';
		document.getElementById('offertable').appendChild(loader);
	} catch (e) {
		
	}
	
}

function offertable_removeloader() {

	var divs = document.getElementById('offertable').getElementsByTagName("div"); 
	for (var i = 0; i < divs.length; i++) {
	    if (divs[i].className == 'offertable_loader') {
	    	try {
	    		document.getElementById('offertable').removeChild(divs[i]);
	    	} catch (e) {
	    		
	    	}
	    }
	}
	
}

function offertable_import_json(jsontext) {
	if (jsontext.length > 0) {
		this.data = JSON.parse(jsontext);
		this.currentTime = Date.parse(this.data['servertime']);
		return true;
	}
	return false;	
}


offertable = new Offertable();
offertable_special = new Offertable();
offertable_special.special = true;