/*===============================================================================
 Red4Net(R) - Content Management System : www.netsoftworks.eu
 Copyright (C) 2000-11 NETSOFTWORKS - Antonio Fonseca All Rights Reserved
 ===============================================================================*/

/** SCRIPT:	red4net_public.js
 *	DESCR:	Wird in publicseiten mittels template eingebunden.
 *	INTERFACE:
 *	function stopEvent(event)
 *	function onAjaxError(xhr, textStatus, error)
 */

/**
 * http://www.openjs.com/articles/prevent_default_action/
 */
function stopEvent(event) {
	if (!event) 
		var event = window.event;
	//e.cancelBubble is supported by IE - this will kill the bubbling process
	event.cancelBubble = true;
	event.returnValue = false;
	//e.stopPropagation works only in Firefox
	if (event.stopPropagation) {
		event.stopPropagation();
		event.preventDefault();
	}
}

/**
 * Sorgt dafür daß ein Fehler mit einem ErrorPanel als Dialog ausgegeben wird.
 */
function onAjaxError(xhr, textStatus, error) {
	$('#r4n-error-panel').remove(); // ggf. vorhandenes Panel entfernen
	var panel = $('#r4n-error-panel', $(xhr.responseText)); // Panel auslesen
	if (1 > panel.length) 
		panel = xhr.responseText; // sonst ganze Antwort
	$('body').append(panel); // Panel einhängen
	$('#r4n-error-panel').dialog({ // Panel als Dialog darstellen
		title: 'Error',
		width: 400,
		height: 250,
		minWidth: 400,
		minHeight: 250,
		close: function() {
			$.unblockUI();
		},
		buttons: {
			CLOSE: function() {
				$(this).dialog('close');
			}
		}
	});
}

/**
 * Diese Funktion ermittelt die URL die einem HTML-Element
 * A oder BUTTON als Attribut HREF oder VALUE zugewiesen wurde.
 */
function getHtmlElementUrl(element) {
	if (0 === element.length) {
		return undefined;
	}
	switch (element.get(0).tagName) {
		case 'A':
			return element.attr('href');
		case 'BUTTON':
			return element.attr('value');
		default:
			return undefined;
	}
}

/**
 * convert characters to entities using the Unicode format
 * http://stackoverflow.com/questions/1354064/how-to-convert-characters-to-html-entities-using-plain-javascript/1354491
 */
function encodeHTML(str) {
	var aStr = str.split('');
	var i = aStr.length;
	var aRet = [];
	for (i = 0; i < aStr.length; i++) {
		var iC = aStr[i].charCodeAt();
		if (iC < 65 || iC > 127 || (iC > 90 && iC < 97)) {
			aRet.push('&#' + iC + ';');
		} else {
			aRet.push(aStr[i]);
		}
	}
	return aRet.join('');
}

/**
 * This function change the ui-state on hover, mousedown and mouseup events
 * for all the elements with the class ui-state-default
 */
$(document).ready(function() {

	/**
	 * F�r den googleMap.
	 * Alle Tags mit der Klasse 'r4n-dialog' erhalten ein onClick-Event.
	 * Dieses Event �ffnet einen IFrameDialog mit der URL die im HREF-Attribut
	 * eines Anchors oder im VALUE-Attribut eines Buttons stehen.
	 */
	$('.r4n-dialog-google-map').live('click', function(e) {
		stopEvent(e);
		var url = getHtmlElementUrl($(this));
		if (undefined === url) {
			return;
		}
		$.FrameDialog.create({
			url: url,
			title: 'Google Map',
			modal: false,
			bgiframe: true,
			zIndex: 3999,
			width: 800,
			height: 600,
			minWidth: 800,
			minHeight: 600,
			close: function(event, ui) {
				//$(this).dialog('destroy');
			},
			buttons: {
				CLOSE: function() {
					$(this).dialog('close');
				}
			}
		});
	});
	
	// Verändert den Status von Buttons (oder elemente mit der Klasse ui-state-default)
	$('.ui-state-default').hover(function() {
		$(this).addClass('ui-state-hover');
	}, function() {
		$(this).removeClass('ui-state-hover');
	}).mousedown(function() {
		$(this).addClass('ui-state-active');
	}).mouseup(function() {
		$(this).removeClass('ui-state-active');
	});
	
	/**
	 * Beim Submit eines Formulares wird die Meldung 'please wait' ausgegeben.
	 */
	$('form').submit(function() {
		$.blockUI({
			message: glob_str_please_wait
		});
	});
	
	var divVCard = $('div.vcard');
	if (0 < divVCard.length) {
	
		divVCard.each(function(index) {
			// append vcard button
			$(this).append($("<a />").attr("href", "#").attr("class", "ui-state-default ui-corner-all r4n-vcard-download").attr("onclick", "return false").append($("<span />").attr("class", "ui-icon ui-icon-contact")).append("vCard")).addClass(0 == (index % 2) ? 'r4n-second-row' : 'r4n-first-row');
		});
		
		// download vcard
		$('a.r4n-vcard-download').live('click', function(e) {
			stopEvent(e);
			var vCardData = $(this).parent().html();
			var form = '<form action="/red4net/pub_hcard2vcard.asp" method="POST">' +
			'<textarea name="hcard">' +
			'<div class="vcard">' +
			vCardData +
			'</div>' +
			'</textarea>' +
			'</form>';
			$(form).appendTo('body').submit().remove();
		});
		
	}
	
	/**
	 * Für jede Division der Klasse r4n-ean-hcs-frontend-widget das entsprechende Widget
	 * nachladen und ersetzen.
	 * @param {Object} index
	 * @param {Object} elm das zu ersetzen ist
	 */
	$('div.r4n-ean-hcs-frontend-widget').each(function(index, elm) {
		$.url.setUrl();
		var content_id = $.url.param('id');
		$.ajax({
			type: 'GET',
			url: app_url + '/red4net/serv_ean_hcs_action.asp',
			data: {
				anti: Math.random(),
				action: 'getFrontendWidget',
				content_id: content_id
			},
			success: function(data, textStatus) {
				$(elm).replaceWith(data);
			},
			error: onAjaxError
		});
	});
	
	/**
	 * Für die Division der Klasse r4n-weather-frontend-widget das entsprechende Widget
	 * nachladen und ersetzen.
	 * @param {Object} index
	 * @param {Object} elm das zu ersetzen ist
	 */
	$('div.r4n-weather-frontend-widget').each(function(index, elm) {
		var location = $('.r4n-location', this).html();
		var lat_lng = $('.r4n-lat-lng', this).html();
		if (null==location && null==lat_lng) 
			return false
		$.ajax({
			type: 'GET',
			url: app_url + '/red4net/serv_weather_action.asp',
			data: {
				anti: Math.random(),
				action: 'getFrontendWidget',
				location: location,
				lat_lng: lat_lng
			},
			success: function(data, textStatus) {
				$(elm).replaceWith(data);
			},
			error: onAjaxError
		});
	});
});

