window.onresize = resizeMask;
var DomainsRequest = null;		//Request mit der gesuchten Domain - gibt die Domains zurueck die der gewaehlten Gruppe angehoeren
var DomainsStateRequest = null;  //gibt die Domains mit ihrem Status zurueck
// Merkliste Globals
var merkliste_domains;
var domains_gemerkt = new Array();
// Bestellung Globals
var bestell_domains = new Object();		//ausgewaehlte Domains waehrend der Bestellung
var inklusive_domains = new Object();	//inklusive Domains waehrend der Bestellung
var bestellte_domains_cntr = 0;
var max_bestell_domains = 0;
var inklusive_domain_cntr = 0;
var available_domains;
var available_inkl_domains;
var inkl_tlds = new Array();
var onlyOneDomain = 0;		//1 - wenn nur eine Domain ueberpruft wird, um nach dem Hinzufuegen den Layer zu schliessen


$(document).ready(function() {
	if (window.domainTarget !== undefined && domainTarget == "cart") {
		getInclTLDs();
	}
});



// Domain auf Merkliste setzen
function ajax_bestellen(domain,addorremove) {
	var data = new Object();
	data.domain = domain;
	data.addorremove = addorremove;

	var statusRequest = $.ajax({
		type: "GET",
		url: "/ajax/domainabfrage/ajax_merkliste.html",
		data: data,
		cache: false,
		complete: reload_merkliste
	});

	//20100915kg
	if (onlyOneDomain) {
		onlyOneDomain = 0;
		closeMask();
	}	
}


// Merkliste neu einlesen
function reload_merkliste() {

	var statusRequest = $.ajax({
		async: false,
		type: "GET",
		cache: false,
		url: "/ajax/domainabfrage/aktualisiere_ajax_merkliste.html",
		success: aktualisiere_merkliste,
		error: aktualisiere_merkliste
	});
}


// Merkliste anzeigen und eventuell angezeigte Auswahlliste anpassen
function aktualisiere_merkliste(domainliste,status,xmlobj) {
	var has_domain = 0;
	merkliste_domains = new Object();
	merkliste_domains.count = 0;

	var domains = domainliste.split(",");
	for (var i=0; i<domains.length; i++) {
        var d = domains[i];
		if (d) {
			has_domain++; 	// Wieviele Domains sind auf der Merkliste
			merkliste_domains[d] = 1;
			merkliste_domains.count += 1;
			if (e = document.getElementById(d + '_bestellen')) {
				bestellen='<a href="javascript:ajax_bestellen(\'' + d + '\',\'remove\')">von der Merkliste entfernen</a>';
				e.innerHTML = bestellen;
				domains_gemerkt.push(d); // global, einmal gemerkte domains aufbewahren um sie ggfls. loeschen zu koennen
			}
		}
	}
	for (var i=0; i<domains_gemerkt.length; i++) {
        var d = domains_gemerkt[i];
		if (!merkliste_domains[d]) {
			if (e = document.getElementById(d + '_bestellen')) {
				bestellen='<a href="javascript:ajax_bestellen(\'' + d + '\',\'add\')">auf die Merkliste</a>';
				e.innerHTML = bestellen;
			}
		}
	}
	if (has_domain) {
		if (ml = document.getElementById('merkliste')) {
			ml.style.display="inline-block";
			document.getElementById('merkliste_num_domains').innerHTML = has_domain + " Domain(s)";
		}
	} else {
		if (ml = document.getElementById('merkliste')) {
			ml.style.display="none";
		}
	}
	redraw_bestellen_button();
}

function redraw_bestellen_button() {
	var button = document.getElementById('merkliste_bestellen_button');
	if ( button ) {
		if ( merkliste_domains.count > 0 ) {
			button.disabled = false;	
		} else {
			button.disabled = true;
		}
	}
}

//in die Bestellung aufgenommene Domains laden
function reloadBestellteDomains() {
	var statusRequest = $.ajax({
		async: false,
		type: "POST",
		url: "/ajax/domainabfrage/ajax_bestellte_domains.html",
		success: aktualisiereBestellteDomains,
		error: aktualisiereBestellteDomains
	});
}


