// Modal
var modal;
// Map cycle
var nth = 0;
var mapCycle = null;

jQuery(function() {

	/*
	jQuery.getJSON("ajax/node/json", function(json){
		console.log(json);
	});
	*/

	jQuery('#header_login .content').hide();
	jQuery('#header_login .logged-wrap h2, #member_area_button h2.logged-wrap').click(function() {
			jQuery('#header_login .content, #header_login_sub').slideToggle('fast');
			jQuery(this).toggleClass('active');
	}).css('cursor', 'pointer');

	if (jQuery.support.placeholder == undefined)
	{
		jQuery.support.placeholder = false;
		var test = document.createElement('input');
		if ('placeholder' in test) {
			jQuery.support.placeholder = true;
		}
	}

	if (!jQuery.support.placeholder)
	{
		jQuery('input[placeholder]:text').val(function() {
			if (jQuery.trim(jQuery(this).val()) == '') {
				return jQuery( this ).attr('placeholder');
			} else {
				return jQuery( this ).val();
			}
		}).click(function() {
			var self = jQuery( this );
			if( self.val() == self.attr('placeholder') ) self.val('');
		}).blur(function() {
			var self = jQuery( this );
			if( self.val() == '') self.val( self.attr('placeholder') );
		});
	}

	/* Modal window */
	jQuery('#modal-window-close a').click(function(event) {
		event.preventDefault();
		modal = jQuery('#overlay').detach();
	});
	jQuery('#logo').click(function() {
		if (modal) {
			modal.appendTo('body');
			modal.find('input:first').focus();
		}
	});

	/* Interactive map */
	if (jQuery('#map-countries'))
	{
		try {

			var con = jQuery('#hover-map-pic');
			var mapInfoBox = jQuery('#mapInfoBox');

			var offsetLeft	= jQuery('#hover-map-pic').offset().left - 70; // 160;
			var offsetTop	= jQuery('#hover-map-pic').offset().top - 105; // 110;

			if (jQuery('body').hasClass('admin-menu')) {
				offsetTop -= 30;
			}

			// Handle cycle if manual
			jQuery('#map-countries').mouseenter(function() {
				window.clearInterval(mapCycle);
				mapCycle = null;
			}).mouseleave(init);

			jQuery('#map-countries area').each(function() {
				// Disabled for dev
				var $self	= jQuery(this);
				var area	= $self.attr('rel');

				if (!mapData) {
					return false;
				}

				// mouseover mousemove
				$self.bind('click mouseover mousemove', function(event) {

					// console.log(event.currentTarget.alt, event.layerX, event.layerY);
					// return;

					event.preventDefault();

					var data = jQuery.map(mapData, function(item) {

						if (!item.map) {
							return [null, null, null, null, null];
						}
						if (item.map.toLowerCase() == area.toLowerCase()) {

							// console.log($self.attr('data-posx'), $self.attr('data-posy'));
							if ($self.attr('data-posx') > 0) {
								return new Array([item.title, item.logo, item.url, parseInt($self.attr('data-posx'), 10), parseInt($self.attr('data-posy'), 10)]);
							}

							var areaCoords = $self.attr('coords');
							var center = getPolygonCenter(areaCoords);
							/*
							var areaShape = $self.attr('shape');
							var	coords = areaCoords.split(',');
							var center = getAreaCenter(areaShape, areaCoords);
							*/
							// console.log('X-center: ' + center[0] + ', Y-center: ' + center[1]);

							// return [item.title, item.logo, item.url, center[0], center[1]];
							return new Array([item.title, item.logo, item.url, event.layerX, event.layerY]);
						}
					});

					if (!data[0]) {
						return false;
					}

					var organz = [];
					jQuery(data).each(function(i, v) {
						organz.push('<p class="cite">' + v[0] + '<br /><a href="' + v[2] + '">Read more</a></p>');
					});

					// con.addClass(area);
					// console.log(offsetLeft, offsetTop);

					// <p class="logo">' + (data[1] ? '<img src="' + data[1] + '" width="150" height="65" alt="logo" />' : '') + '</p>
					mapInfoBox
					.html('<div class="clear">' + organz.join('') + '</div>')
					.css({
						left: offsetLeft + data[0][3],
						top: offsetTop + data[0][4]
					})
					.fadeIn();

					con.removeAttr('class').addClass(data[0][0].toLowerCase());

				});

			});
		} catch (e) {
			if (window && window.console) {
				console.log(e);
			}
		}
	}
});

function cycleMapWindows()
{
	var index = index = Math.ceil(Math.random() * (mapData.length - 1));
	if (index == nth) {
		if (mapData.length < (index + 1)) {
			index++;
		} else if ((index - 1) >= 0) {
			index--;
		}
	}
	jQuery('#map-countries area[rel="' + mapData[index].map + '"]').click();
	nth = index;
}

function init()
{
	// Disabled for dev
	if (!mapCycle) {
		mapCycle = setInterval(cycleMapWindows, 3500);
	}
}

function getAreaCenter(shape, coords) {
    var coordsArray = coords.split(','),
        center = [];
    if (shape == 'circle') {
        // For circle areas the center is given by the first two values
        center = [coordsArray[0], coordsArray[1]];
    } else {
        // For rect and poly areas we need to loop through the coordinates
        var coord,
            minX = maxX = parseInt(coordsArray[0], 10),
            minY = maxY = parseInt(coordsArray[1], 10);
        for (var i = 0, l = coordsArray.length; i < l; i++) {
            coord = parseInt(coordsArray[i], 10);
            if (i%2 == 0) { // Even values are X coordinates
                if (coord < minX) {
                    minX = coord;
                } else if (coord > maxX) {
                    maxX = coord;
                }
            } else { // Odd values are Y coordinates
                if (coord < minY) {
                    minY = coord;
                } else if (coord > maxY) {
                    maxY = coord;
                }
            }
        }
        center = [parseInt((minX + maxX) / 2, 10), parseInt((minY + maxY) / 2, 10)];
    }
    return(center);
}

function getPolygonCenter(coords)
{
	var Coords = coords.match(/\d+/g);
	var len = coords.length;
	var	minX = maxX = parseInt(Coords[0]);
	var	minY = maxY = parseInt(Coords[1]);
	var	coord = 0;

	while (len--)
	{
		coord = parseInt( Coords[len] );

		if( len % 2 )
		{
			if( coord < minY )
			{
				minY = coord;
			}
			else if( coord > maxY )
			{
				maxY = coord;
			}
		} else {
			if( coord < minX )
			{
				minX = coord;
			}
			else if( coord > maxX )
			{
				maxX = coord;
			}
		}
	}
	return [ Math.ceil( ( minX + maxX ) / 2 ), Math.ceil( ( minY + maxY ) / 2 ) ];
}
