var __hasTableLiveGrid = false;
var __cacheMark = { data: [] }; ;
var __tourGUID = null;
var __isTeam = false;
var __isFinal = false;
var __isHoleByHole = false;
var __imgFoldsTrigger = [];
var __speed = 'normal';

var __colors = ['#dad46d', '#aac489', '#84ba9e', '#94a1bf', '#6bbdd4',
				'#ece9b6', '#d4e1c4', '#c1dcce', '#c9d0df', '#b5dee9'];

function iMark(tourGUID, teamGUID) {
	this.TourGUID = tourGUID.toString();
	this.TeamGUID = teamGUID.toString();
	this.NewColor = -1;
	this.IsFolded = false;
}

function findGUID(str) {
	var re = new RegExp('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}', 'ig');
	return re.exec(str);
}

function removeHTML(txt, tag) {
	var re = new RegExp('(<' + tag + '([^>]+)>)', 'ig');
	return txt.replace(re, '');
}

function getMarkItem(tourGUID, teamGUID) {
	var result = null;
	$.each(__cacheMark.data, function() {
		if (this.TourGUID == tourGUID && this.TeamGUID == teamGUID) {
			result = this;
			return false;
		}
	});
	return result;
}

function getMarkColor(mark, increase) {
	if (increase) {
		if (mark.NewColor >= 5)
			mark.NewColor = 0;
		else
			mark.NewColor++;
	}

	return [__colors[mark.NewColor], __colors[mark.NewColor + 5]];
}

function saveMarkToCookie() {
	$.cookie('cacheMark', Object.toJSON(__cacheMark), {
		expires: 7,
		path: '/livescoring',
		domain: 'golfbox.dk',
		secure: false
	});
}

function expandScore(guid) {
	var tr = $('#' + guid);
	var imgFold = tr.find('img[src*="leftmenu"]');
	var imgFlag = tr.find('img[src*="flagMark"]');
	var m = getMarkItem(__tourGUID, guid);

	if (imgFold.attr('src') == '/images/menu/shared/leftmenu_plus_off.gif') {
		imgFold.attr({ src: '/images/menu/shared/leftmenu_minus_off.gif' });

		var preLoad = $('<tr>' +
							'<td align="center" colspan="' + tr.children().length + '" class="fold">' +
								'<img src="/images/shared/loader/indicator.gif" width="16" height="16" alt="" border="0" />' +
							'</td>' +
						'</tr>').insertAfter(tr);

		preLoad.children()
			.css({
				borderLeft: '1px solid ' + tr.css('background-color'),
				borderRight: '1px solid ' + tr.css('background-color'),
				borderBottom: '1px solid ' + tr.css('background-color')
			})
			.fadeIn(__speed, function() {
				$.ajax({
					type: 'GET',
					url: '_scorecard.asp',
					data: { tour: __tourGUID, guid: '{' + guid + '}', isFinal: (__isFinal) ? 1 : 0, isTeam: (__isTeam) ? 1 : 0 },
					dataType: 'html',
					error: function(xmlHttp, textStatus, errorThrown) {
						preLoad.children()
						.css({ color: '#ff0000', padding: '1em' })
						.attr({ align: 'left' })
						.html('<b>ERROR!</b><br />' + xmlHttp.responseText);
					},
					success: function(data, textStatus) {
						preLoad.children().children().fadeOut(__speed, function() {
							preLoad.children().children().remove();

							var dt = $(removeHTML(data, 'hr'));

							if (m)
								dt.find('.row1, .row2').css({ backgroundColor: getMarkColor(m, false)[1] });
							else
								dt.find('.row1, .row2').css({ backgroundColor: tr.css('background-color') });

							dt.appendTo(preLoad.children()).fadeIn(__speed);
						});
					}
				});
			});

		if (m) m.IsFolded = true;
	} else if (imgFold.attr('src') == '/images/menu/shared/leftmenu_minus_off.gif') {
		imgFold.attr({ src: '/images/menu/shared/leftmenu_plus_off.gif' });

		tr.next().children().fadeOut(__speed, function() {
			tr.next().remove();
		});

		if (m) m.IsFolded = false;
	}

	if (m) saveMarkToCookie();
}


