var spoele = null;
var spoid = null;
var spotype = null;
var spomouseOffset = null;
var spoiMouseDown  = false;
var spolMouseState = false;
var spocurTarget = null;
var spocustomerpos = false;

var spoajObj = new ajaxXMLDoc();
spoajObj.debugid = 'spooutput';
spoajObj.processXML = processSpoXML;

var xmlURL = '/xml/sportpress.go';

var spoLang = 20; 

// Prototype the string object
String.prototype.ucword = function() {
    return this.replace(/\w+/g, function(a) {
        return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();
    });
};
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
};
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
};
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
};

function ce( type ) {
	return document.createElement( type );
}

function findPos(obj) {
	var nleft = 0;
	var ntop = 0;
	do {
		nleft += obj.offsetLeft
		ntop += obj.offsetTop
	} while (obj = obj.offsetParent);

	return { x: nleft, y: ntop };
}

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}

var spolastCoord;

function mouseMove(ev){
	ev = ev || window.event;

	if (spolastCoord != null && spocurTarget != null) {
		var curCoord = mouseCoords(ev);
		curCoord.x -=  spolastCoord.x;
		curCoord.y -=  spolastCoord.y;
		spolastCoord = mouseCoords(ev);

		if (parseInt(spoele.style.left) + curCoord.x >= 0) {
			spoele.style.left = (parseInt(spoele.style.left) + curCoord.x) + 'px';
		}
		if (parseInt(spoele.style.top) + curCoord.y >= 0) {
			spoele.style.top = (parseInt(spoele.style.top) + curCoord.y) + 'px';
		}
		spocustomerpos = true;
		return false;
	}
}

function mouseUp(ev){
	ev = ev || window.event;

	if (spocurTarget && spocurTarget.style) {
		spocurTarget.style.cursor = '';
	}

	spocurTarget  = null;
	spoiMouseDown = false;
	spolastCoord = null;
}

function mouseDown(ev){
	ev = ev || window.event;
	var target   = ev.target || ev.srcElement;

	spolastCoord = mouseCoords(ev); 
	spoiMouseDown = true;
	
	if (target.className == 'spomenu') {
		// Target sighted and mouse engaged
		target.style.cursor = 'move';
		spocurTarget = target;
		return false;
	} else if (target.tagName != 'A') {
		// Check targes parents for spomenu
		var par=target.parentNode;

		do {
			if (par.className == 'spomenu')	{
				target.style.cursor = 'move';
				spocurTarget = target;
				return false;
			} else if (par.tagName == 'A') {
				return true;
			}
			par = par.parentNode;
		} while (par);
	}
}

function createSpoHolder( objPos ) {
	if ( ! spoele ) {
		spoele = ce('div');

		spoele.className = 'spoholder';
		spoele.style.position = 'absolute';
		spoele.style.zIndex = 99;

		document.body.appendChild(spoele);
	}

	spoele.style.display = '';

	if (! spocustomerpos) {
		var winW = document.body.offsetWidth;
		if (objPos.x + 400 > winW - 40) objPos.x = winW - 440;
		spoele.style.left = objPos.x + 10 + 'px';
		spoele.style.top = objPos.y + 10 + 'px';
	}

}

function getSpoUrl( type ) {
	spotype = type;
	if (! spoajObj.processing){
		spoele.innerHTML = 'Loading...';
		spoajObj.getURL(xmlURL + '?id=' + spoid + '&type=' + type + '&lang=' + spoLang);
	} else {
		alert('Already processing request please wait');
	}
}

function spolink( id ) {
	spoid = id;
	getSpoUrl('live');
}

function processSPOResponse(domObj, atag) {
	if (domObj == null)	{
		// invalid doc
		window.open(atag.href);
	}

	var res = domObj.getElementsByTagName('res');

	if (res[0]) {
		atag.onclick = function() {
			var lang = this.href.substr(this.href.indexOf('xl=')+3).split('&');
			if (lang[0]) {
			       spoLang=lang[0];
			}
			return spodata(this, res[0].getAttribute('id'));
		}
		spodata(atag, res[0].getAttribute('id'));
	} else {
		window.open(atag.href);
	}
}

function processSPOLink( atag ) {
	var spoaj = new ajaxXMLDoc();
	spoaj.processXML = function( domObj ) {
		processSPOResponse(domObj, atag);
	}

	var match = atag.href.substr(atag.href.indexOf('match=') + 6).split('-');
	var lang = atag.href.substr(atag.href.indexOf('xl=')+3).split('&');
	if (lang[0]) {
	       spoLang=lang[0];
	}
	spoaj.getURL(xmlURL + '?t1=' + match[0] + '&t2=' + match[1]);
}

