/* Overlay */
var Overlay = {
	overlay_p_added: 0,
	
	// func_call to call when clicked
	show: function()
	{
		// create only if it's not added yet
		if (0 == this.overlay_p_added)
		{
			// add to the document
			document.body.appendChild(this.overlayPage())
			this.overlay_p_added = 1
		}
		
		// make overlay appear
		new Effect.Appear('overlay', { from: 0.0, to: 0.75, duration: 0.5 });
	},
	
	hide: function()
	{
		// fade out overlay
		new Effect.Fade('overlay', { from: 0.75, to: 0.0, duration: 0.5 });
		
		// remove overlay div after 0.5 second
		setTimeout("Overlay.removeDiv()", 500)
	},
	
	removeDiv: function()
	{
		// remove overlay div
		document.body.removeChild($('overlay'))
		this.overlay_p_added = 0
	},
	
	/*** PAGES ITSELF ***/
	
	overlayPage: function()
	{
		var overlay_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		overlay_d.setAttribute('id', 'overlay')
		overlay_d.setAttribute('style', 'opacity: 0.0')
		
		return overlay_d
	},
}

/* Free Quote */
var FreeQuote = {
	fq_added: 0, // free quote added or not
	fq_saved: null, // saved version of free quote
	fq_sent: 0, // whether a free quote has been sent
	fq_project_types: ["(X)HTML/CSS layout", "JavaScript", "PHP", "Ruby/Rails", "Other",],
	
	// show overlay free quote
	show: function()
	{
		this.fq_sent = 0 // fq has not been sent
		
		// show overlay
		Overlay.show()
		
		// show free quote page
		if (0 == this.fq_added)
		{
			// if fq saved exists, add it
			if (null != this.fq_saved)
			{
				document.body.appendChild(this.fq_saved)
				this.fq_saved = null
			}
			// otherwise create new
			else
				document.body.appendChild(this.mainPage())
			
			// set observers for clicks and keys down
			$('overlay').observe('click', this.onClck)
			document.observe('keydown', this.onKeyDown)
			
			this.fq_added = 1
		}
		
		// make free quote page appear
		new Effect.Appear('free_quote', { from: 0.0, to: 1.0, duration: 0.5 });
	},
	
	// hide and remove free quote
	hide: function()
	{
		// remove observers
		$('overlay').stopObserving('click', this.onClck)
		document.stopObserving('keydown', this.onKeyDown)
		
		// hide overlay
		Overlay.hide()
		
		// fade out free quote page
		new Effect.Fade('free_quote', { from: 1.0, to: 0.0, duration: 0.5 });
		
		// remove free quote page div after 0.5 second
		setTimeout("FreeQuote.removeDiv()", 500)
	},
	
	// removes free quote div
	removeDiv: function()
	{
		// save div if the form has not been sent yet
		if (0 == this.fq_sent)
			this.fq_saved = document.body.removeChild($('free_quote'))
		// don't sent if it was sent
		else
			document.body.removeChild($('free_quote'))
		
		this.fq_added = 0
	},
	
	// hides fq on escape
	onKeyDown: function(e)
	{
		// if escape key pressed
		if (27 == e.keyCode)
		{
			// hide everything
			FreeQuote.hide()
		}
	},
	
	// hides fq on overlay click
	onClck: function(e)
	{
		FreeQuote.hide()
	},
	
	// send free quote request
	send: function()
	{
		var name = $('fqf_name').value,
		email = $('fqf_email').value,
		proj = $('fqf_proj').value,
		desc = $('fqf_desc').value
		
		// check that data is filled up correctly
		var error = this.checkData(name, email, proj, desc)
		
		// if there is an error, return error
		if ('' != error)
		{
			alert(error)
			
			return false
		}
		
		// send request
		new Ajax.Request('/wp-content/themes/dennisbb/fq-send.php',
		{
			parameters: "name=" + encodeURIComponent(name) +
			"&email=" + encodeURIComponent(email) +
			"&proj=" + encodeURIComponent(proj) +
			"&desc=" + encodeURIComponent(desc),
			
			// disable submit button
			onCreate: function(transport)
			{
				var submit = $('fqf_submit')
				
				if (false == submit.disabled)
					submit.disabled = true
			},
			
			onSuccess: function(transport)
			{
				FreeQuote.showResp(transport.responseText)
			},
			
			onFailure: function(transport)
			{
				FreeQuote.showResp(0)
			}
		});
	},
	
	// show either thank you or error page
	showResp: function(resp)
	{
		var free_quote = $('free_quote'),
		free_quote_form = $('free_quote_form')
		
		this.fq_sent = 1 // fq has been sent
		
		// set free_quote's height
		free_quote.setStyle({ height: free_quote.getStyle('height') })
		
		free_quote.removeChild(free_quote_form)
		
		// if 1 show thank you page
		if (1 == resp)
		{
			free_quote.appendChild(this.thankYouPage())
		}
		// show error on everything else
		else
		{
			free_quote.appendChild(this.errorPage())
		}
	},
	
	// check input data
	checkData: function(name, email, proj, desc)
	{
		var error = ''
		
		// check that fields are not empty
		if (name.empty() || email.empty() || proj.empty() || desc.empty())
			error += "All fields in the form must be filled up."
		
		// check that email is of a valid type user@domain.com
		if (-1 == email.search(/.+\@.+\..+/))
		{
			if ('' != error)
				error += "\n"
			error += "Email must be of a valid type."
		}
		
		return error
	},
	
	/*** PAGES ITSELF ***/
	
	mainPage: function()
	{
		// free quote main page
		var free_quote_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		free_quote_d.setAttribute('id', 'free_quote')
		free_quote_d.setAttribute('style', 'opacity: 0.0')
		
		// close div
		var fq_close_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fq_close_d.setAttribute('id', 'free_quote_close')
		var fq_close_a = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
		fq_close_a.setAttribute('href', 'javascript: FreeQuote.hide()')
		var fq_close_img = document.createElementNS("http://www.w3.org/1999/xhtml", "img")
		fq_close_img.setAttribute('src', '/wp-content/themes/dennisbb/images/free-quote-close.png')
		fq_close_img.setAttribute('alt', 'Close')
		fq_close_a.appendChild(fq_close_img)
		fq_close_d.appendChild(fq_close_a)
		
		// append fq form to fq main page
		free_quote_d.appendChild(fq_close_d)
		free_quote_d.appendChild(this.formPage())
		
		return free_quote_d
	},
	
	formPage: function()
	{	
		// fq form div
		var fq_form_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fq_form_d.setAttribute('id', 'free_quote_form')
		
		// fq form h2
		var fq_form_h2 = document.createElementNS("http://www.w3.org/1999/xhtml", "h2")
		fq_form_h2.appendChild(document.createTextNode("Free Quote"))
		
		// fq form
		var fqf = document.createElementNS("http://www.w3.org/1999/xhtml", "form")
		fqf.setAttribute('method', 'POST')
		fqf.setAttribute('action', '')
		fqf.setAttribute('onsubmit', 'FreeQuote.send(); return false')
		
		// Name
		var fqf_name_dr = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_name_dr.setAttribute('class', 'fqf_row')
		var fqf_name_l = document.createElementNS("http://www.w3.org/1999/xhtml", "label")
		var fqf_name_dlc = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_name_dlc.setAttribute('class', 'fqf_lc')
		fqf_name_dlc.appendChild(document.createTextNode("Name"))
		var fqf_name_drc = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_name_drc.setAttribute('class', 'fqf_rc')
		var fqf_name_i = document.createElementNS("http://www.w3.org/1999/xhtml", "input")
		fqf_name_i.setAttribute('type', 'text')
		fqf_name_i.setAttribute('id', 'fqf_name')
		fqf_name_i.setAttribute('name', 'name')
		fqf_name_drc.appendChild(fqf_name_i)
		fqf_name_l.appendChild(fqf_name_dlc)
		fqf_name_l.appendChild(fqf_name_drc)
		fqf_name_dr.appendChild(fqf_name_l)
		
		// Email
		var fqf_email_dr = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_email_dr.setAttribute('class', 'fqf_row')
		var fqf_email_l = document.createElementNS("http://www.w3.org/1999/xhtml", "label")
		var fqf_email_dlc = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_email_dlc.setAttribute('class', 'fqf_lc')
		fqf_email_dlc.appendChild(document.createTextNode("Email"))
		var fqf_email_drc = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_email_drc.setAttribute('class', 'fqf_rc')
		var fqf_email_i = document.createElementNS("http://www.w3.org/1999/xhtml", "input")
		fqf_email_i.setAttribute('type', 'text')
		fqf_email_i.setAttribute('id', 'fqf_email')
		fqf_email_i.setAttribute('name', 'email')
		fqf_email_drc.appendChild(fqf_email_i)
		fqf_email_l.appendChild(fqf_email_dlc)
		fqf_email_l.appendChild(fqf_email_drc)
		fqf_email_dr.appendChild(fqf_email_l)
		
		// Project Type
		var fqf_proj_dr = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_proj_dr.setAttribute('class', 'fqf_row')
		var fqf_proj_l = document.createElementNS("http://www.w3.org/1999/xhtml", "label")
		var fqf_proj_dlc = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_proj_dlc.setAttribute('class', 'fqf_lc')
		fqf_proj_dlc.appendChild(document.createTextNode("Project Type"))
		var fqf_proj_drc = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_proj_drc.setAttribute('class', 'fqf_rc')
		var fqf_proj_i = document.createElementNS("http://www.w3.org/1999/xhtml", "select")
		fqf_proj_i.setAttribute('id', 'fqf_proj')
		fqf_proj_i.setAttribute('name', 'proj')
		// add options to select
		var opt;
		
		// add Select... option
		opt = document.createElementNS("http://www.w3.org/1999/xhtml", "option")
		opt.appendChild(document.createTextNode("Select..."))
		opt.setAttribute('value', '')
		
		fqf_proj_i.appendChild(opt)
		
		this.fq_project_types.each(function(item)
		{
			opt = document.createElementNS("http://www.w3.org/1999/xhtml", "option")
			opt.appendChild(document.createTextNode(item))
			
			fqf_proj_i.appendChild(opt)
		})
		fqf_proj_drc.appendChild(fqf_proj_i)
		fqf_proj_l.appendChild(fqf_proj_dlc)
		fqf_proj_l.appendChild(fqf_proj_drc)
		fqf_proj_dr.appendChild(fqf_proj_l)
		
		// Short Description
		var fqf_desc_dr = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_desc_dr.setAttribute('class', 'fqf_row')
		var fqf_desc_l = document.createElementNS("http://www.w3.org/1999/xhtml", "label")
		fqf_desc_l.setAttribute('for', 'fqf_desc')
		var fqf_desc_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_desc_d.appendChild(document.createTextNode("Short Description"))
		fqf_desc_l.appendChild(fqf_desc_d)
		fqf_desc_dr.appendChild(fqf_desc_l)
		
		var fqf_desc_dr2 = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_desc_dr2.setAttribute('class', 'fqf_row')
		var fqf_desc_i = document.createElementNS("http://www.w3.org/1999/xhtml", "textarea")
		fqf_desc_i.setAttribute('id', 'fqf_desc')
		fqf_desc_i.setAttribute('name', 'desc')
		fqf_desc_i.setAttribute('rows', '5')
		fqf_desc_i.setAttribute('cols', '10')
		fqf_desc_dr2.appendChild(fqf_desc_i)
		
		// Send
		var fqf_submit_dr = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fqf_submit_dr.setAttribute('class', 'fqf_row')
		var fqf_submit_i = document.createElementNS("http://www.w3.org/1999/xhtml", "input")
		fqf_submit_i.setAttribute('type', 'submit')
		fqf_submit_i.setAttribute('id', 'fqf_submit')
		fqf_submit_i.setAttribute('name', 'Submit')
		fqf_submit_i.setAttribute('value', 'Send')
		fqf_submit_dr.appendChild(fqf_submit_i)
		
		// assemble fqf
		fqf.appendChild(fqf_name_dr)
		fqf.appendChild(fqf_email_dr)
		fqf.appendChild(fqf_proj_dr)
		fqf.appendChild(fqf_desc_dr)
		fqf.appendChild(fqf_desc_dr2)
		fqf.appendChild(fqf_submit_dr)
		
		// create free quote form div
		fq_form_d.appendChild(fq_form_h2)
		fq_form_d.appendChild(fqf)
		
		return fq_form_d
	},
	
	thankYouPage: function()
	{
		// fq resp div
		var fq_resp_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fq_resp_d.setAttribute('id', 'free_quote_resp')
		
		// fq resp h2
		var fq_resp_h2 = document.createElementNS("http://www.w3.org/1999/xhtml", "h2")
		fq_resp_h2.appendChild(document.createTextNode("Thank You!"))
		
		// fq resp p
		var fq_resp_p = document.createElementNS("http://www.w3.org/1999/xhtml", "p")
		fq_resp_p.appendChild(document.createTextNode("Your request has been sent."))
		
		fq_resp_d.appendChild(fq_resp_h2)
		fq_resp_d.appendChild(fq_resp_p)
		
		return fq_resp_d
	},
	
	errorPage: function()
	{
		// fq resp div
		var fq_resp_d = document.createElementNS("http://www.w3.org/1999/xhtml", "div")
		fq_resp_d.setAttribute('id', 'free_quote_resp')
		
		// fq resp h2
		var fq_resp_h2 = document.createElementNS("http://www.w3.org/1999/xhtml", "h2")
		fq_resp_h2.appendChild(document.createTextNode("Error"))
		
		// fq resp p
		var fq_resp_p = document.createElementNS("http://www.w3.org/1999/xhtml", "p")
		fq_resp_p.appendChild(document.createTextNode("An error happened, please try again later."))
		
		fq_resp_d.appendChild(fq_resp_h2)
		fq_resp_d.appendChild(fq_resp_p)
		
		return fq_resp_d
	},
}