var link_general = link_object = '';


/* no_editor_please */
function getAjax (url, parameters, callbackFunction)
{
	var now = new Date();
  	if ( typeof (parameters) != 'array' && typeof(parameters) != 'object' )
	{
		var tmp = parameters;
		var parameters = new Object();
	}
	if ( !parameters.D )
	{
		parameters.D = link_object;
	}
	parameters.randomCache = now.getTime();
	new Ajax.Request (url, { method: 'get', parameters: parameters, onSuccess: callbackFunction } );
}

function getJson (url, parameters, callbackFunction)
{
	var now = new Date();
  	if ( typeof (parameters) != 'array' && typeof(parameters) != 'object' )
	{
		var tmp = parameters;
		var parameters = new Object();
	}
	if ( !parameters.D )
	{
		parameters.D = link_object;
	}
	parameters.randomCache = now.getTime();
	new Ajax.Request (url, { method: 'get', requestHeaders: {Accept: 'application/json'}, evalJSON: true, parameters: parameters, onSuccess: callbackFunction } );
}

function updateContent (data)
{
	$('content').innerHTML = data.responseText;
}


function validateInput (obj, type, minValue, maxValue) {
	var data = obj.value;
	
	switch (type) {
		/**
		 * hexadecimal
		 */
		case 'hex':
			dataNew = data.toUpperCase();
			do {
				dataOld = dataNew;
				dataNew = dataOld.replace(/[^0-9A-F]/, '');
			} while ( dataNew != dataOld );
			data = dataNew;
			
			if ( data.length > 6 ) {
				data = data.substr(0, 6);
			}
			
			data = '#' + data;
			break;
		
		/**
		 * force value to be an integer
		 */
		case 'unsignedinteger':
		case 'signedinteger':
			dataNew = data;
			do {
				dataOld = dataNew;
				dataNew = dataOld.replace(/[^0-9\-]/, '');
			} while ( dataNew != dataOld );
			data = dataNew;
			
			/**
			 * optional limits
			 */
			if ( typeof(arguments[2]) != 'undefined' && parseInt(data) < parseInt(arguments[2])) {
				data = arguments[2];
			}

			if ( typeof(arguments[3]) != 'undefined' && parseInt(data) > parseInt(arguments[3])) {
				data = arguments[3];
			}

			/**
			 * remove dash if it is an unsigned integer
			 */
			if ( type == 'unsignedinteger' ) {
				data = data.replace('-', '');
			}
			
			/**
			 * min/max value
			 */
			 data = (minValue && parseInt(minValue) > parseInt(data)) ? minValue : data;
			 data = (maxValue && parseInt(maxValue) < parseInt(data)) ? maxValue : data;
			break;
			
		/**
		 * force value to be a floating number
		 */
		case 'unsignedfloat':
		case 'signedfloat':
			dataNew = data;
			dataNew = dataNew.replace(',', '.');
			do {
				dataOld = dataNew;
				dataNew = dataOld.replace(/[^0-9\.\-]/, '');
			} while ( dataNew != dataOld );
			data = dataNew;
			
			/**
			 * optional limits
			 */
			if ( typeof(arguments[2]) != 'undefined' && Number(data) < Number(arguments[2])) {
				data = arguments[2];
			}

			if ( typeof(arguments[3]) != 'undefined' && Number(data) > Number(arguments[3])) {
				data = arguments[3];
			}
			
			/**
			 * look for decimal dots and remove them until only the first one (beginning from the left) stays
			 */
			 dataNew = data.split('.');
			 if ( dataNew.length >= 2 ) {
				 data = dataNew[0] + '.' + dataNew[1];
				 delete(dataNew[0]);
				 delete(dataNew[1]);
			 }
			 else {
			 	data = dataNew[0];
			 }
			 
			 if ( dataNew.length > 1 ) {
				 for ( var i in dataNew ) {
				 	if ( typeof(dataNew[i]) == 'function' ) {
				 		continue;
				 	}
				 	data = data + '' + dataNew[i];
				 }
			 }

			/**
			 * remove dash if it is an unsigned float
			 */
			if ( type == 'unsignedfloat' ) {
				data = data.replace('-', '');
			}
			break;
	}
	
	obj.value = data;
}