function highlightMark(guid, increaseNewColor) {
	var tr = $('#' + guid);
	var imgFold = tr.find('img[src*="leftmenu"]');
	var imgFlag = tr.find('img[src*="flagMark"]');
	var m = getMarkItem(__tourGUID, guid);
	var increase = (typeof increaseNewColor === 'undefined') ? true : increaseNewColor;

	if (m) {
		imgFlag.attr({ src: '/images/livescoring/flagMark_On.gif' });
		tr.css({ backgroundColor: getMarkColor(m, increase)[0] });
		tr.next().children().find('.row1, .row2').css({ backgroundColor: getMarkColor(m, false)[1] });

		if (m.NewColor >= 5) {
			// Regenerator cache
			var newCache = { data: [] };
			$.each(__cacheMark.data, function() {
				if (this.TourGUID == m.TourGUID && this.TeamGUID == m.TeamGUID)
					return true;
				newCache.data.push(this);
			});
			__cacheMark = newCache;

			imgFlag.attr({ src: '/images/livescoring/flagMark_Off.gif' });

			var tmpColor = (tr.attr('class') == 'row1') ? '#f2f0e0' : '#dbdbdb';

			tr.css({ backgroundColor: tmpColor });
			tr.next().children().find('.row1, .row2').css({ backgroundColor: tr.css('background-color') });
		}
	} else {
		// Add new mark to cache
		var iMrk = new iMark(__tourGUID, guid);

		if (imgFold)
			iMrk.IsFolded = /minus/ig.test(imgFold.attr('src'));

		__cacheMark.data.push(iMrk);

		imgFlag.attr({ src: '/images/livescoring/flagMark_On.gif' });
		tr.css({ backgroundColor: getMarkColor(iMrk, increase)[0] });

		if (imgFold && imgFold.attr('src') == '/images/menu/shared/leftmenu_minus_off.gif')
			tr.next().children().find('.row1, .row2').css({ backgroundColor: getMarkColor(iMrk, false)[1] });
	}

	saveMarkToCookie();

	if (imgFold && imgFold.attr('src') == '/images/menu/shared/leftmenu_minus_off.gif') {
		tr.next().children().css({
			borderLeft: '1px solid ' + tr.css('background-color'),
			borderRight: '1px solid ' + tr.css('background-color'),
			borderBottom: '1px solid ' + tr.css('background-color')
		});
	}
}

function getColor(elem, attr) {
	var color;
	do {
		color = $.curCSS(elem, attr);
		if (color != '' && color != 'transparent' || $.nodeName(elem, 'body'))
			break;
		attr = 'backgroundColor';
	} while (elem = elem.parentNode);
	return color;
}

function preRender_LiveGrid() {
	$.each(__cacheMark.data, function() {
		if (this.TourGUID == __tourGUID) {
			highlightMark(this.TeamGUID, false);

			if (this.IsFolded)
				expandScore(this.TeamGUID);
		}
	});

	preRender_SelectRoundHolder();
	preRender_Ellipsis();
}

function preRender_Ellipsis() {
	var ellipsis = $('.ellipsis');
	if ($.browser.msie == false) {
		ellipsis.each(function(i, elem) {
			var e = $(elem);
			var t = e.text();
			var wbr = e.html().replace(t, t.split('').join('<wbr />'));
			e.html(wbr);
		});
	}

	var arr = [];

	ellipsis.each(function(i, elem) {
		var e = $(elem);
		e.attr({ title: e.text() });

		if (e.parent().get(0).tagName.toUpperCase() == 'A') {
			e.css({ cursor: 'pointer' });
		}

		arr.push(e, e.width());
	});

	for (var i = 0; i < arr.length; i += 2) {
		arr[i].width(arr[i + 1]);
	}

	ellipsis.removeClass('ellipsis');
	ellipsis.addClass('ellipsis_loaded');
	ellipsis.find('wbr').remove();
}

function preRender_SelectRoundHolder() {
	if ($('#formSelectRoundHolder') && $('#roundHolder')) {
		var rh = $('#roundHolder');
		var srh = $('#formSelectRoundHolder');
		srh.appendTo(rh)
	}
}

$(function() {
	if ($.cookie('cacheMark') == null)
		saveMarkToCookie();
	else
		__cacheMark = Object.fromJSON($.cookie('cacheMark'));

});