var langue_session="";
var langue_reference="";

/*************************************************
	XHR Object Def Function
**************************************************/

function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		//todo : remplacer par un renvoi vers une page explicative multilingue native
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
	
	return xhr;
}

/*****************************************************
	Change Session_Var function
******************************************************/

function change_var(variables, callback) {
	var xhrw = getXMLHttpRequest();
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			if (callback) {
				eval(callback)(xhrw.responseText);
			}//endif
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	variables +="&require_php_file=/services/Modif_session.php";
	xhrw.open("POST", "/services/PHP_request.php", true);
	xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhrw.setRequestHeader("Content-length", variables.length);
	xhrw.setRequestHeader("Connection", "close");
	xhrw.send(variables);
};

/*****************************************************
	Sauvegarde Session
******************************************************/

function sauvegarde_session(id,user,activity_time) {
	if (id) {localStorage.setItem('session_id', id);}
	if (user) {localStorage.setItem('session_user', user);}
	if (activity_time){localStorage.setItem('session_activity_time', activity_time);}
};

function lecture_session() {
	var user = localStorage.getItem('session_user');
	if ((user.length>0) && (user!="nosuer")) {
		alerte("Attention ! \n\nPensez à utiliser le bouton ‘Déconnexion‘ avant de quitter le site.\nCela vous assure que personne ne peut se connecter\navec votre session juste après vous, mais cela permet également\naux autres utilisateurs du site de savoir que vous êtes hors ligne,\nnotamment pour les jeux et dialogues en ligne.");
	}//endif
};

/*****************************************************
	Select Language
******************************************************/

function sauvegarde_language_reference(lg) {
	localStorage.setItem('langue_reference', lg);
};

function sauvegarde_language(lg) {
	localStorage.setItem('langue_session', lg);
};

function select_language(lg) {
	
};

function sauvegarde_home(id) {
	localStorage.setItem('home', id);
};

/*****************************************************
Diffusion d'une alerte dans la langue sélectionnée
******************************************************/

function alerte(chaine) {
	var xhrw = getXMLHttpRequest();
	var langue_session 	= localStorage.getItem('langue_session');
	var langue_ref		= localStorage.getItem('langue_reference');
	var variables 		= "requete_js="+chaine+"&lg="+langue_session+"&lgref="+langue_ref;
		
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			alert(xhrw.responseText);
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	variables +="&require_php_file=/services/Translator.php";
	xhrw.open("POST", "/services/PHP_request.php", true);

	xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhrw.setRequestHeader("Content-length", variables.length);
	xhrw.setRequestHeader("Connection", "close");
	xhrw.send(variables);
	
};

/*****************************************************
	Mise à jour de l'affichage Editorial - Schedule
******************************************************/

function editorial_schedule(selected_date) {
	var xhrw = getXMLHttpRequest();
		
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
				var table_retour = JSON.parse(xhrw.responseText);
				if (table_retour.limage!=null) {
					add_image("image_schedule",table_retour.limage);
				}
				if (table_retour.lintro!=null) {
					document.getElementById("intro_schedule").innerHTML = table_retour.lintro;	
				}
				if (table_retour.larticle!=null) {
					document.getElementById("article_schedule").innerHTML = table_retour.larticle;	
				}
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	variables = "ladate="+selected_date;
	variables +="&require_php_file=/services/Editorial_schedule.php";
	xhrw.open("POST", "/services/PHP_request.php", true);
	xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhrw.setRequestHeader("Content-length", variables.length);
	xhrw.setRequestHeader("Connection", "close");
	xhrw.send(variables);
};

/*****************************************************
	Vérification formulaire
******************************************************/

function verif_form(champ, letype, serveur) {
	
}

function compare_champs_form(formulaire, champ1, champ2, visuel_erreur, visuel_ok) {
	var form 	= document.getElementById(formulaire);
	var valeur1	= form[champ1].value;
	var valeur2	= form[champ2].value;
	if (valeur1!=valeur2) {
		if (visuel_erreur) {
		  	document.getElementById(visuel_erreur).style="visibility:visible !important;";
		  	document.getElementById(visuel_erreur).setAttribute('style', "visibility:visible !important;");
		}//endif
		if (visuel_ok) {
			document.getElementById(visuel_ok).style="visibility:hidden !important;";
		 	document.getElementById(visuel_ok).setAttribute('style', "visibility:hidden !important;");
		}//endif
		return (false);
	}
	else {
		if (visuel_erreur) {
			document.getElementById(visuel_erreur).style="visibility:hidden !important;";
		  	document.getElementById(visuel_erreur).setAttribute('style', "visibility:hidden !important;");
		}//endif
		if (visuel_ok) {
			document.getElementById(visuel_ok).style="visibility:visible !important;";
		 	document.getElementById(visuel_ok).setAttribute('style', "visibility:visible !important;");
		}//endif
		return (true);
	}//endif
}

