function safeRemove(id){
	if( $(id) ) {
		Element.remove( id );				
	}
}
var bpx = {
	init:function(){
		$$("a.prompt").each(function(p){
			//add a click handler so that
		});
	}
	,doPromptLink:function(promptId){
		var oLink = $(promptId);
		bpx.ShowDropDown( promptId );
		var url = "index.cfm?action=getPromptLinks&prompt="+oLink.innerHTML;
		new Ajax.Request( url, {asynchronous:true, onSuccess:bpx.doPromptLink_OnSuccess, onFailure:errFunc});
	}
	,doPromptLink_OnSuccess:function(t){
		z = parseJSON( t.responseText );
		if( z.errMsg ) return;
		
		$("butDrpMnu1").innerHTML = z.html;
	}
	,CloseDropDown:function(event){
		if( bpx.openDropDownId == null ) return;
		
		var divElm = $(bpx.openDropDownId);
		
		safeRemove("btnDrpDwnOn");
		Element.hide( 'butDrpMnu');//must be left for link to fire
	
		bpx.openDropDownId = null;
		document.body.onclick = null;
	}
	,ShowDropDown:function(drpDownId,fixIE){
		
		if( bpx.openDropDownId ) bpx.CloseDropDown();
		bpx.openDropDownId = drpDownId;
		var divElm = $( bpx.openDropDownId );
		var divElmPos = divElm.cumulativeOffset();
		var html = '';
		safeRemove("btnDrpDwnOn");
		safeRemove("butDrpMnu");
		html += "<div id='btnDrpDwnOn' class='"+drpDownId+"'>" + divElm.innerHTML + "</div>";
		html += '<div id="butDrpMnu" class="'+drpDownId+'"><div id="butDrpMnu0"></div><div id="butDrpMnu1">';
			html += '<div class="ajaxMsg">loading</div>';
		html += '</div><div id="butDrpMnu2"></div></div>';
		new Insertion.Top( document.body, html );

		var xPos = divElmPos[0];
		//if( fixIE && Prototype.Browser.IE ) xPos-=9; -> Check if needed for IE7 and IE6
		
		var xTopPos = xPos;
						
		var w = 188;
				
		if (typeof document.body.style.maxHeight == "undefined") {
			
			//IE6 Specific
			if( (xPos + $("butDrpMnu").getWidth()) > document.viewport.getWidth() ) {				
				xPos = ( xPos - $("butDrpMnu").getWidth() ) + $(drpDownId).getWidth();
			}
		} else {
			if( (xPos+w+20) > document.viewport.getWidth() ) {
				xPos-=w;
				xPos+=$("btnDrpDwnOn").getWidth();
			}
		}	
		$("btnDrpDwnOn").style.left = xTopPos+"px";

		$("btnDrpDwnOn").style.top = (divElmPos[1])+"px";
		$("butDrpMnu").style.left = xPos+"px";
		$("butDrpMnu").style.top = (divElmPos[1]+19)+"px";
		
		Event.observe( document.body, "click", bpx.CloseDropDown, false );
	}
	,Forms:{
		SignUpForm:{
			onSubmit:function()
			{
				var errMsg = "";
				var f = $("signUpForm");
				if( f.userfirstname.value.length < 2 ) errMsg += "\r\nPlease provide first name.";
				if( f.userlastname.value.length < 2 ) errMsg += "\r\nPlease provide last name.";
				if( !f.useremail.value.isEmail() ) errMsg += "\r\nEmail address is invalid.";
				if( f.companyid.selectedIndex==0 ) errMsg += "\r\nPlease choose your BPX Organisation.";
				if( f.userpassword.value.length < 2 ) errMsg += "\r\nPlease provide a password.";
				if( f.userpassword.value != f.userpassword2.value ) errMsg += "\r\nYour password do not match - please enter them again.";
				if( errMsg == "" ) return true;
				alert("There are some problems with your form details:\r\n"+errMsg);
				return false;
			}
		}
		,LoginForm:{
			onPageLoad:function(){
				if($('loginFormEmail').value.blank()) $('loginFormEmail').focus();
				else if($('loginFormPassword').value.blank()) $('loginFormPassword').select();
			}
		}
	}
	,ShowHomeVideo:function(){
		if( $("flashcontent") ) $("flashcontent").style.display="none";
		Lightbox.onCloseCallBack = bpx.OnCloseHomeVideo;
		Lightbox.showBoxByID( "videoHolder", 650, 550, true );
		setTimeout( bpx.InitHomeVideoFlash, 1500 );
		return false;
	}
	,OnCloseHomeVideo:function(){
		if( $("flashcontent") ) $("flashcontent").style.display="block";
	},
	InitHomeVideoFlash:function(){
		var so = new SWFObject("swf/BPX_Video_Marcus.swf", "bonsVideo", "640", "530", "9", "#333333");
		if( document.all == null ) so.addParam("wmode", "transparent");
		so.write("videoHolder2");
	}
	,Contribute:function( objectType, objectId ){
		var url = "index.cfm?action=contribute&objectType="+objectType+"&objectId="+objectId;
		bpx.lastContribute_objectType = objectType;
		bpx.lastContribute_objectId = objectId;
		Lightbox.onCloseCallBack = bpx.OnCloseContributeLightbox;
		Lightbox.showBoxByAJAX( url, 900, 700, true );
	}
	,OnCloseContributeLightbox:function(){
		if( bpx.lastContribute_objectType == 'page' ) document.location.href = "index.cfm/page/" + bpx.lastContribute_objectId + "/updated/1";
	}
	,GetLoadingHTML:function(){
		return '<div style="padding:10px;"><img src="images/loading-circ.gif" width="18" height="18" alt="" border="0" align="absmiddle" hspace="4"/><strong style="color:#BBB;">Loading...</strong></div>';
	}	
	,ShowAddPageCommentForm:function(pageCode){
		var p = $( 'content' );
		if( $("pageCommentForm") == null ) 
			$(p).insert(
			  {'bottom' : '<div id="pageCommentForm">' + this.GetLoadingHTML() + '</div>'}
			);
		else $("pageCommentForm").innerHTML = this.GetLoadingHTML();
		
		var url = "index.cfm?action=getPagePostCommentForm";
		var pars = 'pageCode='+pageCode;
		new Ajax.Request( url, {asynchronous:true, onSuccess:bpx.ShowAddPageCommentForm_onSuccess, onFailure:errFunc, parameters:pars });
	}
	,ShowAddPageCommentForm_onSuccess:function(t){
		z = parseJSON( t.responseText );
		if( z.errMsg ) return;
		return false;
	}
	,ShowEditPageCommentForm:function(pageCode, pagecommentId){
		var p = $( 'content' );
		if( $("pageCommentForm") == null ) 
			$(p).insert(
			  {'bottom' : '<div id="pageCommentForm">' + this.GetLoadingHTML() + '</div>'}
			);
		else $("pageCommentForm").innerHTML = this.GetLoadingHTML();
		
		var url = "index.cfm?action=getPagePostCommentForm&pagecommentId="+pagecommentId;
		var pars = 'pageCode='+pageCode;
		new Ajax.Request( url, {asynchronous:true, onSuccess:bpx.ShowEditPageCommentForm_onSuccess, onFailure:errFunc, parameters:pars });
	}
	,ShowEditPageCommentForm_onSuccess:function(t){
		z = parseJSON( t.responseText );
		if( z.errMsg ) return;
		return false;
	}
	,OnSubmitPageCommentForm:function(){
		if( $('postCommentTextbox').value.blank() || $('postCommentTextbox').value == "Type your comment here" ){ new Effect.Highlight( $('postCommentTextbox') ); $('postCommentTextbox').focus(); return false; }
		new Ajax.Request( 'index.cfm', {asynchronous:true, onSuccess:bpx.OnSubmitPageCommentForm_success, onFailure:errFunc, parameters:Form.serialize( $( "pageCommentForm" ) ) });
		return false;
	}
	,OnSubmitPageCommentForm_success:function(t){
		z = parseJSON( t.responseText );
		bpx.ViewPageComments(z.PAGECODE);
		$('pageCommentForm').innerHTML = "";
	}
	,ViewPageComments:function(pageCode){
		var p = $( 'content' );
		if( $("pageComments") == null ) 
			$(p).insert(
			  {'bottom' : '<div id="pageComments">' + this.GetLoadingHTML() + '</div>'}
			);
		else $("pageComments").innerHTML = this.GetLoadingHTML();
		$('pageComments').scrollTo();
		var url = "index.cfm?action=getPageComments";
		var pars = 'pageCode='+pageCode;
		var myAjax = new Ajax.Updater(
			( 'pageComments' ), 
			url, 
			{
				method: 'post', 
				parameters: pars,
				onFailure: errFunc
			});
	},
	DeletePageComment:function( id ){
		var url = "index.cfm?action=deletepagecomment";
		var pars = 'pagecommentId='+id
		new Ajax.Request( url, {asynchronous:true, onSuccess:bpx.DeletePageComment_onSuccess, onFailure:errFunc, parameters:pars  });
	},
	DeletePageComment_onSuccess:function(t){
		z = parseJSON( t.responseText );
		bpx.ViewPageComments(z.pagecode);
	},
	
	Logs : {
		ShowPageEditorDiv:function( pageId ){
			var el = $("pageEditorName");
			if ( el.style.display != 'none' ) {
				//Effect.BlindUp(el);
				el.update("");
				el.hide();
			}
			else {
				bpx.Logs.ShowLog_Load( 'logsinfoofeditor', pageId );
				Effect.Appear(el);
			}
		},
		showLogs:function( id, pageId ){
			var el = $("hpshadeback"+id);
			if ( el.style.display != 'none' ) {
				//Effect.BlindUp(el);
				el.update("");
				el.hide();
			}
			else {
				bpx.Logs.ShowLog_Load( "logsinfo", pageId, "hpshadeback"+id );
				Effect.Appear(el);
				//el.show();
			}
		},
		ShowLog_Load:function( pageName, pageId, divId ){
			if( divId ){
				var url = "index.cfm?action="+pageName+"&pageId="+pageId+"&divId="+divId;
			}
			else{
				var url = "index.cfm?action="+pageName+"&pageId="+pageId;
			}
			new Ajax.Request( url, {asynchronous:true, onSuccess:bpx.Logs.ShowLog_Load_onSuccess, onFailure:errFunc });
		},
		ShowLog_Load_onSuccess:function(t){
			z = parseJSON( t.responseText );
			$(z.updateDiv).update(z.html);
		}
	}
}//End BPX


