/*VARS*/
var map;
var pin = false;
var markers = [];

/*ADD FAVORITE*/
function addFavorite(url, title){
	if($.browser.mozilla){
		window.sidebar.addPanel(title, url, '');
		return false;
	}

	if($.browser.msie){
		external.AddFavorite(url, title);
		return false;
	}

	alert('Para adicionar aos favoritos aperte CTRL + D');
}

/*YOUTUBE*/
function youtube(url, id){
	/*VERIFICATION*/
	if(url.indexOf('?v=') != -1){
		url = url.replace('?v=', '/v/');
	}

	/*ID*/
	if(!id){
		var id = url.split('/')[url.split('/').length - 1];
		$('.youtube').attr('id', id);
	}

	/*SWFOBJECT*/
	var SO = new SWFObject(url, 'video_youtube', '100%', '100%', '8', "#FFFFFF");
	SO.addParam('wmode', 'transparent');
	SO.addParam('menu', 'false');
	SO.write(id);
}

/*SHOW ADDRESS*/
function showAddress(callback){
	var address = $('#local').val();

	if(typeof(removePin) == 'function'){
		removePin();
	}

	if(geocoder && address != '' && pin != true){
		geocoder.getLatLng(address, function(point){
			if(!point){
				alert(address + " not found");

			}else{
                pin = true;
                map.setCenter(point, 15);

                $('#bt_buscar').hide();
                $('#bt_limpar').show();

                var ico = 'img/pins/marker.png';
                var marker = new GMarker(point, {icon: getIcon(ico), draggable: true});

                GEvent.addListener(marker, 'dragend', function(){
                   var latlng = marker.getPoint();

                   $('#latitude').val(latlng.x);
                   $('#longitude').val(latlng.y);
                })

                $('#latitude').val(point.x);
                $('#longitude').val(point.y);

				if(typeof(callback) == 'function'){
					callback();
				}

                map.addOverlay(marker);

                removePin = function(){
				    if(pin == true){
				    	$('#bt_buscar').show();
                		$('#bt_limpar').hide();

					    $('#latitude, #longitude').val('');
					    map.removeOverlay(marker);
					    pin = false;
				    }
			    }
             }
		})
	}
}

/*GET ICON*/
function getIcon(ico){
	var icon = new GIcon();
	icon.image = ico;
	icon.iconSize = new GSize(32, 32);
	icon.iconAnchor = new GPoint(15, 32);

	return icon;
}

/*CREATE PIN*/
function createPin(latlng, html){
   var marker = new GMarker(latlng, {icon: getIcon('img/pins/marker.png')});
   markers.push(marker);
   map.addOverlay(marker);

   /*CLICK*/
   GEvent.addListener(marker, 'click', function(latlng){
		map.openInfoWindowHtml(latlng, html);
   })
}

/*GENETATE PINS*/
function generatePins(){
	markers = [];

	$.ajax({
		type: 'GET',
		url: 'xml/pins.xml',
		dataType: 'xml',
		complete: function(data){
			var html;
			var json = $.xmlToJSON(data.responseXML);
			
			/*LOOP*/
			for(var i = 0; i < json.pins.length; i++){
	            html = '<div class="box">';
	                html += '<h3>Desaquecimento Global</h3>';
	                html += '<p><strong>Por:</strong> ' + json.pins[i].nome[0].Text + '</p>';
	                html += '<p><strong>Email:</strong> <a href="mailto:' + json.pins[i].email[0].Text + '">' + json.pins[i].email[0].Text + '</a></p>';
	                html += '<p><strong>Localidade:</strong> ' + json.pins[i].local[0].Text + '</p>';
	
	                if(json.pins[i].foto[0].Text){
	                    html += '<p><a href="' + json.pins[i].foto[0].Text + '" target="_blank"><img src="' + json.pins[i].foto[0].Text + '" width="300" height="170" alt="" /></a></p>';
	                }
	
	                if(json.pins[i].video[0].Text){
	                    html += '<div class="youtube"><script type="text/javascript">youtube("' + json.pins[i].video[0].Text + '");</script></div>';
	                }					
	
	                html += '<p><strong>Comentário:</strong> ' + json.pins[i].comentario[0].Text + '</p>';
	            html += '</div>';
	
	            createPin(new GLatLng(json.pins[i].longitude[0].Text, json.pins[i].latitude[0].Text), html);
			}
		}
	})
}

/*INITIALIZE*/
function initialize(){
	if(GBrowserIsCompatible()){
		map = new GMap2(document.getElementById('map'));
		map.setCenter(new GLatLng(-23.4634523, -46.5334502), 3);
		map.addMapType(G_HYBRID_MAP);
		map.setUIToDefault();

		geocoder = new GClientGeocoder();

		generatePins();
	}
}

/*COMO PARTICIPAR*/	
function comoParticipar(){
	$('.view, .como_participar').hide();
	$('.view, .cadastra_participe').fadeIn(500);

	pageTracker._trackPageview('participar');
}

/*START DRAG*/
var autoDrag, posDragX, posDragY, x, y;