function spodata( linkRef,  id ) {
	var objPos = findPos(linkRef);

	spoid = id;

	if (! spoajObj.processing){
		createSpoHolder(objPos);
	}

	getSpoUrl('live');

	return false;
}

function hideSpoHolder() {
	if ( spoele ) {
		spoele.style.display = 'none';
	}
}

function processSpoXML ( objDom ) {
	if (objDom == null)	{
		// invalid doc
		hideSpoHolder();
		return;
	}

	var objDomSPO = objDom.getElementsByTagName('spo')[0];

	if (objDomSPO.tagName == 'spo') {
		switch(objDomSPO.firstChild.tagName) {
			case 'game':
				processGame(objDomSPO.firstChild);
				break;
			case 'h2h':
				processH2H(objDomSPO.firstChild);
				break;
			case 'lm':
				processLM(objDomSPO.firstChild);
				break;
			case 'lu':
				processLU(objDomSPO.firstChild);
				break;
			case 'lt':
				processLeague(objDomSPO.firstChild);
				break;
			default :
				hideSpoHolder();
				break;
		}
	} else {
		alert('invalid response');
		hideSpoHolder();
		return;
	}
}

function processLeague( objDomSPO ) {
	var leaguetable = ce('table');
	var tb = ce('tbody');

	leaguetable.className = 'splt';

	var teamseles = objDomSPO.getElementsByTagName('team');
	var tr = ce('tr');
	tr.className = (y%2?'off':'on');

	var name = ce('th');
	var played = ce('th');
	var win = ce('th');
	var draw = ce('th');
	var defeit = ce('th');
	var goals = ce('th');
	var points = ce('th');
	points.style.fontWeight = 'bold';

	name.innerHTML = 'Team';
	played.innerHTML = 'P';
	win.innerHTML = 'W';
	draw.innerHTML = 'D';
	defeit.innerHTML = 'L';
	goals.innerHTML = 'F:A';
	points.innerHTML = 'Pt';

	tr.appendChild(name);
	tr.appendChild(played);
	tr.appendChild(win);
	tr.appendChild(draw);
	tr.appendChild(defeit);
	tr.appendChild(goals);
	tr.appendChild(points);

	tb.appendChild(tr);

	for (var y=0; y<teamseles.length ; y++) {
		var tr = ce('tr');
		tr.className = (y%2?'off':'on');

		if (teamseles[y].getAttribute('hi') == 1) {
			tr.className += ' sphi';
		}

		var name = ce('td');
		var played = ce('td');
		var win = ce('td');
		var draw = ce('td');
		var defeit = ce('td');
		var goals = ce('td');
		var points = ce('td');
		points.style.fontWeight = 'bold';

		name.innerHTML = teamseles[y].getAttribute('na');
		played.innerHTML = (parseInt(teamseles[y].getAttribute('wi')) + parseInt(teamseles[y].getAttribute('dr')) + parseInt(teamseles[y].getAttribute('de')));
		win.innerHTML = teamseles[y].getAttribute('wi');
		draw.innerHTML = teamseles[y].getAttribute('dr');
		defeit.innerHTML = teamseles[y].getAttribute('de');
		goals.innerHTML = teamseles[y].getAttribute('gf') + ':' + teamseles[y].getAttribute('ga');
		points.innerHTML = teamseles[y].getAttribute('po');

		tr.appendChild(name);
		tr.appendChild(played);
		tr.appendChild(win);
		tr.appendChild(draw);
		tr.appendChild(defeit);
		tr.appendChild(goals);
		tr.appendChild(points);

		tb.appendChild(tr);
	}

	leaguetable.appendChild(tb);

	spoele.innerHTML = '';
	spoele.appendChild(createMenu(objDomSPO));
	spoele.appendChild(leaguetable);
	spoele.appendChild(createCopyright(objDomSPO));
}


