var HtmlUtil = (function(){
	var publicObject = {
		generateClassCode: function(cAr)
		{
			var classCode = '';
			
			if(cAr.length > 0)
			{
				classCode += ' class="';
				
				for(var i=0; i<cAr.length; i++)
				{
					classCode += cAr[i];
					
					if(i != cAr.length-1)
					{
						classCode += ' ';
					}
				}
				
				classCode += '"';
			}
			
			return classCode;
		}
	};
	
	return publicObject;
})();

var PopUtil = {};
PopUtil.config = {popElement: {tagName: 'a',className: 'pop'},windowProperties: {width: 710,height: 500,sup: {scrollbars: 'yes'}}};
PopUtil.popCollection = [];

PopUtil.open = function()
{
	var currentPop = Event.element(arguments[0]);
	
	if(Object.isInitialized(currentPop))
	{
		var uriVal = currentPop.getAttribute('href');
		
		if(!uriVal)
		{
			uriVal = currentPop.getAttribute('data-target');
		}
		
		if(arguments.length >= 2)
		{
			uriVal = arguments[1];
		}
		
		var popWidth = PopUtil.config['windowProperties']['width'];
		var popHeight = PopUtil.config['windowProperties']['height'];
		var popSup = PopUtil.config['windowProperties']['sup'];
		
		/* Objet privé (rendre public ?) contenant la config des types de pop-up (remplace la config par défaut de PopUtil.config.windowProperties) */
		var popType = {
			goodiesPlayer: {width: 484,height: 386,sup: {}},
			tempIQ: {width: 830,height: 350,sup: {scrollbars: 'yes'}}
		};
		
		/* Récupération des noms de classes -> clé de la config des pop-up */
		var elemClassColl = $w(currentPop.className);
		
		elemClassColl.each(function(elem)
		{
			for(cN in popType)
			{
				if(cN == elem)
				{
					if(Object.isInitialized(popType[cN]['width']))
					{
						popWidth = popType[cN]['width'];
					}
					if(Object.isInitialized(popType[cN]['height']))
					{
						popHeight = popType[cN]['height'];
					}
					if(Object.isInitialized(popType[cN]['sup']))
					{
						popSup = popType[cN]['sup'];
					}
					
					/* Si élément trouvé, on arrête la boucle (voir prototype) */
					throw $break;
				}
			}
		});
		
		if(Object.isInitialized(uriVal))
		{
			var popConfString = 'width='+popWidth+',height='+popHeight;
			
			for(var prop in popSup)
			{
				popConfString += ','+prop+'='+popSup[prop];
			}
			
			window.open(uriVal, 'popInfo', popConfString);
		}
	}
	
	Event.stop(arguments[0]);
}

PopUtil.init = function()
{
	// class pop par défaut
	
	if(Object.isInitialized(window.popProperties))
	{
		for(p in PopUtil.config['windowProperties'])
		{
			if(Object.isInitialized(window.popProperties[p]))
			{
				PopUtil.config['windowProperties'][p] = window.popProperties[p];
			}
		}
	}
	//PopUtil.config['popElement']['tagName']+
	var popColl = Element.select(document,'.'+PopUtil.config['popElement']['className']);
	
	popColl.each(function(elem)
	{
		Event.observe(elem,'click',PopUtil.open);
		elem.setAttribute('title','Ce lien s’ouvre dans un pop-up');
	});
}

var FormUtil = (function()
{
	var config = {display: {property: 'display', visible: 'block',hidden: 'none'}};

	var publicFU = {
		displayMailPanel: function()
		{
			var mG = Element.select(document,('div.mail-group'));

			if(!!mG && (mG.length > 0))
			{
				var styleProp = {};
				styleProp[config['display']['property']] = config['display']['visible'];
				
				mG[0].setStyle(styleProp);
			}
		},
		generateSoapCode: function(mail,optIn)
		{
			var soapCode = '<?xml version="1.0" encoding="UTF-8"?>'
				+'<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:prospect.redbox.darty.com">'
   +'<soapenv:Header/>'
   +'<soapenv:Body>'
   +'<urn:sauvegardeProspect soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'
   +'<sauvegardeProspectIn xsi:type="enc:DemandeSauvegardeProspect" xmlns:enc="encodedTypes.prospect.redbox.darty.com">'
  +'<optIn xsi:type="xsd:string">'+optIn+'</optIn>'
+'            <adresseEmail xsi:type="xsd:string">'+mail+'</adresseEmail>'
+'         </sauvegardeProspectIn>'
+'      </urn:sauvegardeProspect>'
+'   </soapenv:Body>'
+'</soapenv:Envelope>';

			return soapCode;
		}
	};
	return publicFU;
})();

FormUtil.clearField = function(ev)
{
	var currentFld = Event.element(ev);
	
	if(Object.isInitialized(currentFld))
	{
		if(currentFld.defaultValue == currentFld.value)
		{
			currentFld.value = '';
		}
	}
}