//aktualisiert die Domains, welche in die Bestellung aufgenommen wurden
//fuellt das bestell_domains-Objekt mit bereits in die Bestellung aufgenommenen Domains
function aktualisiereBestellteDomains(domainliste, status, xmlobj) {

	bestell_domains = new Object();
	bestellte_domains_cntr = 0;
	inklusive_domains_cntr = 0;
	if (domainliste) {
		var domains = domainliste.split(",");
		for (var i=0; i<domains.length; i++) {
    	    var d = domains[i];
			if (d) {
				bestellte_domains_cntr++;
				bestell_domains[d] = 1;
				if (isInclusiveDomain(d)) {
					inklusive_domains_cntr++;
				}
			}
		}
	}
	getInclDomains();
}


function getInclDomains() {
	var inklDomainRequest = $.ajax({
		async: false,
		type: "POST",
		cache: false,
		url: "/ajax/domainabfrage/ajax_get_inkl_domains.html",
		success: aktualisiereInklDomains
	});
}


function aktualisiereInklDomains(domainliste,status,xmlobj) {
	inklusive_domains = new Object();
	if (domainliste) {
		var domains = domainliste.split(",");
		for (var i=0; i<domains.length; i++) {
    	    var d = domains[i];
			if (d) {
				inklusive_domains[d] = 1;
			}
		}
	}
}


function changeInclDomain(domain, id) {
	if (inklusive_domains[domain]) {
		inklusive_domains_cntr--;
		inklusive_domains[domain] = 0;

		if ($("#domains_"+idParentGlobal).children().size() > 1) {
			$("#domains_"+idParentGlobal).children().each(function() {
				var cur_element = this;
				//falls tbody <tr>- Elemente enthaehlt z.B durch die Merkliste
				if ($(cur_element).children().size() > 0) {
					var d_found = 0;

					d_found = setInclDomain(cur_element);	
					if ( d_found == 0) {
						//fuer alle <tr> Elemente			
						$(cur_element).children().each(function() {
							var rc = setInclDomain(this);
							if (rc) {
								d_found = 1;
								return false;
							}
						});
					}
					if (d_found) {
						return false;
					}
				} else {
					//<tr>-Elemente die durch JS hinzugefuegt wurden und somit auf gleicher ebene mit <tbody> sind
					var rc = setInclDomain(cur_element);
					if (rc) {
						return false;
					}
				}
			});
		} else if ($("#domains_"+idParentGlobal).children().size() == 1)  {
			//wenn alle <tr>-Element auf einer ebene sind z.B. alle im <tbody> durch ein page refresh
			var tbody = $("#domains_"+idParentGlobal).children();
			$(tbody).children().each(function() {
				var rc = setInclDomain(this);
				if (rc) {
					return false;
				} 
			});
		}
	}
}


//ermittelt die nächste freie Inklusiv-Domain in der Bestellung und markiert diese als Inklusiv-Domain
function setInclDomain(element) {
	var id = $(element).attr("id");
	if (id && id.match(/^\d+$/)) {
		var d;
		var domain_fee = document.getElementById(id+"_fee").innerHTML;
		domain_fee = domain_fee.replace(/\s/g, "");
		if (!domain_fee.match(/inklusive/i)) {
			d = document.getElementById(id+"_domain").innerHTML;
			d = d.replace(/\s/g, "");
		}
		if (d) {
			if (isInclusiveDomain(d) && inklusive_domains[d] == undefined) {
				setInclMarker(d);
				return 1;
			}
		}
	}
	return 0;
}



function setInclMarker(domain) {

	var setMarkerRequest = $.ajax({
		async: false,
		type: "GET",
		url: "/ajax/domainabfrage/ajax_set_inkl_marker.html",
		data: "domain="+domain,
		cache: false,
		success: setNewInclDomain
	});
}


function setNewInclDomain (domain_id, status, xmlobj) {
	if (domain_id) {
		document.getElementById(domain_id+"_fee").innerHTML = "inklusive";
	}
	
	getInclDomains();
}


