var sizesSimpleMarker = 	{iconSize:{x:19,y:35}, shadowSize:{x:37,y:35}, iconAnchor:{x:10,y:35}, dragCrossSize:null, maxHeight:null};
var sizesImportantMarker = 	{iconSize:{x:24,y:44}, shadowSize:{x:46,y:44}, iconAnchor:{x:12,y:44}, dragCrossSize:null, maxHeight:null};
var sizesPremiumMarker = 	{iconSize:{x:31,y:45}, shadowSize:{x:54,y:45}, iconAnchor:{x:16,y:45}, dragCrossSize:null, maxHeight:null};
var sizesCluster = 	{iconSize:{x:40,y:40}, shadowSize:null, iconAnchor:{x:40,y:40}, dragCrossSize:null, maxHeight:null};
var sizesClusterWithShadow = {iconSize:{x:40,y:40}, shadowSize:{x:60,y:40}, iconAnchor:{x:40,y:40}, dragCrossSize:null, maxHeight:null};
var sizesBP = {iconSize:{x:40,y:40}, shadowSize:{x:60,y:40}, iconAnchor:{x:20,y:40}, dragCrossSize:null, maxHeight:null};
var sizesRectangle = {iconSize:{x:11,y:11}, shadowSize:{x:11,y:11}, iconAnchor:{x:5,y:5}, dragCrossSize:{x:0,y:0}, maxHeight: 0};

function initImages(path, name, myIcon){
	myIcon.image = staticDomain+'/'+path+'/'+name+'image.png';
	myIcon.shadow = staticDomain+'/'+path+'/'+name+'shadow.png';
	myIcon.printImage = staticDomain+'/'+path+'/'+name+'printImage.gif';
	myIcon.mozPrintImage = staticDomain+'/'+path+'/'+name+'mozPrintImage.gif';
	myIcon.printShadow = staticDomain+'/'+path+'/'+name+'printShadow.gif';
	myIcon.transparent = staticDomain+'/'+path+'/'+name+'transparent.png';
}

function initClusterImage(path, num, myIcon, enableShadow){
	myIcon.image = staticDomain+'/'+path+'/cluster'+num+'image.png';
	if(enableShadow){
		myIcon.shadow = staticDomain+'/'+path+'/cluster'+num+'shadow.png';
		myIcon.printShadow = staticDomain+'/'+path+'/cluster'+num+'printShadow.gif';
	}
}

var createIcon = function(image, sizes, imageMap, type) {
	/* type: 	Define si la función a inicializar Imagenes es de Cluster o Markers
	 * value: 	1=marker; 
	 * 			2=cluster with shadow
	 * 			3=cluster without shadow
	 * 			4=rectangle Icons*/
	var icon = new GIcon();
	
	switch (type){
	case 1:
		initImages(image.url, image.name, icon);
		break;
	case 2:
		initClusterImage(image.url, image.name, icon, sizes.shadowSize != null);
		break;
	case 3:
		icon.image = image.url;
		break;
		
	default:
	}
		
	
	icon.iconSize = new GSize(sizes.iconSize.x, sizes.iconSize.y);
	icon.iconAnchor = new GPoint(sizes.iconAnchor.x, sizes.iconAnchor.y);
	
	if (sizes.shadowSize != null){
		icon.shadowSize = new GSize(sizes.shadowSize.x, sizes.shadowSize.y);
	}
	
	if (sizes.dragCrossSize != null){
		icon.dragCrossSize = new GSize(sizes.dragCrossSize.x, sizes.dragCrossSize.y);
	}
	
	if (sizes.maxHeight != null){
		icon.maxHeight = sizes.maxHeight;
	}
	
	if (imageMap != null){
		icon.imageMap = imageMap;
	}
	return icon;
};