/*****************************************************
	USER Logue && Subscribe && logout
******************************************************/

function user_logout() {
	var login		= localStorage.getItem('logue');
	var home_page 	= localStorage.getItem('home');
	var variables	= "logue="+lelogue;
	var xhrw 		= getXMLHttpRequest();
	
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			localStorage.setItem('session_id', 0);
			localStorage.setItem('session_user', "nouser");
			localStorage.setItem('session_activity_time', 0);
			localStorage.setItem('connected',0);
			url_request(home_page);
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	variables +="&require_php_file=/services/Logout.php";
	xhrw.open("POST", "/services/PHP_request.php", true);

	xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhrw.setRequestHeader("Content-length", variables.length);
	xhrw.setRequestHeader("Connection", "close");
	xhrw.send(variables);
};

/*----------------------------------------------------------------*/

function user_subscribe() {
	var formulaire	= document.getElementById("form_inscription");
	var progress	= document.getElementById("inscription_connexion");
	var lenom	 	= formulaire['nom'].value;
	var leprenom	= formulaire['prenom'].value;
	var ladate		= formulaire['nele'].value;
	var jour		= ladate.substr(0,2);
	var mois		= ladate.substr(2,2);
	var annee		= ladate.substr(4,4);
	var date_valide = false;
	var lemail		= formulaire['mail1'].value;
	var conf_mail	= formulaire['mail2'].value;
	var lepseudo	= formulaire['pseudo'].value;
	var lepasse		= MD5(formulaire['motdepasse'].value);
	var conf_passe	= MD5(formulaire['motdepasse2'].value);
	var leparrain	= formulaire['parrain'].value;
	var optin_cgu	= formulaire['cgu'].checked;
	var optin_news	= formulaire['newsletter'].checked;
	var optin_tiers	= formulaire['donnees_tiers'].checked;

	//vérification rapide de la date de naissance 
	// 1 - vérif si date cohérente
	mois -=1;
 	var verification_date = new Date(annee,mois,jour);
 	date_valide = (verification_date.getFullYear()!=annee || verification_date.getMonth()!=mois) ? false : true;
	
	// 2 - vérif si personne majeuree d'après la date du jour récupérée depuis le serveur 
	// vérification effectuée dans le script php d'inscription
	
	
	switch(true) {
		case (!date_valide) :
			alerte("Veuillez vérifier le champ Date de Naissance.\nLa date doit être saisie au format français : JJMMAAAA\n\nExemple, si vous êtes né(e) le 30 juillet 1971, indiquez : 30071971");
			break;
		case (lemail!=conf_mail) :
			alerte("Attention, il semblerait que vous ayez commis une erreur dans la saisie de votre adresse mail.\n\nAssurez vous d'indiquer une adresse mail valide,\nvous allez recevoir un mail à cette adresse vous permettant de valider votre inscription.");
			break;
		case (lepasse!=conf_passe) :
			alerte("Attention, il semblerait que vous ayez commis une erreur\ndans la saisie de votre mot de passe.\n\nMerci de renouveler vote saisie.");
			break;
		default :
			var variables = "lenom="+lenom;
			variables += "&leprenom="+leprenom;
			variables += "&ladate="+ladate;
			variables += "&lemail="+lemail;
			variables += "&lepseudo="+lepseudo;
			variables += "&lepasse="+lepasse;
			variables += "&leparrain="+leparrain;
			variables += "&optin_cgu="+((optin_cgu) ? 1 : 0);
			variables += "&optin_news="+((optin_news) ? 1 : 0);
			variables += "&optin_tiers="+((optin_tiers) ? 1 : 0);
			variables += "&lalangue="+localStorage.getItem('langue_session');
			variables += "&idsession="+localStorage.getItem('session_id');
			
			formulaire['connexion'].style="visibility:hidden !important;";
			formulaire['connexion'].setAttribute('style', "visibility:hidden !important;");
			progress.style="display:inline;position:relative;top:-40px;right:0px;float:right;visibility:visible !important;";
			progress.setAttribute('style', "display:inline;position:relative;top:-40px;right:0px;float:right;visibility:visible !important;");
			var xhrw 		= getXMLHttpRequest();
			
			xhrw.onreadystatechange = function() {
				if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
					progress.style="display:inline;position:relative;top:-40px;right:0px;float:right;visibility:hidden !important;";
					progress.setAttribute('style', "display:inline;position:relative;top:-40px;right:0px;float:right;visibility:hidden !important;");
					switch (xhrw.responseText){
						case "granted" :
							alerte("Merci.\n\nVotre demande d’inscription a bien été prise en compte.\n\nVous allez recevoir un mail vous permettant de finaliser votre demande.");
							break;
						case "date_non_valide" :
							alerte("Veuillez vérifier le champ Date de Naissance.\nLa date doit être saisie au format français : JJMMAAAA\n\nExemple, si vous êtes né(e) le 30 juillet 1971, indiquez : 30071971");
							formulaire['connexion'].style="position:relative;top:10px;left:465px;visibility:visible !important;";
							formulaire['connexion'].setAttribute('style', "position:relative;top:10px;left:465px;visibility:visible !important;");
						case "mineur" :
							alerte("Attention !!\n\nCe site est réservé à un public adulte et averti.\n\nVous n’avez pas l’âge requis pour accéder au contenu de ce site.");
							break;
						case "pseudo_non_disponible" :
							alerte("Attention !\nLe pseudo que vous avez choisi n’est pas disponible.\n\nMerci d’en choisir un autre.");
							formulaire['connexion'].style="position:relative;top:10px;left:465px;visibility:visible !important;";
							formulaire['connexion'].setAttribute('style', "position:relative;top:10px;left:465px;visibility:visible !important;");
							break;
						case "denied" :
							alerte("Il semblerait que vous soyez sous le coup d’une interdiction d’accès à nos service.\n\nSi vous pensez qu’il s’agit d’une erreur, merci de bien vouloir prendre contact avec nos services par le biais de la rubrique ’Contactez Nous’ disponible en bas de page.");
							break;
						case "email_existant":
							alerte("L’adresse mail indiquée est déjà associée à un compte utilisateur.\n\nSi vous avez oublié vos identifiants de connexion,\ncliquez sur le lien ‘Identifiants oublié‘ dans la zone de connexion\nsitué en haut de cette page.");
							formulaire['connexion'].style="position:relative;top:10px;left:465px;visibility:visible !important;";
							formulaire['connexion'].setAttribute('style', "position:relative;top:10px;left:465px;visibility:visible !important;");
							break;
						case "code_parrain_errone":
							alerte("Attention ! \n\nLe code de parrainage que vous avez indiqué n’est pas valable.\nMerci de vérifier.\n\nSi vous n’avez pas de code parrain\nmerci de laisser ce champ vide.");
							formulaire['connexion'].style="position:relative;top:10px;left:465px;visibility:visible !important;";
							formulaire['connexion'].setAttribute('style', "position:relative;top:10px;left:465px;visibility:visible !important;");
							break;
						default :
							//todo: écrire l'erreur dans un log
							//remplacer l'alerte par un message alerte
							alert("retour serveur : "+xhrw.responseText);
							formulaire['connexion'].style="position:relative;top:10px;left:465px;visibility:visible !important;";
							formulaire['connexion'].setAttribute('style', "position:relative;top:10px;left:465px;visibility:visible !important;");
							break;
					}//end switch
				} else if (xhrw.readyState < 4) {
					//wait and see;
				}//endif
			};//end function associated to onreadystatechange
			
			variables +="&require_php_file=/services/Inscription_user.php";
			xhrw.open("POST", "/services/PHP_request.php", true);
			xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xhrw.setRequestHeader("Content-length", variables.length);
			xhrw.setRequestHeader("Connection", "close");
			xhrw.send(variables);
			break;
	}//end switch
	
	
};

