// namespaces
var tru = new Object();
var dom = new Object();

// outils
dom = {
	addLoadEvent : function(func) {
		var oldonload = window.onload;
		if(typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				if(oldonload) {oldonload();}
				func();
			}
		}
	},
	support : {
		'id' : typeof document.getElementById,
		'tag' : typeof document.getElementsByTagName,
		'el' : typeof document.createElement,
		'txt' : typeof document.createTextNode
	},
	css : function(a,o,c1,c2){
		switch (a){
			case 'swap':
			o.className=!dom.css('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
			break;
			case 'add':
			if(!dom.css('check',o,c1)){o.className+=o.className?' '+c1:c1;}
			break;
			case 'remove':
			if(dom.css('check',o,c1)) {
				var rep=o.className.match(' '+c1)?' '+c1:c1;
				o.className=o.className.replace(rep,'');
			}
			break;
			case 'check':
			var found=false;
			var temparray=o.className.split(' ');
			for(var i=0;i<temparray.length;i++){
				if(temparray[i]==c1){found=true;}
			}
			return found;
			break;
		}
	},
	getByClassName : function (node, classname) {
		var a = [];
		var re = new RegExp('\\b' + classname + '\\b');
		var els = document.getElementsByTagName(node);
		for(var i=0,j=els.length; i<j; i++) {
			if(re.test(els[i].className)) {a[a.length] = els[i];}
		}
		return a;
	}
};

// limitation nombre de caractères ville sur galerie
tru.charLimit = {
	node : 'span',
	cName : 'resid',
	motif : /\s\(\d{2}\)$/,
	size : 10,
	verif : 'zoneadmin',

	init : function() {
		if(dom.support.tag == 'undefined' || document.body.getAttribute('id') == tru.charLimit.verif) {return;}
		var els = dom.getByClassName(tru.charLimit.node, tru.charLimit.cName);
		var l = els.length;
		if(l < 1) {return;}
		for(var i = 0; i < l; i++) {
			if(els[i].lastChild.nodeType != 3) {continue;}
			var str = els[i].lastChild.nodeValue;
			var dept = str.match(tru.charLimit.motif);
			var ville = str.slice(0,-4);
			if(ville.length > tru.charLimit.size) {ville = ville.substring(0,tru.charLimit.size)+'...';}
			els[i].lastChild.nodeValue = ville+dept;
			if(i % 4 == 0 && dom.support.el != 'undefined') {
				var parent = els[i].parentNode;
				var div = document.createElement('div');
				div.className = 'clearer';
				div.appendChild(document.createTextNode('  '));
				parent.parentNode.insertBefore(div, parent);
			}
		}
	}
};

// ouverture popup vote
tru.vote = {
	bb : 'bebes',
	ref : 'vote_confirm',
	label : 'vote',
	attrs : 'width=520,height=630,top=50,left=50,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes,status=yes',
	
	init : function() {
		if(dom.support.id == 'undefined' || dom.support.tag == 'undefined') {return;}
		var id = document.getElementById(tru.vote.bb);
		if(!id) {return;}
		var lks = id.getElementsByTagName('a');
		var l = lks.length;
		if(l < 1) {return;}
		var popup;
		for(var i = 0; i < l; i++) {
			if(lks[i].href.indexOf(tru.vote.ref) == -1) {continue;}
			lks[i].onclick = function() {
				popup && !popup.closed ? popup.focus() : popup = window.open(this.href, tru.vote.label, tru.vote.attrs);
				return false;
			};
		}
	}
};

// creation lien fermeture popup
tru.closePopup = {
	js : 'javascript:opener.document.location.reload();window.close();',
	label : 'Fermer',
	title : 'Fermer cette fenêtre',
	id : 'fermer',
	ref : 'pub',
	verif : 'confirmvote',
	
	init : function() {
		if(dom.support.id == 'undefined' || dom.support.el == 'undefined' || dom.support.txt == 'undefined') {return;}
		if(!document.getElementById(tru.closePopup.verif)) {return;}
		var next = document.getElementById(tru.closePopup.ref);
		if(!next) {return;}
		var lk = document.createElement('a');
		lk.appendChild(document.createTextNode(tru.closePopup.label));
		lk.setAttribute('href', tru.closePopup.js);
		lk.setAttribute('title', tru.closePopup.title);
		lk.setAttribute('id', tru.closePopup.id);
		next.parentNode.insertBefore(lk, next);
	}
};

