
function showEvent(id) {
  myWin = window.open('/Calendar/eventDetails.aspx?id='+id,'eventWin','height=300,width=360,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showRemoteEvent(id, host) {
  myWin = window.open('http://' + host + '/Calendar/eventDetails.aspx?id='+id,'eventWin','height=300,width=360,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showBirthday(id) {
  myWin = window.open('/Calendar/BirthdayMessage.aspx?id='+id,'birthdayWin','height=340,width=440,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showUser(id) {
  myWin = window.open('/Address/Details.aspx?user_id=' + id,'AddressWin','height=480,width=620,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showUserAndStaffRoleNotes(id, role_id) {
  myWin = window.open('/Address/Details.aspx?user_id=' + id + '&role_id=' + role_id,'AddressWin','height=480,width=620,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showOrg(id) {
  myWin = window.open('/Modules/FrontPage/Directory/OrgDetailsPopUp.aspx?org_id='+id,'AddressWin','height=600,width=500,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showUserWebOffice(id, enforce_readonly) {
  myWin = window.open('/Admin/Users/UserDetails/Details.aspx?user_id='+id+'&enforce_readonly='+(enforce_readonly ? 'true' : 'false'),'UserWin','height=550,width=770,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showOrgWebOffice(id) {
  myWin = window.open('/Admin/Organisations/OrganisationEdit.aspx?org_id='+id+'&org=true','UserWin','height=550,width=770,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showFamilyWebOffice(id) {
  myWin = window.open('/Admin/Users/UserDetails/Details.aspx?family_id='+id,'UserWin','height=480,width=620,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();  
}
function showFamily(id) {
  myWin = window.open('/Address/Details.aspx?family_id='+id,'AddressWin','height=480,width=620,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  myWin.focus();
}
function showRegistration(registration_id) {
  myWin = window.open('/Admin/PaymentGroups/EditRegistration.aspx?registration_id=' + registration_id,'RegWin','resizable=yes,scrollbars=yes,status=yes,width=850,height=650');
  myWin.focus();	
}
function showReceivable(receivable_id) {
  myWin = window.open("/Admin/PaymentGroups/EditReceivable.aspx?receivable_id="+receivable_id, "RxWin", "width=900,height=600,resizable=yes,scrollbars=yes");
  myWin.focus();
}
function showPaymentGroup(payment_group_id) {
  myWin = window.open("/Admin/PaymentGroups/PaymentGroup.aspx?payment_group_id="+payment_group_id, "PGWin", "width=900,height=600,resizable=yes,scrollbars=yes");
  myWin.focus();
}
function showShopOrderByShopOrderID(shop_order_id) {
  myWin = window.open("/Shop/Admin/Orders/EditOrder.aspx?shop_order_id="+shop_order_id+"&from_list_mode=unshipped", "ShopOrderWin", "width=900,height=600,resizable=yes,scrollbars=yes");
  myWin.focus();
}
function showShopOrderByLineID(line_id) {
  myWin = window.open("/Shop/Admin/Orders/EditOrder.aspx?line_id="+line_id+"&from_list_mode=unshipped", "ShopOrderWin", "width=900,height=600,resizable=yes,scrollbars=yes");
  myWin.focus();
}
function showShopOrder(order_id) {
  myWin = window.open("/Shop/Admin/Orders/EditOrder.aspx?order_id="+order_id+"&from_list_mode=unshipped", "ShopOrderWin", "width=900,height=600,resizable=yes,scrollbars=yes");
  myWin.focus();
}
function showShopItem(item_id) {
  myWin = window.open("/Shop/Admin/Sections/Items/ItemEdit.aspx?item_id="+item_id, "ShopItemWin", "width=900,height=600,resizable=yes,scrollbars=yes");
  myWin.focus();
}

function playShopMedia(file_id) {
  if (winMedia && !winMedia.closed) {winMedia.close()}
     var winMedia = window.open('/Media/Player.aspx?source=shop&file_id=' + file_id,'WinMedia','height=600,width=600,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
     winMedia.focus()
}

function insertMP3Button(mp3_url, div_id, size){
	loadJS('/Common/ThirdParty/swfobject.js');
	var rand = Math.floor(Math.random()*1000000);
	var swf_url = '/images/mp3_button.swf';
	var so = new SWFObject(swf_url+'?theFile='+escape(mp3_url), 'wimpy_button_' + rand, size, size, '9.0.115', '#006666');
	so.addParam("classid", "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000");
	so.addParam("wmode", "transparent");
	so.addParam("quality", "high");
	so.write(div_id);
}

function isInstalledFlashAtLeast(major, minor, revision){
	loadJS('/Common/ThirdParty/swfobject.js');
	
	var version = deconcept.SWFObjectUtil.getPlayerVersion();
	if (version['major'] < major) return false;
	if (version['major'] > major) return true;
	if (version['minor'] < minor) return false;
	if (version['minor'] > minor) return true;
	if (version['rev'] < revision) return false;
	return true;
}

function linkToSignupSheet(id) {
  document.location.href = '/Rotas/SignupSheet.aspx?sheet_id=' + id;
}

function loadJS(url) {
	if(!scriptSrcPresent(url)) {
		var head = document.getElementsByTagName("head")[0];
		script = document.createElement('script');
		script.type = 'text/javascript';
		script.src = url;
		head.appendChild(script);
	}
}

function scriptSrcPresent(url) {
	var scripts = document.getElementsByTagName("script");
	for (i=0; i<scripts.length; i++){
		if (scripts[i].src.match(url)) return true;
	}
	return false;
}

function loadLightBoxJS() {
	if(typeof( window[ 'myLightbox' ] ) == "undefined") {
		loadJS('/Common/ThirdParty/prototype.js');
		loadJS('/Common/ThirdParty/lightbox/js/effects.js');
		loadJS('/Common/ThirdParty/lightbox/js/lightbox.js');
	}
}

function executeWhenObjDefined(fun, objName) {
	if(typeof( window[ objName ]) == "undefined") {
		var delayedFun = function() {
			executeWhenObjDefined(fun, objName);
		};
		setTimeout(delayedFun, 50);
	} else {
		fun();
	}
}

function linkToImage(id) {
	//check if we can use lightbox
	if(typeof( window[ 'myLightbox' ] ) != "undefined" || !scriptSrcPresent('http://206.55.127.196/endis/IHOP/dashboard/mootools.compressed.83.js')) {
		loadLightBoxJS();
		var url = '/Media/AjaxImageData.aspx?image_id=' + id;
		var fun = function(doc) {
			var delayedFun = function() {
				var strSplit = doc.split(",");
				var strImageURL = strSplit[1];
				var strImageDescr = strSplit[2];
				var strImageCaption = strSplit[3];
				myLightbox.showEndisImage(strImageURL, '<i>' + strImageDescr + '</i><br />' + strImageCaption);
			};
			executeWhenObjDefined(delayedFun, 'myLightbox');
		};
		loadXMLDocAndCall(url, fun);
	} else {
		document.location.href = '/Publisher/Image.aspx?ID=' + id;
	}
}

function linkToImageURL(url, description) {
	//check if we can use lightbox
	if(!scriptSrcPresent('http://206.55.127.196/endis/IHOP/dashboard/mootools.compressed.83.js')) {
		loadLightBoxJS();
		var delayedFun = function() {
			myLightbox.showEndisImage(url, description);	
		};
		executeWhenObjDefined(delayedFun, 'myLightbox');
	} else {
		linkToImageURLPopup(url);
	}
}

function linkToImageURLPopup(url) {
	myWin = window.open(url,'ImagePopUp','height=480,width=620,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
  	myWin.focus();
}

function linkToFile(id) {
  document.location.href = '/Publisher/File.aspx?ID=' + id;
}

//For AJAX calls

function loadXMLDocAndCall(url, fun, errFun) {
	var thisXMLHttpRequest = false;
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			thisXMLHttpRequest = new XMLHttpRequest();
		} catch(e) {
			thisXMLHttpRequest = false;
		}
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
    	try {
    		thisXMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    	} catch(e) {
    		try {
    			thisXMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    		} catch(e) {
    			thisXMLHttpRequest = false;
    		}
		}
	}
	if(thisXMLHttpRequest) {
		thisXMLHttpRequest.onreadystatechange = processReqChange(fun, errFun, thisXMLHttpRequest);
		thisXMLHttpRequest.open("GET", url, true);
		thisXMLHttpRequest.send("");
	}
}

function processReqChange(fun, errFun, xmlHTTP) {
	return function() {
		// only if req shows "loaded"
		if (xmlHTTP.readyState == 4) {
			// only if "OK"
			if (xmlHTTP.status == 200) {
				var strResponse = xmlHTTP.responseText;
				if(fun) fun(strResponse);
			} else {
				if(errFun) {
					errFun(xmlHTTP.statusText);
				} else {
					alert("There was a problem retrieving the XML data:\n" + xmlHTTP.statusText);
				}
			}
		}
	}
}

function loadURLToInnerHTML(url, eName, loadingEl) {
	setElemDisplay(el(loadingEl), true);
	setElemDisplay(el(eName), false);
	var fun = function(doc) {
		setElemDisplay(el(loadingEl), false);
		setElemDisplay(el(eName), true);
		el(eName).innerHTML = doc;
	};
	loadXMLDocAndCall(url, fun);
}

function MarkAbuseAJAXCall(queryString, fun) {
	var errorFun = function(text) {alert('An error was encountered:\n' + text); };
	loadXMLDocAndCall('/Modules/UserControls/Comments/MarkAsAbusive.aspx?' + queryString, fun, errorFun);
}

function MarkCommentAsAbusive(cid, elToHideID1, elToHideID2) {
	if (confirm('REPORT THIS TO A MODERATOR \n\n\If you feel this comment is inappropriate you can report it to a \n\moderator, who will then review the comment and can remove it if necessary.\n\The comment will be hidden from view until a moderator reviews it. \n\n\Are you sure you want to report this comment to a moderator?')) {
		MarkAbuseAJAXCall('mark=comment&cid=' + cid);
		if(elToHideID1) {setElemDisplay(el(elToHideID1), false);}
		if(elToHideID2) {setElemDisplay(el(elToHideID2), false);}
	}
}
function MarkThreadAsAbusive(tid, fid) {
	if (confirm('REPORT THIS TO A MODERATOR \n\n\If you feel this discussion topic is inappropriate you can report it to a \n\moderator, who will then review the message and can remove it if necessary.\n\The discussion topic will be hidden from view until a moderator reviews it. \n\n\Are you sure you want to report this topic to a moderator?')) {
		MarkAbuseAJAXCall('mark=thread&tid=' + tid, function() {document.location.href = '/Forums/Threads.aspx?ForumID=' + fid;});
	} 
}
function SubscribeToComments(eid, et, a, elToHideID, elToShowID) {
	var errorFun = function(text) {alert('An error was encountered:\n' + text); };
	loadXMLDocAndCall('/Modules/UserControls/Comments/Subscribe.aspx?eid=' + eid + '&et=' + et + '&a=' + a, undefined , errorFun);
	if(elToHideID) {setElemDisplay(el(elToHideID), false);}
	if(elToShowID) {setElemDisplay(el(elToShowID), true);}
}

 var leftPos = (screen.availWidth-600) / 2;
 var topPos = (screen.availHeight-450) / 2;

function OpenChat() {
  myWin = window.open('/Chat/Default.aspx','chatWin','height=380,width=620,status=no,toolbar=no,menubar=no,location=no,scrollbars=no,resizable=yes,top='+topPos+',left='+leftPos);
  myWin.focus();  
}

var bShowSelectBoxes = false;

function showSelectBoxes(status) {
	// If using something other than IE, just exit
	// since IE is the only dodgy browser needing this trick
    if(!browserIsIE()) return;
	
	var elems = document.getElementsByTagName("SELECT");
	for(var i = 0; i < elems.length; i++)
		elems[i].style.visibility = (status ? 'visible' : 'hidden');
}

function OpenShopTermsAndConds() {
	window.open("/Shop/TermsAndConditions.aspx", "", "width=780,height=550,resizable=yes,scrollbars=yes");
}

function el(id) {
	return document.getElementById(id);
}

function eltn(name, parent) {
	return (parent?parent.getElementsByTagName(name):document.getElementsByTagName(name));
}

function getParentWithTagName(elem, tagName) {
	var parent = elem.parentNode;
	if(parent) {
		if(parent.tagName.toUpperCase() == tagName.toUpperCase()) {
			return parent;
		} else {
			return getParentWithTagName(parent, tagName);
		}
	}
}

function browserIsIE() {
	return (navigator.userAgent.indexOf("MSIE") >= 0) && (navigator.userAgent.indexOf("Opera") <  0);
}

function toggleDisplay(id) {
	toggleElemDisplay(el(id));
}

function toggleElemDisplay(elem) {
	setElemDisplay(elem, elem.style.display == "none");
}

function setElemDisplay(elem, blnDisplay, forceInline) {
	if(elem) {
		if(forceInline) {
			elem.style.display = (blnDisplay ? "inline" : "none");
		} else {
			elem.style.display = (blnDisplay ? "" : "none");
		}
	}
}

function elemAbsoluteX(eElement) {
	// initialize var to store calculations
	var nTopPos = eElement.offsetLeft; 
 	var eParElement = eElement.offsetParent; 

	// identify first offset parent element 
	while (eParElement != null) { 
		// move up through element hierarchy 
		nTopPos += eParElement.offsetLeft; 
		// appending top offset of each parent 
		eParElement = eParElement.offsetParent; 
		// until no more offset parents exist 
	}

	return nTopPos; 	
}

function elemAbsoluteY(eElement) {
	// initialize var to store calculations
	var nTopPos = eElement.offsetTop; 
 	var eParElement = eElement.offsetParent; 

	// identify first offset parent element 
	while (eParElement != null) { 
		// move up through element hierarchy 
		nTopPos += eParElement.offsetTop; 
		// appending top offset of each parent 
		eParElement = eParElement.offsetParent; 
		// until no more offset parents exist 
	}

	return nTopPos; 	
}

function setQSVal(strQS, key, val){
	var iKey = strQS.indexOf(key);
	if (iKey !== -1){
		var oldVal = '';
		var iAmp = strQS.indexOf('&', iKey);
		if (iAmp != -1){
			oldVal = strQS.substring(iKey, iAmp);
		}else{
			oldVal = strQS.substr(iKey);
		}
		if(val !== ''){
			return strQS.replace(oldVal, key + '=' + val);
		}else{
			var rep = (iKey == 1) ?	((iAmp != -1) ? oldVal + '&' : oldVal) : '&' + oldVal;
			return strQS.replace(rep, '');
		}
	}else{
		if(val !== ''){
			if(strQS !== ''){
				return strQS + '&' + key + '=' + val;
			}else{
				return '?' + key + '=' + val;
			}
		}else{
			return strQS;
		}
	}
}

var bIsModified = false;

function setModified(bAddOnBeforeUnload) {
	if (bAddOnBeforeUnload){
		window.onbeforeunload = WarnUser;
	}
	bIsModified = true;				
}

//IE treats javscript fired from <a> tags as if we were leaving the page, so we need a mechanism to side-step that
// We call NoWarningThisClick in the onclick of the offending <a> tags.
var bAllowWarning = true;
function WarnUser() {
	if (bAllowWarning)
		return "You have made changes that will be lost." ;
	else
		bAllowWarning = true;
}

function NoWarningThisClick(){
	if (browserIsIE())
		bAllowWarning = false;
}

function resetOnBeforeUnload(){
	window.onbeforeunload = null;
	bIsModified = false;
}

function isModified(){
	return bIsModified;
}

function addModificationNotifiers(bAddOnBeforeUnload) {
	//We need to keep the old onchange behavior
	//We put the actual setting of the onchange inside this local function to limit the scope of the old onchange function
	var setOnchange = function(el, oldOnChange) {
		if (oldOnChange) {
			el.onchange = function () {setModified(bAddOnBeforeUnload); this.oldonchange = oldOnChange; this.oldonchange();}
		} else {
			el.onchange = function () {setModified(bAddOnBeforeUnload);}
		}
	};

	for (var i = 0; i < document.forms.length; i++) {
		for (var j = 0; j < document.forms[i].elements.length; j++) {
			setOnchange(document.forms[i].elements[j], document.forms[i].elements[j].onchange);
		}
	}	  
}

function openFinancialGlossary() {
    var win = window.open("/Admin/Reports/SiteWideFinancialReports/Glossary.aspx?PopUp=true", "FG", "width=800,height=600,resizable=yes,scrollbars=yes,status=no,toolbar=no,menubar=no,location=no");
    win.focus();
}

function TrimString(str) {
	return str.replace(/^\s+|\s+$/g,"");
}

function LTrimString(str) {
	return str.replace(/^\s+/,"");
}

function RTrimString(str) {
	return str.replace(/\s+$/,"");
}

function loadFlashMedia(strPlayerID, strMediaID, strFileID, bPlay, intFileFormat) {
	var objMediaPlayer = el(strPlayerID);
	var objVideo;
	
	if (intFileFormat == 29) { //29 = VIDEO_SMIL
		objVideo = {provider:'rtmp', 'rtmp.loadbalance':'true'};
	} else {
		objVideo = {type:'video'};
	}
	objVideo.file = '/Media/PlayMedia.aspx?download=False&file_id=' + strFileID + '&media_id=' + strMediaID;
	
	objMediaPlayer.sendEvent('LOAD', objVideo);
	if (bPlay) {
		objMediaPlayer.sendEvent('PLAY', true);
	}
}

var arrMediaLists = new Array();

function registerMediaList(intMediaId, intFileId, strListTitle, intFileFormat) {
	var objMediaList = new Object();
	objMediaList.media_id = intMediaId;
	objMediaList.file_id = intFileId;
	objMediaList.list_title = strListTitle;
	objMediaList.file_format = intFileFormat;
	arrMediaLists.push(objMediaList);
}

var arrMediaPlayersListening = new Array();

function registerPlayerListener(strPlayerID, strListTitle) {
	var objPlayer = new Object();
	objPlayer.player_id = strPlayerID;
	objPlayer.list_title = strListTitle;
	arrMediaPlayersListening.push(objPlayer);
	
	el(strPlayerID).list_title = strListTitle;
}

function playMedia(media_id, file_id, intFileFormat, strListTitle) {
	var bFoundPlayer = false;
	//find the title
	if (intFileFormat == 12 || intFileFormat == 13 || intFileFormat == 29) { //12 = VIDEO_MP4, 13 = VIDEO_FLV, 29 = VIDEO_SMIL => can play in the flash player
		//run through playerlisteners and if any are listening then play the flash media...
		for (var i = 0; i < arrMediaPlayersListening.length; i++) {
			 if (arrMediaPlayersListening[i].list_title == strListTitle || arrMediaPlayersListening[i].list_title == '') {
				loadFlashMedia(arrMediaPlayersListening[i].player_id, media_id, file_id, true, intFileFormat);
				bFoundPlayer = true;
			 }
		}	
	}
	
	if (!bFoundPlayer) {
		if (winMedia && !winMedia.closed) {winMedia.close()}
		var winMedia = window.open('/Media/Player.aspx?media_id=' + media_id + '&file_id=' + file_id,'WinMedia','height=600,width=600,status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes');
		winMedia.focus()
	}
}

//This function is called by jwPlayer as documented at http://developer.longtailvideo.com/trac/wiki/Player4Api
function playerReady(objMediaPlayerInfo) {
	//oddly the media player object passed to this function isn't actually a media player...
	//We have to get the real player from the page.
	var objMediaPlayer = el(objMediaPlayerInfo.id);
	if (objMediaPlayer.list_title !== undefined) {
		for (var j = 0; j < arrMediaLists.length; j++) {
			if (arrMediaLists[j].list_title == objMediaPlayer.list_title || objMediaPlayer.list_title == '') {
				loadFlashMedia(objMediaPlayerInfo.id, arrMediaLists[j].media_id, arrMediaLists[j].file_id, objMediaPlayer.getConfig().autostart, arrMediaLists[j].file_format);
				break;
			}
		}
	}
}