FormUtil.popAction = function(ev)
{
	window.open('../presentation/ligne_inactive.htm','inactive','width=646,height=751');
}

FormUtil.init = function()
{
	var gfldColl = Element.select(document,'input.clear');
	
	gfldColl.each(function(elem)
	{
		elem.observe('focus',FormUtil.clearField);
	}
	);
	
	var fldColl = Element.select(document,'form.ligne-test fieldset.standard input[type=text]');
	
	fldColl.each(function(elem)
	{
		elem.observe('focus',FormUtil.displayMailPanel);
	}
	);
}

var MailProspect = (function()
{
	var config = {
		layer: {
				element: 'div#layer-saisie-mail',
				close: 'p a',
				display: {property: 'visibility', visible: 'visible', hidden: 'hidden'}
		},
		form: {
			uri: ''
		}
	};
	var publicMP = {};
	
	var layerObject = null;
	var formObject = null;
	
	var formContent = '';
	
	function display()
	{
		if(!!layerObject)
		{
			var styleProp = {};
			styleProp[config['layer']['display']['property']] = config['layer']['display']['visible'];
			
			layerObject.setStyle(styleProp);
		}
		else
		{
			PopUtil.open(arguments[0],'/redbox-frontoffice/mps17-AffichagePopupAction.do');
		}
		
		if(formContent != '')
		{
			formObject.innerHTML = formContent;
			FormUtil.init();
			closeActive();
		}
		
		Event.stop(arguments[0]);
	}
	
	function hide()
	{
		if(!!layerObject)
		{
			var styleProp = {};
			styleProp[config['layer']['display']['property']] = config['layer']['display']['hidden'];
			
			layerObject.setStyle(styleProp);
		}
		Event.stop(arguments[0]);
	}
	
	function treatForm()
	{
		if(!!formObject && formObject.action != '')
		{
			var optIn = null;
			if('optIn' in formObject.elements)
			{
				optIn = formObject.elements['optIn'].checked;
			}
			var defaultMail = formObject.elements['adresseEmail'].defaultValue;
			var mail = formObject.elements['adresseEmail'].value;
			/*
			if(!!optIn)
			{
				optIn = 'O';
			}
			else
			{
				optIn = 'N';
			}
			*/
			
			var error = {};
			
			var mailTest = /^[a-zA-Z0-9\._-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)?$/;
			
			if(mail == '' || mail == defaultMail)
			{
				error['mailEmpty'] = 'Le mail est obligatoire !';
			}
			else if(!mail.match(mailTest))
			{
				error['mailMalformed'] = 'Le mail est incorrect !';
			}
			
			var canSend = 0;
			
			for(var prop in error)
			{
				canSend++;
			}
			
			if(canSend == 0)
			{
				var soapCode = FormUtil.generateSoapCode(mail,'O');

			new Ajax.Request(formObject.action, {
				method: 'post',
				contentType: 'application/soap+xml',
				requestHeaders: ['SOAPAction','prospect.redbox.darty.com/sauvegardeProspect'],
				onSuccess: function(transport){
					try
					{
						var resp = transport.responseXML.getElementsByTagName('codeRetour').item(0).childNodes.item(0).nodeValue;
						
						if(resp == 'OK')
						{
							Element.select(formObject,'fieldset')[0].innerHTML = '<div class="merci">'
						+'<h3>Merci !</h3>'
						+'<p>Votre demande est bien enregistr&eacute;e</p>'
						+'<p>Vous recevrez prochainement notre lettre d&quote;information.</p>'
						+'<p class="fermer-ok"><a href="#recevoir-info" class="image">Fermer</a></p>'
						+'</div>';
					
							closeActive();
						}
					}
					catch(e)
					{
						//alert(e.message)
					}
					//hide();
				},
				postBody: soapCode
				});
			
				/*Element.select(formObject,'fieldset')[0].innerHTML = '<div class="merci">'
				+'<h3>Merci !</h3>'
				+'<p>Votre demande est bien enregistrée</p>'
				+'<p>Vous recevrez prochainement notre lettre d’information.</p>'
				+'</div>';*/
			
				Event.stop(arguments[0]);
				//window.setTimeout(hide,500,arguments[0]);
			}
			else
			{
				var errorCode = '';
				
				for(var prop in error)
				{
					errorCode += error[prop]+'\n';
				}
				
				if(errorCode != '')
				{
					alert(errorCode);
				}
				
				Event.stop(arguments[0]);
			}
			
		}
		
	}
	
	function closeActive()
	{
		var zoneCl = Element.select(document,config['layer']['element']+' '+config['layer']['close']);
	
		zoneCl.each(function(elem)
		{
			elem.observe('click',hide);
		});
	}

	function init()
	{
		var zoneMP = Element.select('nav-secondaire','#recevoir-info a');
	
		zoneMP.each(function(elem)
		{
			elem.observe('click',display);
		});
		
		closeActive();
		
		var formMP = Element.select(document,config['layer']['element']+' form');
	
		formMP.each(function(elem)
		{
			elem.observe('submit',treatForm);
			formObject = elem;
			
			formContent = formObject.innerHTML;
		});
		
		var lTemp = Element.select(document,config['layer']['element']);
		
		if(!!lTemp && lTemp.length > 0)
		{
			var docHeight = $(document.body).getHeight();
			
			var winHeight = document.viewport.getDimensions().height;
			
			/* On prend la plus grande hauteur entre la hauteur de la fenêtre et la hauteur du document */
			var layerHeight = (winHeight > docHeight) ? winHeight : docHeight;
			
			layerObject = lTemp[0];
			layerObject.setStyle({'height': layerHeight+'px'});
		}
		
	}
	
	if(window.Prototype)
	{
		//document.observe('dom:loaded',init);
		
		/* Pour mesurer la hauteur du contenu, il est nécessaire d’avoir TOUT le contenu (fichiers externes inclus !) */
		Event.observe(window,'load',init);
	}

	return publicMP;
})();

