/*
  PxMarker - a marker for PawTrax reports

  they have tooltips, hoverImages, and open infoWindows
*/

var pxIcon				= new GIcon();
pxIcon.iconSize 		= new GSize(15,15);
pxIcon.iconAnchor		= new GPoint(8,8);
pxIcon.infoWindowAnchor	= new GPoint(8,8);

function PxMarker(latlng, userData) {
	var species  = userData[SPECIES].replace(/ /,'_').toLowerCase();
	var type     = userData[TYPE].toLowerCase();
	userData.image = '/images/icons/' + species + '_' + type + '.png';
	pxIcon.image = userData.image;

	BpMarker.call(this, latlng, { icon: pxIcon });
	this.setUserData(userData);
}

PxMarker.prototype = new BpMarker(new GLatLng(0,0));

PxMarker.prototype.initialize = function(map) {
	BpMarker.prototype.initialize.apply(this,arguments);

	var ud = this.getUserData();
	this.setTooltipHtml(ud[SPECIES] + '(' + ud[NAME] + '): ' + ud[TYPE]);

	GEvent.addListener(this, 'click', this.whenClicked);
};

var control = new BpControl('Loading Report Details...', new GSize(200,200));
var control_added = false;
PxMarker.prototype.whenClicked = function() {
	if (typeof(this.getUserData().details) != 'undefined') {
		this.afterClicked();
	}
	else {
		map.startDelicateProcedure();
		if (!control_added) {
			map.addControl(control);
			control_added = true;
		}
		control.show();
		BpDownloadUrl('/map/locations/json_detail/' + this.getUserData()[ID], GEvent.callback(this,this.afterClicked));
	}
};

PxMarker.prototype.afterClicked = function(responseText) {
	if (typeof(this.getUserData().details) == 'undefined') {
		map.endDelicateProcedure();
		control.hide();
		try {
			var data = eval(responseText);
			if (!data[0]) {
				alert(data[1]);
				return;
			}
			this.getUserData().details = data[1];
		}
		catch(e) {
			alert('Failed to get report details.\nPlease try again later.');
		}
	}
	else {
		map.endDelicateProcedure();
		control.hide();
	}

	var animal_details = this.getAnimalDetails();
	var owner_details  = this.getOwnerDetails();
  var pdf_details    = this.getPdfDetails();
	var tabs = [new GInfoWindowTab('Animal', animal_details), new GInfoWindowTab('Contact', owner_details), new GInfoWindowTab('Poster', pdf_details)];
	this.openInfoWindowTabsHtml(tabs);
};

PxMarker.prototype.getPdfDetails = function() {
  var ud = this.getUserData().details;
  return  '<div><center><form action="http://www.gmaptools.com/pawtrax/flyer.php" method="post">' +
          '<input type="hidden" name="id" value="' + ud.id + '"/>' +
          '<input type="hidden" name="type" value="' + ud.type + '"/>' +
          '<input type="hidden" name="breed" value="' + ud.breed + ud.custom_breed + '"/>' +
          '<input type="hidden" name="postcode" value="' + ud.postcode + '"/>' +
          '<input type="hidden" name="image" value="' + ud.user_id + '_' + ud.image + '"/>' +
          '<input type="hidden" name="description" value="' + ud.description + '"/>' +
          '<input type="submit" name="sb" value="Download Poster"/>' +
          '</form></center></div>';
};

// get HTML for infoWindow pane 0
PxMarker.prototype.getAnimalDetails = function() {
	var ud = this.getUserData().details;
	if (typeof(ud.animalDetails) == 'undefined') {
		ud.animalDetails = '<div class="animal-details">'+
			(/\./.test(ud.image) ? '<a target="_blank" href="/map/img/pets/images/' + ud.user_id + '_' + ud.image + '"><img src="/map/img/pets/thumbs/' + ud.user_id + '_' + ud.image + '"/></a>' : '') +
			'Type: '+ ud.type + '<br/>'+
			'Name: '+ ud.name + '<br/>'+
			'Species: '+ ud.species + '<br/>'+
			'Breed: '+ ud.breed + ud.custom_breed + '<br/>'+
			'Sex: '+ ud.sex + '<br/>'+
			'Colour: '+ ud.colour + '<br/>'+
			'Description: '+ ud.description + '<br/>'+
			'Postcode: '+ ud.postcode + '<br/>'+
			(/./.test(ud.website) ? 'Website: '+ '<a style="color: black" href="'+ud.website+'">'+ ud.website +'</a>' + '<br/>' : '') +
			'Age: '+ ud.age + '<br/>'+
			'Date: '+ ud.date + '<br/>'+
			'Reward: £ '+ ud.reward + '<br/>'+
			'</div>';
	}
	return ud.animalDetails;	
};

// get HTML for infoWindow pane 1
PxMarker.prototype.getOwnerDetails = function() {
	var ud = this.getUserData().details;
	if (typeof(ud.ownerDetails) == 'undefined') {
		ud.ownerDetails = '<div class="owner-details">'+
			'Name: '+ ud.cname + '<br/>'+
			'Email: '+ ( ud.cemail ? '<a style="color: black" href="mailto:'+ud.cemail+'">'+ud.cemail+'</a>' : '(no email)') + '<br/>'+
			'Phone: '+ ud.cphone + '<br/>'+
			'Mobile: '+ ud.cmphone + '<br/>'+
			'</div>';
	}
	return ud.ownerDetails;
};


PxMarker.prototype.remove = function() {
	if (this.getMap().getInfoWindowOpener() === this)
		this.getMap().closeInfoWindow();

	GMarker.prototype.remove.call(this);
};


