//Capitalize the first letter of fields
function initialCap(field) { field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);}

function validate_required(field,alerttxt) {
	with (field) {
		if (value == null || value == "") {alert(alerttxt); return false;}
		else {return true}
	}
}
 
function validate_contactUsForm(thisform) {
	with (thisform){
		if (validate_required(first_name, "Please enter your first name.") == false) {first_name.focus(); return false;}
		if (validate_required(last_name, "Please enter your last name.") == false) {last_name.focus(); return false;}
		if (validate_required(email, "Please enter your email address.") == false) {email.focus(); return false;}
		if (validate_required(phone, "Please enter your phone number.") == false) {phone.focus(); return false;}
		if (validate_required(company, "Please enter your company name.") == false) {company.focus(); return false;}
		if (validate_required(URL ,"Please enter your website URL.") == false) {URL.focus(); return false;}
		if (validate_required(employees, "Please enter the number of employees in your company.") == false) {employees.focus(); return false;}
	}
}
 
 
function validate_signupForm(thisform){
	with (thisform){
		if (validate_required(first_name, "Please enter your first name.") == false) {first_name.focus(); return false;}
		if (validate_required(email, "Please enter your email address.") == false) {email.focus(); return false;}
	}
}

var QueryString = Class.create({
	initialize : function (options) {
		this.options = {
			separator: '?'
		}
		Object.extend(this.options, options || {});
		
		this.url = location.toString();
		this.qs = this.url.split(this.options.separator)[1];
		(this.qs) ? this.qsPairs = this.qs.split("&") : this.qsPairs = [];
	},
	
	hasQueryString : function() {
		(this.qs) ? r=true : r=false;
		return r;
	},
	
	hasParameter : function(p) {
		(this.qs.indexOf(p) != -1) ? r=true : r=false;
		return r;
	},
	getQueryString : function() {
		return this.qs;
	},
	
	getParameter : function(p) {
		if (this.hasParameter(p)) {
			for(i=0;i<this.qsPairs.length; i++) {
				if (this.qsPairs[i].split("=")[0] == p) {
					r = this.qsPairs[i].split("=")[1];
				}
			}
		}
		else {
			r = null;
		}
		return r;
	}
});

var CaseStudies = Class.create({
	initialize : function(obj, options) {
		this.options = {
			mOverBGcolor: '#f5f5f5',
			mOutBGcolor: '#fff'
		};
		this.obj = Element.extend(document.getElementById(obj));
		Object.extend(this.options, options || {});

		scope = this;
		this.containers = this.obj.childElements();
		this.containers.each(function(c) {
			c.onmouseover = function() {this.setStyle({'background': scope.options.mOverBGcolor})};
			c.onmouseout = function() {this.setStyle({'background': scope.options.mOutBGcolor})};		
		});
		
		this.links = $$('.' + this.containers[0].className + ' a.expander');
		this.links.each(function(lnk) {Event.observe(lnk,"mouseup",scope.toggle);});
		this.openCaseStudy = null;
	},
	toggle : function(trigger) {
		Object.extend(trigger);
		if (Object.inspect(trigger) == "[object MouseEvent]" || Object.inspect(trigger) == "[object Event]") {
			lnk = this;
			current = this.next();
		}
		else {
			lnk = $(trigger).previous();
			current = $(trigger);
		}
		
		
		//nothing is open, so open the selected case study
		if(scope.openCaseStudy == null) {
			new Effect.toggle(current,'blind', {duration:0.5, queue: {position:'end', scope:'casestudy'}, afterFinish: function() {new Effect.ScrollTo(current.up(), {offset: -15, duration:0.5});}});
			scope.openCaseStudy = current;
			lnk.innerHTML = "Close case study"; 
			lnk.up().onmouseover = null; 
			lnk.up().onmouseout = null; 
			lnk.up().setStyle({'background': '#f5f5f5'});
			pageTracker._trackPageview(lnk.href);
		}
		
		//close the currently open case study
		else if(scope.openCaseStudy == lnk.next()) {
			new Effect.toggle(current,'blind', {duration:0.5, queue: {position:'end', scope:'casestudy'}});
			scope.openCaseStudy = null;
			lnk.innerHTML = "Read case study";
			lnk.up().onmouseover = function() {this.setStyle({'background': '#f5f5f5'})};
			lnk.up().onmouseout = function() {this.setStyle({'background': '#fff'})};
		}
		
		//close the currently open case study and open the newly selected one
		else {
			new Effect.Parallel([
				new Effect.BlindDown(current, {sync: true}), 
				new Effect.BlindUp(scope.openCaseStudy, {sync: true})
			], {duration: 0.5, queue: {position:'end', scope:'casestudy'}, afterFinish: function() {console.log(current.up()); new Effect.ScrollTo(current.up(), {offset: -15, duration:0.5});}});
			lnk.innerHTML = "Close case study"; 
			lnk.up().onmouseover = null; 
			lnk.up().onmouseout = null; 
			lnk.up().setStyle({'background': '#f5f5f5'});
			scope.openCaseStudy.previous().innerHTML = "Read case study";
			scope.openCaseStudy.up().onmouseover = function() {this.setStyle({'background': '#f5f5f5'})};
			scope.openCaseStudy.up().onmouseout = function() {this.setStyle({'background': '#fff'})};
			scope.openCaseStudy.up().setStyle({'background': '#fff'});
			scope.openCaseStudy = current;
			pageTracker._trackPageview(lnk.href);
		}
	}
});