/* serverAddress - URL for server functions */
var serverAddress = "londonexp.php";

/* create XMLHttpRequest objects for communicating with server */
var xmlHttp;
var xmlHttp2;

var cache = new Array();

var DOMloading;
var DOMdivmenu;
var DOMopacity;
var opacity = 0.7;
var fileuploaded;
var slideshowincrement = 1;

var clickbuttoncontactformsubmit = function() {sendForm();};
var clickbuttoncontactformcancel = function() {initializeContactForm();};

// Global events manager
$(document).ready(function() {
	// initialize xmlHttp objects
	xmlHttp = createXmlHttpRequestObject();
	xmlHttp2 = createXmlHttpRequestObject();
	
	// DOM divs
	DOMloading = $('#divloading');
	DOMdivmenu = $('#divmenu');
	DOMopacity = $('#divopacity');

	// facebookshare
	$('#facebookshareicon').hover(function() {
		$(this).addClass('cursorpointer');
	}, function() {
		$(this).removeClass('cursorpointer');
	}).click(function() {document.location = "http://www.facebook.com/sharer.php?u=www.london-experience.fr/facebookshareindex.php";});	
	
	// divmenuitem links
	$('.divmenubuttoninactive').hover(function() {
		$(this).addClass('divmenubuttonhover');
	}, function() {
		$(this).removeClass('divmenubuttonhover');
	}).click(function() {
		$(this).addClass('divmenubuttonactive').parent().siblings().children().removeClass('divmenubuttonactive');
		displayPage(this.id.substr(8,this.id.length));
	});
	$('#content-main').addClass('divmenubuttonactive');
	
	// divlinkitem links
	$('.divlinkitem').hover(function() {
		$(this).addClass('divlinkitemhover');
	}, function() {
		$(this).removeClass('divlinkitemhover');
	}).click(function() {
		displayPage(this.id.substr(8,this.id.length));
	});
	
	$('.divmainwaytodolink').hover(function() {
		$(this).addClass('divmainwaytodolinkhover');
	}, function() {
		$(this).removeClass('divmainwaytodolinkhover');
	}).click(function() {
		$('#divmainwaytodotext').slideDown(1000);
	});
	
	// blink the link
	setTimeout(blinklink,3000);
	
	$('#divmaincitation').children().fadeIn(3000);
	$('.divmaincitationlink').hover(function() {
		$(this).addClass('divmaincitationlinkhover');
	}, function() {
		$(this).removeClass('divmaincitationlinkhover');
	}).click(function() {
		$('#divmaincitationcomplete').slideDown(1000);
	});
	
	// contact form
	$('.buttonform').hover(function() {
		$(this).addClass('buttonformhover');
	}, function() {
		$(this).removeClass('buttonformhover');
	}).click(function() {
		if (this.id == 'buttonsendform') sendForm();
	});
		
	// add all divvalidation & diverror after each formlineinput
	$('.formlineinput').after('<div class="formlinevalidation"></div><div class="formlineerror"></div>')
		// and hover on page input fields (type text & password)
		.children().filter(function() {return this.type == "text" || this.type == "password";}).addClass('divinput')
		.hover(function() {
			$(this).addClass('divinputhover');
		}, function() {
			$(this).removeClass('divinputhover');
		})
		// onblur on page input fields (type text & password) --> launch controlForms
		.blur(function() {controlForms($(this),this.id);
	});

	$('select').addClass('divinputselect').hover(function() {
		$(this).addClass('divinputselecthover');
	}, function() {
		$(this).removeClass('divinputselecthover');
	});
	
	$('textarea').addClass('divinputtextarea').hover(function() {
		$(this).addClass('divinputtextareahover');
	}, function() {
		$(this).removeClass('divinputtextareahover');
	});

	// click on buttoncontactformsubmit or buttoncontactformcancel
	$('#buttoncontactformsubmit').click(clickbuttoncontactformsubmit);
	$('#buttoncontactformcancel').click(clickbuttoncontactformcancel);

	// http links
	$('#divfooterlogo').click(function () {
		var newwindow=window.open();
		newwindow.location ='http://www.born2beonline.fr';
	});
	
	$('.divlinkhttp').hover(function () {
		$(this).addClass('divlinkhover');
	}, function() {
		$(this).removeClass('divlinkhover');
	})
	.click(function () {
		newwindow=window.open();
		switch (this.id) {
			case 'divlinkurbanpartner':
				newwindow.location ='http://www.urbanpartner.net';
				break;
			case 'divlinkenglishcvmodel':
				newwindow.location ='http://www.englishcvmodel.com';
				break;
			case 'divlinkvisitlondon':
				newwindow.location ='http://www.visitlondon.com';
				break;
		}
	});
	
	// formposted messages
	$('.divformpostedmessageclose').click(function() {
		$(this).parent().slideUp(500);
	});
	
	// launch slideshow
	$('#divslideshow' + slideshowincrement).show();
	setTimeout(slideshow,5000);
	
	$('.divinformationsmenuitem').hover(function() {
		$(this).addClass('divinformationsmenuitemhover');
	}, function() {
		$(this).removeClass('divinformationsmenuitemhover');
	}).click(function() {
		window.location = "index.php#anchor" + this.id.substr(19);
	});
		
	// display default page
	displayPage();
});

