﻿/**
 * Sorgt dafuer, dass ein Analytics Page tracking ausgeloest wird.
 * Setzt voraus, dass der Analytics-Code Bestandteil der Page ist.
 * 
 * @param pagelink	die zu trackende URL 
 * @return
 */

function asm_popup_open(was, text)
{
	$(was).css('display','block');
}

function asm_google_analytics_track_page(pagelink)
{
	if (asm_get('javascript_analytics_debug') == 1)
		asm_debug('TRACKING ANALYTICS LINK:' + pagelink);
	
	try {
		if ((asm_get('asm_application_environment') == 'production') && (asm_get('javascript_analytics_send_request') == 1))
		{
			_gaq.push(['_trackPageview', pagelink]); // notwendig um clicks zu analytics overall # of clicks zu addieren
			_gaq.push(['_trackPageLoadTime']);
		}
	} catch(e)
	{
		asm_exception(e, 'Problem beim Analytics Tracking von ' + pagelink);
	}
}


/**
 * Trackt ein event auf dem Server.
 * 
 * @param parameter		event in bestimmtem Format: '###uri###' + uri + '###id###' + id + '###class###' + cssClassString
 * @return
 */
function asm_statistik_track_event(parameter)
{
	var eventverarbeiten = function(antwort)
	{
		if(asm_get('javascript_statistik_track_event_debug') == 1)
			asm_debug('HTTP RESPONSE:' + antwort);
	}
	
	if(asm_get('javascript_statistik_track_event_debug') == 1)
		asm_debug('TRACKING STATISTIK EVENT:' + parameter);
	
	try {
		if ((asm_get('asm_application_environment') == 'production') && (asm_get('javascript_statistik_send_request') == 1))
		{	
			url = '/asmajax/trackevent/event/' + escape(parameter);

			$.ajax({
				type	: 'GET',
				url		: url,		
				async	: true,
				success	: eventverarbeiten,
				dataType: 'html' /* datentyp der response - json | text | xml | html | ... */
			}); /* entspricht ausser dem async diesem hier: $.post('/belegung/speichern/json/ja', '&'+formular_daten, verarbeiten, 'text'); */
		}
	} catch(e)
	{
		asm_exception(e, 'Problem beim Statistik Tracking von ' + pagelink);
	}
}


/**
 * Prueft, ob die Variable asmvar definiert ist. Wenn nicht, wird fuer bestimmte
 * Variable ein Default-Wert geliefert, der einen reibungslosen
 * production-Betrieb erlaubt.
 *  
 * @param asmvar zB 'asm_application_environment'
 * @return Wert der Variable. 'undefined' wenn Sie nicht definiert ist.
 */
function asm_get(asmvar)
{
	try {
		wert = eval(asmvar);
	}
	catch (e) 
	{
		switch (asmvar)		/* DEFAULTS */
		{
			case 'asm_application_environment' : return 'production';
			case 'javascript_logm_im_logfile' : return 0;
			case 'javascript_exceptions_im_browser' : return 0;
			case 'javascript_exceptions_im_logfile' : return 0;
			case 'javascript_debug_im_browser' : return 0;
			case 'javascript_debug_in_console' : return 0;
			case 'javascript_debug_im_logfile' : return 0;
			case 'javascript_logm_im_logfile' : return 0;
			case 'javascript_statistik_send_request' : return 0;
			case 'javascript_statistik_track_event_debug' : return 0;
			case 'javascript_analytics_send_request' : return 0;
			case 'javascript_analytics_debug' : return 0;
		}
		return 'undefined';
	}
	return wert;
}


/**
 * Log message auf server wenn server-logging eingeschaltet.
 *   
 * @param message
 * @param loglevel
 * @return
 */
function asm_logm(message, loglevel)
{
	if ( (asm_get('javascript_logm_im_logfile') == 1) && (asm_get('use_log') == 1) )
		asm_log_to_server(message, loglevel);			
}

/**
 * Debug message ausgeben. Je nach config auf server, console, browser.
 * 
 * @param message
 * @return
 */
function asm_debug(message)
{
	if (asm_get('javascript_debug_im_logfile') == 1)
		asm_log_to_server(message, 5);
	if (asm_get('javascript_debug_in_console') == 1)
		asm_log_to_console(message);
	if (asm_get('javascript_debug_im_browser') == 1)
		asm_log_to_browser(message);
}

/**
 * Sorgt dafuer, dass eine vorher gefangene und hier uebergebene
 * Exception gelogged wird. Logfile oder Browser - je nach config.
 * 
 * @param e		gecachte Exception
 * @param msg	zusaetzliche message
 * @return
 */