function check_keys(e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;

	if (keycode == 13) {	//13 = Return
		if ($('#layer_name').length > 0) {		//wenn der Layer zu sehen ist
			setRequest(document.getElementById('layer_name').value, document.getElementById('layer_tld_groups').value);
		} else {	
			setLayer();
		}
		return false;
	} else {
	   return true;
	}
}


//sendet die eingetragene Domain und holt sich die zugehoerigen TLDs
function setRequest(value, group) {
	if (DomainsRequest) {
		DomainsRequest.abort();
	}
	if (DomainsStateRequest) {
		DomainsStateRequest.abort();
	}

	//Wird hier abgefangen, da "&" beim Senden mit GET die Parameter trennt
	if (value.match(/&/) || !value) {		
		setTable("1");		//"1" fuer Fehler
	} else {
		if ((value) && (group)) {
			DomainsRequest = $.get("/ajax/domainabfrage/ajax_table_content.html", { "domainname": value, "group": group },
  				function(data){
					setTable(data, value, group); 
  				}
			);
		}
	}
}


/*
erstellt die Tabelle mit den jeweiligen Domains - 
erwartet als Parameter die Domains als CSV, falls Status vorhanden, wird dieser mit einer Pipe an die Domain gehaengt (domain.de|free)
*/
function setTable(content, searchname, tldgroup, updateTable) {
	reload_merkliste();
	reloadBestellteDomains();


	if (!updateTable) {
		$("#domainabfrage_data").empty();
		$("#da_error").remove();
	}
	if (content == "1") {		//1 = ungueltige Eingabe
		$('#domainabfrage_data').before('<div id="da_error"></div>');
		$("#da_error").html("Der von Ihnen eingegebene Name ist ung&uuml;ltig.");
	} else {
		getAvailableDomains();
		var domains = content.split(",");		//domains getrennt durch ","
		if (domains.length == 1) {
			onlyOneDomain = 1;
		} else {
			onlyOneDomain = 0;
		}

		for (var i = 0; i < domains.length; i++) {		//fuer jede Domain...
			var  domain = domains[i];
			var cached_domain = domain.split("|");	//wenn bereits der Status fuer die Domain vorliegt, dann ist domain = "domainname|status"
			var domain = cached_domain[0];
			var state = cached_domain[1];
			var bestellen = "";
			domain = domain.toLowerCase();
			
			if (updateTable) {
				updateTableContent(domain, state);
			} else {
				//state = setTableContent(domain, state);	
				var domainData = setTableContent(domain, state); 
				var row = '<tr><td valign="top" style="height:26px;padding-left:20px;" id='+domain+'>'+domainData.state+'</td>'
							+'<td valign="top" style="padding-left:20px;height:26px;">'+domain+'</td>'
							+'<td valign="top" style="padding-left:30px;height:26px;" id="'+domain+'_bestellen">'+domainData.bestellen+'</td></tr>';
				$("#domainabfrage_data").append(row);
			}
		}
		resizeMask();
		if (!updateTable) {
			searchname = searchname.replace(/\s/g, "");
			DomainsStateRequest = $.get("/ajax/domainabfrage/ajax_whois.html", { "domainname": searchname, "group": tldgroup},
           		function(data) {
           	       setTable(data, searchname, tldgroup, "1");	// 1 - da die Tabelle nur geupdatet wird. 
            	}
			);
		}
	}
}