function validateRange (fieldFrom, fieldTo) {
	if ( !$(fieldFrom) || !$(fieldTo) ) {
		return false;
	}

	var val1 = parseFloat($F(fieldFrom));
	var val2 = parseFloat($F(fieldTo));
	
	if ( val1 && val2 && val2 < val1 ) {
		$(fieldTo).value = $(fieldFrom).value;
	}
}

function hideItem (id) {
	$(id).style.display = 'none';
}

function showItem (id) {
	$(id).style.display = '';
}

function toolSecondsCalculation () {
	var num1 = Number($F('toolSeconds1'));
	var resDays = Math.floor((num1 / 86400) % 1000);
	var resHours = Math.floor((num1 / 3600) % 24);;
	var resMinutes =  Math.floor((num1 / 60) % 60);;
	var resSeconds = Math.floor((num1) % 60);
	$('toolSeconds2').value = '= ' + resDays + 'd, ' + resHours + 'hrs, ' + resMinutes + 'min, ' + resSeconds + 'sec';
}

function toolFormularCalculation () {
	var x = $F('toolFormular1');
	var y = $F('toolFormular2');
	var z = $F('toolFormular3');
	var formular = formularFinal = $F('toolFormular4');
	do {
		formular = formularFinal;
		formularFinal = formular.replace(/[^xyz0-9*/\+\(\) \.\-]/, '');
		formularFinal = formularFinal.replace('x', x);
		formularFinal = formularFinal.replace('y', y);
		formularFinal = formularFinal.replace('z', z);
	} while ( formularFinal != formular );
	var formularResult = eval(formularFinal);
	$('toolFormular5').value = '= ' + formularResult;
}

function loadHelp (secton) {
	if ( parent.mbghelpframe ) {
		parent.mbghelpframe.location = '?section=help&tplvars[popup]=2#' + section;
	}
}

var displayAfterload = new Array();
function displaySwitch (id, forced) {
	if ( typeof(displayAfterload[id]) != 'undefined' && displayAfterload[id] === false ) {
		doAfterload(id);
	}

	var tableBodyObject = $(id);
	tableBodyObject.style.display = (tableBodyObject.style.display == 'none') ? '' : 'none';
	if ( typeof(forced) != 'undefined' ) {
		tableBodyObject.style.display = (forced) ? '' : 'none';
	}
	
	if ( $(id+'_arrow') ) {
		$(id+'_arrow').src = (tableBodyObject.style.display == 'none') ? $(id+'_arrow').src.replace('_up.gif', '_down.gif') : $(id+'_arrow').src.replace('_down.gif', '_up.gif');
	}
}

function doAfterload (id) {
	if ( $(id+'_afterload') ) {
		$(id+'_afterload').innerHTML = '<div class="notice"><img src="images/editor/loading.gif" border="0" /> Daten werden vom Server nachgeladen, einen Moment bitte&hellip;</div>';
	}
	
	new Ajax.Request ('engine.fv', {
		'method': 'get',
		'parameters': {'D': link_general, 'section': 'wizzard', 'engine_id': afterLoadEngine, 'tplvars[_section]': afterLoadSection, 'tplvars[_putintoid]': id, 'tplvars[included]': 'true', 'tplvars[ajax]': 'true'},
		'onSuccess': function (data) {
			addAfterload(id, data);
		}
	});
}

function addAfterload (id, data) {
	if ( $(id+'_afterload') ) {
		if ( typeof(displayAfterload[id]) != 'undefined' && displayAfterload[id] === false ) {
			displayAfterload[id] = true;
		}
		$(id+'_afterload').innerHTML = '<br /><table cellspacing="0" cellpadding="0" border="0" class="w100">' + data.responseText + '</table>';
		initFileUploads();
	}
}

function stayInSection () {
	if ( $('sectionCurrentData') && $('sectionNextData') ) {
		$('sectionNextData').value = $F('sectionCurrentData');
	}
	
	if ( $('sectionCurrentData') && $('sectionPreviousData') ) {
		$('sectionPreviousData').value = $F('sectionCurrentData');
	}
}