var MailElligibilite = (function()
{
	var formObject = null;
	
	function submitForm(ev)
	{
		if(formObject != null)
		{
			Event.stop(ev);
			formObject.submit();
		}
	}
	
	function stopForm(ev)
	{
		Event.stop(ev);
	}
	
	function treatForm()
	{
		var mailObject = $('elligibilite-mail');
		
		if(!!mailObject)
		{
			var aEvent = arguments[0];
			
			var mail = mailObject.value;
			
			var error = {};
			
			var mailTest = /^[a-zA-Z0-9\._-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)?$/;
			
			if(mail != '' && mail != mailObject.defaultValue && !mail.match(mailTest))
			{
				//error['mailEmpty'] = 'Le mail est obligatoire !';
				error['mailMalformed'] = 'Le mail est incorrect !';
			}
			
			var canSend = 0;
			
			for(var prop in error)
			{
				canSend++;
			}
			
			var oiObject = $('mail-info');
			if(!!oiObject && oiObject.checked)
			{
				oiObject = 'O';
			}
			else
			{
				oiObject = 'N';
			}
			
			if(canSend == 0)
			{
				var soapCode = FormUtil.generateSoapCode(mail,oiObject);

			new Ajax.Request('/enablers-prospect/services/WSRedboxProspect', {
				method: 'post',
				contentType: 'application/soap+xml',
				requestHeaders: ['SOAPAction','prospect.redbox.darty.com/sauvegardeProspect'],
				onSuccess: function(transport){
					submitForm(aEvent);
				},
				onException: function(transport){stopForm(aEvent)},
				onFailure: function(transport){stopForm(aEvent)},
				postBody: soapCode
				});
			}
			else
			{
				var errorCode = '';
				
				for(var prop in error)
				{
					errorCode += error[prop]+'\n';
				}
				
				if(errorCode != '')
				{
					alert(errorCode);
				}
				
				//submitForm(arguments[0]);
				
				Event.stop(aEvent);
			}
		}
		else
		{
			submitForm(aEvent);
		}
	}
	
	function init()
	{
		var formMP = Element.select(document,'form.ligne-test');
	
		formMP.each(function(elem)
		{
			elem.observe('submit',treatForm);
			formObject = elem;
		});
	}
	
	if(window.Prototype)
	{
		document.observe('dom:loaded',init);
	}
})();

var PopUnderUtil = (function()
{
	function close()
	{
		if(window.opener && !window.opener.closed)
		{
			window.close();
		}
		else
		{
			window.location.href = '/';
		}
	}

	function init()
	{
		var closeZone = Element.select(document,'div.message p.fermer');
	
		closeZone.each(function(elem)
		{
			elem.observe('click',close);
		});
	}
	
	document.observe('dom:loaded',init);
})();

if(!!window.Prototype)
{
	document.observe('dom:loaded',PopUtil.init);
	document.observe('dom:loaded',FormUtil.init);
}

// Les éléments HTML inconnus doivent être déclarés dans le dom pour pouvoir appliquer un style sous IE !!!

if(!!window.jQuery && jQuery.browser.msie)
{
	jQuery.each(['section','footer','header','hgroup','article'],function(ind,el)
			{
				document.createElement(el);
			}
		);
}

var DebugUtil = (function()
{
	var internalString = '';
	
	var retour = {
		initialize: function()
		{
			//internalString = '';
		},
		displayMessage: function(str)
		{
			//if(internalString == '')alert(document.getElementById('debug'));
			if(!document.getElementById('debug'))
			{
				jQuery(document.body).append('<div id="debug"></div>');
			}
			
			//if(internalString == '')alert(document.getElementById('debug'));
			
			internalString += str;
			//alert(internalString)
			jQuery('div#debug').html(internalString);
		}
	};
	
	return retour;
})();
