﻿

function callMeBack(container) {
	var self = this;
	this.container = container;
	this.button = null;
	this.window = null;
	this.timeout = null;
	this.completed = false;
	
	this.close = function() {
		clearTimeout(self.timeout);
		if(self.window) document.body.removeChild(self.window);
		if(self.capture) document.body.removeChild(self.capture);
		self.window = null;
		self.capture = null;
		document.body.onkeyup = null;
	}
	
	this.createCapture = function() {
		self.capture = document.createElement('div');
		self.capture.className = 'capture';
		document.body.appendChild(self.capture);
		self.capture.onclick = self.close;
	}
	
	this.createWindow = function() {
		self.window = document.createElement('div');
		self.window.className = 'callmeWin';
		document.body.appendChild(self.window);
		var ws = util.windowSize();
		var l = ((ws.width / 2) + 294)
		if(util.getMSIEVersion() == 0 || util.getMSIEVersion() > 7) {
			if(document.body.offsetHeight > ws.height) l = l - 9;
		}
		self.window.style.left = l + 'px';
		self.window.style.top = '0px';
	}
	
	this.createCloser = function() {
		var closer = document.createElement('div');
		closer.className = 'callMeCloser';
		self.window.appendChild(closer);
		closer.onclick = self.close;
	}

	this.keypress = function(e) {
		if(!e) e = window.event;
		var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
		if(keyCode == 27) {
			self.close();
		} else if(keyCode == 13) {
			self.submitClick();
		}
	}
	
	this.createField = function(name, type, id) {
		var c = document.createElement('div');
		var l = document.createElement('label');
		
		var f = null;
		if(type == 'select') {
			f = document.createElement('select');
		} else {
			f = document.createElement('input');
			f.type = 'text';
		}
		
		f.id = id;
		f.name = id;
		l.innerHTML = name;
		
		c.appendChild(l);
		c.appendChild(f);
		
		c.input = f;
		
		return c;
	}
	
	this.createFields = function() {
		self.window.appendChild(self.name = self.createField('Your name', 'text', 'callme_name'));
		self.window.appendChild(self.phone = self.createField('Phone number', 'text', 'callme_phone'));
		self.window.appendChild(self.when = self.createField('When shall we call?', 'select', 'callme_when'));

		util.createOption(self.when.input, 'As soon as possible', 'ASAP', true);
		util.createOption(self.when.input, 'In an hour', 'In an hour', false);
		util.createOption(self.when.input, 'Any time today', 'Anytime today', false);
		util.createOption(self.when.input, 'Sometime tomorrow', 'Tomorrow', false);
		
		self.submit = document.createElement('div');
		self.submit.className = 'callmeSubmit';
		self.window.appendChild(self.submit);
		self.submit.title = 'Submit your request';
		self.submit.onclick = self.submitClick;
	}
	
	this.show = function() {
		self.createCapture();
		self.createWindow();
		self.createCloser();
		self.createFields();
		
		self.name.input.focus();
		document.body.onkeyup = self.keypress;
	}
	
	this.casheBG = function() {
		if(util.getMSIEVersion() > 0 && util.getMSIEVersion() < 7) {
			util.cacheImage('images/callme_window.gif');
			util.cacheImage('images/callme_sent.gif');
		} else {
			util.cacheImage('images/callme_window.png');
			util.cacheImage('images/callme_sent.png');
		}
	}
	
	this.init = function() {
		self.casheBG();
	
		self.button = document.createElement('div');
		self.button.className = 'callMeButton';
		self.container.appendChild(self.button);
		self.button.onclick = self.show;
	}
	
	this.isValid = function() {
		if(self.phone.input.value.trim() == '' || !/(\d[ -]{0,}){6,}/.test(self.phone.input.value)) {
			alert('Please enter a valid phone number');
			self.phone.input.focus();
			return false;
		}
		return true;
	}
	
	this.submitClick = function() {
		if(!self.completed) {
			if(self.isValid()) {
				util.makeRequest('post/callme.aspx' +
					'?name=' + escape(self.name.input.value) + 
					'&phone=' + escape(self.phone.input.value) + 
					'&when=' + escape(self.when.input.value),
					self.complete);
				self.completed = true;
			}
		}	
	}
	
	this.complete = function(content) {
		self.window.removeChild(self.name);
		self.window.removeChild(self.phone);
		self.window.removeChild(self.when);
		self.window.removeChild(self.submit);
		self.window.onclick = self.close;
		
		self.window.className += ' callmeSent';
		
		self.timeout = setTimeout(self.close, 8000);
	}
	
	this.init();
}

var callMeObj = null;
util.addEvent(window, 'load', function() {
	var b = document.getElementById('phoneInfo');
	if(b) callMeObj = new callMeBack(b);
});