function updatePlayerMaximum () {
	var playerMinimum = 0, playerMaximum = 0, a1f = 1, a1t = 1, a2f = 1, a2t = 1, a3f = 1, a3t = 1;
	if ( $('area_layer_layer_content_layer_content_count_from_0_0') ) {
		a1f = parseInt ($F('area_layer_layer_content_layer_content_count_from_0_0'));
		a1f = (a1f < 0) ? 1 : a1f;
	}

	if ( $('area_layer_layer_content_layer_content_count_to_0_0') ) {
		a1t = parseInt ($F('area_layer_layer_content_layer_content_count_to_0_0'));
		a1t = (a1t < 0) ? 1 : a1t;
	}

	if ( $('area_layer_layer_content_layer_content_count_from_1_0') ) {
		a2f = parseInt ($F('area_layer_layer_content_layer_content_count_from_1_0'));
		a2f = (a2f < 0) ? 1 : a2f;
	}

	if ( $('area_layer_layer_content_layer_content_count_to_1_0') ) {
		a2t = parseInt ($F('area_layer_layer_content_layer_content_count_to_1_0'));
		a2t = (a2t < 0) ? 1 : a2t;
	}

	if ( $('area_layer_layer_content_layer_content_count_from_2_0') ) {
		a3f = parseInt ($F('area_layer_layer_content_layer_content_count_from_2_0'));
		a3f = (a3f < 0) ? 1 : a3f;
	}

	if ( $('area_layer_layer_content_layer_content_count_to_2_0') ) {
		a3t = parseInt ($F('area_layer_layer_content_layer_content_count_to_2_0'));
		a3t = (a3t < 0) ? 1 : a3t;
	}

	if ( $('area_basics_area_disabled_0') && $('area_basics_area_disabled_0').checked ) {
		a1f = a1t = 100;
		a2f = a2t = 100;
		a3f = a3t = 50;
	}

	playerMinimum = a1f * a2f * a3f;
	playerMaximum = a1t * a2t * a3t;
	if ( $('area_basics_player_maximum_0') ) {
		if ( playerMinimum != playerMaximum ) {
			$('area_basics_player_maximum_0').innerHTML = number_format (playerMinimum, 0, ',', '.') + ' - ' + number_format (playerMaximum, 0, ',', '.');
		}
		else {
			$('area_basics_player_maximum_0').innerHTML = number_format (playerMaximum, 0, ',', '.');
		}

	}
}

function number_format(a, b, c, d) {
        if ( isNaN(a) ) {
        	a = 0;
        }

        for ( var i = 0; i < b; i += 1 )
        { a = a * 10; }
        a = a + '';
        if ( a.indexOf(',') > 0 ) a = a.substr(0,a.indexOf(','));
        if ( a.indexOf('.') > 0 ) a = a.substr(0,a.indexOf('.'));

        var bv = a.substr(a.length-b,b);
        a = a.substr(0,a.length-b);
        var av = '';
        while ( a.length > 3 )
        {   
                av = d + a.substr(a.length-3,3) + av;
                a = a.substr(0,a.length-3);
        }
        if ( b > 0 )
        {
                while ( bv.length < b )
                {
                        bv = '0' + bv;  
                }
        }
        av = a + av + ((!a&&!av&&b>0)?0:'')+((b>0)?c+bv:'');

        return av;
}

function updateTemplateSource (value, textbox, isInit) {
	if ( !$(textbox) ) {
		return false;
	}
	
	if ( isInit && $F(textbox) ) {
		return false;
	}
	
	$(textbox).value		=	value;
}

var mandatoryCheckSuccess = true;
function validateMandatoryFields () {
	mandatoryCheckSuccess = true;
	mandatoryFields.each(validateMandatoryField);
	
	if ( mandatoryCheckSuccess === false && typeof(mandatoryErrorMessage) != 'undefined' ) {
		alert(mandatoryErrorMessage);
	}

	return mandatoryCheckSuccess;
}