function startDrag(obj){
	/*VARS*/	
   var objDrag = $(obj.drag);
   var objDragWidht = objDrag.width();
   var objDragHeight = objDrag.height();

   var areaWidth = objDrag.parent().width();
   var areaHeight = objDrag.parent().height();

   var top = obj.top;
   var right = obj.right;
   var bottom = obj.bottom;
   var left = obj.left;

   /*DRAG CONTAINER*/
   if(objDrag.find('.drag_container').is(':visible')){
		var objDragContainer = objDrag.find('.drag_container');

   }else{
		var objDragContainer = objDrag;
   }

   objDragContainer.addClass('move');

   /*VERIFICATION*/
   if(top == undefined) top = 0;
   if(right == undefined) right = parseInt(areaWidth - objDragWidht);
   if(left == undefined) left = 0;
   if(bottom == undefined) bottom = parseInt(areaHeight - objDragHeight);

   if(posDragX >= areaWidth) posDragX = parseInt(areaWidth - objDragWidht);
   if(posDragY >= areaHeight) posDragY = parseInt(areaHeight - objDragHeight);

   /*POS OBJ DRAG*/
   objDrag.css({top: posDragY, left: posDragX});

   /*MOUSE DOWN*/
   objDragContainer.mousedown(function(e){
      /*AUTO DRAG*/
      autoDrag = true;

      /*X | Y*/
      x = e.pageX - objDrag[0].offsetLeft;
      y = e.pageY - objDrag[0].offsetTop;

      objDrag.css('opacity', 0.8);

      /*MOUSE MOVE*/
      $(document).mousemove(function(e){
         if(autoDrag == true){
            posDragX = e.pageX - x;
            posDragY = e.pageY - y;

            /*AREA*/
            if(posDragY <= top) posDragY = top;
            if(posDragX >= right) posDragX = right;
            if(posDragY >= bottom) posDragY = bottom;
            if(posDragX <= left) posDragX = left;

            objDrag.css('opacity', 0.8);

            /*POS OBJ DRAG*/
            objDrag.css({top: posDragY + 'px', left: posDragX + 'px'});
         }
      })

      /*MOUSE UP*/
      $(document).mouseup(function(){
         autoDrag = false;
         objDrag.css('opacity', 1);
      })
   })
}

/*LOAD*/
$(function(){
    /*START DRAG*/
    startDrag({drag: '.drag'});
    
	/*DRAG MENU*/
    $('.drag ul li h3 a').click(function(){
    	if($('.drag ul li .view').is(':visible')){
    		$('.drag ul li .view').remove();
            $('.drag ul li').removeClass('selected');
    	}

        /*CREATE VIEW*/
        $(this).parents('li').append('<div class="view"></div>');

        /*VARS*/
        var li = $(this).parents('li');
        var view = li.find('.view');
        var objDrag = $('.drag');
        var objDragWidth = objDrag.width();
        var objDragHeight = objDrag.height();
        var objViewWidth = view.width();
        var objViewHeight = view.height();

        /*HIDE VIEW*/
        view.load($(this).attr('href').replace('#/', '') + '.php', function(){
			view.hide();
			view.fadeIn(500);

    		/*PARTICIPE*/
    		if(view.find('.view_container.participe').is(':visible')){
				/*INPUT FILE*/
				$("input[type=file]").fileStyle({
					image: "img/bt_buscar.png", imagewidth: 75, imageheight: 25, width: 361
				})

				/*PARTICIPE*/
    			$('.bt_enviar').click(function(){
		            $('.view_container.participe form').validate({
						rules: {
							'nome': {
								required: true,
								minlength: 4,
								maxlength: 255
							},
							
							'email': {
								required: true,
								email: true
							},
							
							'local': {
								required: true
							},
							
							'video': {
								url: true
							},
							
							'comentario': {
								required: true,
								minlength: 2,
								maxlength: 1000
							}
						},
						
						messages: {
							'nome': {
								required: 'Você deve preencher o campo Nome corretamente.',
								minlength: $.format('O campo Nome deve ter no mínimo {0} caracteres.'),
								maxlength: $.format('O campo Nome deve ter no máximo {0} caracteres.')
							},
							
							'email': {
								required: 'Você deve preencher o campo E-mail corretamente.',
								email: 'Valor inválido do campo E-mail.'
							},
							
							'foto': {
								required: 'Você deve preencher o campo Foto corretamente.'
							},
							
							'video': {
								required: 'Você deve preencher o campo Vídeo corretamente.'
							},
							
							'local': {
								required: 'Você deve preencher o campo Local corretamente.'
							},
							
							'comentario': {
								required: 'Você deve preencher o campo Comentário corretamente.',
								minlength: $.format('O campo Comentário deve ter no mínimo {0} caracteres.'),
								maxlength: $.format('O campo Comentário deve ter no máximo {0} caracteres.')
							}
						}
					})
					
					if($('.view_container.participe form').valid()){
						$('body').prepend('<div class="bg_save"><div class="load">&nbsp;</div><div class="bg">&nbsp;</div></div>');
								
						/*OPACITY*/
						$('.bg_save').css('opacity', 0);
						
						/*SELECTS HIDE IE6*/
						if($.browser.msie && $.browser.version <= 6){
							$('select').css('visibility', 'hidden');
						}
						
						/*SHOW BACKGROUND*/
						$('.bg_save').fadeTo('normal', 0.5, function(){
							showAddress(function(){
								$('.bt_enviar_submit').click();
							})
						})
						
						return false;
					}
				})
    		}

    		/*SELECTED*/
        	li.addClass('selected');

            /*CLOSE VIEW*/
            view.find('.bt_fechar').click(function(){
				$('.drag ul li .view').fadeOut(500, function(){
					$(this).remove();
				})
				
                $('.drag ul li').removeClass('selected');

                if(typeof(removePin) == 'function'){
					removePin();
				}

                return false;
            })

            /*PAGINATION*/
    	    $('.pagination li a').click(function(){
    		    $('.pagination li').removeClass('selected');
    		    $(this).parent().addClass('selected');
    	    })
        })

        return false;
    })
})

/*RESIZE*/
$(window).resize(function(){
	startDrag({drag: '.drag'});
})
