// ------------------------------------------------------------------------------------------
/*
	20100202	tomc
	SEDDON DEVELOPMENT PAGE
	POPUP FORMS AND RELATED CLASSES
*/
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
/*
	DESKTOP DIMMER
*/
// ------------------------------------------------------------------------------------------
var Dimmer = new Class({
	Implements		:[Options, Events],
	options			:{
		
	},
	element			:false,
	
	
	/*
		CONSTRUCTOR
	*/
	initialize: function(options){
		this.setOptions(options);
		
		this.element = new Element("div", {
			styles				:{
				display			:"none",
				position		:"absolute",
				zIndex			:1000,
				background		:"#000000",
				opacity			:0
			},
			events:{
				click:this.end.bind(this)
			}
		}).inject(document.getElement("body"));
	},
	
	
	begin:function(){
		this.fireEvent("begin");
		
		this.element.setStyle("display","block");
		this.element.setPosition({x:0,y:0});
		this.element.setStyles({
			width	:document.getScrollSize().x,
			height	:document.getScrollSize().y
		});
		
		this.element.fade(0.60);
	},
	
	
	end:function(){
		this.fireEvent("end");
		this.element.fade(0);
	}
	
});
// ------------------------------------------------------------------------------------------



// ------------------------------------------------------------------------------------------
/*
	SEDDON DEVELOPMENT CONTACT FORM
*/
// ------------------------------------------------------------------------------------------
var ContactForm = new Class({
	Implements		:[Options],
	options			:{
		dimmer		:false,
		element		:false,
		frameEl		:false,
		formEl		:false
	},
	frameInSize		:false,		// frame at full size
	frameOutSize	:false,		// frame at min size
	framePosition	:false,		// calcluated static 
	
	
	/*
		CONSTRCUTOR
	*/
	initialize: function(options){
		this.options = $H(options);
		this.options.extend( options );
		
		if(this.options.dimmer){
			this.options.dimmer.addEvents({
				end:this._end.bind(this)
			});
		}
		
		this.options.formEl.getElements(".close").addEvents({ click:this.end.bind(this) });
		this.options.formEl.getElements(".submit").addEvents({ click:this.send.bind(this) });
		
		
		/*
			calculate frame sizes
		*/
		this.options.frameEl.setStyles({
			display		:"block"
		});		
		
		this.calcPositions();
		
		// position frame for begin //
		this.options.frameEl.setStyles({
			display			:"none",
			visibility		:"visible",
			marginTop		:this.positions.frameOutPos.y,
			marginLeft		:this.positions.frameOutPos.x
		});
		
		// ie6 position:fixed not possible //
		if( Browser.Engine.trident && Browser.Engine.version <= 4 ) this.options.frameEl.setStyle("position","absolute");
		
		
		/*
			SUBMIT
		*/
		this.options.formEl.set("send",{
			onSuccess:function(t,x){
				var displayError	= false;
				var error			= "";
				
				// QUERY SUCCESS //
				if( r = $H(JSON.decode(t)) ){				
					if( r.badMessage ) error = r.badMessage;
					
					if( r.valid && r.success ){
						displayError = false;
						this.options.formEl.getElement(".form").addClass("n");
						this.options.formEl.getElement(".ok").removeClass("n");
					}
					else if( !r.valid ){
						displayError = true;
						// hightlight the field //
						this.options.formEl.getElements('[name='+ r.badName + ']').highlight();
						Recaptcha.reload();
					}
					else if( !r.success ){
						displayError = true;
					}
				}
				else {
					this.options.formEl.getElement(".message .enq-html-message").setProperty("text", "Error Sending Message");
				}
				
				// DISPLAY ERROR //
				if( displayError ){
					this.options.formEl.getElement(".message .enq-html-message").setStyles({
						display	:"block"
					}).setProperties({
						text	:error
					});
				}
				else{
					this.options.formEl.getElement(".message .enq-html-message").setStyles({
						display	:"none"
					});
				}
				
				this.options.formEl.slide("in");
				
			}.bind(this)
		});
		this.options.formEl.addEvent("submit",function(e){
			if(e) e.stop();
			this.send();
			return false;
		});
	},
	
	
	begin:function(){
		if(this.options.dimmer) this.options.dimmer.begin();
		
		// setup frame for begin //
		this.options.frameEl.setStyles({
			display		:"block",
			opacity		:0
		});
		
		/*
			SCREEN TOO SMALL??
		*/
		if( this.frameInSize.y > window.getSize().y ){
			
			this.options.frameEl.setStyles({
				position	:"absolute",
				top			:10,
				marginTop	:0
			});
			this.options.formEl.slide("in");
			this.options.frameEl.morph({
				//marginTop	:this.positions.frameInPos.y,
				//marginLeft	:this.positions.frameInPos.x,
				opacity		:1
			});

			new Fx.SmoothScroll(window).toTop();
		}
		else {
			
			this.options.frameEl.setStyles({
				position	:(Browser.Engine.trident && Browser.Engine.version <= 4) ? "absolute" : "fixed",
				top			:"50%",
				marginTop	:this.positions.frameOutPos.y
			});
			
			this.options.formEl.slide("in");
			this.options.frameEl.morph({
				marginTop	:this.positions.frameInPos.y,
				marginLeft	:this.positions.frameInPos.x,
				opacity		:1
			});
		}
	},
	
	_end:function(){
		var frame		= this.options.frameEl;

		this.options.formEl.slide("out");
		
		frame.set("morph",{onComplete:function(){
			frame.setStyle("display","none");
			frame.set("morph",{onComplete:$empty});
		}});
		frame.morph({
			marginTop		:this.positions.frameOutPos.y,
			marginLeft		:this.positions.frameOutPos.x,
			opacity			:0
		});
	},
	
	end:function(){
		if(this.options.dimmer)
			this.options.dimmer.end();
		else
			this._end();
	},
	
	calcPositions:function(){
		this.options.formEl.slide("show");
		this.frameInSize 	= this.options.frameEl.getSize();
		this.options.formEl.slide("hide");
		this.frameOutSize	= this.options.frameEl.getSize();
		
		this.positions = {
			frameOutPos	:{
				x		:(0 - this.frameOutSize.x) / 2,
				y		:(0 - this.frameOutSize.y) / 2
			},
			frameInPos	:{
				x		:(0 - this.frameInSize.x) / 2,
				y		:(0 - this.frameInSize.y) / 2
			}
		};
		return this.positions;
	},
	
	send:function(){
		this.options.formEl.fireEvent("submit");
	}
});
// ------------------------------------------------------------------------------------------




