/******************
 * jQuery extend  *
 ******************/
jQuery(function($) {
	$.datepicker.regional['en-US'] = {
		closeText          : 'Done',
		prevText           : 'Prev',
		nextText           : 'Next',
		currentText        : 'Today',
		monthNames         : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
		monthNamesShort    : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
		dayNames           : ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
		dayNamesShort      : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
		dayNamesMin        : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
		weekHeader         : 'Wk',
		dateFormat         : 'm/d/yy',
		firstDay           : 1,
		isRTL              : false,
		showMonthAfterYear : false,
		yearSuffix         : ''
	};
});

/******************
 * MinGolf base   *
 ******************/
var _postBackTriggered = false;

var Url = {
	encode: function(string) { return escape(this._utf8_encode(string)); },
	decode: function(string) { return this._utf8_decode(unescape(string)); },
	_utf8_encode: function(string) { string = string.replace(/\r\n/g, '\n'); var utftext = ''; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; },
	_utf8_decode: function(utftext) { var string = ''; var i = 0; var c = c1 = c2 = 0; while (i < utftext.length) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if ((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i + 1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i + 1); c3 = utftext.charCodeAt(i + 2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; }
};

function onbeforepostback() {
	return true;
}

function _postBack(cmd) {
	_postBackTriggered = true;

	var form = document.forms['aspnetForm'];
	if (!form)
		form = document.aspnetForm;
	form.__EVENTTARGET.value = cmd;
	if (arguments[1])
		form.__EVENTARGUMENT.value = arguments[1];
	if (onbeforepostback(cmd, arguments[1]))
		form.submit();
}

function _redirect(url) {
	if (window.location.assign) {
		window.location.assign(url);
	} else {
		window.location = url;
	}
}

function showTerms(mode) {
	switch (mode) {
		case 'teetime':
			window.open('http://help.golf.se/default.aspx?pageId=556');
			break;
		case 'membercard':
			window.open('http://help.golf.se/default.aspx?pageId=557');
			break;
		case 'tournament':
			window.open('http://help.golf.se/sv/pm-och-dokument/regelverk-for-git-och-min-golf/allmanna-kopvillkor-starttidsbokning-i-min-golf.aspx');
			break;
		case 'skandiatour':
			window.open('http://help.golf.se/sv/pm-och-dokument/regelverk-for-git-och-min-golf/kopinformation-skanida-tour.aspx');
			break;
		case 'nordeatour':
			window.open('http://help.golf.se/sv/pm-och-dokument/regelverk-for-git-och-min-golf/kopinformation-nordea-tour.aspx');
			break;
		case 'greenfeecheckar':
			window.open('http://help.golf.se/sv/pm-och-dokument/regelverk-for-git-och-min-golf/kopinformation-greenfeecheckar.aspx');
			break;
	}
}

var mgWin = null;

function openWindow(link, w, h, name, scroll) {
	var winL = (screen.width - w) / 2;
	var winT = (screen.height - h) / 2;
	var settings = 'height=' + h + ',width=' + w + ',top=' + winT + ',left=' + winL + ',scrollbars=' + (typeof scroll == 'number' ? scroll : '0') + ',resizable=0,status=0,toolbar=0,location=0,menubar=0,directories=0';

	mgWin = window.open(link, name, settings);
	if (parseInt(navigator.appVersion) >= 4 && mgWin && mgWin.focus)
		mgWin.focus();
}

function nWindow(link) {
	var nW = window.open(link);
	if (parseInt(navigator.appVersion) >= 4 && nW && nW.focus)
		nW.focus();
}

function openHcpTable() {
	openWindow('/Site/Score/HcpTable.aspx', 700, 280, 'HcpTable', 1);
}

function openHcpCert(golfid) {
	openWindow('/Site/Score/HCPCert.aspx?golfid=' + golfid, 680, 300, 'HcpCert', 1);
}

function openIntroductionCard(golfid) {
	openWindow('/Site/My_Profile/IntroductionCard.aspx?golfid=' + golfid, 680, 300, 'IntroductionCard', 1);
}

var currentBookingWin = null;

function openBookingWin(slotid, slottime, slotstatus, courseid, clubid, personid, golfid, gridid, bookingcode, loadsession, sid, orderid) {
	var w        = 900;
	var h        = 550;
	var winL     = (screen.width - w) / 2;
	var winT     = (screen.height - h) / 2;
	var settings = 'height=' + h + ',width=' + w + ',top=' + winT + ',left=' + winL + ',scrollbars=1,resizable=0,status=0,toolbar=0,location=0,menubar=0,directories=0';
	var link     = [];

	var pCheck = function(chk) {
		if (chk == null || chk == '' || jQuery.trim(chk) == '')
			return false;
		return true;
	};

	if (pCheck(slotid))           link.push('slotid='           + slotid);
	if (pCheck(slottime))         link.push('slottime='         + slottime);
	if (pCheck(slotstatus))       link.push('slotstatus='       + slotstatus);
	if (pCheck(courseid))         link.push('courseid='         + courseid);
	if (pCheck(clubid))           link.push('clubid='           + clubid);
	if (pCheck(personid))         link.push('personid='         + personid);
	if (pCheck(golfid))           link.push('golfid='           + golfid);
	if (pCheck(gridid))           link.push('gridid='           + gridid);
	if (pCheck(bookingcode))      link.push('bookingcode='      + bookingcode);
	if (pCheck(loadsession))      link.push('loadsession='      + loadsession);
	if (pCheck(sid))              link.push('sid='              + sid);
	if (pCheck(orderid))          link.push('orderid='          + orderid);

	//Close previous bookingWindow
	if (currentBookingWin && currentBookingWin.obj) {
		currentBookingWin.obj.close();
		gbPOST('/Webservices/BookingHandler.ashx?methodName=DeleteSlotLock', { 'slotid': currentBookingWin.id }, function(data, textStatus) { });

		if (mgForceLogout)
			mgForceLogout.Reset();
	}

	var bw = window.open('/Site/Booking/Jump.aspx?' + link.join('&'), 'bookingWindow', settings);

	currentBookingWin = { id: slotid, obj: bw };

	if (parseInt(navigator.appVersion) >= 4 && bw && bw.focus)
		bw.focus();
}

function setCurrentBookingWin(a, b) {
	currentBookingWin = { id: a, obj: b };
}

function chkCurrentBookingWin() {
	if (currentBookingWin) {
		if (currentBookingWin.obj && currentBookingWin.obj.closed) {
			gbPOST('/Webservices/BookingHandler.ashx?methodName=DeleteSlotLock', { 'slotid': currentBookingWin.id }, function(data, textStatus) { });

			if (mgForceLogout)
				mgForceLogout.Reset();

			currentBookingWin = null;
		}
	}
}

function getDatePattern(lcid) {
	switch (lcid) {
		case 1030: return /^\d{2}(-|\.|\/)\d{2}(-|\.|\/)\d{4}$/;
		case 1031: return /^\d{2}(-|\.|\/)\d{2}(-|\.|\/)\d{4}$/;
		case 1033: return /^\d{1,2}(-|\.|\/)\d{1,2}(-|\.|\/)\d{4}$/;
		case 1044: return /^\d{2}(-|\.|\/)\d{2}(-|\.|\/)\d{4}$/;
		case 1053: return /^\d{4}(-|\.|\/)\d{2}(-|\.|\/)\d{1,2}$/;
		case 2057: return /^\d{1,2}(-|\.|\/)\d{1,2}(-|\.|\/)\d{4}$/;
	}
}

function hcpCheck(hcp) {
	if (/^\+*\d+((,|\.)\d{1})$/.test(hcp) == false) return false;

	var tmp = hcp;
	if (tmp.indexOf('+') == 0) tmp = tmp.replace('+', '-');

	tmp = tmp.replace(',', '.');

	if (tmp.indexOf('-') == 0) {
		tmp = eval(tmp);
	} else {
		tmp = parseFloat(tmp);
	}

	if (tmp >= 37 && tmp <= 54)
		return true;

	return (tmp >= -8 && tmp <= 36) ? true : false;
}

function BookingPlayer() {
	this.Name = '';
	this.Index = -1;
	this.PayArticle = false;
	this.Articles = [];
	this.SelectedArticle = null;
	this.PreBookingFee = null;
}

BookingPlayer.prototype.ValidatePBF = function() {
	if (this.SelectedArticle && (this.SelectedArticle.Price <= 0 || this.SelectedArticle.Paid))
		return true;

	if (this.PreBookingFee && this.PreBookingFee.Price < 0 && !this.PayArticle)
		return false;

	return true;
}

BookingPlayer.prototype.TotalPrice = function() {
	var pbf = 0;
	var art = 0;

	if (this.SelectedArticle)
		art = this.SelectedArticle.Price;

	if (this.PreBookingFee && art > 0)
		pbf = this.PreBookingFee.Price;

	return (art + pbf);
}

BookingPlayer.prototype.PriceToPay = function() {
	var pbf = 0;
	var art = 0;

	if (this.PreBookingFee)
		pbf = this.PreBookingFee.Price;

	if (this.SelectedArticle)
		art = this.SelectedArticle.Price;

	if (this.PreBookingFee && this.PreBookingFee.Paid)
		pbf = 0;

	if (this.SelectedArticle && this.SelectedArticle.Paid) {
		art = 0;
		if (this.PreBookingFee && this.PreBookingFee.Price <= 0)
			pbf = 0;
	}

	var ptp = 0

	if (this.PayArticle) {
		var price = art + pbf;

		if (price > 0)
			ptp = price;
		else
			ptp = 0;
	} else {
		if (pbf > 0)
			ptp = pbf;
		else
			ptp = 0;
	}

	return ptp;
}

BookingPlayer.prototype.SelectArticle = function(id) {
	for (var i = 0; i < this.Articles.length; i++) {
		if (this.Articles[i].Id == id)
			this.SelectedArticle = this.Articles[i];
	}
}

function PageObject(lcid, iso){
	this.LCID = lcid;
	this.countryISOCode = iso;
}

PageObject.prototype.getDateDelimiter = function() {
	switch (this.LCID) {
		case 1031 : return '.';
		case 1030 : return '-';
		case 1044 : return '.';
		case 1053 : return '-';
		default   : return '/';
	}
}

function moveOnMax(field, nextFieldId) {
	if (field.value.length >= field.maxLength)
		document.getElementById(nextFieldId).focus();
}

function hoverRow(obj) {
	for (var i = 0; i < obj.childNodes.length; i++) {
		obj.childNodes[i].style.textDecoration = 'underline';
	}
}

function deHoverRow(obj) {
	for (var i = 0; i < obj.childNodes.length; i++) {
		obj.childNodes[i].style.textDecoration = '';
	}
}

function forceLogout(minCountDown, callBack) {
	this.minCountDown = minCountDown || (10 * 60) - 1;
	this.countDown    = this.minCountDown;
	this.callBack     = callBack || function() { /* do nothing */ };
	var _this         = this;

	this._id = 0;

	this.Start = function() {
		_this.id = setInterval(_this.Tick, 1000);
	};

	this.Stop = function() {
		clearInterval(_this.id);
	};

	this.Reset = function() {
		_this.Stop();
		_this.countDown = _this.minCountDown;
		_this.Start();
	};

	this.Tick = function() {
		jQuery('#SessionExp').html(_this.countDown);
		chkCurrentBookingWin();
		_this.countDown -= 1;
		if (_this.countDown <= 0) {
			_this.Stop();
			_this.callBack();
		}
	};
}

var __gbAjaxDict = [];
var __gbAjaxAbortAllTrigged = false;

function gbAjaxAbortAll() {
	if (__gbAjaxAbortAllTrigged || __gbAjaxDict.length == 0) {
		//nothing
	} else {
		for (var i = 0; i < __gbAjaxDict.length; i++) {
			if (__gbAjaxDict[i].abort) {
				try {
					__gbAjaxDict[i].abort();
				} catch(e) {
					//alert(e.message);
				}
			}
		}

		__gbAjaxDict = [];
		__gbAjaxAbortAllTrigged = true;
	}
}

function gbAjaxError(customError, ajaxType, xhr, textStatus, errorThrown) {
	jQuery.modal.close();
	jQuery('#gbJSONError').remove();
	jQuery('body').append(['<div id="gbJSONError" style="display: none; width: 600px">',
			'<table border="0" cellpadding="0" cellspacing="2">',
				'<tr>',
					'<td><img src="/Images/ico_error.gif" width="32" height="32" alt="" border="0" /></td>',
					'<td width="100%" style="color: #ee0000"><b>Min Golf ', ajaxType, ' error!</b> <i>(', xhr.status, ')</i></td>',
				'</tr>',
				'<tr>',
					'<td></td>',
					'<td id="gbJSONErrorContent"></td>',
				'</tr>',
			'</table>',
		'</div>'].join(''));

	var doModal = false;

	if (typeof customError == 'string') {
		jQuery('#gbJSONErrorContent').html(customError);
		doModal = (jQuery.trim(customError) != '') ? true : false;
	} else {
		var iframe = document.createElement('iframe');
		iframe.setAttribute('frameborder', '1');
		iframe.setAttribute('height', '200');
		iframe.setAttribute('width', '100%');
		iframe.setAttribute('marginheight', '0');
		iframe.setAttribute('marginwidth', '0');

		document.getElementById('gbJSONErrorContent').appendChild(iframe);

		var doc = iframe.document;

		if (iframe.contentDocument)
			doc = iframe.contentDocument;
		else if (iframe.contentWindow)
			doc = iframe.contentWindow.document;

		doc.open();
		doc.writeln(xhr.responseText);
		doc.close();
		doModal = (jQuery.trim(xhr.responseText) != '') ? true : false;
	}

	if (doModal)
		jQuery('#gbJSONError').modal();
}

function gbJSON(url, data, callback, customError, abortAll) {
	if (__gbAjaxAbortAllTrigged)
		return;

	if (typeof abortAll == 'boolean' && abortAll == true)
		gbAjaxAbortAll();

	var jqxhr = jQuery.ajax({ global: false, type: 'GET', url: url, data: data, dataType: 'json' })
	.done(function(data, textStatus, jqXHR) {
		callback(data, textStatus, jqXHR);
	})
	.fail(function(jqXHR, textStatus, errorThrown) {
		if (!__gbAjaxAbortAllTrigged) {
			if (jQuery.isFunction(customError)) {
				jQuery.modal.close();
				customError(jqXHR, textStatus, errorThrown);
			} else {
				gbAjaxError(customError, 'JSON', jqXHR, textStatus, errorThrown);
			}
		}
	});

	__gbAjaxDict.push(jqxhr);
}

function gbPOST(url, data, callback, customError, abortAll) {
	if (__gbAjaxAbortAllTrigged)
		return;

	if (typeof abortAll == 'boolean' && abortAll == true)
		gbAjaxAbortAll();

	var jqxhr = jQuery.ajax({ global: false, type: 'POST', url: url, data: data, dataType: 'json' })
	.done(function(data, textStatus, jqXHR) {
		callback(data, textStatus, jqXHR);
	})
	.fail(function(jqXHR, textStatus, errorThrown) {
		if (!__gbAjaxAbortAllTrigged) {
			if (jQuery.isFunction(customError)) {
				jQuery.modal.close();
				customError(jqXHR, textStatus, errorThrown);
			} else {
				gbAjaxError(customError, 'POST', jqXHR, textStatus, errorThrown);
			}
		}
	});

	__gbAjaxDict.push(jqxhr);
}

if (jQuery) {
	jQuery(function($) {
		var isSecure = (location.protocol.toLowerCase() == 'https:');
		var isProd   = (location.href.toLowerCase().indexOf('www9') > -1 || location.href.toLowerCase().indexOf('web03') > -1 || location.href.toLowerCase().indexOf('web04') > -1);

		if (isSecure && isProd) {
			var currentUrl = $.trim(location.href);
			_redirect(currentUrl.replace(/https:/, 'http:'));
		}
	});
}


/* PortletClubGrid.ascx */
var portletClubGrid = {};

function portletClubGrid_GetClubGrid(gridid, clubid, courseid, date) {
	portletClubGrid[gridid].clubGridID = clubid;
	portletClubGrid[gridid].clubGridCourseID = courseid;
	portletClubGrid[gridid].clubGridDate = date;
	portletClubGrid[gridid].clubGridData = null;

	portletClubGrid_Reset(gridid);
	jQuery('#' + gridid + '_ClubGrid').html('<table border="0" cellpadding="2" cellspacing="2" width="100%"><tr><td align="center"><img src="/Images/loading32_white.gif" width="32" height="32" alt="" border="0" /></td></tr></table>');

	gbJSON('/Webservices/BookingHandler.ashx?methodName=GetClubGrid&callback=?', { 'clubid': clubid, 'courseid': courseid, 'date': date, 'personid': __PersonId, 'gitcacheid': __GITSessionId }, function(data) {
		portletClubGrid[gridid].clubGridData = data;
		portletClubGrid_RenderBooking(gridid);

		if (__MemberMode == 0 || __MemberMode == 1) {
			gbJSON('/Webservices/GolfPackageHandler.ashx?methodName=GetPackages&callback=?', { 'guid': clubid }, function(data) {
				portletClubGrid_RenderGolfPackage(gridid, data);
			});
		}
	});
}

function portletClubGrid_GetClubGridByDate(gridid, day) {
	if (portletClubGrid[gridid].clubGridID != null && portletClubGrid[gridid].clubGridCourseID != null && portletClubGrid[gridid].clubGridDate != null) {
		var tmpData = cc.textToDateTime(portletClubGrid[gridid].clubGridDate);
		tmpData.setDate(tmpData.getDate() + day);

		portletClubGrid_GetClubGrid(
			gridid,
			portletClubGrid[gridid].clubGridID,
			portletClubGrid[gridid].clubGridCourseID,
			cc.dateTimeToText(tmpData)
		);

		if (portletClubGrid[gridid].portletClubChooseID != '')
			jQuery('#' + portletClubGrid[gridid].portletClubChooseID + '_Date').val(jQuery.datepicker.formatDate(dpRegional.dateFormat, tmpData));
	}
}

function portletClubGrid_Reload(gridid) {
	portletClubGrid_GetClubGrid(
		gridid,
		portletClubGrid[gridid].clubGridID,
		portletClubGrid[gridid].clubGridCourseID,
		portletClubGrid[gridid].clubGridDate
	);
}

function portletClubGrid_Reset(gridid) {
	//MG-2208
	jQuery('#' + gridid + '_ClubGrid, #' + gridid + '_ClubGridInfoText, #' + gridid + '_ClubGolfPackage').empty();
	jQuery('#' + gridid + '_ClubGridLegend, #' + gridid + '_ClubGridInfo, #' + gridid + '_ClubWebPayment').removeClass('hidden').addClass('hidden');
}

function portletClubGrid_RenderBooking(gridid) {
	portletClubGrid[gridid].clubGridCells.length = 0;
	portletClubGrid[gridid].clubGridCells = [];

	if (portletClubGrid[gridid].clubGridData == null)
		return;

	var div = jQuery('#' + gridid + '_ClubGrid');
	var t = [];

	t.push(
		'<div class="gridNavigate">',
			'<div class="gridNavigate_icon_prev" onclick="portletClubGrid_GetClubGridByDate(\'', gridid, '\', -1)"></div>',
			'<div class="gridNavigate_icon_next" onclick="portletClubGrid_GetClubGridByDate(\'', gridid, '\', 1)"></div>',
			'<div class="gridNavigate_date">', jQuery.datepicker.formatDate('DD dd-MM-yy', cc.textToDateTime(portletClubGrid[gridid].clubGridData.Date)), '</div>',
		'</div>'
	);

	t.push('<div class="gridContent">');

	if (portletClubGrid[gridid].clubGridData.Error) {
		t.push('<div class="gridContent_error"><div class="gridContent_error_error">', portletClubGrid[gridid].clubGridData.Error, '</div></div>');
	} else {
		var maxTimes         = portletClubGrid[gridid].clubGridData.Times.length;
		var maxSlots         = 0;
		var gridWidth        = div.width();
		var cellWidth        = Math.floor(gridWidth / maxTimes) - 1;
		var arrWidth         = [];
		var isNineHoleCourse = (portletClubGrid[gridid].clubGridData.CourseInfo && portletClubGrid[gridid].clubGridData.CourseInfo.IsNineHoleCourse) ? true : false;

		jQuery.each(portletClubGrid[gridid].clubGridData.Times, function(key, value) {
			maxSlots = (value.slots.length > maxSlots) ? value.slots.length : maxSlots;
			cellWidth = (key < (maxTimes - 1)) ? cellWidth : ((gridWidth - (cellWidth * key)) - maxTimes) - 1;
			arrWidth.push(cellWidth);
		});

		//Fill first column
		//jQuery.each(portletClubGrid[gridid].clubGridData.Times, function(key, value) {
		//	if (value.slots.length == 0)
		//		return true;
		//	if (value.slots.length == maxSlots)
		//		return false;
		//	for (var i = value.slots.length; i < maxSlots; i++)
		//		value.slots.unshift(null);
		//});

		var firstWidth = arrWidth[0];
		var lastWidth = arrWidth[arrWidth.length - 1];
		var leftWidth = lastWidth - firstWidth;
		if (leftWidth > 1) {
			for (var i = 0; i < leftWidth; i++)
				arrWidth[i] = arrWidth[i] + 1;
			arrWidth[arrWidth.length - 1] = firstWidth;
			arrWidth.reverse();
		}

		//Hours
		jQuery.each(portletClubGrid[gridid].clubGridData.Times, function(key, value) {
			t.push('<div class="gridContent_hour" style="width: ', arrWidth[key], 'px">', (value.hour.toString().length == 1) ? '0' + value.hour.toString() : value.hour.toString(), '</div>');
		});

		//Minutes
		for (var i = 0; i < maxSlots; i++) {
			for (var j = 0; j < maxTimes; j++) {
				var slot = portletClubGrid[gridid].clubGridData.Times[j].slots[i];

				if (slot) {
					var time = cc.textToDateTime(slot.SlotTime);
					var hour = (time.getHours().toString().length == 1) ? '0' + time.getHours().toString() : time.getHours().toString();
					var minute = (time.getMinutes().toString().length == 1) ? '0' + time.getMinutes().toString() : time.getMinutes().toString();
					var className = null;
					var bookingCode = null;
					var allowLinks = false;
					var u = ['<div class="gridContent_item_minute">', minute, '</div>'];

					//Set className
					switch (true) {
						case slot.Status == -2 && slot.Participants && slot.Participants.length > 0:
							className = 'gridContent_blocked';
							break;
						case slot.Participants && slot.Participants.length < 4:
							className = 'gridContent_partlyBooked';
							break;
						case slot.Participants && slot.Participants.length > 3:
							className = 'gridContent_fullyBooked';
							break;
						case slot.Status == 0:
							className = 'gridContent_free';
							break;
						case slot.Status == -1:
							className = 'gridContent_channelNotOpen';
							break;
						case slot.Status == -2:
							className = 'gridContent_blocked';
							break;
					}

					//Set bookingCode
					if (className == 'gridContent_partlyBooked' || className == 'gridContent_fullyBooked') {
						for (var k = 0; k < slot.Participants.length; k++) {
							if (bookingCode != null && bookingCode != '')
								break;
							if (__IsCompany) {
								if (__MemberMode == 2) {
									//Company
									if (slot.Participants[k].BookerIDNumber.toLowerCase() == __GolfId.toLowerCase())
										bookingCode = slot.Participants[k].BookingCode;
								} else if (__MemberMode == 1) {
									//ExternalPlayer
									if (slot.Participants[k].ForeignIdNumber.toLowerCase() == __ForeignId.toLowerCase())
										bookingCode = slot.Participants[k].BookingCode;
								}
							} else {
								//Player
								if (slot.Participants[k].GolfID.toLowerCase() == __GolfId.toLowerCase())
									bookingCode = slot.Participants[k].BookingCode;
							}
						}
					}

					//Set participants
					u.push('<div class="gridContent_item_participants">');
					if (className == 'gridContent_partlyBooked' || className == 'gridContent_fullyBooked' || (className == 'gridContent_blocked' && slot.Participants && slot.Participants.length > 0)) {
						for (var k = 0; k < slot.Participants.length; k++) {
							u.push('<img class="gridContent_item_participants_item" src="/Images/ico_', (slot.Participants[k].Gender) ? 'male' : 'female', '.gif" width="', (maxTimes >= 20) ? 3 : 5, '" height="', (maxTimes >= 20) ? 3 : 5, '" alt="" border="0" />');
						}
					} else {
						u.push('<img src="/Images/t.gif" width="', (maxTimes >= 20) ? 5 : 7, '" height="', (maxTimes >= 20) ? 5 : 7, '" alt="" border="0" />');
					}
					u.push('</div>');

					//Set allowLinks
					if (className == 'gridContent_partlyBooked' || className == 'gridContent_fullyBooked') {
						if (slot.Status == 0 || slot.Status == -11) {
							if (slot.Status == 0) {
								allowLinks = true;
							} else {
								for (var k = 0; k < slot.Participants.length; k++) {
									if (slot.Participants[k].GolfID.toLowerCase() == __GolfId.toLowerCase() || slot.Participants[k].ForeignIdNumber.toLowerCase() == __ForeignId.toLowerCase())
										allowLinks = true;
								}
							}
						}
					} else if (className == 'gridContent_free') {
						allowLinks = true;
					}

					var cursor  = (allowLinks) ? 'pointer' : 'default';
					var link    = (allowLinks) ? 'openBookingWin(\'' + slot.SlotID + '\', \'' + cc.dateTimeToText(time) + '\', \'' + slot.Status + '\', \'' + slot.CourseID + '\', \'' + slot.OrganizationalunitID + '\', \'' + __PersonId + '\', \'' + __GolfId + '\', \'' + gridid + '\', \'' + ((bookingCode) ? bookingCode : '') + '\', null, null, null)' : 'return false';

					//Set tooltip
					var tip = ['<div class="gridContent_item_title">', portletClubGrid[gridid].trans_GBL_Tid, ': ', hour, ':', minute, '<div>'];

					if (slot.Participants) {
						tip.push('<div class="gridContent_item_title">');
						tip.push('<div class="gridContent_item_title_txt">');
						for (var k = 0; k < slot.Participants.length; k++)
							tip.push('<div>', portletClubGrid[gridid].trans_GBL_Spiller, ' ', (k + 1), ':</div>');
						tip.push('</div>');

						tip.push('<div class="gridContent_item_title_txt">');
						for (var k = 0; k < slot.Participants.length; k++)
							tip.push('<div>', (slot.Participants[k].Gender) ? portletClubGrid[gridid].trans_STD_Mand : portletClubGrid[gridid].trans_STD_Kvinde, '</div>');
						tip.push('</div>');

						tip.push('<div class="gridContent_item_title_hcp">');
						for (var k = 0; k < slot.Participants.length; k++)
							tip.push('<div>', slot.Participants[k].ExactHcp, '</div>');
						tip.push('</div>');
						tip.push('</div>');
					}

					if (slot.SlotReservations && slot.SlotReservations[0].Name) {
						tip.push('<div class="gridContent_item_title"><br />', slot.SlotReservations[0].Name, '</div>');
					} else {
						if (className == 'gridContent_channelNotOpen') {
							tip.push('<div class="gridContent_item_title"><br />', portletClubGrid[gridid].trans_PORTAL_info1, '</div>');
						} else if (className == 'gridContent_blocked') {
							tip.push('<div class="gridContent_item_title"><br />', portletClubGrid[gridid].trans_PORTAL_info2, '</div>');
						}
					}

					if (className) {
						portletClubGrid[gridid].clubGridCells.push({ 'gridid': gridid, 'id': 'slot_' + i + '_' + j, 'tooltip': tip.join('') });
					}

					t.push('<div class="', className || 'gridContent_empty', '" style="width: ', arrWidth[j], 'px; cursor: ', cursor, '" onclick="', link, '"" id="slot_', i, '_', j, '"', (className) ? ' onmousemove="portletClubGrid_ItemShow(event, \'' + gridid + '\', \'slot_' + i + '_' + j + '\')" onmouseout="portletClubGrid_ItemHide(\'' + gridid + '\', \'slot_' + i + '_' + j + '\')"' : '', '>', u.join(''), '</div>');
				} else {
					t.push('<div class="gridContent_empty" style="width: ', arrWidth[j], 'px"></div>');
				}
			}
		}

		jQuery('#' + gridid + '_ClubGridLegend').removeClass('hidden');
	}

	t.push('</div>');
	div.html(t.join(''));

	if (portletClubGrid[gridid].clubGridData.CourseInfo || portletClubGrid[gridid].clubGridData.WebPayment) {
		jQuery('#' + gridid + '_ClubGridInfo').removeClass('hidden');

		if (portletClubGrid[gridid].clubGridData.CourseInfo && portletClubGrid[gridid].clubGridData.CourseInfo.BookingInformation) {
			//MG-1658
			var infoTxt = portletClubGrid[gridid].clubGridData.CourseInfo.BookingInformation;
			infoTxt = infoTxt.replace(/\n/ig, '<br />');
			infoTxt = infoTxt.replace(/&amp;/ig, '&');
			infoTxt = infoTxt.replace(/&/ig, '&amp;');

			jQuery('#' + gridid + '_ClubGridInfoText').html(infoTxt);
		}

		if (portletClubGrid[gridid].clubGridData.WebPayment && !__IsCompany)
			jQuery('#' + gridid + '_ClubWebPayment').removeClass('hidden');
	}
}

function portletClubGrid_RenderGolfPackage(gridid, data) {
	var div = jQuery('#' + gridid + '_ClubGolfPackage');

	if (!data || data.length == 0) {
		div.html('');
		return;
	}

	data.sort(function() {
		return Math.round(Math.random()) - 0.5;
	});

	var t = [
		'<div style="width: 778px; overflow: hidden;">',
			'<div style="height: 1px; background: #ddddd6;"></div>',
			'<div class="hspace"></div>',
			'<div style="font-size: 15px; font-weight: bold; padding: 0 5px;">',
				portletClubGrid[gridid].trans_PORTAL_golfpackage.replace(/%club%/ig, jQuery('#' + portletClubGrid[gridid].portletClubChooseID + '_ddlClubList option:selected').text()),
			'</div>',
			'<div class="hspaceII"></div>'
	];

	jQuery.each(data, function(i, v) {
		if (i >= 2) return false;

		t.push(
			'<div style="float: left; width: 380px; height: 100px; background: #f4f4ee;', (i % 2 == 0 ? ' margin-right: 18px;' : ''), '', (i >= 2 ? ' margin-top: 18px;' : ''), ' cursor: pointer;" onclick="golfPackage_Click(\'', v.GuideObfyscated, '\', \'', v.Id, '\')">',
				'<div style="float: left; width: 280px;">',
					'<div style="height: 24px; font-size: 13px; line-height: 24px; font-weight: bold; color: #c61d82; padding: 0 5px; overflow: hidden;" title="', v.Name, '">', v.Name, '</div>',
					'<div style="height: 52px; font-size: 11px; line-height: 1.2em; padding: 0 5px; overflow: hidden;" title="', v.Ingress, '">', v.Ingress, '</div>',
					'<div style="height: 24px; padding: 0 5px; position: relative;">', (jQuery.trim(v.Price) == '' ? '' : '<span style="position: absolute; bottom: 2px; font-size: 11px; color: #ffffff; background: #df3e9e; padding: 0 4px;">' + portletClubGrid[gridid].trans_PORTAL_pricefrom + ' ' + v.Price + '</span>'), '</div>',
				'</div>',
				'<div style="float: right; width: 100px;" title="', v.Name, '"><img src="http://images.citybreak.com/Image.aspx?imageid=', v.ImageId, '&width=100&height=100&crop=1" alt="" border="0" /></div>',
			'</div>'
		);
	});

	t.push('</div>');

	div.html(t.join(''));
}

function golfPackage_Click(onlineid, packageid) {
	var url = 'http://online2.citybreak.com/Book/Package/PackageStart.aspx?onlineid=' + onlineid + '&PackageId=' + packageid;
	jQuery.modal('<iframe src="' + url + '" height="500" width="710" frameborder="0" marginheight="0" marginwidth="0">Your browser does not support iframes.</iframe>', {});
}

var portletClubGrid_Tooltip = null;
var portletClubGrid_Tooltip_HtmlSet = false;
var portletClubGrid_Tooltip_VisibilitySet = false;

function portletClubGrid_ItemShow(e, gridid, id) {
	if (!portletClubGrid_Tooltip) {
		portletClubGrid_Tooltip = jQuery('#mgTooltip');
	}

	if (!portletClubGrid_Tooltip_HtmlSet) {
		jQuery.each(portletClubGrid[gridid].clubGridCells, function(key, value) {
			if (value.id == id) {
				portletClubGrid_Tooltip.html(value.tooltip);
				return false;
			}
		});
		portletClubGrid_Tooltip_HtmlSet = true;
	}

	if (!portletClubGrid_Tooltip_VisibilitySet) {
		portletClubGrid_Tooltip.css({ visibility: 'visible' });
		portletClubGrid_Tooltip_VisibilitySet = true;
	}

	var standardBody = (!window.opera && document.compatMode && document.compatMode != 'BackCompat') ? document.documentElement : document.body;
	var evt = (!e) ? window.event : e; //ie : mozilla
	var posX = 0;
	var posY = 0;

	if (e.pageX && e.pageY) {
		//mozilla
		posX = e.pageX + 12;
		posY = e.pageY + 12;
	} else {
		//ie
		posX = evt.clientX + standardBody.scrollLeft + 10;
		posY = evt.clientY + standardBody.scrollTop + 10;
	}

	portletClubGrid_Tooltip.offset({ left: posX, top: posY });
}

function portletClubGrid_ItemHide(gridid, id) {
	if (!portletClubGrid_Tooltip) {
		portletClubGrid_Tooltip = jQuery('#mgTooltip');
	}

	if (portletClubGrid_Tooltip_HtmlSet) {
		portletClubGrid_Tooltip.empty();
		portletClubGrid_Tooltip_HtmlSet = false;
	}

	if (portletClubGrid_Tooltip_VisibilitySet) {
		portletClubGrid_Tooltip.css({ visibility: 'hidden' });
		portletClubGrid_Tooltip_VisibilitySet = false;
	}
}

function FLabel(width, text, id, styles, showTitle, title) {
	//javascript version of MinGolf.Web.FLabel
	var sTitle = (typeof showTitle == 'boolean') ? showTitle : true;

	if (sTitle && (title || text))
		return '<div ' + ((id) ? 'id="' + id + '" ' : '') + 'class="mgEllipsis" style="width: ' + width + 'px' + ((styles) ? '; ' + styles : '') + '" title="' + ((title) ? title : text).replace(/\"/ig, '&quot;') + '">' + text + '</div>';
	return '<div ' + ((id) ? 'id="' + id + '" ' : '') + 'class="mgEllipsis" style="width: ' + width + 'px' + ((styles) ? '; ' + styles : '') + '">' + text + '</div>';
}
