/* +----------------------------------------------------------------------------------------------
   | CanoeMeteo
   |
   | Gérer les blocs de météo d'accueil de Canoë
   |
   | auteur : jean-baptiste landry [jean-baptiste.landry@canoe.ca]
   | date	: décembre 2009
   | projet : portail
   |
   |----------------------------------------------------------------------------------------------
   | copyright (c) 2009 sun media, tous droits réservés 
   +---------------------------------------------------------------------------------------------- */

var CanoeMeteo = {
	
	// json service
	jsonurl: '/meteo/json.php',
	
	// TMPL
	TMPL: {
		content : '<div id="logoGau"><img src="/images/meteo/icones/nouveau/{ICON_COURANT}.gif" width="40" height="40" alt="" /></div><div id="chiffre">{TEMP_COURANT}<span class="degre">&deg;</span><span class="celsius">C</span></div><div id="villeChange"><span>{VILLE}</span><br /><a href="/meteo/index.html" onclick="return CanoeMeteo.linkMeteo(this);">Changer la ville</a><span><!--&nbsp;&nbsp;|&nbsp;&nbsp;</span> <a href="lien">Prévisions détaillées</a> --></div>'

	},
	
	// var
	_linkmeteo: false,


	/* +----------------------------------
	   | update villes dropdown
	   +---------------------------------- */
	updatevilles: function(){

		var selectVille      = document.getElementById('ville');
		selectVille.length              = 1;
		selectVille.options[0].selected = true;
		selectVille.disabled            = true;

		// pour quelle province
		var province = arguments[0].options[arguments[0].selectedIndex].value.toString();

		// si une province sélectionné
		if (province != 0) {

			// get liste
			jQuery.getJSON(CanoeMeteo.jsonurl, {act:'getvilles',province:province}, function(data) {

				// update dropdown
				var villes = data.sites.site;
				var selectVille = document.getElementById('ville');

				if (villes.length > 1)
				{
					selectVille.length              = villes.length+1;
				}
				
				selectVille.disabled            = false;
				selectVille.options[0].selected = true;
				
				for (var i=0; i<villes.length; ++i) {
                                        // Fix to replace '&amp;' wrongly encoded in the DB
                                        villes[i].site_name.fr = villes[i].site_name.fr.replace('&amp;','&').replace('&amp;','&').replace('&amp;','&');
					selectVille.options[i+1].text  = CanoeMeteo.html_entity_decode(villes[i].site_name.fr);
					selectVille.options[i+1].value = villes[i]['@attributes'].id;
				}
			});
		}
	},


	/* +----------------------------------
	   | update cookie
	   +---------------------------------- */
	updatecookie: function (form) {
		
		// si ville sélectionnée
		if(form.province.value != 0 && form.ville.value != 0) {
			new CanoeMeteo.Obj.cookie('tvameteo').setCookie({
				value:      form.province.value+':'+form.ville.value,
				expires:    new Date(2100,1,1),
				rootdomain: 1
			});

			CanoeMeteo.loadMeteo();
		
		// sinon
		} else {
			alert("Veuillez faire un choix avant de soumettre le formulaire.");	
		}

		return false;
	},

	
	/* +----------------------------------
	   | load meteo block
	   +---------------------------------- */
	 loadMeteo: function(onpage) {
		var meteocookie = new CanoeMeteo.Obj.cookie('tvameteo').getCookie();

		var province;
		var ville;

		// si un cookie
		if (meteocookie) {
			
			var elements  = (meteocookie) ? meteocookie.split(':') : [];
			province = elements[0];
			ville    = elements[1];
		// sinon
		} else {
			province = 'QC';
			ville    = 'montreal';
		}
		if (onpage) {
			
			
			
			jQuery.getJSON(CanoeMeteo.jsonurl, {'act':'getmeteo','province':province,'ville':ville}, function success (json) {
				document.getElementById('meteo_container').innerHTML = CanoeMeteo.loadMeteo_html(json);
			});
			

			
			/*
			// for troubleshooting :
			jQuery.ajax({
					type: "GET",
					url: CanoeMeteo.jsonurl,
					dataType: "json",
					success: function(results){
					},
					error: function(XMLHttpRequest, textStatus, errorThrown){
						alert("Error" + textStatus);
					}


				});

            */

		} else {
			jQuery.getJSON(CanoeMeteo.jsonurl, {act:'getmeteo',province:province,ville:ville}, function success (json) {
				document.getElementById('meteo_container').innerHTML = CanoeMeteo.loadMeteo_html(json);
			});
			$('#meteoMainContainer').hide();
		}
	},

	/* +----------------------------------
	   | html
	   +---------------------------------- */
	loadMeteo_html: function(json) {
		var html = CanoeMeteo.TMPL.content;
	
		var data = {
			VILLE:			CanoeMeteo.html_entity_decode(json.type.weather[0].site_name.fr),
			ICON_COURANT:   json.type.weather[0].icon['@attributes'].id,
			TEMP_COURANT:   json.type.weather[0].temperature.cel,
			PERIODE_S1:		json.type.weather[1].period[0].period_name.fr,
			TEMP_S1:		json.type.weather[1].period[0].temperature.cel,
			ICON_S1:        json.type.weather[1].period[0].icon['@attributes'].id,
			PERIODE_S2:		json.type.weather[1].period[1].period_name.fr,
			TEMP_S2:		json.type.weather[1].period[1].temperature.cel,
			ICON_S2:        json.type.weather[1].period[1].icon['@attributes'].id

		};
		
		for (var i in data) {
			html = html.replace(new RegExp('\{'+i+'\}','g'),data[i]);
		}

		return html;
	},


	/* +----------------------------------
	   | linkMeteo
	   +---------------------------------- */
	linkMeteo: function (anchor) { 
		CanoeMeteo._linkmeteo = $('#meteoMainContainer').show();
		
		return false;
	},

	
	/* +----------------------------------
	   | html_entity_decode
	   +---------------------------------- */
	html_entity_decode: function(str) {
		var obj=document.createElement('textarea');
		obj.innerHTML=str.replace(/</g,'&lt;').replace(/>/g,'&gt;');
		return obj.value;
	},



	/* +----------------------------------
	   | Objects
	   +---------------------------------- */
	Obj: {
		cookie: function (id) {

			/* +--------------------------------------------
				| _fixDate  //fixes a stupid bug in MsIE Mac 
				+-------------------------------------------- */
			this._fixDate = function(date) {
				var base = new Date(0);
				var skew = base.getTime();
				if (skew > 0) date.setTime(date.getTime() - skew);
				return date;
			};
			
			
			/* +--------------------------------------------
				| setCookie 
				+-------------------------------------------- */
			this.setCookie = function(params) {
				var value   = params['value'];
				var expires = (params['expires']) ? this._fixDate(params['expires']).toGMTString() : '';
				var path    = (params['path'])    ? params['path']                                 : '/';
				var domain  = (params['domain'])  ? params['domain']                               : document.domain;
				var secure  = (params['secure'])  ? 1                                              : 0;
				
				
				// domain
				var splitDomain = domain.split('.');
				if (params['rootdomain']) {
					domain = '.'+splitDomain[splitDomain.length-2]+'.'+splitDomain[splitDomain.length-1];
				} else if (splitDomain.length == 2) {
					domain = '.'+domain;
				}
				
				
				document.cookie = '' +
					this.id + '=' + escape(value) +			
					((expires) ? '; expires=' + expires : '') +
					((path)    ? '; path='    + path    : '') +
					((domain)  ? '; domain='  + domain  : '') +
					((secure)  ? '; secure'             : '') +
				'';
			};


			/* +--------------------------------------------
				| getCookie 
				+-------------------------------------------- */
			this.getCookie = function() {
				var cookie = document.cookie;
				var prefix = this.id + '=';
				var begin = cookie.indexOf('; ' + prefix);
				
				if (begin == -1) {
					begin = cookie.indexOf(prefix);
					if (begin != 0) { return null; }
				} else {
					begin += 2;
				}

				var end = cookie.indexOf(';', begin);
				if (end == -1) { end = cookie.length; }

				return unescape(cookie.substring(begin + prefix.length, end));
			};


			/* +--------------------------------------------
				| deleteCookie 
				+-------------------------------------------- */
			this.deleteCookie = function(params) {
				if (this.getCookie()) {
					var path       = (typeof(params) != 'undefined' && params['path'])       ? params['path']       : '';
					var domain     = (typeof(params) != 'undefined' && params['domain'])     ? params['domain']     : '';
					var rootdomain = (typeof(params) != 'undefined' && params['rootdomain']) ? params['rootdomain'] : '';
				
					this.setCookie({
						value:      '',				
						path:       path,				
						domain:     domain,				
						rootdomain: rootdomain,				
						expires:    new Date(1999, 7, 1)
					});
				}
			};


			
			/* +--------------------------------------------
				| MAIN 
				+-------------------------------------------- */

			this.id = id;
		}
	}
};