String.prototype.isEmail = function () { 
	var rx = new RegExp("\\w+([-+.\’\']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*"); 
	var matches = rx.exec(this); 
	return (matches != null && this == matches[0]); 
}

function LoadingAjax(txt) {
	if(typeof(txt)=="undefined") {
		txt = "Loading...";
	}
	return "<div class='ajaxMsg' id='widgetAjaxMsg'> "+txt+"</div>";
}

function parseJSON( json ){
	var o = eval('(' + json + ')');
	if( o.JS )
	{
		window.o = o;
		('<script>'+o.JS+'</script>').evalScripts();
	}
	if( o.redirectURL )
	{
		document.location = o.redirectURL;
		return;
	}
	if( $("message") != null ) new Element.remove( "message" );
	if( o.errMsg )
	{
		if( o.errMsgTitle == null ) o.errMsgTitle = "Error";
		if( o.errMsgTimer == null ) o.errMsgTimer = 5000;
		tw.ShowMessage( o.errMsgTitle, o.errMsg, "error", o.errMsgTimer, o.errMsgPosition );
		return o;
	}
	if( o.msgTitle || o.msg )
	{
		if( o.msgTimer == null ) o.msgTimer = 5000;
		tw.ShowMessage( o.msgTitle, o.msg, o.msgClass, o.msgTimer, o.msgPosition );
	}
	return o;
}
function HTMLEditFormat(val){
	var s = String(val);
	s = s.replace(/\"/g,"&quot;");
	s = s.replace(/\'/g,"");
	return s;
}

var errFunc = function(t) {
	var win = window.open("", "win", "width=1024,height=700,resizable=yes,scrollbars=yes,status=no"); // a window object
	win.document.open("text/html", "replace");
	win.document.write( "<html><body style='margin:0'><div style='border-bottom:1px solid #222;background:#666;padding:10px;'><h1 style='color:#FFF;margin:0;padding:0;'>Digital Crew Ajax Error</h1></div><div style='padding:10px;'>"+t.responseText.replace(/^\s+|\s+$/, '') + "</div></body></html>" );
	win.document.close();
	win.focus();
}