// fermeture popup avec retour sur Babies
tru.retourBabies = {
	verif : 'confirmvote',
	special : 'fermer',
	ref : 'tools',

	init : function() {
		if(dom.support.id == 'undefined' || dom.support.tag == 'undefined') {return;}
		if(!document.getElementById(tru.retourBabies.verif)) {return;}
		var base = document.getElementById(tru.retourBabies.ref);
		if(!base) {return;}
		var lks = base.getElementsByTagName('a');
		if(lks.length < 1) {return;}
		for(var i = 0; i < lks.length; i++) {
			if(lks[i].getAttribute('id') == tru.retourBabies.special) {continue;}
			lks[i].onclick = function() {tru.retourBabies.exe(this.href); return false;};
		}
	},
	
	exe : function(url) {
		window.opener ? window.opener.location.href = url : window.open(url);
		window.close();
	}
};

// showHide des elements carte
tru.cartes = {
	famille : 'cartefamille',
	//familleRadio : 'UsrCarteCouleur',
	familleRadio : 'UsrCarteFamille',
	club : 'carteclub',
	clubRadio : 'UsrCarteClub',
	form : 'forminscription',
	
	init : function() {
		if(dom.support.id == 'undefined' || !document.forms[tru.cartes.form]) {return;}
		var c1 = document.getElementById(tru.cartes.famille);
		var c2 = document.getElementById(tru.cartes.club);
		var c1rad = document.forms[tru.cartes.form].elements[tru.cartes.familleRadio];
		var c2rad = document.forms[tru.cartes.form].elements[tru.cartes.clubRadio];
		if(!c1 || !c2 || !c1rad || !c2rad) {return;}
		c1rad[0].checked ? dom.css('remove', c1, css.hide) : dom.css('add', c1, css.hide);
		c2rad[0].checked ? dom.css('remove', c2, css.hide) : dom.css('add', c2, css.hide);
		tru.cartes.exe(c1rad, c1);
		tru.cartes.exe(c2rad, c2);
	},
	
	exe : function(o, t) {
		for(var i = 0; i < 2; i++) {
			o[i].onclick = function() {
				this.getAttribute('id').indexOf('Oui') == -1 ? dom.css('add', t, css.hide) : dom.css('remove', t, css.hide);
			};
		}
	}
};

// showHide des enfants
tru.enfants = {
	all : 'enfants',
	id : 'enfant',
	nbre : 'UsrNbEnfant',
	total : 4,
	
	init : function() {
		if(dom.support.id == 'undefined') {return;}
		var enfants = document.getElementById(tru.enfants.all);
		var changer = document.getElementById(tru.enfants.nbre);
		if(!enfants || !changer) {return;}
		dom.css('add', enfants, css.hide);
		if(Number(changer.value) > 0) {tru.enfants.exe(Number(changer.value));}
	},
	
	exe : function(n) {
		for(var i = 1; i <= tru.enfants.total; i++) {
			var o = document.getElementById(tru.enfants.id+i);
			if(!o) {continue;}
			i > n ? dom.css('remove', o, css.show) : dom.css('add', o, css.show);
		}
	}
};