//ermittelt ob und wie viele Domains noch bestellt werden koennen
function handleAvailableDomains(data, status, xmlobj) {

	var domainNr = data.split(",");
	max_bestell_domains = domainNr[0];
	var inklDomains = domainNr[1];
	available_domains = max_bestell_domains - bestellte_domains_cntr;
	available_inkl_domains = inklDomains - inklusive_domains_cntr;
	var infoText = "";
	var domains_count_info = available_domains;
	var inkl_domains_count_info = available_inkl_domains;

	if (available_domains <= 0 ) {
		available_domains = 0;
		domains_count_info = "Keine";
	}
	if (available_inkl_domains <= 0) {
		available_inkl_domains = 0;
		inkl_domains_count_info = "keine";
	}

	var domain_text = "";
	if (available_domains > 1) {
		domain_text = "Domains";
	} else {
		domain_text = "Domain";
	} 
	var inkl_domain_text = "";
	if (available_inkl_domains > 1) {
		inkl_domain_text = "Domains";
	} else {
		inkl_domain_text = "Domain";
	} 
	//Private Web-Tarife
	if (idTarif >= 5000 && idTarif <=5002) {
		if (idTarif == 5000) {
			//inkl_tlds = new Array("de");
		}
		infoText = domains_count_info+' '+domain_text+' und '
					+inkl_domains_count_info+' Inklusiv-'+inkl_domain_text+' verf&uuml;gbar';
		//Domainbestellung verhindern falls die Anzahl an zusaetzlichen Domains erreicht wurde
		if (available_domains == 0 && max_bestell_domains > 0) {
			setDomainlimitMsg();
		}
	//die Restlichen Webhosting-Tarife
	} else if (idTarif >= 5005 && idTarif <= 5033) {
		infoText = inkl_domains_count_info+' Inklusiv-'+inkl_domain_text+' verf&uuml;gbar';
	}

	if (available_inkl_domains > 0 && available_domains > 0) {
		infoText = 'Noch '+infoText;
	}

	if ($('#domains_available').length > 0 ) {
		$('#domains_available').html(infoText);
	} else {
		$('#layer_search_header').after('<tr><td colspan="3"><div id="domains_available" style="font-size: 0.8em;margin-top: 0;text-align:center;">'
			+infoText
			+'</div></td></tr>');
	}
}


function setDomainlimitMsg() {
	if ($('#domains_available').length > 0 ) {
		var tnode = document.getElementById("domainabfrage_data").childNodes[0];
		if (tnode !== undefined) {
			for (var i = 0; i < tnode.childNodes.length;i++) {
				if (tnode.childNodes[i].lastChild.firstChild != undefined && tnode.childNodes[i].lastChild.firstChild.nodeName == "A") {
					tnode.childNodes[i].lastChild.innerHTML = '<span class="domain_error" style="font-size: 0.9em">Domainlimit erreicht</span>';
				}
			}
		}
	}
}

//ermittelt die Anzahl der bereits in die Bestellung aufgenommenen Domains
function getAvailableDomains() {
	if (window.domainTarget !== undefined && domainTarget == "cart") {
    	var availableDomainsRequest = $.ajax({
    	    async: false,
    	    type: "GET",
    	    url: "/ajax/domainabfrage/ajax_get_available_domains.html",
			data: 'id='+idTarif,
			cache: false,
    	    success: handleAvailableDomains
		});
	}
}


function getInclTLDs() {
	var inclTLDRequest = $.ajax({
		sync: false,
		type: "GET",
		url: "/ajax/domainabfrage/ajax_get_incl_tlds.html",
		cache: false,
		data: "tarif="+idTarif,
		success: fillInclTLDs
	});
}

function fillInclTLDs(tld_liste, status, xmlobj) {
	var split_tlds = tld_liste.split(",");
	for (var i = 0; i < split_tlds.length; i++) {
		var tld = split_tlds[i].replace(/\s/g, "");

		tld = tld.replace(/\./g, "");
		inkl_tlds.push(tld);
	}
}


// prueft, ob eine Domain eine inklusiv Domain ist
function isInclusiveDomain(domain) {

	var split_domain = domain.split(".");
	split_domain.shift();
	var domain_tld = split_domain.join(".");
	
	for (var i = 0; i < inkl_tlds.length; i++) {
		if (domain_tld == inkl_tlds[i]) {
			return 1;
		}
	}
	return 0;
}