// GLOBAL FUNCTIONS

/* function to show loading div */
function showLoading() {
	DOMloading.show();
	if (DOMopacity.css('opacity') != opacity) DOMopacity.fadeTo(0,0,function() {DOMopacity.show().fadeTo(0,0.3)});
}

/* function to hide loading div */
function hideLoading() {
	DOMloading.hide();
	DOMopacity.fadeTo(0,0,function() {DOMopacity.hide();});
}

/* makes a server call to save current page */
function saveCurrentPage($page) {
	if(xmlHttp) {
		try {
			if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
				var params = "?action=savepage";
				if ($page) params += "&page=" + $page;
				xmlHttp.open("GET", serverAddress+params, false);
				xmlHttp.send(null);
				return xmlHttp.responseText;
			}
		}
		catch(e) {}
	}
	if (!$page) {
  		$page = "main";
	}
  	return $page;
}

// function that displays the requested page
function displayPage($page) {
	// save currentPage (if $page empty --> get last page --> if last page empty --> get main)
	var currentPage = saveCurrentPage($page);
	if (!currentPage) currentPage = "main";
	lastPage = currentPage;
	try {
		// enable divcontent for currentPage and hide all other divcontent
		$('#divcontent' + currentPage).show().children().show().parent().siblings().hide().children().hide();

		// if $page empty (refresh page) active menu of current page
		if (!$page) $('#content-' + currentPage).addClass('divmenubuttonactive').parent().siblings().children().removeClass('divmenubuttonactive');
				
		switch (currentPage) {
			case 'main':
				$('#divmaincitationcomplete').hide();
				hideLoading();
				break;
			case 'contactus':
				initializeContactForm();
				break;
			default:
				hideLoading();
				break;
		}
	}
	catch (e) {
		$('#divcontentmain').show().children().show().parent().siblings().hide().children().hide();
	}
}

// change image in slideshow
function slideshow() {
	$('#divslideshow' + slideshowincrement).fadeOut(1000);
	slideshowincrement++;
	if (slideshowincrement == 9) slideshowincrement = 1;
	$('#divslideshow' + slideshowincrement).fadeIn(1000);
	setTimeout(slideshow,5000);
}

// blink the link 
function blinklink() {
	$('#divmainwaytodolink1').fadeOut(1000,function() {$(this).fadeIn(1000);});
	setTimeout(blinklink,3000);
}

// function that prepare the contact form
function initializeContactForm() {
	$('#contactformvalidprogressbar').attr('className','validprogressbar0');
	
	// hide all formlineerror
	$('.formlineerror').hide();
	// hide all formlinevalidation
	$('.formlinevalidation').hide();
	
	// initialize input fields
	$('#contactforminputlastname').val('');
	$('#contactforminputfirstname').val('');
	$('#contactforminputcity').val('');
	$('#contactforminputemail').val('');
	$('#contactforminputphone').val('');
	$('#contactformselectjob').val('');
	$('#contactformselectexperience').val('');
	$('#contactformtextareamessage').val('');
	$('#contactformcheck1').attr('checked',false);
	$('#contactformcheck2').attr('checked',false);
	$('#contactformcheck3').attr('checked',false);
	$('#contactformcheck4').attr('checked',false);
	$('#contactforminputfilecv').val('');

	hideLoading();
}

// function to dynamically control forms
function controlForms($DOMelement,$id) {
	var error = "";
	// get value of the element
	var formvalue = $DOMelement.val();
	$DOMelement.val(trimAll(formvalue));
	
	if ($id.substr(0,11) == "contactform") error = controlcontactformSubmit($id,formvalue);
	if (error == "") {
		$DOMelement.parent().next().slideDown(100).next().html("").hide();
		return true;
	}
	$DOMelement.parent().next().html("").hide().next().html(error).slideDown(100);
	return false;
}

/* makes a server call to check if e-mail already exists */
function checkExistingValue($type,$value) {
	if (!$type || !$value) return false;

	// don't do anything if the XMLHttpRequest object is null
	if(xmlHttp) {
		// call server asynchronously
		try {
			if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
				var params = "?action=checkexistingvalue&value=" + URLEncode($value);
				xmlHttp.open("GET", serverAddress+params, false);
				xmlHttp.send(null);
				return xmlHttp.responseText;
			}
		}
		catch(e) {
		}
	}
  	return false;
}

// function to control contact form
function controlcontactformSubmit($id,$formvalue) {
	try {
		// control mandatory fields
		if (($id == "contactforminputlastname" || $id == "contactforminputfirstname" || $id == "contactforminputcity" || $id == "contactforminputemail" || $id == "contactforminputphone") && isEmpty($formvalue))
			return "Vous devez renseigner ce champ.";

		// check e-mail format
		if ($id == "contactforminputemail" && !isValidEmail($formvalue)) return "Format d'E-mail invalide.";
	}
	catch (e) {
	}
	// no error
	return "";
}