// swap image fiche bebe
tru.swapImage = {
	visuelID : 'visuel',
	thumbID : 'thumb',
	pathGF : 'http://www.toysrus.fr/upload/jc_bbcraquant/_n_',
	pathPF : 'http://www.toysrus.fr/upload/jc_bbcraquant/_v_',
	motif : /[a-z0-9\.-]+$/i,
	
	init : function() {
		if(dom.support.id == 'undefined' || dom.support.tag == 'undefined') {return;}
		var visuel = document.getElementById(tru.swapImage.visuelID);
		var thumb = document.getElementById(tru.swapImage.thumbID);
		if(!visuel || !thumb) {return;}
		thumb.onclick = function() {
			var hrefPF = visuel.src.match(tru.swapImage.motif);
			var hrefGF = this.href.match(tru.swapImage.motif);
			//alert(hrefPF+"\n "+hrefGF);
			visuel.src = tru.swapImage.pathGF+hrefGF;
			this.href = tru.swapImage.pathGF+hrefPF;
			this.getElementsByTagName('img')[0].src = tru.swapImage.pathPF+hrefPF;
			return false;
		};
	}
};

// comptage caractères
tru.comptage = {
	id : 'jeuBBPersonnalite',
	nbr : 150,
	compteur : 'compteur',
	msg : 'Caractères restants : ',

	init : function() {
		if(dom.support.id == 'undefined' || dom.support.el == 'undefined' || dom.support.txt == 'undefined') {return;}
		var champ = document.getElementById(tru.comptage.id);
		if(!champ) {return;}
		var el = document.createElement('span');
		el.appendChild(document.createTextNode(tru.comptage.msg+tru.comptage.nbr));
		el.setAttribute('id', tru.comptage.compteur);
		champ.parentNode.appendChild(el);
		champ.onkeyup = function() {
			var n = tru.comptage.nbr - this.value.length;
			if(n <= 0) {
				champ.value = champ.value.substring(0,tru.comptage.nbr);
				el.firstChild.nodeValue = tru.comptage.msg+'0';
			} else {
				el.firstChild.nodeValue = tru.comptage.msg+n;
			}
		};
	}
};

// ajout des photos
tru.addPhotos = {
	id0a : 'addphotos1',
	id0b : 'addphotos2',
	id1 : 'BbUrlPhoto1',
	id2 : 'BbUrlPhoto2',
	id4a : 'addURLphotos1',
	id4b : 'addURLphotos2',
	label : 'upload',
	attrs : 'width=520,height=450,top=50,left=50,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes,status=yes',
	msg : 'Vos photos ont bien été chargées...',
	verif1 : 'msgjeuBBPhoto1',
	verif2 : 'msgjeuBBPhoto2',

	init : function() {
		if(dom.support.id == 'undefined') {return;}
		var lk = document.getElementById(tru.addPhotos.id0a);
		if(!lk) {return;}
		var upload;
		lk.onclick = function() {
			upload && !upload.closed ? upload.focus() : upload = window.open(this.href, tru.addPhotos.label, tru.addPhotos.attrs);
			return false;
		};
		var lkb = document.getElementById(tru.addPhotos.id0b);
		if(!lkb) {return;}
		var upload;
		lkb.onclick = function() {
			upload && !upload.closed ? upload.focus() : upload = window.open(this.href, tru.addPhotos.label, tru.addPhotos.attrs);
			return false;
		};
		
		var lk = document.getElementById(tru.addPhotos.id4a);
		if(!lk) {return;}
		var upload;
		lk.onclick = function() {
			upload && !upload.closed ? upload.focus() : upload = window.open(this.href, tru.addPhotos.label, tru.addPhotos.attrs);
			return false;
		};
		var lkb = document.getElementById(tru.addPhotos.id4b);
		if(!lkb) {return;}
		var upload;
		lkb.onclick = function() {
			upload && !upload.closed ? upload.focus() : upload = window.open(this.href, tru.addPhotos.label, tru.addPhotos.attrs);
			return false;
		};
		
	},

	exe : function(p1, p2) {
		if(dom.support.id == 'undefined' || dom.support.el == 'undefined' || dom.support.txt == 'undefined') {return;}
		var o0a = document.getElementById(tru.addPhotos.id0a);
		var o0b = document.getElementById(tru.addPhotos.id0b);
		var o1 = document.getElementById(tru.addPhotos.id1);
		var o2 = document.getElementById(tru.addPhotos.id2);
		var o4a = document.getElementById(tru.addPhotos.id4a);
		var o4b = document.getElementById(tru.addPhotos.id4b);
		if (!o0a || !o0b || !o1 || !o2) {return;}
		if (p1 != "") { o1.value = p1;}
		if (p2 != "") { o2.value = p2;}
		
		if (p1 != "") { 
			/*
			var el = document.createElement('a');
			el.appendChild(document.createTextNode("Modifier"));
			el.href="upload_photos.htm";
			el.id="addphotos";
			o0.parentNode.appendChild(el);
			o0.parentNode.removeChild(o0);
			*/
			o0a.firstChild.nodeValue = "Modifier";
			o4a.firstChild.nodeValue = p1;
			o4a.target = "_new";
			o4a.href="http://www.toysrus.fr/upload/jc_bbcraquant/_n_"+p1;
			}
		if (p2 != "") { 
			o0b.firstChild.nodeValue = "Modifier";
			o4b.firstChild.nodeValue = p2;
			o4b.target = "_new";
			o4b.href="http://www.toysrus.fr/upload/jc_bbcraquant/_n_"+p2;
			}
		//o0.parentNode.removeChild(o0);
		if(document.getElementById(tru.addPhotos.verif1)) {tru.form.flush(tru.addPhotos.id1);}
		if(document.getElementById(tru.addPhotos.verif2)) {tru.form.flush(tru.addPhotos.id2);}
	}
};