function updateTableContent(domain, state) {
	var link_id = document.getElementById(domain+'_bestellen');
//	reloadBestellteDomains();

	if (state == "frei") {
		var bestellen_link;
		if (window.domainTarget !== undefined && domainTarget == "cart") {
			if (max_bestell_domains > 0 && available_domains == 0) {

				if (bestell_domains[domain]) {
					bestellen_link = '<span style="font-size: 0.9em">bereits&nbsp;hinzugefügt</span>';
				} else {
					bestellen_link = '<span class="domain_error" style="font-size: 0.9em">Domainlimit erreicht</span>';
				}
			} else {
				bestellen_link = handleAvailableDomainsOrderMsg(domain);
			}
		} else {
			bestellen_link = '<a href="#" onclick="javascript:ajax_bestellen(\'' + domain + '\',\'add\'); return false">auf die Merkliste</a>';
		}

		jQuery(document.getElementById(domain)).html('<img src="/images/yes16.png" title="Domain ist verf&uuml;gbar">');
		if (!merkliste_domains[domain]) {
			jQuery(link_id).html(bestellen_link);
		}
	} else if (state == "vergeben") {
		jQuery(document.getElementById(domain)).html('<img src="/images/no16.png" title="Domain ist bereits vergeben">');
	} else {
		//kein Status vorhanden
		jQuery(document.getElementById(domain)).html('<img src="/images/info.png">');
		$(link_id).text(state);
	}
}

//passt den Bestell-Link einer Domain an
function handleAvailableDomainsOrderMsg(domain) {
	
	var bestellen_link = "";	

	if (bestell_domains[domain]) {
		bestellen_link = '<span style="font-size: 0.9em">bereits&nbsp;hinzugef&uuml;gt</span>';
	} else {
		if (idTarif == 5000) { 		//private tiny - nur .de moeglich
			onlyOneDomain = 1;
			if (isInclusiveDomain(domain)) {
				bestellen_link = '<a href="#" onclick="javascript:addDomain(\'' + domain + '\', \'REG\'); return false">bestellen</a>';
			} else {
				bestellen_link = '<span class="domain_error" style="font-size: 0.9em">nicht im&nbsp;Tarif verf&uuml;gbar</span>';
			}
		} else {
			bestellen_link = '<a href="#" onclick="javascript:addDomain(\'' + domain + '\', \'REG\'); return false">bestellen</a>';
		}
	}
	return bestellen_link;
}


//setzt eine Meldung nachdem eine Domain bei der Bestellung hinzugefuegt wurde 20100915kg
function setDomainOrderStatus(domain) {
	element = document.getElementById(domain+'_bestellen');
	if (onlyOneDomain) {
		onlyOneDomain = 0;
		bestell_domains[domain] = 1;
		closeMask();
		return;
	}	

	var bestellen_text = '<span style="font-size: 0.9em">bereits&nbsp;hinzugef&uuml;gt</span>';
	getAvailableDomains();
	bestell_domains[domain] = 1;	
	jQuery(element).html(bestellen_text);
}



function setTableContent(domain, state) {
	var state_value = "";

	domainData = new Object();
	domainData.bestellen = "";
	if (state) {
		if (state == "frei") {
			state_value = '<img src="/images/yes16.png">';
			var merktext = merkliste_domains[domain] ? "von der Merkliste entfernen" : "auf die Merkliste";
			var addorremove = merkliste_domains[domain] ? "remove" : "add";
			bestellen='<a href="javascript:ajax_bestellen(\'' + domain + '\',\'' + addorremove + '\')">' + merktext + '</a>';

			if (window.domainTarget == undefined) {
				domainData.bestellen = bestellen;
			} else if (window.domainTarget !== undefined && window.domainTarget == "cart") {
				if (max_bestell_domains > 0 && available_domains == 0) {
					if (bestell_domains[domain]) {
						domainData.bestellen = '<span style="font-size: 0.9em">bereits&nbsp;hinzugef&uuml;gt</span>';
					} else {	
						domainData.bestellen = '<span class="domain_error" style="font-size: 0.9em">Domainlimit erreicht</span>';
					}
				} else {
					domainData.bestellen = handleAvailableDomainsOrderMsg(domain);
				}
			}
		} else if (state == "vergeben") {
			state_value='<img src="/images/no16.png">';
		}
	} else {
		state_value = '<img style="margin-bottom:-4px" src="/images/ajax/ajax-loader.gif">';
	}
	domainData.state = state_value;
	
	return domainData;
}


function setLayer() {

	createLayerContent();	//Layer wird mit Inhalt erstellt
	resizeMask();	

	$('#mask').css('filter', 'Alpha(Opacity=40)');	//Transparenz beim IE
	//blendet den layer ein
	$('#mask').fadeTo("fast", 0.4, function () {	
		$('#layer').fadeIn(2000);
		$('#layer_bottom').fadeIn(2000);
	}); 
	$('#mask').fadeIn(1000);
	resizeMask();

	//wenn Maske angeklickt wird
	$('#mask').click(function () {
			closeMask();
	});
}