function validateMandatoryField (id) {
	if ( !$(id) ) {
		return false;
	}
	
	if ( !$F(id) ) {
		$(id).className = $(id).className + ' mandatoryerror';
		if ( $(id+'_title') ) {
			$(id+'_title').className = $(id+'_title').className + ' mandatoryerror';
		}
		if ( $(id+'_value') ) {
			$(id+'_value').className = $(id+'_value').className + ' mandatoryerror';
		}
		if ( $(id+'_help') ) {
			$(id+'_help').className = $(id+'_help').className + ' mandatoryerror';
		}
		if ( $(id+'_dummy') ) {
			$(id+'_dummy').className = $(id+'_dummy').className + ' mandatoryerror';
		}
		
		if ( mandatoryCheckSuccess === true ) {
			$(id).focus();
		}
		mandatoryCheckSuccess = false;
	}
	else if ($(id).className.indexOf('mandatoryerror') >= 0 ) {
		$(id).className = $(id).className.replace('mandatoryerror', '');
		if ( $(id+'_title') ) {
			$(id+'_title').className = $(id+'_title').className.replace('mandatoryerror', '');
		}
		if ( $(id+'_value') ) {
			$(id+'_value').className = $(id+'_value').className.replace('mandatoryerror', '');
		}
		if ( $(id+'_help') ) {
			$(id+'_help').className = $(id+'_help').className.replace('mandatoryerror', '');
		}
		if ( $(id+'_dummy') ) {
			$(id+'_dummy').className = $(id+'_dummy').className.replace('mandatoryerror', '');
		}
	}
}

var lastHelpId = false;
var helpCache = new Array();
function helpDisplay (id) {
	if ( lastHelpId == id ) {
		lastHelpId = false;
		nd();
	}
	else if (typeof(helpCache[id]) != 'undefined' ) {
		lastHelpId = id;
		displayHelp(helpCache[id]);
	}
	else {
		getJson ('engine.fv',  {D: link_general, id: id, output: 'json', section: 'help'}, displayAjaxHelp);
		lastHelpId = id;
	}
}

function displayAjaxHelp (data) {
	var helpText = data.responseText.evalJSON();
	while ( helpText.text.indexOf("\n") > 0 ) {
		helpText.text = helpText.text.replace("\n", "<br />");
	}
	helpCache[helpText.id] = helpText.text;
	displayHelp(helpText.text);
}

function displayHelp (helpText) {
	if ( helpText && helpText != 'false' ) {
		ol_bgcolor = '#0570a9';
		ol_closecolor = '#ffffff';
		ol_fgcolor = '#FFFFCC';
		ol_close = 'schliessen';
		overlib (helpText, WIDTH, 300, VAUTO, STICKY, CAPTION, 'HILFE', CLOSECLICK);
	}
	else {
		lastHelpId = false;
		nd();
	}
}

var configUpdateId = false;
var configUpdateInterval;
var configUpdateErrors = 10;
var configGenerationLoops = 100;
function generateConfig (id) {
	if ( id < 0 ) {
		var processPercentage = 0;
		$('finalize_congratulation_status_0').className = "center loadingbar";
		$('finalize_congratulation_status_0').innerHTML = "<span class='red bold'>Konfiguration ist ung&uuml;ltig.<br />Bitte Information beachten und Konfiguration korrigieren.</span>";
		return;
	}

	if ( configGenerationLoops > 0 ) {
		configGenerationLoops--;
		window.setTimeout("generateConfig('" + id + "');", 1000);
		var processPercentage = 100 - configGenerationLoops;
		$('finalize_congratulation_status_0').className = "center loadingbar";
		$('finalize_congratulation_status_0').innerHTML = "Konfigurationsdaten werden vorbereitet:&nbsp;&nbsp;" + processPercentage + "%<br /><div style='height: 15px; background-color: #FFF; border: 1px solid #CECECE; width: 200px;'><div style='height: 15px; background-color: #0570a9; width: " + (processPercentage*2) + "px;'>&nbsp;</div></div>";
		return;
	}
	// step 1: trigger real generation
	getJson ('engine.fv', {D: link_general, engine_id: id, section: 'generate'});
	
	// step 2: loop to get the generation status
	configUpdateId = id;
	configUpdateInterval = window.setInterval('generateConfigUpdate(' + configUpdateId + ');', 1000);
}