/*----------------------------------------------------------------*/

function user_unsubscribe() {
	var formulaire	= document.getElementById("form_desinscription");

	var ndi	 	= formulaire['ndi'].checked;
	var pas_int	= formulaire['pas_interesse'].checked;
	var perso	= formulaire['raisons_personnelles'].checked;
	var comm	= formulaire['commentaire'].value;
	var xhrw 	= getXMLHttpRequest();
	
	variables	= "ndi="+ndi+"&pi="+pas_int+"&perso="+perso+"&commentaire="+comm;
	
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			url_request("http://www.mybdonline.com");
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	variables +="&require_php_file=/services/Desinscription_user.php";
	xhrw.open("POST", "/services/PHP_request.php", true);
	xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhrw.setRequestHeader("Content-length", variables.length);
	xhrw.setRequestHeader("Connection", "close");
	xhrw.send(variables);
};

/*----------------------------------------------------------------*/

function user_logue() {
	var home_page 	= localStorage.getItem('home');
	var formulaire	= document.getElementById("form_logue");
	var progress	= document.getElementById("logue_connexion");
	var lelogue 	= formulaire['login'].value;
	var lepasse 	= MD5(formulaire['passe'].value);
	var variables	= "logue="+lelogue+"&passe="+lepasse+"&session_id="+localStorage.getItem('session_id');
	var xhrw 		= getXMLHttpRequest();
	
	
		
	formulaire['connexion'].style="visibility:hidden !important;";
	formulaire['connexion'].setAttribute('style', "visibility:hidden !important;");
	progress.style="display:inline;position:relative;top:50px;left:-110px;float:left;visibility:visible;";
	progress.setAttribute('style', "display:inline;position:relative;top:50px;left:-110px;float:left;visibility:visible;");

	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			progress.style="display:inline;position:relative;top:50px;left:-110px;float:left;visibility:hidden;";
			progress.setAttribute('style', "display:inline;position:relative;top:50px;left:-110px;float:left;visibility:hidden;");
			switch (xhrw.responseText){
				case "granted" :
					tablevars="connected=1&user="+lelogue+"&newrub=granted&url_request="+home_page;
					localStorage.setItem('user',lelogue);
					localStorage.setItem('connected',1);
					change_var(tablevars,"url_request");
					break;
				case "forbidden" :
					alerte("Il semblerait que vous soyez sous le coup d'une interdiction d'accès à nos service.\n\nSi vous pensez qu'il s'agit d'une erreur, merci de bien vouloir prendre contact avec nos services par le biais de la rubrique 'Contactez Nous' disponible en bas de page.");
					break;
				case "already_connected":
					alerte("Vous avez déjà une connexion en cours.\n\nSi vous pensez que quelqu'un utilise votre compte à votre insu,\n merci de prendre contact immédiatement avec nos services\n par le biais de la rubrique ‘Contactez nous‘ accessible en bas de page.");
					break;
				case "invalidate" :
					alerte("Vous n'avez pas validé votre inscription.\n\nAu terme de votre inscription en ligne, vous avez dû recevoir\nun mail contenant un lien vous permettant de finaliser votre inscription.\n\nSi vous n'avez pas reçu ce mail, utilisez le formulaire\n‘Demande de mail de validation‘ disponible dans la rubrique\n‘Contactez nous‘ en bas de cette page.");
					break;
				case "denied" :
					alerte("Identifiants incorrects.\nMerci de vérifier.\n\nSi vous avez oublié votre Pseudo ou votre mot de passe,\ncliquez sur le lien ‘Identifiants oubliés‘\nafin d'accéder à la procédure de récupération de vos identifiants.");
					formulaire['connexion'].style="visibility:visible !important;position:relative;top:10px;rigth:40px;float:right;";
					formulaire['connexion'].setAttribute('style', "visibility:visible !important;position:relative;top:10px;rigth:40px;float:right;");
					formulaire['passe'].value="";
					break;
				default :
					//todo: écrire l'erreur dans un log
					//remplacer l'alerte par un message alerte
					alert(xhrw.responseText);
					break;
			}//end switch
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	variables +="&require_php_file=/services/Logue_user.php";
	xhrw.open("POST", "/services/PHP_request.php", true);
	xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhrw.setRequestHeader("Content-length", variables.length);
	xhrw.setRequestHeader("Connection", "close");
	xhrw.send(variables);

}