// ------------------------------------------------------------------------------------------
/*
	SEDDON VIRTUAL 360 TOUR
*/
// ------------------------------------------------------------------------------------------
var virtual360 = new Class({
	Implements		:[Options],
	options			:new Hash({
		dimmer		:false,
		width		:640,
		height		:480,
		src			:"http://www.google.co.uk/"
	}),
	tourDiv			:false,
	
	/*
		CONSTRCUTOR
	*/
	initialize: function(options){
		this.options.extend( options );
		
		if(this.options.dimmer){
			this.options.dimmer.addEvents({
				end:this.end.bind(this)
			});
		}
	},
	
	begin:function(){
		this.options.dimmer.begin();
		
		html = '<a class="vtour-close click" style="position:absolute; top:0; right:0; width:32px; padding:4px 18px 4px 4px; color:white; background:#000000 url(/grx/ui/cross.png) no-repeat 100% 50%">close</a>';
		html += '<iframe src="'+this.options.src+'" width="'+this.options.width+'" height="'+this.options.height+'" frameborder="0"></iframe>';
		
		this.tourDiv = new Element( "div", {
			"class"			:"vtour-parent",
			html			:html,
			styles			:{
				position	:(Browser.Engine.trident && Browser.Engine.version <= 4) ? "absolute" : "fixed",
				zIndex		:2000,
				top    		:"50%",
				left		:"50%",
				overflow	:"hidden",
				width		:this.options.width,
				height		:this.options.height,
				marginTop	:-(this.options.height/2),
				marginLeft	:-(this.options.width/2),
				border		:"none",
				background	:"#000000"
			}
		}).inject(document.getElement("body"), "top");
		
		/*
			SCREEN TOO SMALL??
		*/
		if( this.tourDiv.getPosition().y < 10 ){
			this.tourDiv.setStyles({
				position	:"absolute",
				top			:"10px",
				marginTop	:"0"
			});
			new Fx.SmoothScroll(window).toTop();
		}
		
		// MAKE CLOSE FUNCTIONAL //
		this.tourDiv.getElements("a.vtour-close").addEvents({
			click			:this.options.dimmer.end.bind(this.options.dimmer)
		});
	},
	
	end:function(){
		if( this.tourDiv ){
			this.tourDiv.destroy();
			this.tourDiv = false;
		}
	}
});
// ------------------------------------------------------------------------------------------

