var App; if (!App) App = {};
var Init; if (!Init) Init = {};
var Options; if (!Options) Options = {};


App = {
	
	'ie' : false,
	'ieVersion' : 0,
	'ie6' : false,
	'ie7' : false,
	'ie8' : false,
	'Stats' : 0,

	'init' : function() {
		
		App.detectIE();
		
		$(".png").pngFix();
		
		$("input.hint, textarea.hint").hint();
		
		Init.Contact("#contactForm");
		
		if ($("#map_canvas").length) { 
			$(window).unload(function(e) { GUnload(); }) ;
			$(window).load(function(e) { initialize_gmap(); });
		}
		
		if(jQuery("#calculator").length) { var tool = new FinanceCalculator("#calculator"); }
		
	},
	
	
	'detectIE' : function() {
		if ($.browser.msie) {
			App.ie = true;
			App.ieVersion = parseInt($.browser.version.substr(0,1));
			if(App.ieVersion == 6) { App.ie6 = true; }
			if(App.ieVersion == 7) { App.ie7 = true; }
			if(App.ieVersion == 8) { App.ie8 = true; }
		}
	}
	
};

$(App.init);

var FinanceCalculator = function(selector) {

	if(!$(selector).length) return;
	else var $el = $(selector);

	var percent = 0.03;
	
	var incomes = 0;
	var expenses = 0;
	var credits = 0;
	
	function updateIncomes() {
		incomes = 0;
		$el.find("input[type=text].incomes").each(function() {
			incomes += parseFloat($(this).val());
		});
	}
	
	function updateExpenses() {
		expenses = 0;
		$el.find("input[type=text].expenses").each(function() {
			expenses += parseFloat($(this).val());
		});
	}
	
	function updateCredits() {
	
		$el.find("table.credits input[type=text].total").each(function() {
			if(parseFloat($(this).val()) > 0) {
				var monthly = parseFloat($(this).val()) * percent;
				$(this).parents("tr").find("input.credit").val(monthly.toFixed(2));
			} else {
				$(this).parents("tr").find("input.credit").val("0.00");
			}
		});
	
		credits = 0;
		$el.find("input[type=text].credit").each(function() {
			credits += parseFloat($(this).val());
		});
	}
	
	function update() {
		updateIncomes();
		updateExpenses();
		updateCredits();
		$el.find("table.results input[name=incomes]").removeClass("hasHint").val(incomes.toFixed(2));
		$el.find("table.results input[name=expenses]").removeClass("hasHint").val(expenses.toFixed(2));
		$el.find("table.results input[name=debts]").removeClass("hasHint").val(credits.toFixed(2));
		if((credits + expenses) > 0 && incomes > 0) {
			$el.find("table.results input[name=debt]").removeClass("hasHint").val(((credits + expenses)/incomes*100).toFixed(2));
		} else {
			$el.find("table.results input[name=debt]").removeClass("hasHint").val("0.00");
		}
	}
	
	$el.find("input[type=text]").numeric();
	
	$el.find("input[type=text]").keyup(function() {
		update();
	});

};
		
	


/*********************************************
*
* Common options
*
**********************************************/

Options = {

	"block_comments" : {
		message : "<img src='/statics/img/loading_block.gif' />",
		centerY : true,
		overlayCSS: {
			backgroundColor:'#666'
		}
	},
	"block_comments_error" : {
		message : "Veuillez remplir les champs requis",
		centerY : true,
		css: {
			backgroundColor:'#FBE3E4',
			color: "#8a1f11",
			border: "solid 2px #FBC2C4",
			width:'250px',
			cursor: 'pointer'
		},
		overlayCSS: {
			backgroundColor:'#666',
			cursor: 'pointer'
		}
	},
	"block_comments_success" : {
		message : "Votre commentaire a été ajouté avec succès",
		centerY : true,
		css: {
			backgroundColor:'#E6EFC2',
			color: "#264409",
			border: "solid 2px #C6D880",
			width:'250px',
			cursor: 'pointer'
		},
		overlayCSS: {
			backgroundColor:'#666',
			cursor: 'pointer'
		}
	},
	"block_contact" : {
		message : "<img src='/statics/img/loading_block.gif' />",
		centerY : true,
		overlayCSS: {
			backgroundColor:'#666'
		}
	}

};