// validation
tru.form = {
	multievent : 'UsrNbEnfant',
	noteCible : 'F_submit',
	noteID : 'F_notify',
	noteMSG : 'Le formulaire contient des erreurs (champs omis ou non valides). Ces erreurs sont signalées par un message en italique et de couleur à côté des champs concernés. Merci de les corriger...',

	init : function() {
		if(dom.support.id == 'undefined' || dom.support.el == 'undefined' || dom.support.txt == 'undefined') {return;}
		var f = document.forms.length > 0 ? document.forms : null;
		if(!f) {return;}
		for(var i = 0; i < f.length; i++) {
			var o = f[i].elements;
			if(o.length < 1) {continue;}
			tru.form.checks(o, 'direct');
			f[i].onsubmit = function() {
				tru.form.valid = true;
				tru.form.checks(o, 'submit');
				if(!tru.form.valid) {tru.form.notify();}
				return tru.form.valid;
			}
		}
	},

	checks : function(o, m) {
		if(textFields) {
			for(var t in textFields) {
				checkText = true;
				if(!o[t]) {continue;}
					m == 'submit' ? tru.form.text(o[t]) : o[t].onchange = function() {tru.form.text(this);};
			}
		}
		if(listFields) {
			for(var l in listFields) {
				if(!o[l]) {continue;}
				m == 'submit' ? tru.form.list(o[l]) : o[l].onchange = function() {
					if(this.name == tru.form.multievent) {tru.enfants.exe(Number(this.value));}
					tru.form.list(this);
				};
			}
		}
		if(groupFields) {
			for(var g in groupFields) {
				var grp = tru.form.boxes(g);
				if(!grp) {continue;}
				for(var i = 0; i < grp.length; i++) {
					grp[i].parent = g;
					m == 'submit' ? tru.form.group(grp[i]) : grp[i].onclick = function() {tru.form.group(this);};
				}
			}
		}
	},
	
	condition : function(c) {
		var o = document.getElementById(c.champ);
		if(!o) {return false;}
		var check = false;
		if(o.value) {
			var v = typeof c.valeur == 'number' ? Number(o.value) : o.value;
			switch(c.type) {
				case '=' :
					check = v == c.valeur ? true : false;
					break;
				case '<' :
					check = v < c.valeur ? true : false;
					break;
				case '<=' :
					check = v <= c.valeur ? true : false;
					break;
				case '>' :
					check = v > c.valeur ? true : false;
					break;
				case '>=' :
					check = v >= c.valeur ? true : false;
					break;
			}
		}
		return check;
	},

	text : function(o) {
		var n = o.name;
		var v = o.value;
		var check = textFields[n].condition ? tru.form.condition(textFields[n].condition) : true;
		if(!check) {tru.form.flush(n); return;}
		if(textFields[n].test1 == 'vide') {
			var e1 = formData.vide.test(v);
			if(!e1) {
				if(textFields[n].test2) {
					var e2 = formData[textFields[n].test2].test(v);
					!e2 ? tru.form.error(o, textFields[n].msg2, n) : tru.form.flush(n);
				} else {
					tru.form.flush(n);
				}
			} else {
				tru.form.error(o, textFields[n].msg1, n);
			}
		} else {
			if(v.length != 0) {
				var e1 = formData[textFields[n].test1].test(v);
				!e1 ? tru.form.error(o, textFields[n].msg1, n) : tru.form.flush(n);
			} else {
				tru.form.flush(n);
			}
		}
	},
	
	list : function(o) {
		var n = o.name;
		var check = listFields[n].condition ? tru.form.condition(listFields[n].condition) : true;
		if(!check) {tru.form.flush(n); return;}
		o.value == formData.list ? tru.form.error(o, listFields[n].msg, n) : tru.form.flush(n);
	},
	
	group : function(o) {
		var n = o.parent;
		var check = groupFields[n].condition ? tru.form.condition(groupFields[n].condition) : true;
		if(!check) {tru.form.flush(n); return;}
		o = tru.form.boxes(n);
		var l = o.length;
		var c = 0;
		for(var i = 0; i < l; i++) {
			if(o[i].checked) {break;}
			c++;
		}
		c == l ? tru.form.error(o[0], groupFields[n].msg, n) : tru.form.flush(n);
	},

	boxes : function(n) {
		var o = n.split(':');
		for(var i = 0; i < o.length; i++) {
			o[i] = document.getElementById(o[i]);
			if(!o[i]) {return null;}
		}
		return o;
	},

	error : function(o, m, n) {
		tru.form.valid = false;
		var id = 'msg'+n;
		var el = document.getElementById(id);
		if(el) {
			el.firstChild.nodeValue = ' '+m;
			el.className = css.erreur;
		} else {
			el = document.createElement('em');
			el.appendChild(document.createTextNode(' '+m));
			el.setAttribute('id', id);
			el.className = css.erreur;
			var p = tru.form.get(o);
			p.nodeType == 3 || /^(input|select|textarea)$/i.test(p.nodeName) ? p.parentNode.insertBefore(el, p) : p.appendChild(el);
		}
	},

	flush : function(n) {
		var id = 'msg' + n;
		var el = document.getElementById(id);
		if(el) {
			el.firstChild.nodeValue = ' ';
			el.className = '';
		}
	},

	get : function(o) {
		if(msgLocation[o.name] && msgLocation[o.name] == 'parent') {return o;}
		if(o.parentNode.nodeName.toLowerCase() == 'label') {o = o.parentNode.parentNode;}
		while(o.previousSibling && o.previousSibling.nodeName.toLowerCase() != 'fieldset' && o.previousSibling.nodeName.toLowerCase() != 'legend') {
			o = o.previousSibling;
			if(o.nodeType == 1) {
				if(/^(input|select|textarea)$/i.test(o.nodeName)) {continue} else {break};
			}
		}
		return o;
	},
	
	notify : function() {
		if(document.getElementById(tru.form.noteID)) {return;}
		var cible = document.getElementById(tru.form.noteCible);
		if(!cible) {return;}
		var el = document.createElement('p');
		el.appendChild(document.createTextNode(tru.form.noteMSG));
		el.setAttribute('id', tru.form.noteID);
		cible.parentNode.insertBefore(el, cible);
	}
};

// chargement fonctions
//dom.addLoadEvent(tru.form.init);
dom.addLoadEvent(tru.vote.init);
dom.addLoadEvent(tru.closePopup.init);
dom.addLoadEvent(tru.retourBabies.init);
dom.addLoadEvent(tru.cartes.init);
dom.addLoadEvent(tru.enfants.init);
dom.addLoadEvent(tru.swapImage.init);
dom.addLoadEvent(tru.charLimit.init);
dom.addLoadEvent(tru.comptage.init);
dom.addLoadEvent(tru.addPhotos.init);
