/**************************************************************************************
*File: interface.js
*Contents: Form handlers
*All rights reserved.
**************************************************************************************/

function initInterface(lng) {
	initDialogs(lng);
}

//Panel controls
function firstPage() {
   lr.cashe.firstPage();
}

function lastPage() {
   lr.cashe.lastPage();
}

function nextPage() {
   lr.cashe.nextPage();
}

function previousPage() {
   lr.cashe.previousPage();
}

//Menu Controls
function showAll() {
	lr.select();
}

function showCategory(category) {
	lr.search('search','kw=' + category);
}


function hideAll() {
	lr.hide();
}

function showWithWeb() {
	lr.showWithWeb();
}

function hideWithWeb() {
	lr.hideWithWeb();
}

function help() {
   helpPanel.show();
}

function about() {
   aboutPanel.show();
}

function feedback() {
	feedbackDialog.show();
}

function showLocateDialog() {
	locateDialog.show();
}

function showSearchDialog() {
	searchDialog.show();
}

//Dialog Handlers
var handleLocate = function() {
	var textMiles = {"eng": "Miles", "fr": "Milles"};
	var textAddress = {"eng": " Could not locate your address, please be more specific", "fr": "Adresse non trouv&#233;e, soyez plus pr&#233;cis SVP"};
	if(this.validate() == false)
		return false;

	var data = this.getData();
	var d = parseFloat(data.distance);
	if(data.unit == textMiles[data.lng])
		d *= 1.609344;
	
	var geocoder = new GClientGeocoder();
	geocoder.getLatLng(data.address, function(position) {
      		if(!position)	
			error(data.lng,textAddress[data.lng]);
		else {
			var params = "lat=" + position.lat() + "&lng=" + position.lng() + "&d=" + d;
			if(data.category.length)
				params += "&cat=" + data.category;

			lr.showHere(position);
			lr.search('locate', params);
 		}
 	});
	
	this.hide();
	return true;
}


var validateLocate = function() {
	var textMiles = {"eng": "Miles", "fr": "Milles"};
	var textAddress = {"eng": "Missing address", "fr": "Entrez une adresse"};
	var textDistance = {"eng": "Invalid distance", "fr": "Adresse invalide"};
	var textRange = {"eng": "Distance out of range", "fr": "Adresse hors domaine"};
	
	var data = this.getData();
	if(data.address == "") {
		error(data.lng,textAddress[data.lng]);
		return false;
	}
	if(isNaN(data.distance) || data.distance.length == 0) {
		error(data.lng,textDistance[data.lng]);
		return false;
	}	

	var d = parseFloat(data.distance);
	if(data.unit == 'Miles')
		d = d * 1.609344;

	if(d < 0 || d > 150) {
		error(data.lng,textRange[data.lng]);
		return false;
	}
	return true;
}

var handleSearch = function () {
	var data = this.getData();
	var textKwds = {"eng": "Please type in your keywords", "fr": "Veuillez entrer vos mots clés"};
	if(!data.keywords.length) {
		error(data.lng,textKwds[data.lng]);
		return false;
	}

	var words = data.keywords.replace(/ /g, ',');
	var params = "kw=" + words + "&op=" + data.op;
	if(data.category.length)
		params += "&cat=" + data.category;
	lr.search('search', params);
	this.hide();
	return true;
}

var handleCancel = function() {
	this.cancel();
} 

var handleSubmit = function() {
	this.submit();
}

//Status Dialog
function error(lng,html) {
	var textHeader = {"eng": "Error", "fr": "Erreur"};

	statusPanel.setHeader(textHeader[lng]);
	//statusPanel.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_WARN);
	statusPanel.setBody("<strong><div style=\"color:red;\">" + html + "!</div></strong>");
	statusPanel.show();	
}

function info(lng,html) {
	statusPanel.setHeader("Info");
	//statusPanel.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_INFO);
	statusPanel.setBody(html);
	statusPanel.show();	
}



//Init Directions Dialog
function initDirections() {
   var panel = document.getElementById("directions_panel_bd");
   directions = new GDirections(map,panel);
   directionsPanel = new YAHOO.widget.Dialog("directions_panel", { 
                                                                     width:"350px", 
                                                                     context : ["map", "tl", "tr"],
                                                                     fixedcenter: false,  
                                                                     constraintoviewport: false, 
                                                                     close:true,
                                                                     visible:false, 
								     zindex:10,
                                                                     buttons : [{ text:"OK", handler:handleCancel, isDefault:true }],
                                                                     draggable:true} ); 

}

//Dialog boxes and panels
function initAboutDialog() {
	aboutPanel = new YAHOO.widget.SimpleDialog("loc_desc", { 
        											width:"450px", 
												fixedcenter: true,  
												constraintoviewport: false,
												icon: YAHOO.widget.SimpleDialog.ICON_HELP,
												close:true,
												visible:false, 
												modal : false,
												buttons : [{ text:"OK", handler:handleCancel, isDefault:true }],
												draggable:true} ); 
	aboutPanel.render();
}