function asm_exception(e, msg)
{
	message = msg + ' ' + e.name + ': ' + e.toString();
	
	if (asm_get('javascript_exception_im_logfile') == 1)
		asm_log_to_server(message, 5);
	if (asm_get('javascript_exception_in_console') == 1)
		asm_log_to_console(message);
	if (asm_get('javascript_exception_im_browser') == 1)
		asm_log_to_browser(message);
}

/**
 * Logge message im Browser als popup.
 * 
 * @param message
 * @return
 */
function asm_log_to_browser(message)
{
	if (asm_get('use_browser') == 1)
		alert(message);
}

/**
 * Logge message in browser console.
 * 
 * @param message
 * @return
 */
function asm_log_to_console(message)
{
	if (asm_get('use_console') == 1)
		console.log(message);
}


/**
 * Sendet message an Server log, in jedem Fall, nicht abschaltbar.
 * 
 * @param message	any string
 * @param loglevel	1|2|...
 * @return
 */
function asm_log_to_server(message, loglevel)
{
	try {
		if (asm_get('use_log') == 1)
			asm_request_async('/asmajax/logm/level/' + loglevel + '/message/' + message, 'get');
	}
	catch(Error)
	{
		asm_exception(Error,'Http request zum logging auf dem Server nicht erfolgreich.');
	}
}


/**
 * Fuehrt einen async HTTP Request aus ohne dass jquery geladen ist.
 * Response wird nicht geliefert.
 * 
 * @param url		: zB. /abc oder ?? http://www.klausmeier.de/abc
 * @param method	: post|get
 * @return
 */
function asm_request_async(url, method)
{
	try {
		requestObject = new XMLHttpRequest();
		requestObject.open(method, url, true);
	}
	catch(Error)
	{
		asm_exception(Error, 'Konnte HTTP request mit :' + url + ': und method :'+ method + ': nicht absetzen.');
	}
}


/*
 * Funktionen für den View-Helper Bild
 * 
 */
/*
 * **************************************************************************
 */

/*
 * Funktioniert in IE 7,8, FF 3.x
 */
function asmZeigeBildGross(id) 
{
	hideElementsByClassName('asm_aussen_bildgross');
    var elementToShow = document.getElementById(id);
    if (elementToShow!= null )
    {
        elementToShow.style.display = 'inline';
    }
}

/*   
 * 
 */
function asmVersteckeBildGross() 
{
	/*
    var elementToHide = document.getElementById('asm_aussen_bildgross');
    if (elementToHide!= null )
        elementToHide.style.display = 'none';
        */
	hideElementsByClassName('asm_aussen_bildgross');
}


/*
 * Funktioniert in IE 7,8, FF 3.x
 */
function hideElementsByClassName(classToHide)
{
	myElements = getElementsByClassName(classToHide);
	
	for (var i = 0; i < myElements.length; i++) 
	{
		myElements[i].style.display = 'none';
	}
}

/*
 * Funktioniert in IE 7,8, FF 3.x
 */
function getElementsByClassName(className) 
{
	var allHTMLTags = document.getElementsByTagName("*");
	classes = new Array();
	var length = allHTMLTags.length;
	for (var i=0; i < length; i++) {
	    if (allHTMLTags[i].className.indexOf(className) != -1) {
	        classes.push(allHTMLTags[i]);
	    }
	}
	return classes;
}


function setzeCookie(name,wert)
{
	document.cookie = name + encodeURIComponent(wert);
}

/**
 * Fuehrt einen Browser-Request aus und laedt eine neue Seite in den Browser.
 * Wenn die URL '.' enthaelt, aber kein 'http', wird http vorangestellt.
 * 
 * @return
 */
function asm_browser_request(url)
{
	if ( (url.indexOf('.') != -1) && (url.indexOf('http:') == -1) ) 
	{ 
		document.location.href = 'http://' + url; 
	}
	else
	{ 
		document.location.href = url; 
	}
}

/**************************************************************************
 * DEPRECATED Functions
 **************************************************************************/

/*   Deprecated
 * 
 */
function hideBildGross() 
{
    var elementToHide = document.getElementById('bildgross');
    if (elementToHide!= null )
        elementToHide.style.display = 'none';
}

/*
 *   DEPRECATED 
 */
function showBildGross(filename, path, caption) 
{
    var elementToShow = document.getElementById('bildgrossimg');
    if (elementToShow!= null )
    {
        elementToShow.src = path + '/' + filename;
    }
    
    var elementToShow = document.getElementById('bildgrosscaption');
    if (elementToShow!= null )
    {
        elementToShow.innerHTML = caption;
        
    }

    var elementToShow = document.getElementById('bildgross');  // div
    if (elementToShow!= null )
    {
        elementToShow.style.display = 'inline';
    }
}