function processLU( objDomSPO ) {
	var lineup = ce('div');

	var teamseles = objDomSPO.getElementsByTagName('lt');

	for (var y=0; y<teamseles.length ; y++) {
		var team = ce('div');
		var players = teamseles[y].getElementsByTagName('player');
		var oldpos = '';

		team.className = 'spoteam';

		team.innerHTML = '<h3>' + teamseles[y].getAttribute('name') 
							+ (teamseles[y].getAttribute('lineup') ? ' - ' : '' ) +  teamseles[y].getAttribute('lineup') 
							+ (teamseles[y].getAttribute('coach') ? ' - ' : '' ) +  teamseles[y].getAttribute('coach')
							+ '</h3>';

		for (var x=0; x<players.length ; x++) {
			var playerName = ce('span');
			if (players[x].getAttribute('pos') == 'sub') continue;

			playerName.className = 'spopos spp' + players[x].getAttribute('pos').substr( -1 );
			playerName.innerHTML = ' ' + lastName(players[x].getAttribute('name')) + ' ';
			var posLen = players[x].getAttribute('pos').length;
			if (oldpos != players[x].getAttribute('pos').substr(0,posLen-1) || (players[x].getAttribute('pos') == '' && (x%4 == 0))) {
				if ( x > 0 ) {
					team.appendChild(ce('br'));
				}
				oldpos = players[x].getAttribute('pos').substr(0,posLen-1);
			}
			team.appendChild(playerName);
		}
		lineup.appendChild(team);
	}

	spoele.innerHTML = '';
	spoele.appendChild(createMenu(objDomSPO));
	spoele.appendChild(lineup);
	spoele.appendChild(createCopyright(objDomSPO));
}


function processLM( objDomSPO ) {
	var lmele = ce('table');
	var lmbody = ce('tbody');

	lmele.className = 'spohist';
	lmele.appendChild(lmbody);

	var maineles = objDomSPO.getElementsByTagName('tm');

	for (var y=0; y<maineles.length ; y++) {
		var eles = maineles[y].getElementsByTagName('lm');
		var headrow = ce('tr');
		var heading = ce('th');
		heading.colSpan = 5;
		heading.innerHTML = maineles[y].getAttribute('name');
		headrow.appendChild(heading);
		lmbody.appendChild(headrow);

		for (var x=0; x<eles.length ; x++) {

			var row = ce('tr');
			row.className = (x%2?'off':'on');
			var tddate = ce('td');
			var tdhome = ce('td');
			var tdscore = ce('td');
			var tdaway = ce('td');
			var tdform = ce('td');
			tddate.innerHTML = eles[x].getAttribute('date').split(' ')[0];
			tdhome.innerHTML = eles[x].getAttribute('home');
			if (eles[x].getAttribute('home') == maineles[y].getAttribute('name'))	{
				tdhome.style.fontWeight = 'bold';
			}
			var link = ce('a');
			link.evid = eles[x].getAttribute('id');
			link.href='#'
			link.onclick = function() {
				spolink(this.evid);	
				return false;
			}
			link.innerHTML =  eles[x].getAttribute('hg') + '-' + eles[x].getAttribute('ag');
			tdscore.appendChild(link);
			tdaway.innerHTML = eles[x].getAttribute('away');
			if (eles[x].getAttribute('away') == maineles[y].getAttribute('name'))	{
				tdaway.style.fontWeight = 'bold';
			}
			tdform.innerHTML = eles[x].getAttribute('outcome');
			row.appendChild(tddate);
			row.appendChild(tdhome);
			row.appendChild(tdscore);
			row.appendChild(tdaway);
			row.appendChild(tdform);
			lmbody.appendChild(row);
		}
	}

	spoele.innerHTML = '';
	spoele.appendChild(createMenu(objDomSPO));
	spoele.appendChild(lmele);
	spoele.appendChild(createCopyright(objDomSPO));
}