/*----------------------------------------------------------------*/

function user_contact() {
	var home_page 	= localStorage.getItem('home');
	var formulaire	= document.getElementById("form_contact");

	var login		= formulaire['login'].value;
	var societe		= formulaire['societe'].value;
	var nom			= formulaire['nom'].value;
	var prenom		= formulaire['prenom'].value;
	var fonction	= formulaire['fonction'].value;
	var telephone	= formulaire['telephone'].value;
	var poste		= formulaire['poste'].value;
	var gsm			= formulaire['gsm'].value;
	var mail		= formulaire['mail1'].value;
	var confmail	= formulaire['mail2'].value;
	var objet		= formulaire['objet'].value;
	var message		= formulaire['message'].value;
	
	var xhrw 	= getXMLHttpRequest();
	
	variables	= (login.length>0) ? "login="+login+"&" : "";
	variables	+= "nom="+nom+"&prenom="+prenom+"&societe="+societe+"&fonction="+fonction+"&tel="+telephone+"&poste="+poste+"&gsm="+gsm+"&mail="+mail+"&objet="+objet+"&message="+message;
	
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			tablevars="newrub=contacted&url_request="+home_page;
			change_var(tablevars,"url_request");
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	if (mail!=confmail) {
		alerte("Attention, il semblerait que vous ayez commis une erreur dans la saisie de votre adresse mail.\n\nAssurez vous d'indiquer une adresse mail valide,\ntoute réponse à votre demande étant adressée à cette adresse.");
	}
	else {	
		variables +="&require_php_file=/services/User_contact.php";
		xhrw.open("POST", "/services/PHP_request.php", true);
		xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhrw.setRequestHeader("Content-length", variables.length);
		xhrw.setRequestHeader("Connection", "close");
		xhrw.send(variables);
	}//endif
};