function generateConfigUpdate (id) {
	getAjax ('cache/' + id + '.status', {}, generateConfigUpdateDisplay);
}

function generateConfigUpdateDisplay (data) {
	$('finalize_congratulation_status_0').innerHTML = data.responseText;
	$('finalize_congratulation_status_0').className = 'value bold large red';
	if ( data.responseText.indexOf('erfolgreich') > 0 ) {
		$('finalize_congratulation_status_0').className = 'value bold darkgreen';
		window.clearInterval (configUpdateInterval);
	}
	else if ( data.responseText.indexOf('erneut versuchen') > 0 ) {
		configUpdateErrors--;
		if ( configUpdateErrors <= 0 ) {
			window.clearInterval (configUpdateInterval);
		}
	}
}

var W3CDOM = (document.createElement && document.getElementsByTagName);

function initFileUploads() {
	if (!W3CDOM) return;
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var upButton = document.createElement('button');
	upButton.innerHTML = "...";
	fakeFileUpload.appendChild(upButton);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file filehidden';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		x[i].onchange = x[i].onmouseout = function () {
		this.relatedElement.value = this.value;
		}
	}
}

function checkDomainAvailbility (domain) {
	getJson ('engine.fv',  {'D': link_general, 'output': 'json', 'section': 'check', 'check': 'domain', 'domain': domain}, displayDomainAvailbility);
}

function displayDomainAvailbility (data) {
	var resultData = data.responseText.evalJSON();
	if ( resultData.result ) {
		$('domainAvailbilityStatus').innerHTML = 'Verf&uuml;gbar';
		$('domainAvailbilityStatus').className = 'bold darkgreen';
	}
	else {
		$('domainAvailbilityStatus').innerHTML = 'Vergeben';
		$('domainAvailbilityStatus').className = 'bold red';
	}
}

function checkTeamAvailbility (email) {
	getJson ('engine.fv',  {'D': link_general, 'output': 'json', 'section': 'check', 'check': 'team', 'email': email}, displayTeamAvailbility);
}

function displayTeamAvailbility (data) {
	var resultData = data.responseText.evalJSON();
	if ( resultData.result ) {
		$('teamAvailbilityStatus').innerHTML = 'User gefunden';
		$('teamAvailbilityStatus').className = 'bold darkgreen';
	}
	else {
		$('teamAvailbilityStatus').innerHTML = 'Unbekannter User';
		$('teamAvailbilityStatus').className = 'bold red';
	}
}

function pageOnLoad() {
	initFileUploads();
	
	if ( typeof(onLoadFunction) != 'undefined' ) {
		onLoadFunction();
	}
}

function findPosX(obj)
{
        var curleft = 0;
        if (obj.offsetParent)
        {
                while (obj.offsetParent)
                {
                        curleft += obj.offsetLeft
                        obj = obj.offsetParent;
                }
        }
        else if (obj.x)
                curleft += obj.x;
        return curleft;
}

function findPosY(obj)
{
        var curtop = 0;
        if (obj.offsetParent)
        {
                while (obj.offsetParent)
                {
                        curtop += obj.offsetTop
                        obj = obj.offsetParent;
                }
        }
        else if (obj.y)
                curtop += obj.y;
        return curtop;
}

function dependancyResolver (data) {
	switch ( typeof(data) ) {
		case 'object':
			dependancyResolver(data.id+'='+data.value);
			break;

		case 'string':
			data = data.split('=');
			for ( var i in dependancyGroups ) {
				if ( typeof(dependancyGroups[i]) == 'function' ) {
					continue;
				}

				var dataRow = dataRowReplace = dependancyGroups[i];
				do {
					dataRow = dataRowReplace;
					dataRowReplace = dataRow.replace('.','_');
				} while (dataRow != dataRowReplace);
				dataRow = dataRowReplace.split('=');

				if ( $(dataRow[0]) && $(dataRow[2]) && $F(dataRow[0]) == dataRow[1] ) {
					displaySwitch (dataRow[2], true);
				}
				else {
					displaySwitch (dataRow[2], false);
				}
			}
			break;
	}
}