function processH2H( objDomSPO ) {
	var h2hele = ce('table');
	var h2hbody = ce('tbody');

	
	spoele.innerHTML = '';

	h2hele.className = 'spohist';

	var headrow = ce('tr');
	var heading = ce('th');
	heading.colSpan = 4;
	heading.innerHTML = '&nbsp;';
	headrow.appendChild(heading);
	h2hbody.appendChild(headrow);


	var eles = objDomSPO.getElementsByTagName('h2h');

	for (var x=0; x<eles.length ; x++) {
		var row = ce('tr');
		row.className = (x%2?'on':'off');
		var tddate = ce('td');
		var tdhome = ce('td');
		var tdscore = ce('td');
		var tdaway = ce('td');
		tddate.innerHTML = eles[x].getAttribute('date').split(' ')[0];
		tdhome.innerHTML = eles[x].getAttribute('home');
		if (eles[x].getAttribute('home') == eles[x].getAttribute('winner'))	{
			tdhome.style.fontWeight = 'bold';
		}
		var link = ce('a');
		link.href='#';
		link.evid = eles[x].getAttribute('id');
		link.onclick = function() {
			spolink(this.evid);	
			return false;
		}
		link.innerHTML =  eles[x].getAttribute('hg') + '-' + eles[x].getAttribute('ag');
		tdscore.appendChild(link);
		if (eles[x].getAttribute('winner') == 'Draw')	{
			tdscore.style.fontWeight = 'bold';
		}
		tdaway.innerHTML = eles[x].getAttribute('away');
		if (eles[x].getAttribute('away') == eles[x].getAttribute('winner'))	{
			tdaway.style.fontWeight = 'bold';
		}
		row.appendChild(tddate);
		row.appendChild(tdhome);
		row.appendChild(tdscore);
		row.appendChild(tdaway);
		h2hbody.appendChild(row);
	}
	h2hele.appendChild(h2hbody);

	spoele.appendChild(createMenu(objDomSPO));
	spoele.appendChild(h2hele);
	spoele.appendChild(createCopyright(objDomSPO));
}

function createMenu(objDomSPO) {
	var menu = ce('div');
	menu.className = 'spomenu';
	var a = ce('a');
	a.href='javascript:hideSpoHolder();';
	a.className='x_button';
	menu.appendChild(a);
	menu.innerHTML += '<h2><span>' + getMessage( objDomSPO, 2223 ) +  '</span></h2>';
	menu.appendChild(createExtra(objDomSPO));
	menu.innerHTML += '<div class="cleaner"></div>';
	return menu;
}

function createCopyright(objDomSPO) {
	var cr = ce('div');
	cr.className = 'spocopyright';
	var a = ce('a');
	a.href='http://www.sportpress.com/?lang=' + spoLang;
	a.target='_BLANK';
	a.innerHTML = getMessage(objDomSPO, 2227) ;
	cr.appendChild(a);
	return cr;
}