function resizeMask() {
	//Hoehe und Breite werden ermittelt 
	$('#mask').css({'width':1,'height':1});
	var maskHeight = $(document).height();  
	var maskWidth = $(document).width();  

	//Passe die Groesse der Maske an die Fenstergroesse an  
	//$('#mask').css({'width':maskWidth,'height':maskHeight});
	$('#mask').css({'width':maskWidth,'height':maskHeight});

	var winH = $(window).height();  
	var winW = $(window).width();  

	//setzte den Layer in die Mitte 
	var top = winH/2-$('#layer').height()/2;
	if (top > 100) {
		top = 100;
	}

	//top = top + $(window).scrollTop(); //Positioniert den Layer an die Position von 100px vom Viewpoint

	$('#layer').css('top', top);
	$('#layer').css('left', winW/2-$('#layer').width()/2);
}


function closeMask() {
	$('#mask').remove();  
	$('#layer').remove();  
	//$('#boxes').remove();
    if (DomainsRequest) {
        DomainsRequest.abort();
    }
	if (DomainsStateRequest) {
		DomainsStateRequest.abort();
	}
}


//erstellt den Inhalt des Layers
function createLayerContent() {

	var domain = "";
	var chosen_group = "";

	if ($('#layer').length == 0) {			//true, wenn Element mit id="layer" nicht existiert		
		var layer = $('<table id="layer" cellpadding="0" cellspacing="0" border="0"></table>');
		layer.addClass('window');
	} else {
		$('#layer').empty();
	}

	var boxes = document.createElement('div');
	boxes.id = "boxes";
	//haengt das Element an das aktuelle DOM Objekt an - benoetigt die id eines vorhandenen Elements im DOM!
	var mask = document.createElement('div');
	mask.id = "mask";
	$('#body').append(mask);
	//$('#domainabfrage_div').append(layer);
	$('#mask').after(layer);
	//$('#boxes').append(layer);
	//$('#boxes').append(layer).append(mask);
	$('#layer').prepend('<tr id="layer_search_header"><td colspan="3" style="text-align:center;position:relative;display:block;margin-bottom:10px">'
						+'<img src="/images/close.png" onclick="closeMask()" style="position:absolute;right:-14px;top:-10px;" alt="close">'
						+'<h2 style="line-height:2em;">Domainabfrage</h2>'
						+'<input type="text" size="20" id="layer_name" value="" onkeypress="return check_keys(event)">'
						+'<select id="layer_tld_groups"></select> '
						+'<input id="layer_search" type="submit" name="layer_search" value="suchen"></td></tr>'
						+'<tr id="layer_domainlist"><td colspan="3"><div style="padding-bottom:0px;max-height:330px;overflow-y:auto;">'
						+'<table id="domainabfrage_data" style="position:relative;background-color:#F8F2DF;display:block;">'
						+'</table></div></td></tr>'
						+'<tr id="layer_search_footer"><td colspan="3" style="text-align:center;position:relative;display:block">'
						+'<input onclick="location.href=\'/domains/domainabfrage/merkliste.html\'" disabled id="merkliste_bestellen_button" style="margin:8px 0 8px 0;" type="button" value="Domains von der Merkliste bestellen">'
						+'</td></tr>');

	chosen_group = $("#tldset_domainabfrage :selected").text();
	domain = document.getElementById('domain_domainabfrage').value;
	$('#layer_name').val(domain);				//fuelle das Eingabefeld mit der eingegebenen Domain
	setRequest(domain, chosen_group);

	//holt sich die TLD Gruppen fuer die Combobox im Layer
	$.get("/ajax/domainabfrage/ajax_get_tld_groups.html", {"group": chosen_group },function (data) {		
		$('#layer_tld_groups').html(data);
	});

	$('#layer_search').click(function () {		//haengt ein Event an das Element mit der ID = layer_search an 	
		setRequest(document.getElementById('layer_name').value, document.getElementById('layer_tld_groups').value);
	});
}