var createClusterMarkerConfig = function(myIcon, myEvt, myIconHL) {
	/*
	 * myIcon: un tipo GIcon()
	 * myEvt:  lista de parámetros para cada uno de los eventos determinados
	 * 		   i.e.: 	{mouseover:{elementId:'aviso-individual', offset:{top:-44, left:0}}, 
						 click:{elementId:'descriptionInfoWindow', offset:{top:-317, left:-179}}}
	 * withHL: si se le agregan los listeners para el HighLight
	 *         GIcon or null*/			    
	var customListeners = new Array();
	
	customListeners.push(new MarkerListener(
								'mouseover', 
								new displayLabelInCustomWindowMarkerCallback({
									elementId: myEvt.mouseover.elementId, 
									offset: {top: myEvt.mouseover.offset.top, left: myEvt.mouseover.offset.left}
								})
						  ));
	customListeners.push(new MarkerListener(
								'click', 
								new expandClusterMarkerCallback({
									incremental: false, 
									onExpandClusterUnavailable: new displayDescriptionInCustomWindowMarkerCallback({
																	elementId: myEvt.click.elementId, 
																	offset: {top: myEvt.click.offset.top, left: myEvt.click.offset.left}
																})
								})
						  ));

	if (myIconHL != null){
		customListeners.push(new MarkerListener(
				  				'highLight',
				  				new changeIconImageMarkerCallback(myIconHL.image)
							 ));
		customListeners.push(new MarkerListener(
				  				'unHighLight',
				  				new changeIconImageMarkerCallback(myIcon.image)
							 ));
	}
	return new MarkerConfiguration({
		  factoryCallback: function(position, marker) {
			return new LabeledMarker(position, {
			  icon: myIcon,
			  clickable: true,
			  labelClass: 'clusterLabel', 
			  labelOffset: {top: -40, left: -35}, 
			  labelText: marker.totalMarkers
			  });				
		  },
		  listeners: customListeners
		});
};

var createMarkerConfig = function(myIcon, myEvt, myIconHL) {
	/*
	 * myIcon: un tipo GIcon()
	 * myEvt:  lista de parámetros para cada uno de los eventos determinados
	 * 		   i.e.: 	{mouseover:{elementId:'aviso-individual', offset:{top:-44, left:0}}, 
						 click:{elementId:'descriptionInfoWindow', offset:{top:-317, left:-179}}}
	 * withHL: si se le agregan los listeners para el HighLight
	 *         GIcon or null*/	
	var customListeners = new Array();

	customListeners.push(new MarkerListener(
							'mouseover',
							new displayLabelInCustomWindowMarkerCallback({
								elementId: myEvt.mouseover.elementId, 
								offset: {top: myEvt.mouseover.offset.top, left: myEvt.mouseover.offset.left}
							})
	    				));
	customListeners.push(new MarkerListener(
							'click', 
							new displayDescriptionInCustomWindowMarkerCallback({
								elementId: myEvt.click.elementId,
								offset: {top: myEvt.click.offset.top, left: myEvt.click.offset.left}
							})
						));
	
	if (myIconHL != null){
		customListeners.push(new MarkerListener(
  				'highLight',
  				new changeIconImageMarkerCallback(myIconHL.image)
			 ));
		customListeners.push(new MarkerListener(
  				'unHighLight',
  				new changeIconImageMarkerCallback(myIcon.image)
			 ));
	}
	return new MarkerConfiguration({
		  factoryCallback: function(position, marker) {
		    return new GMarker(position, {icon: myIcon});				
		  },
		  listeners: customListeners
	});
};

var rewriteMapTypeLabels = function(){
	G_HYBRID_MAP.getName= function() {return "Híbrido"};
	G_HYBRID_MAP.getAlt = function() {return "Mostrar imágenes por satélite y calles"};
	G_SATELLITE_MAP.getName= function() {return "Satélite"};
	G_SATELLITE_MAP.getAlt = function() {return "Mostrar imágenes por satélite"};
	G_NORMAL_MAP.getName= function() {return "Mapa"};
	G_NORMAL_MAP.getAlt= function() {return "Mostrar callejero"};
}
