
function calculate_tax() {
	var amount = $('#taxcal_amount').val() ? parseFloat( $('#taxcal_amount').val() ) : 0.00;
	tx1 = money_round( amount * tx1_rate , 2 );
	tx2 = money_round( (amount+tx1) * tx2_rate , 2 );
	total = amount + tx1 + tx2;
	
	$('#taxcal_tx1').val( tx1.toFixed(2) );
	$('#taxcal_tx2').val( tx2.toFixed(2) );
	$('#taxcal_total').val( total.toFixed(2) );
}

function calculate_tax_revert() {
	var total = $('#taxcalr_total').val() ? parseFloat( $('#taxcalr_total').val() ) : 0.00;
	// tx2
	var tx2 = total - ( total / ( (tx2_rate) + 1 ) );
	tx2 = money_round( tx2 );
	// tx1
	var tx1 = total - tx2 - ( ( total - tx2 ) / ( (tx1_rate) + 1 ) );
	tx1 = money_round( tx1 );
	// amount
	var amount = total - tx2 - tx1;
	$('#taxcalr_tx1').val( tx1.toFixed(2) );
	$('#taxcalr_tx2').val( tx2.toFixed(2) );
	$('#taxcalr_amount').val( amount.toFixed(2) );
	//$('#taxcalr_total').val( total.toFixed(2) );
}

function calculate_tax_res() {
	var amount = $('#taxcalres_amount').val() ? parseFloat( $('#taxcalres_amount').val() ) / 2 : 0.00;
	tx1 = money_round( amount * tx1_rate , 2 );
	tx2 = money_round( (amount+tx1) * tx2_rate , 2 );
	total = amount + tx1 + tx2;
	
	$('#taxcalres_amount2').val( amount.toFixed(2) );
	$('#taxcalres_tx1').val( tx1.toFixed(2) );
	$('#taxcalres_tx2').val( tx2.toFixed(2) );
	$('#taxcalres_total').val( total.toFixed(2) );
}

function money_round( nbr ) {
	return Math.round( nbr * 100 ) / 100;
}

var km_dir;
var km_map;
function km_init() {
	// set default position
	// 46.790892872885806 : -71.26178741455078
	var lat = 46.7908;
	var lng = -71.2617;
	// show map
	map_el = document.getElementById("map");

	// load google map
	km_map = new GMap2(map_el);
	var center = new GLatLng( lat , lng );
	km_map.setCenter(center, 12);
	km_map.addControl(new GSmallMapControl());
	km_map.addControl(new GMapTypeControl());
	
	var pointa = new GLatLng( lat , lng );
	var pointb = new GLatLng( lat-0.02 , lng-0.02 );

	// Create a base icon for all of our markers that specifies the
	// shadow, icon dimensions, etc.
	var baseIcon = new GIcon(G_DEFAULT_ICON);
	baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(9, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);

	var icoa = new GIcon(baseIcon);
    icoa.image = "http://www.google.com/mapfiles/markerA.png";

	var icob = new GIcon(baseIcon);
    icob.image = "http://www.google.com/mapfiles/markerB.png";

	var marker = new GMarker( pointa , { icon:icoa, draggable: true } );
	km_map.addOverlay(marker);	
	marker.enableDragging();
	GEvent.addListener(marker, "dragend", function() {
		km_gdir_update( this.getPoint() , km_dir.getMarker(1).getPoint() );
	});

	var marker2 = new GMarker( pointb , { icon:icob, draggable: true } );
	km_map.addOverlay(marker2);
	marker2.enableDragging();
	GEvent.addListener(marker2, "dragend", function() {
		km_gdir_update( km_dir.getMarker(0).getPoint() , this.getPoint() );
	});

	km_gdir_update( pointa , pointb );
	
}

function km_gdir_update( pointa , pointb ) {
	var first = true;
	if(km_dir) {
		km_dir.clear();
		first = false;
	}
	km_dir = new GDirections(km_map, null );
	km_dir.loadFromWaypoints([ pointa, pointb ] , {preserveViewport:true} );	
	GEvent.addListener(km_dir, "addoverlay", function() {
		setTimeout( km_gdir_hide , 10 );
		if( ! first ) {
			$('#result').hide().html( km_dir.getDistance().html ).slideDown(400);
			//alert( km_dir.getSummaryHtml() );
			//alert( km_dir.getSummaryHtml() );
		}
	} );
}

function km_gdir_hide() {
	km_dir.getMarker(0).hide();
	km_dir.getMarker(1).hide();
}

/************************************************************************
 *  AJAX & communication system
 ************************************************************************/

//var ajax = get_ajax(); // ajax request object
//var refresh_skip = false; // skip online refresh (in case user manually refreshed through IM or other functions )