/* makes a server call to send mail */
function sendForm() {
	showLoading();

	// check all fields
	var validform = true;
	var countvalidation = 2;
	try {
		$('.formlineinput').children().filter(function() {return this.id.substr(0,11) == "contactform" && (this.type == "text" || this.type == "password");}).each(function(index) {
			if (!controlForms($(this),this.id)) validform = false;
			else countvalidation++;
		});
		$('#contactformselectjob').parent().next().show();
		$('#contactformselectexperience').parent().next().show();

		countvalidation = countvalidation * 5 / 7;
		$('#contactformvalidprogressbar').attr('className','validprogressbar' + countvalidation.toFixed(0));

		if (validform) {
			// no error
			$('#buttoncontactformsubmit').parent().next().next().html("").hide();
			$.ajaxFileUpload({
				url:serverAddress+'?action=fileupload',
				secureuri:false,
				fileElementId:'contactforminputfilecv',
				dataType: 'json',
				success: function (data, status) {
					if(typeof(data.error) != 'undefined') {
						if(data.error != '') {
							finalizesendingform("");
						}
						else {
							finalizesendingform(data.msg);
						}
					}
				},
				error: function (data, status, e) {
					finalizesendingform("");
				}
			});
		}
		else {
			hideLoading();
			$('#buttoncontactformsubmit').parent().next().next().html("Vous devez corriger les erreurs !").slideDown(100);
		}
	}
	catch (e) {
	}
}

function finalizesendingform($fileuploaded) {
	var info1 = "Non";
	if ($('#contactformcheck1').attr('checked')) {
		info1 = "Oui";
	}
	var info2 = "Non";
	if ($('#contactformcheck2').attr('checked')) {
		info2 = "Oui";
	}
	var info3 = "Non";
	if ($('#contactformcheck3').attr('checked')) {
		info3 = "Oui";
	}
	var info4 = "Non";
	if ($('#contactformcheck4').attr('checked')) {
		info4 = "Oui";
	}
	
	// prepare parameters for the POST
	cache.push("action=sendmail&firstname=" + URLEncode($('#contactforminputfirstname').val()) + "&lastname=" + URLEncode($('#contactforminputlastname').val()) 
				+ "&city=" + URLEncode($('#contactforminputcity').val()) + "&email=" + URLEncode($('#contactforminputemail').val()) 
				+ "&phone=" + URLEncode($('#contactforminputphone').val()) + "&job=" + URLEncode($('#contactformselectjob').val()) 
				+ "&experience=" + URLEncode($('#contactformselectexperience').val()) + "&info1=" + info1 + "&info2=" + info2
				+ "&info3=" + info3 + "&info4=" + info4 + "&message=" + URLEncode($('#contactformtextareamessage').val()) + "&fileuploaded=" + $fileuploaded);
	
	if(xmlHttp) {
		if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) && cache.length > 0) {
			var cacheEntry = cache.shift();
			xmlHttp.open("POST", serverAddress, true);
			xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			xmlHttp.onreadystatechange = handleSendingForm;
			xmlHttp.send(cacheEntry);
		}
	}
}

/* function that handles the http xmlResponse */
function handleSendingForm() {
	if (xmlHttp.readyState==4) {
		if (xmlHttp.status == 200) {
			hideLoading();
			try {
				var xmlResponse=xmlHttp.responseXML;
				if (xmlResponse) {
					var xmlRoot = xmlResponse.documentElement;
					if (xmlRoot) {
						var answerArray = xmlRoot.getElementsByTagName("mail");
						if (answerArray.item(0).firstChild.data == "OK") {
							$('#divformpostedOK').slideDown(500);
							
							// add google AdWord conversion script
							var googleconversionscript = '<!-- Google Code for Soumission du formulaire de prise de contact Conversion Page -->';
							googleconversionscript += '<script type="text/javascript">';
							googleconversionscript += '/* <![CDATA[ */';
							googleconversionscript += 'var google_conversion_id = 971493529;';
							googleconversionscript += 'var google_conversion_language = "fr";';
							googleconversionscript += 'var google_conversion_format = "2";';
							googleconversionscript += 'var google_conversion_color = "ffffff";';
							googleconversionscript += 'var google_conversion_label = "r6RQCM-pywIQmaGfzwM";';
							googleconversionscript += 'var google_conversion_value = 0;';
							googleconversionscript += 'if (250) {google_conversion_value = 250;}';
							googleconversionscript += '/* ]]> */';
							googleconversionscript += '</script>';
							googleconversionscript += '<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js"></script>';
							googleconversionscript += '<noscript><div style="display:inline;"><img height="1" width="1" style="border-style:none;" alt="" src="http://www.googleadservices.com/pagead/conversion/971493529/?value=250&amp;label=r6RQCM-pywIQmaGfzwM&amp;guid=ON&amp;script=0"/></div></noscript>';
							$('#divcontactussubmit').after(googleconversionscript);
							
							initializeContactForm();
						}
						else {
							$('#divformpostedKO').slideDown(500);
						}
					}
				}
			}
			catch(e) {	
				$('#divformpostedKO').slideDown(500);
			}
		}
	}
}