/*********************************************
*
* Templates
*
**********************************************/

Templates = {

	"sendByMail" : 'Bonjour,\nVoici une adresse intéressante :\n\n{title}\n{url}',

	"comment" : "<div class='comment'><div class='top'>{author} - {dateFormat}</div><div class='body'>{text}</div></div>",

	"render" : function(text,values) {
		var re_cache = {};
		var tmpl = text.replace(/%7B/ig,'{').replace(/%7D/ig,'}');
		$.each(values, function(k,v) {
			tmpl = tmpl.replace( new RegExp('{'+k+'}', 'gm'), v );	
		});
		
		return tmpl;

	}
};

/*********************************************
*
* GoogleMap
*
**********************************************/

function createMarker(point, icon, popuphtml) {
	var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>";
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(popuphtml);
	});
	return marker;
}

function addPoints() {
	var newpoints = [];
	newpoints[0] = new Array(45.549419,-73.667963, icon0, '1', '<b>PAF</b><br>10502 boulevard Saint Laurent<br>Montréal, Québec, H3L 2P4<br>(514) 331-2929'); 
	for(var i = 0; i < newpoints.length; i++) {
		var point = new GPoint(newpoints[i][1],newpoints[i][0]);
		var popuphtml = newpoints[i][4] ;
		var marker = createMarker(point,newpoints[i][2],popuphtml);
		map.addOverlay(marker);
		marker.openInfoWindowHtml(popuphtml);
	}
}
	
function initialize_gmap() {
	map = new GMap2(document.getElementById("map_canvas"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(45.549419,-73.667963), 15);
	map.removeMapType(G_NORMAL_MAP);
	map.removeMapType(G_SATELLITE_MAP);
	map.removeMapType(G_HYBRID_MAP);
	map.setMapType(G_NORMAL_MAP);
 	
	
	icon0 = new GIcon();
	icon0.image = "http://www.google.com/mapfiles/marker.png";
	icon0.shadow = "http://www.google.com/mapfiles/shadow50.png";
	icon0.iconSize = new GSize(20, 34);
	icon0.shadowSize = new GSize(37, 34);
	icon0.iconAnchor = new GPoint(9, 34);
	icon0.infoWindowAnchor = new GPoint(9, 10);
	icon0.infoShadowAnchor = new GPoint(18, 25);
	
	
	
	
	addPoints();
}

/*********************************************
*
* Quick Init
*
**********************************************/


Init.Contact = function(selector) {
	
	var el = $(selector);
	if(!el.length) { return; }
	
	el.find("form").submit(function(e) {
		e.preventDefault();
		var form = $(this);
		el.find("div.success").remove();
		el.find("div.error").remove();	
		if(form.validate()) {
			form.block(Options.block_contact);
			$.post("/"+App.lang+"/contact.json",form.serialize(),function(data) {
				form.unblock();
				if(!data.error && data.success) {
					App.Stats.event("Contact", "Write", form.find("input[name=email]").val(""));
					el.find("form").before("<div class='success' style='cursor:pointer;'>Votre message a été envoyé</div>");
					el.find(".success").click(function() { el.find(".success").remove(); });
					form.find("textarea[name=message]").val("");
					form.find("input[type=text]").each(function() {
						$(this).val($(this).attr("title")).addClass("hasHint");
					});
				} else {
					el.find("form").before("<div class='error'>"+data.error+"</div>");
				}
			}, "json");
		}
	});

};




Analytics = function(account) {

	var self = this;
	
	try {
		self.tracker = _gat._getTracker(account);
		self.account = account;
	} catch(err) {}
	
};

Analytics.prototype.tracker = null;
Analytics.prototype.account = null;

Analytics.prototype.setVar = function(visitor) {
	if(!this.tracker) { return; }
	try {
	
		this.tracker._setVar(visitor);
		
	} catch(err) {}
};

Analytics.prototype.track = function(page) {
	if(!this.tracker) { return; }
	try {
	
		if(!page) { this.tracker._trackPageview(); }
		else{ this.tracker._trackPageview(page); }
		
	} catch(err) {}
};

Analytics.prototype.event = function(cat,action,label) {
	if(!this.tracker) { return; }
	try {
	
		this.tracker._trackEvent(cat, action, label);
		
	} catch(err) {}
};