/*
function get_ajax() {
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest) {
		return new XMLHttpRequest();
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try { req = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch(e) { req = new ActiveXObject("Microsoft.XMLHTTP"); }
		return req;
	}
}

function online_refresh() {
	// skip one refresh?
	if( refresh_skip ) {
		refresh_skip = false;
		return null;
	}
	// refresh online status
	ajax.open( "GET", 'uonline.php', true );
	ajax.onreadystatechange = online_refresh_cb;
	ajax.send( null );
}

function online_refresh_cb() {
	if( ! ajax ) return null;
	// only if req shows "complete"
	if ( ajax.readyState == 4 ) {
		// only if "OK"
		if ( ajax.status == 200 ) {
			//alert( "success:\n" + ajax.responseText );
			comm_receive( ajax.responseXML.documentElement );
		} else {
			//alert( "There was a problem retrieving the XML data:\n" + ajax.statusText );
		}
	}
}

function comm_send( data ) {
	var type, data;
	// tell auto refresh to skip next refresh
	refresh_skip = true;
	// prepare data
	ajax_data = ajax_format_data(data);
	ajax.open( "GET", 'uonline.php?'+ajax_data, true );
	ajax.onreadystatechange = online_refresh_cb;
	ajax.send( null );
}

function comm_receive( xml ) {
	var xml, i, el, result;
	for( i=0; i<xml.childNodes.length; i++ ) {
		el = xml.childNodes[i];
		im( el.getAttribute('userid') , el.getAttribute('username') , el.getAttribute('message') );
	}
}

function ajax_format_data( data ) {
	var data;
	var enc_data;
	var ajax_data = '';
	for( e in data ) {
		if( typeof data[e] == 'string' ) {
			enc_data = data[e];
			enc_data = enc_data.replace(/\+/g,'__plus__'); // prevent from escaping char "+", from making it a space
			enc_data = enc_data.replace(/\'/g,'__quote__'); // prevent from escaping single quote "'"
			enc_data = escape( enc_data );
			enc_data = enc_data.replace(/__plus__/g,'%2B'); // manually escape char "+"
			enc_data = enc_data.replace(/__quote__/g,'%27'); // manually escape char "'"
		} else {
			enc_data = escape( data[e] );
		}
		ajax_data += ajax_data ? '&' : '';
		ajax_data += e+'='+enc_data;
	}
	return ajax_data;
}
*/

/************************************************************************
 * IM
 ************************************************************************/

/*
function im_compose( userid ) {
	var userid, el, from;
	from = my_username ? my_username : 'Visiteur';
	el = getel('im_compose');
	el.style.display = 'block';
	el.setAttribute('userid',userid);
	el.innerHTML = '<div class="close" onclick="im_compose_close();">[fermer]</div>De<input type="text" class="input" value="'+from+'"/>Message<textarea onkeypress="im_compose_type(event);"></textarea><input type="button" value="Go" onclick="im_compose_send();" />';
	el.childNodes[4].focus();
}

function im_compose_send() {
	var el, userid, from;
	el = getel('im_compose');
	// check for message
	if( ! el.childNodes[4].value ) im_compose_close();
	// send message
	data = new Array();
	data['type'] = 'im';
	data['userid'] = el.getAttribute('userid');
	data['message'] = el.childNodes[4].value;
	data['name'] = el.childNodes[2].value;
	comm_send(data);
	// close
	im_compose_close();
}

function im_compose_close() {
	var el = getel('im_compose');
	el.innerHTML = '';
	el.style.display = 'none';
}

function im_compose_type( event ) {
	var event, el, char_code;
	if (event) {
		el = event.target ? event.target : event.srcElement
		char_code = (event.charCode) ? event.charCode : ((event.keyCode) ? event.keyCode : ((event.which) ? event.which : 0));
		if( el ) {
			if ( char_code == 13 ) {
				im_compose_send();
			}
			if ( char_code == 27 ) {
				im_compose_close();
			}
		}
	}
}

function im( userid , username , message ) {
	var im_el, el, userid, username, message;
	// setup im global element
	im_el = check_im_global();
	// show im message
	el = document.createElement('div');
	el.className = 'im';
	el.setAttribute('userid',userid);
	el.innerHTML = 'De <span class="from">'+username+'</span><div class="message">'+message+'</div><textarea onkeypress="im_type(event);"></textarea><input type="button" value="Go" onclick="im_send(this.parentNode);" />';
	//var postop = get_scroll() + 20;
	//im_el.style.top = postop+'px';
	im_el.appendChild( el );
	// focus on input
	window.focus();
	el.childNodes[3].focus();
}

function im_send( el ) {
	var el;
	// send message
	data = new Array();
	data['type'] = 'im';
	data['userid'] = el.getAttribute('userid');
	data['message'] = el.childNodes[3].value;
	// chech for message
	if( data['message'] ) {
		comm_send(data);
	}
	// close im message
	im_close(el);
}

function im_close( el ) {
	var el;
	getel('im_global').removeChild(el);
}

function im_type( event ) {
	var event, el, char_code;
	if (event) {
		el = event.target ? event.target : event.srcElement
		char_code = (event.charCode) ? event.charCode : ((event.keyCode) ? event.keyCode : ((event.which) ? event.which : 0));
		//alert(char_code);
		//alert(el);
		if( el ) {
			if ( char_code == 13 ) {
				im_send(el.parentNode);
			}
			if ( char_code == 27 ) {
				im_close(el.parentNode);
			}
		}
	}
}

function check_im_global() {
	if( ! getel('im_global') ) {
		var el = document.createElement('div');
		el.id = 'im_global';
		document.body.appendChild( el );
	}
	return getel('im_global');
}
*/