/*****************************************************
	Partage d'images de la galerie
******************************************************/

function gallery_shared() {
	var formulaire	= document.getElementById("form_gallery");

	var lurl		= formulaire['url'].value;
	var lami		= formulaire['ami'].value;
	var luser		= formulaire['user'].value;
	var lesujet		= formulaire['sujet'].value;
	var lechemin	= formulaire['chemin'].value;
		
	var variables	= "lami="+lami+"&luser="+luser+"&limage="+lurl+"&lesujet="+lesujet+"&lechemin="+lechemin;
	
	var xhrw 		= getXMLHttpRequest();
	
	xhrw.onreadystatechange = function() {
		if (xhrw.readyState == 4 && (xhrw.status == 200 || xhrw.status == 0)) {
			switch (xhrw.responseText){
				case "mail_user" :
					alerte("Votre adresse mail semble erronée.\n\nMerci de vérifier.");
					(function($) {
						$('#modal').dialog('open');
					}) ( jQuery );
					break;
				case "mail_ami" :
					alerte("L'adresse mail de votre ami semble erronée.\n\nMerci de vérifier.");
					(function($) {
						$('#modal').dialog('open');
					}) ( jQuery );
					break;
				default :
					break;
			}//end switch
		} else if (xhrw.readyState < 4) {
			//wait and see;
		}//endif
	};//end function associated to onreadystatechange
	
	switch(true) {
		case (!validation_email(lami)):
			alerte("Merci de saisir une adresse mail de destinataire valide.");
			(function($) {
				$('#modal').dialog('open');
			}) ( jQuery );
			break;
		case (!validation_email(luser)) :
			alerte("Vous n'avez pas renseigné votre adresse mail, ou de façon erronée.\n\nMerci de vérifier.");
			(function($) {
				$('#modal').dialog('open');
			}) ( jQuery );
			break;
		default :
			variables +="&require_php_file=/services/Gallery_shared.php";
			xhrw.open("POST", "/services/PHP_request.php", true);
			xhrw.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xhrw.setRequestHeader("Content-length", variables.length);
			xhrw.setRequestHeader("Connection", "close");
			xhrw.send(variables);
			break;	
	}//end switch
	
}

/*****************************************************
	URL destination
******************************************************/

function rub_request(lurl) {
	//document.getElementById("test").innerHTML=xhrw.responseText;
}

function url_request(lurl) {
	document.location=lurl;
};

function access_granted() {
	var home_page 	= localStorage.getItem('home');
	tablevars="agelegal=signature_electronique&newrub=log&url_request="+home_page;
	change_var(tablevars,"url_request");
};

function forbiden_access() {
	tablevars="agelegal=mineur&newrub=accueil&url_request=http://www.mybdonline.com";
	change_var(tablevars,"url_request");
};


/*****************************************************
	Vérification Email
******************************************************/
function validation_email(emailStr) {
	var checkTLD = 1;
	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|fr)$/;
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray = emailStr.match(emailPat);
	if (matchArray == null) { return false; }
	var user = matchArray[1];
	var domain = matchArray[2];
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i) > 127) { return false; }
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i) > 127) { return false; }
	}
	if (user.match(userPat) == null) { return false; }
	var IPArray=domain.match(ipDomainPat);
	if (IPArray != null) {
		for (var i=1; i<=4; i++) {
			if (IPArray[i] > 255) { return false; }
		}
		return true;
	}
	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;
	for (i=0; i<len; i++) {
		if (domArr[i].search(atomPat) == -1) { return false; }
	}
	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) { return false; }
	if (len < 2) { return false; }
	return true;
}
