if(ACC === undefined) {
	var ACC = {};
}

(function() {

// DOMready : deprecated, only for back compat
var toload = [];
function loaded() {
	if(arguments.callee.done) {return;}
	arguments.callee.done = true;
	for(var i = 0, o; o = toload[i]; i++) {o();}
};
function load(fn, slow) {
	if(slow) {
		Event.observe(window, 'load', loaded, false);
		return;
	}
	toload[toload.length] = fn;
	if(document.addEventListener) {document.addEventListener('DOMContentLoaded', loaded, null);}
	if(/KHTML|WebKit/i.test(navigator.userAgent)) { 
		var _timer = setInterval(function() {
			if(/loaded|complete/.test(document.readyState)) {
				clearInterval(_timer);
				delete _timer;
				loaded();
			}
		}, 10);
	}
	/*@cc_on @*/
	/*@if (@_win32)
	var proto = "src='javascript:void(0)'";
	if(location.protocol == "https:") {proto = "src=//0";}
	document.write("<scr"+"ipt id=__ie_onload defer " + proto + "><\/scr"+"ipt>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {if(this.readyState == "complete") {loaded();}};
	/*@end @*/
	Event.observe(window, 'load', loaded, false);
};

var reFeaturedMethod = new RegExp('^function|object$', 'i');

var isHostMethod = function(o, m) {
	var t = typeof o[m];
	return !!((reFeaturedMethod.test(t) && o[m]) || t == 'unknown');
};

var global = this, doc = this.document;

// new DOMready: recommended, use with acc_domready.js before the closing </body>
if(doc) {
	var domReadylisteners = [], domReadyDone = false, domReadyIsDone, domReadyListener, addDomReadyListener,
		canAddDocumentReadyListener = isHostMethod(doc, 'addEventListener'),
		canAddWindowLoadListener = isHostMethod(this, 'addEventListener'),
		canAttachWindowLoadListener = isHostMethod(this, 'attachEvent');
	
	if(doc && (canAddDocumentReadyListener || canAddWindowLoadListener || canAttachWindowLoadListener)) {
		domReadyIsDone = function() {return domReadyDone;};
		domReadyListener = function() {
			if(!domReadyDone) {
				domReadyDone = true;
				var i = domReadylisteners.length;
				var m = i - 1;
				while(i--) {domReadylisteners[m - i]();}
			}
		};
		
		addDomReadyListener = function(fn) {
			if(!domReadylisteners.length) {
				if(canAddDocumentReadyListener) {
					doc.addEventListener('DOMContentLoaded', domReadyListener, false);
				}
				if(canAddWindowLoadListener) {
					global.addEventListener('load', domReadyListener, false);
				} else {
					if(canAttachWindowLoadListener) {
						global.attachEvent('onload', domReadyListener);
					}
				}
			}
			domReadylisteners[domReadylisteners.length] = fn;
			return true;
		};
	}
}

var byID = function(id) {
	return document.getElementById(id);
};

var byTag = function(tag, c) {
	c = c || document;
	return (tag == '*' && document.all) ? c.all : c.getElementsByTagName(tag);
};

var getTarget = function(o, c) {
	var t;
	switch(c) {
		case 'parent':
			t = o.parentNode;
			break;
		case 'next':
			t = o.nextSibling;
			if(t.nodeType != 1) {t = t.nextSibling;}
			break;
		case 'previous':
			t = o.previousSibling;
			if(t.nodeType != 1) {t = t.previousSibling;}
			break;
		default:
			t = byID(c);
			if(!t) {t = byTag(c, o)[0];}
	};
	return t;
};

var ShowHide = function(datas) {
	var tr, tg, lk, c, act = datas.actionType || 'click', current, img;
	
	var handleClick = function(e, o) {
		tg = getTarget(o, datas.target);
		if(tg) {
			lk = byTag('a', o)[0];
			if(lk && lk.getAttribute('href', 2) != '#') {
				if(lk.target && lk.target == '_blank') {
					window.open(lk.href);
				} else {
					return;
				}
			}
			$(tg).hasClassName(datas.classShow) ? this.hide(tg) : this.show(tg);
		}
		if(lk) {Event.stop(e);}
	};
	
	var handleOver = function(e, o) {
		this.show(getTarget(o, datas.target));
	};
	
	var handleOut = function(e, o) {
		this.hide(getTarget(o, datas.target));
	};
	
	var stopAction = function(e) {
		var t = Event.findElement(e, 'a');
		if(t.nodeName.toLowerCase() == 'a' && t.getAttribute('href', 2) == '#') {Event.stop(e);}
	};
	
	this.show = function(o) {
		o = $(o);
		if(!o) {return;}
		o.removeClassName(datas.classHide);
		o.addClassName(datas.classShow);
		if(img) {img.src = img.src.replace(datas.activeImage.off, datas.activeImage.on);}
		if(datas.activeClass) {$(tr).addClassName(datas.activeClass);}
		if(datas.singleOnView) {
			if(current && current != o) {this.hide(current);}
			current = o;
		}
		if(datas.onShow) {datas.onShow(o);}
	};
	
	this.hide = function(o, starting) {
		o = $(o);
		if(!o) {return;}
		o.removeClassName(datas.classShow);
		o.addClassName(datas.classHide);
		if(img) {img.src = img.src.replace(datas.activeImage.on, datas.activeImage.off);}
		if(datas.activeClass) {$(tr).removeClassName(datas.activeClass);}
		if(datas.onHide) {datas.onHide(o);}
	};
	
	if(datas.triggerID) {
		tr = byID(datas.triggerID);
		if(!tr) {return;}
		if(datas.activeImage) {img = byTag('img', tr)[0];}
		!datas.showOnLoad ? this.hide(getTarget(tr, datas.target)) : this.show(getTarget(tr, datas.target));
		if(act == 'mouseover') {
			Event.observe(tr, 'mouseover', handleOver.bindAsEventListener(this, tr), false);
			Event.observe(tr, 'mouseout', handleOut.bindAsEventListener(this, tr), false);
			Event.observe(tr, 'click', stopAction, false);
		} else {
			Event.observe(tr, act, handleClick.bindAsEventListener(this, tr), false);
		}
	} else if(datas.triggerTag) {
		if(datas.triggerContext) {c = byID(datas.triggerContext);}
		tr = byTag(datas.triggerTag, c);
		if(!tr.length) {return;}
		for(var i = 0, tri; tri = tr[i]; i++) {
			(datas.showOnLoad && (datas.showOnLoad - 1 == i)) ? this.show(getTarget(tri, datas.target)) : this.hide(getTarget(tri, datas.target));
			if(act == 'mouseover') {
				Event.observe(tri, 'mouseover', handleOver.bindAsEventListener(this, tri), false);
				Event.observe(tri, 'mouseout', handleOut.bindAsEventListener(this, tri), false);
				Event.observe(tri, 'click', stopAction, false);
			} else {
				Event.observe(tri, act, handleClick.bindAsEventListener(this, tri), false);
			}
		}
	}
};

var _ShowHide = function(datas) {
	return new ShowHide(datas);
};

var RollOver = function(datas) {
	var imgs, tmp, c, check = datas.initCheck ? datas.initCheck.split(';') : null;
	
	var handle = function() {
		if(check) {
			var i = -1, a = false;
			while(check[++i]) {
				if(this.src.indexOf(check[i]) != -1) {
					a = true;
					break;	
				}
			}
			if(a) {
				this.src = this.src.replace(datas.out, datas.over);
			} else {
				Event.observe(this, 'mouseover', over.bind(this), false);
				Event.observe(this, 'mouseout', out.bind(this), false);
			}
		} else {
			Event.observe(this, 'mouseover', over.bind(this), false);
			Event.observe(this, 'mouseout', out.bind(this), false);
		}
	};
	
	var over = function() {
		this.src = this.src.replace(datas.out, datas.over);
	};
	
	var out = function() {
		this.src = this.src.replace(datas.over, datas.out);
	};
	
	if(datas.context) {
		c = byID(datas.context);
		if(!c) {return;}
	}
	imgs = byTag('img', c);
	for(var i = 0, img; img = imgs[i]; i++) {
		if(img.src.indexOf(datas.out) != -1) {
			tmp = document.createElement('img');
			Event.observe(tmp, 'load', handle.bind(img), false);
			tmp.src = img.src.replace(datas.out, datas.over);
		}
	}
};

var _RollOver = function(datas) {
	return new RollOver(datas);
};

var InitRubCSS = function(datas) {
	if(!datas.initCheck) {return;}
	var c, check = datas.initCheck.split(';'), l = check.length;
	
	if(l) {
		for(var i = 0; i < l; i++) {
			$(check[i]).addClassName(datas.classActive);
		}
	}
};

var _InitRubCSS = function(datas) {
	return new InitRubCSS(datas);
};

var ClearInputText = function(datas) {
	var inputs, c, datas = datas || {}, stock = {}, transformed = false;
	
	var focus = function() {
		if(this.value == this.defaultValue) {this.value = '';}
		if(!transformed && datas.transformID && datas.transformTo && this.id == datas.transformID) {
			createInputType(this, datas.transformTo);
			transformed = true;
		}
	};
	
	var blur = function() {
		if(/^\s*$/.test(this.value)) {this.value = this.defaultValue;}
	};
	
	var createInputType = function(o, type) {
		var no = document.createElement('input');
		no.type = type;
		no.id = o.id;
		no.name = o.name;
		no.defaultValue = o.defaultValue;
		o.parentNode.replaceChild(no, o);
		Event.observe(no, 'focus', focus.bind(no), false);
		Event.observe(no, 'blur', blur.bind(no), false);
		setTimeout(function() {no.focus();}, 10);
	};
	
	if(datas.context) {
		c = byID(datas.context);
		if(!c) {return;}
	}
	inputs = byTag('input', c);
	for(var i = 0, input; input = inputs[i]; i++) {
		if(input.type && (input.type == 'text' || input.type == 'password')) {
			Event.observe(input, 'focus', focus.bind(input), false);
			Event.observe(input, 'blur', blur.bind(input), false);
		}
	}
};

var _ClearInputText = function(datas) {
	return new ClearInputText(datas);
};

var inputText = [],
	carteFid = null,
	errorLog = null,
	msgError = {
		de: 'Den Aufenhaltsort bitte eingeben.',
		es: 'Le rogamos especifique su lugar de destino.',
		fr: 'Merci de bien vouloir spécifier votre destination.',
		gb: 'Please specify your destination.',
		ja: '目的地を指定してください。',
		pl: 'Określ miejsce podróży.',
		it: 'Specifichi la sua destinazione.',
		nl: 'Specificeer uw bestemming a.u.b.',
		pt: 'Por favor, especifique seu destino.',
		zh: '请输入您选择的区域。'
	},
	checkSubmit = true;

var checkInputText = function(lg) {
	checkSubmit = true;
	ACC.checkSubmit = false;
	$('hotel_ou_ville').removeClassName('nolabel_ko');
	if($('num_carte_fidelite')) $('num_carte_fidelite').removeClassName('nolabel_ko');
	if($('type_carte_fidelite')) $('type_carte_fidelite').removeClassName('nolabel_ko');
	if($('code_avantage')) $('code_avantage').removeClassName('nolabel_ko');
	
	if(!inputText.length) {
		var form = byID('bookingEngine');
		errorLog = byID('errorMessageDest');
		if(!form || !errorLog) {return;}
		
		var inputs = byTag('input', form);
		for(var i = 0, input; input = inputs[i]; i++) {
			if(input.type && input.type == 'text') {
				inputText.push(input);
				if(input.value == input.defaultValue || (input.id == 'hotel_ou_ville' && /^\s*$/.test(input.value))) {
					
					if(input.id == 'hotel_ou_ville' && msgError[lg]) {
						var checkboxContrat = document.getElementsByName('checkboxContrat');						
						if (checkboxContrat.length)
						  if (!checkboxContrat[0].checked){
							  checkSubmit = false;
							  errorLog.innerHTML = msgError[lg];
							  errorLog.style.display = 'block';
							  input.addClassName('nolabel_ko');
					    } else input.value = '' ;
					  else input.value = '' ;
					}
						if(input.id == 'hotel_ou_ville' && document.getElementById('partenaire') && msgError[lg]) {
							  checkSubmit = false;
							  errorLog.innerHTML = msgError[lg];
							  errorLog.style.display = 'block';
							  input.addClassName('nolabel_ko');
					}

					if (input.id == 'num_carte_fidelite') {
							if ($("porteur_carte").checked /*&& checkSubmit && !checkboxContrat[0].checked*/) {
								 input.addClassName('nolabel_ko');	
							}
							if (checkSubmit) input.value='';	
					}
					
					if (input.id == 'code_avantage' ) {
							if ($("code_preferentiel").checked  /*&& checkSubmit && !checkboxContrat[0].checked */) {
								 input.addClassName('nolabel_ko');	
							}
							if (checkSubmit) input.value='';	
					}
					
				}
			}
		}
	} else {
		$('errorMessage').innerHTML = '';
	
		for(var i = 0, input; input = inputText[i]; i++) {
			if(input.value == input.defaultValue || (input.id == 'hotel_ou_ville' && /^\s*$/.test(input.value))) {
				if(input.id == 'mot-rech' && msgError[lg]) {
					checkSubmit = false;
					errorLog.innerHTML = msgError[lg];
					errorLog.style.display = 'block';
				}
				if(input.id == 'hotel_ou_ville' && msgError[lg]) {
 				  var checkboxContrat = document.getElementsByName('checkboxContrat');						
						if (checkboxContrat.length)
						  if (!checkboxContrat[0].checked){
							  checkSubmit = false;
							  errorLog.innerHTML = msgError[lg];
							  errorLog.style.display = 'block';
							  input.addClassName('nolabel_ko');
					    } else input.value = '' ;
					  else input.value = '' ;
					}
					
					if (input.id == 'num_carte_fidelite' ) {
							if ($("porteur_carte").checked /*&& checkSubmit && !checkboxContrat[0].checked*/) {
								 input.addClassName('nolabel_ko');	
							}
							if (checkSubmit) input.value='';	
						
					}
					
					if (input.id == 'code_avantage') {
							if ($("code_preferentiel").checked  /*&& checkSubmit && !checkboxContrat[0].checked */) {
								 input.addClassName('nolabel_ko');	
							}
							if (checkSubmit) input.value='';	
						
					}
			}
		}
	}
/*	var checkboxContrat = document.getElementsByName('checkboxContrat');*/
	if(/*checkSubmit && !checkboxContrat[0].checked && */
			 $('type_carte_fidelite') && $('type_carte_fidelite').selectedIndex == 0 && $("porteur_carte").checked) {
		$('type_carte_fidelite').addClassName('nolabel_ko'); 
	}
	
	if(checkSubmit) {
		errorLog.style.display = 'none';
	    errorLog.innerHTML = '';
	    ACC.checkSubmit = true;
	}
};

var checkInputText_google = function() {
	checkSubmit = true;
	if(!inputText.length) {
		var form = byID('GoogleForm');
		var inputs = byTag('input', form);
		for(var i = 0, input; input = inputs[i]; i++) {
			if(input.type && input.type == 'text') {
				inputText.push(input);
				if(input.value == input.defaultValue || (input.id == 'mot-rech' && /^\s*$/.test(input.value))) {
					input.value = '';
				}
			}
		}
	} else {
	for(var i = 0, input; input = inputText[i]; i++) {
		if(input.value == input.defaultValue || (input.id == 'mot-rech' && /^\s*$/.test(input.value))) {
			input.value = '';
			if(input.id == 'mot-rech') {
				checkSubmit = false;
			}
		}
	}
} 
	if(checkSubmit) {
	    ACC.checkSubmit = true;
	}	
};

var restoreInputText = function() {
	if(!inputText.length) {return;}
	for(var j = 0; input = inputText[j]; j++) {
		if(input.disabled || /^\s*$/.test(input.value)) {input.value = input.defaultValue;}
	}
	carteFid = carteFid || $('type_carte_fidelite');
	if(carteFid && carteFid.disabled) {carteFid.selectedIndex = 0;}
};

window.ACC.tools = {
	DOMready: load,
	domReadyIsDone: domReadyIsDone,
	domReadyListener: domReadyListener,
	addDomReadyListener: addDomReadyListener,
	showHide: _ShowHide,
	rollOver: _RollOver,
	initRubCSS: _InitRubCSS,
	clearInputText: _ClearInputText,
	checkInputText: checkInputText,
	checkInputText_google: checkInputText_google,
	restoreInputText: restoreInputText
};

})();