function processGame( objDomSPO ) {
	var heading = ce('h3');
	var subheading = ce('h4');
	var gamehist = ce('div');
	var extraData = ce('div');
	var text = '';
	extraData.className = 'spoextra';
	gamehist.className = 'spohist';

	heading.innerHTML = objDomSPO.getAttribute('home') + ' ' + objDomSPO.getAttribute('score') + ' ' + objDomSPO.getAttribute('away') + '<br/>' +  objDomSPO.getAttribute('league');
	subheading.innerHTML = '';
	if (objDomSPO.getAttribute('score') != objDomSPO.getAttribute('ot')) {
		subheading.innerHTML += '90 (' + objDomSPO.getAttribute('ot') + ') ';
	}
	if (objDomSPO.getAttribute('ht') != '-') {
		subheading.innerHTML += 'H/T (' + objDomSPO.getAttribute('ht') + ')';
	}

	if (subheading.innerHTML != '')	subheading.innerHTML += '<br/>';
	subheading.innerHTML += objDomSPO.getAttribute('date') + ' ' ;

	var objHist = objDomSPO.getElementsByTagName('action');

	var homegc = 0;
	var awaygc = 0;

	for (var x=0; x < objHist.length; x++) {
		var row = ce('div');
		var minaction = ce('span');
		var data = ce('span');
		var team = '';

		row.className = (x%2?'on':'off');
		minaction.className = 'min';

		if (objHist[x].getAttribute('type') != 'pss' && objHist[x].getAttribute('type') != 'psm') {
			if (objHist[x].getAttribute('team') == 'home') {
				var owngoal = false;
				switch (objHist[x].getAttribute('type')) {
					case 'og':
						owngoal = true;
					case 'p':
					case 'g':
					case 'etg':
					case 'eps':
						homegc++;
						data.style.fontWeight  = 'bold';
						data.innerHTML = homegc + '-' + awaygc + ' ';
						break;
				}
				if (owngoal) {
					team = ' [' + objDomSPO.getAttribute('away') + ']';
				} else {
					team = ' [' + objDomSPO.getAttribute('home') + ']';
				}
			} else {
				var owngoal = false;
				switch (objHist[x].getAttribute('type')) {
					case 'og':
						owngoal = true;
					case 'p':
					case 'g':
					case 'etg':
					case 'eps':
						awaygc++;
						data.style.fontWeight  = 'bold';
						data.innerHTML = homegc + '-' + awaygc + ' ';
						break
				}

				if (owngoal) {
					team = ' [' + objDomSPO.getAttribute('home') + ']';
				} else {
					team = ' [' + objDomSPO.getAttribute('away') + ']';
				}
			}

			row.className += ' ' + objHist[x].getAttribute('type');
			minaction.innerHTML = objHist[x].getAttribute('minute') + "'";

			data.innerHTML += objHist[x].getAttribute('player');

			row.appendChild( minaction );
			row.appendChild( data );
			row.innerHTML += team;
			gamehist.appendChild(row);

			if (objHist[x].getAttribute('type') == 'subs') {
				var row = ce('div');
				var minaction = ce('span');
				var data = ce('span');

				row.className = (x%2?'on subs2':'off subs2');
				minaction.className = 'min';

				data.innerHTML = objHist[x].getAttribute('extra');
				minaction.innerHTML = '&nbsp;';
				row.appendChild( minaction );
				row.appendChild( data );
				gamehist.appendChild(row);
			}

		} else {
			var tbl = ce('table');
			var tbbody = ce('tbody');
			var tbrow = ce('tr');
			var homepen  = ce('td');
			var awaypen  = ce('td');

			tbl.className = 'penholder';
			homepen.className = 'homepen';
			awaypen.className = 'awaypen';

			for (var x=x; x < objHist.length; x++) {
				var action = ce('div');

				action.innerHTML = objHist[x].getAttribute('player');
				action.className = 'pen ' +  objHist[x].getAttribute('type');
				
				if (objHist[x].getAttribute('team') == 'home') {
					homepen.appendChild(action);
				} else {
					awaypen.appendChild(action);
				}
			}
			tbrow.appendChild(homepen);
			tbrow.appendChild(awaypen);
			tbbody.appendChild(tbrow);
			tbl.appendChild(tbbody);
			gamehist.appendChild(tbl);
		}
	}

	var data = objDomSPO.getElementsByTagName('data');

	for (var x=0; x < data.length; x++ )
	{
		var childDiv = ce('div');
		childDiv.className = 'spoei';
		childDiv.innerHTML = data[x].getAttribute('name').ucword();
		childDiv.innerHTML += ': ';
		childDiv.innerHTML += data[x].getAttribute('value');
		extraData.appendChild(childDiv);
	}

	extraData.appendChild( createCopyright(objDomSPO) );

	spoele.innerHTML = '';
	spoele.appendChild(createMenu(objDomSPO));
	spoele.appendChild(heading);
	spoele.appendChild(subheading);
	spoele.appendChild(gamehist);
	spoele.appendChild(extraData);
	spoele.innerHTML += text;
}

function lastName( str ) {
	var pos;
	while ((pos = str.indexOf(' ')) >= 0) {
		str = str.substr(pos, str.length - pos).trim();
	}
	return str;
}

function getMessage( domobj, msgid ) {
	var msgs = domobj.getElementsByTagName('msg');
	for (var x=0; x < msgs.length; x++ ) {
		if (msgs[x].getAttribute('id') == msgid) {
			return unescape( msgs[x].firstChild.nodeValue );
		}
	}
	return '*';
}

function createExtra( domobj ) {
	var exul = ce('ul');
	var ex = domobj.getElementsByTagName('ex');
	if (ex[0])	{
		
		var exs = unescape(ex[0].firstChild.nodeValue);
		var opts = (exs.split('^'));

		for (var x=0; x < opts.length ; x++) {
			if (opts[x] == '') continue;
			var exil = ce('li');
			var aele = ce('a');
			aele.innerHTML = opts[x].split('=')[1];
			aele.href = "javascript:getSpoUrl('" + opts[x].split('=')[0] + "');";
			exil.appendChild(aele);
			if (spotype == opts[x].split('=')[0])
			{
				exil.className = 'active';
			}
			exul.appendChild(exil);
		}
	}
	return exul;
}

document.onmousemove = mouseMove;
document.onmousedown = mouseDown;
document.onmouseup   = mouseUp;

function findTags () {
	var atags = document.getElementsByTagName('A');
	for (var tagIdx = 0 ; tagIdx < atags.length ; tagIdx++) {
		if (atags[tagIdx].href.indexOf('sportpress.com/online/eu.info') > 0) {
			atags[tagIdx].onclick = function() {
				processSPOLink(this);
				return false;
			}
		}
	}
}

	
function startscript() { 
	findTags(); 
	if (window.dobdSl){
		dobdSl();
	} 
}

window.onload = startscript;