function initDialogs(lng) {
	var textCancel = {"eng": "Cancel", "fr": "Annuler"};
	var textLocate = {"eng": "Locate", "fr": "Localiser"};

	//Help
	helpPanel = new YAHOO.widget.SimpleDialog("loc_desc2", { 
									width:"800px", 
									fixedcenter: true,  
									constraintoviewport: false, 
									icon: YAHOO.widget.SimpleDialog.ICON_TIP,
									close:true,
									visible:false, 
									modal : false,
									buttons : [{ text:"OK", handler:handleCancel, isDefault:true }],
									draggable:true} ); 
	helpPanel.render();


	//Info and Error Panels
	statusPanel = new YAHOO.widget.SimpleDialog("locate_status", {
											width:"300px",
											fixedcenter: true,
											constraintoviewport: false, 
											icon: YAHOO.widget.SimpleDialog.ICON_HELP,
											visible: false,
											modal: false,
											buttons : [{ text:"OK", handler:handleCancel, isDefault:true }]
										});
	statusPanel.render();

	//Locate Dialog
	locateDialog = new YAHOO.widget.Dialog("locate_form", {
											width: "300px",
											visible: false,
											fixedcenter: true,
											modal: false,
											postmethod: "none",
											buttons: [{text: textLocate[lng],handler:handleLocate,isDefault:true},
													{text: textCancel[lng], handler:handleCancel}]
											});
	locateDialog.validate = validateLocate;
	locateDialog.render();

	//Feedback Dialog
	feedbackDialog = new YAHOO.widget.Dialog("feedback_dialog", {
											width: "480px",
											visible: false,
											fixedcenter: true,
											modal: false,
											postmethod: "async",
											buttons: [{text:"Ok",handler:handleSubmit,isDefault:true},
													{text: textCancel[lng], handler:handleCancel}]
											});

	feedbackDialog.callback.success = onSuccess;
	feedbackDialog.callback.failure = onFailure;
	feedbackDialog.callback.argument = lng;
	feedbackDialog.validate = validateFeedback;
	feedbackDialog.render();

	//Search Dialog
	searchDialog = new YAHOO.widget.Dialog("search_dialog", {
											width: "300px",
											visible: false,
											fixedcenter: true,
											modal: false,
											postmethod: "none",
											buttons: [{text:"OK",handler:handleSearch,isDefault:true},
													{text: textCancel[lng], handler:handleCancel}]
											});
	searchDialog.render();
											
}

var onSuccess = function(o) {
	var textThanks = {"eng": "Thank you, your message has been successfully sent.", "fr": "Merci, votre message a été envoyé avec succès."};

	info(o.argument,textThanks[o.argument]);
}

var onFailure = function(o) {
	var textFail = {"eng": "Your submission failed", "fr": "Échec de soumission de message"};

	error(o.argument, textFail[o.argument]);
}

var validateFeedback = function() {
	var values = this.getData();
	var textMessage = {"eng": "Please type in your message", "fr": "Veuillez entrer votre message"};
	var textEmail = {"eng": "Please enter a valid email address", "fr": "Veuillez entrer une adresse courriel valide"};

	if(values.message == "") {
		error(values.lng,textMessage[values.lng]);
		return false;
	}
	if(values.email.search(/\w+@\w+\.\w{2,3}/) != 0) {
		error(values.lng,textEmail[values.lng]);
		return false;
	}
	return true; 	
}



//Menu Bar
function initMenuBar() {
	menuBar = new YAHOO.widget.MenuBar("menu_bar", { 
											autosubmenudisplay: true, 
											lazyload: true});
	menuBar.render();
	menuBar.show();
}


//Bookmark function
function bookmark(title){
	var url = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
	if (document.all)
		window.external.AddFavorite(url, title);
	else if (window.sidebar)
		window.sidebar.addPanel(title, url, "");
}

//Here Marker
var hereIcon = null;
var hereMarker = null;

function createHereIcon() {
	hereIcon = new GIcon();
	hereIcon.image = "http://restocan.com/icones/marker_green.png";
	hereIcon.shadow = "http://restocan.com/icones/shadow50.png";
	hereIcon.iconSize = new GSize(20, 34);
	hereIcon.shadowSize = new GSize(37, 34);
	hereIcon.iconAnchor = new GPoint(6, 20);
	hereIcon.infoWindowAnchor = new GPoint(5, 1);
}

YAHOO.util.Event.onAvailable("menu_bar", initMenuBar);
YAHOO.util.Event.onAvailable("loc_desc", initAboutDialog);