/************************************************************************
 *  Utils
 ************************************************************************/

function word_limit( input , max ) {
	var max;
	var input;
	var value = input.value.replace(/^\s*|\s*$/g, ''); // trim
	var words = value.split(' ');
	var txt = '';
	if( words.length > max ) {
		alert('Vous avez atteint la limite de ' + max + ' mots');
		for( i=0; i<max; i++ ) {
			if( txt ) txt += ' ';
			txt += words[i];
		}
		input.value = txt;
		return false;
	} else {
		return true;
	}
}

function getel( id ) {
	var id;
	return document.getElementById(id);
}

function toggle( el ) {
	var el;
	el.style.display = (el.style.display == 'block') ? 'none' : 'block';
}

function get_scroll() {
	var scroll = 0;
	if( document.body && ( document.body.scrollTop ) ) {
		//DOM compliant
		return document.body.scrollTop;
	} else if( document.documentElement && ( document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		return document.documentElement.scrollTop;
	}
}


/************************************************************************
 *  MAP
 ************************************************************************/

/*
function load() {
	if( ! GBrowserIsCompatible() ) return false;

	var map = new GMap2(document.getElementById("map"));
	var center = new GLatLng(46.7897, -71.2930); //46.78971755817767 : -71.29302978515625
	map.setCenter(center, 10);
	map.addControl(new GSmallMapControl());
	//map.addControl(new GMapTypeControl());

	var marker = new GMarker(center, {draggable: true});

	GEvent.addListener(marker, "dragstart", function() {
		map.closeInfoWindow();
		});

	GEvent.addListener(marker, "dragend", function() {
		point = marker.getPoint();
		marker.openInfoWindowHtml("salut"+point.lat()+'  :  '+point.lng());
		});

	map.addOverlay(marker);

}
*/

var map_el;
var map_input_x;
var map_input_x;
var map_autosave;
var map_form;
function select_map_coor( input_x , input_y , autosave ) {
	var input_x, input_y, autosave, form;
	map_autosave = autosave;
	map_input_x = getel( input_x );
	map_input_y = getel( input_y );
	// set default position
	// 46.790892872885806 : -71.26178741455078
	var x = map_input_x.value ? map_input_x.value : 46.7908;
	var y = map_input_y.value ? map_input_y.value : -71.2617;
	/*
	if( map_input_x.value < 40 ) {
		var x = 46.7908;
		var y = -71.2617;
	} else {
		var x = map_input_x.value ? map_input_x.value : 46.7908;
		var y = map_input_y.value ? map_input_y.value : -71.2617;
	}
	*/
	// show map
	map_el = document.getElementById("map");
	map_el.style.display = 'block';
	// load google map
	var map = new GMap2(map_el);
	var center = new GLatLng( x , y );
	map.setCenter(center, 12);
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	var marker = new GMarker(center, {draggable: true});
	GEvent.addListener(marker, "dragstart", function() {
		map.closeInfoWindow();
		});
	GEvent.addListener(marker, "dragend", function() {
		point = marker.getPoint();
		map_input_x.value = point.lat();
		map_input_y.value = point.lng();
		if( map_autosave ) {
			// save map
			$.get( 'map_save.php?coor_x='+point.lat()+'&coor_y='+point.lng() );
			/*
			ajax.open( "GET", 'map_save.php?coor_x='+point.lat()+'&coor_y='+point.lng(), true );
			ajax.onreadystatechange = function() {};
			ajax.send( null );
			*/
		}
		});
	map.addOverlay(marker);
}

function create_marker( x , y , marker_options , info_html ) {
	var x, y, markerOptions;
    var point = new GLatLng( x , y );
	var marker = new GMarker( point , marker_options );
	if( info_html ) {
		GEvent.addListener(marker, "click", function() {
		    marker.openInfoWindowHtml( info_html );
		  });
	}
	return marker;
}
