var c_display;
var text;

var uid = new Date().getTime();
var flashProxy = new FlashProxy(uid, '/mail-server/locate-partner/JavaScriptFlashGateway.swf');
var tag = new FlashTag('/mail-server/locate-partner/world-map.swf', 450, 258, 'transparent');
tag.setFlashvars('lcId='+uid);

function formSend() {
	text = $('countries').value;
	if (text == -1) $('viewpartners').style.display = 'none';
		else $('viewpartners').style.display = 'block';
	flashProxy.call('getTextFromJavaScript', text);
	
	var content = Browser.getSize('content');
	var viewpartners = Browser.getSize('viewpartners');	
	if (content[1]>viewpartners[1]) {
		$('content').style.height=''; 
	}
}

function getTextFromFlash(str) {
	 c_display = str.split(".");
	 
	 if (c_display=="noCountry") { 
			 $('viewpartners').style.display = 'block';
			 WorldMap.showPartners('', '', 'nocountry'); 
	 } else {
			if (!c_display[1]) { 
				 $('viewpartners').style.display = 'none'; 
				 $('viewpartners').innerHTML = ''; 
			} else { 
				if (c_display[1]==$('countries').value) { 
					 $('viewpartners').style.display = 'block';
				} else {
					 $('viewpartners').style.display = 'block';
					 WorldMap.getData_continent("continent", c_display[1], 1);
					 WorldMap.getPartners("partners",c_display[1]); 
				}
			}
	 }
	 
	if (!c_display[1]) { 
				$('countries').value = '-1';
				$('continents').value = '-1';
	}
	 
	var content = Browser.getSize('content');
	var viewpartners = Browser.getSize('viewpartners');	
	if (content[1]>viewpartners[1]) {
		$('content').style.height=''; 
	}
}

WorldMap = {
	callInAction: false,
	called: false,
	init: function (){
			
			var continents = $('continents');
			var countries  = $('countries');

			// GEOIP found country
			var geo_country_name = $('geo_country_name').value;
			
			// If it's valid, auto-select country, continent and map state
			if (geo_country_name !== '') {
				// The get countries call must be asynchronous (last argument false)
				// so as to assure that the response doesn't arrive after the next call to get continents
				WorldMap.getData_countries("countries", "", geo_country_name, false);
				WorldMap.getData_continent.bind(countries, "continent")();
			}
			else {
				WorldMap.getData_countries("countries", "");
			}
			
	        continents.addEvent('change', function(){
						$('viewpartners').style.display = 'none';
						flashProxy.call('getTextFromJavaScript', -1);
						WorldMap.getData_countries.bind(continents, "countries")();
			});
			
			countries.addEvent('change', function(){
				if (text == $('countries').value) {
				} else {
					WorldMap.getData_continent.bind(countries, "continent")();
				}				
			});
			
			
            countries.addEvent('keyup', function(){
				if (WorldMap.callInAction) {
					$clear(WorldMap.callInAction);
				}												 
												 
				WorldMap.callInAction = WorldMap.getData_continent.bind(countries, "continent").delay(500);

			});
    },
	
	getData_countries: function (type, rcontinent, rcountry, async){
	    if (!this.value || this.value==-1) {
			value = rcontinent;
		 } else {
			value = this.value;
		 }
		
		 /*
		 	The async functionality is implemented for the automatic geo-location
		 	to work correctly. At domready in WorldMap.init we make 2(two) calls
		 	(getData_countries and getData_continents) and we must assure they
		 	are called in correct succesion.
		 */
		 async = !!async;
		 
		 if (async) {
			 var jSonRequest = new Json.Remote("get_data.php", {
				onComplete: function(data){
						WorldMap.showData_countries(type, data, rcountry);
				}
			}).send({'type': type, 'continent': value});
		 }
		 else {
		 	 var jsonRequest = new Json.Remote("get_data.php", {async: false})
		 	 	.send({'type': type, 'continent': value});
		 	 WorldMap.showData_countries(type, Json.evaluate(jsonRequest.transport.responseText), rcountry);
		 }
	},
	
	getData_continent: function (type, rcountry, val){		
		  if (val!=1) formSend();
		  if (!this.value || this.value==-1) {
			value = rcountry;
		 } else {
			value = this.value;
			WorldMap.getPartners("partners",this.value);
		 }
		 var jSonRequest = new Json.Remote("get_data.php", {
             onComplete: function(data){
					WorldMap.showData_continent(type, data);
					if (val==1) WorldMap.getData_countries("countries", data, rcountry);
					
                }
            }).send({'type': type, 'country': value});
		 
	},
	
	//populate a select with the JSON response
    showData_countries: function (type, optionsData, rcountry) {
		//clean select of previous values
		var countriesSelect = $('countries');
        if (countriesSelect.length > 1) {
           WorldMap.cleanSelect.bind($('countries'))();
        }
		
		for (var key in optionsData) {
            var optionSelect = document.createElement('option');
			if (optionsData[key]['partners']>0) {
				
				if (optionsData[key]['name'] == 'Moldova, Republic of') optionsData[key]['name'] = 'Moldova';
				if (optionsData[key]['name'] == 'Man, Isle of') optionsData[key]['name'] = 'Man (Isle of)';
				
            optionSelect.text  = optionsData[key]['name']+' ('+optionsData[key]['partners']+')';
												}
			else {optionSelect.text  = optionsData[key]['name'];}
			
            optionSelect.value = optionsData[key]['name'];
									
            try {
              countriesSelect.add(optionSelect, null); // standards compliant; doesn't work in IE
            }
            catch(ex) {
              countriesSelect.add(optionSelect); // IE only
            }
			if (optionsData[key]['name']==rcountry) { countriesSelect.value = rcountry; }
        }
    },
	
	showData_continent: function (type, optionsData) {
		var continentsSelect = $('continents');

		for (index = 0; index < continentsSelect.length; index++)
		{ if (continentsSelect[index].value == optionsData)
		  continentsSelect.selectedIndex = index;
		}  
       
    },
	
    //clear all select options excepting the first one
    cleanSelect: function () {
        var options = $ES('option', this.id);
        for (var i=1; i<options.length; i++) {
            this.removeChild(options[i]);
        }
    },
	
	getPartners: function (type, country) {
		value = country;
		
		if (value == 'Moldova') value = 'Moldova, Republic of';
		if (value == 'Man (Isle of)') value = 'Man, Isle of';
		
		var jSonRequest = new Json.Remote("get_data.php", {
             onComplete: function(pdata){
					WorldMap.showPartners(type, pdata, country);
                }
            }).send({'type': type, 'country': value});	
	},
	
	showPartners: function (type, pdata, country) {
		$('viewpartners').empty()
		
		if (country) {
				
		var head = document.createElement('div');
		$(head).setStyle('display','block');
		$(head).addClass('kb-version-title');
		$('viewpartners').appendChild(head);
		
		var left = document.createElement('div');
		$(left).addClass('left');
		$(head).appendChild(left);
		
		var cent = document.createElement('div');
		$(cent).setStyle('display','block');
		$(cent).addClass('mid striked-title');
		$(head).appendChild(cent);
		
		if (pdata.length<1) {
		//$(cent).innerHTML = 'No Axigen Partners in the selected country';
		$(head).setStyle('display','none');
		
		var pBox = document.createElement('div');
		$(pBox).setStyle('display','block');

		$('viewpartners').appendChild(pBox);
		$(pBox).innerHTML = '<div>	\
								<a href=\"/partners/\" title=\"Become a Partner\"><img src=\"/img/partner-seek-banner.jpg\" title=\"Build a secure business with a powerful mail server!\" alt=\"We are actively seeking Integrators & VAR Resellers\" style=\"float:right;margin-top:10px\"></a>	\
								<br/>	\
								<b>Gecad Technologies</b>	\
								<br/><br/>	\
								Tel: +40-21-303-2080	\
								<br/>	\
								Fax: +40-21-303-2081	\
								<br/>	\
								<a href=\"http://www.axigen.com\" class=\"blue-dots\" title=\"Axigen Homepage\">www.axigen.com</a>	\
							</div>';
		
		} else {
		$(cent).innerHTML = 'Axigen Partners in ' + country;
		}
		
		var right = document.createElement('div');
		$(right).addClass('right');
		$(head).appendChild(right);
		
		}
		
		if (pdata.length>0) {
			for (i=0; i<pdata.length; i++) {
				WorldMap.showPartner(pdata[i]);
			}
		}
				
	},
	
	showPartner: function (data) {
		var divElem = document.createElement('div');
		$(divElem).addClass('display_partner');
		$('viewpartners').appendChild(divElem);
		
		var imgElem = document.createElement('div');
		$(imgElem).addClass('display_logo_partner');
		$(divElem).appendChild(imgElem);
		
		if (data['logo'] && data['status']==2) {
			var img = document.createElement('img');
			$(img).src = data['logo'];
			$(img).setStyle('float','right');
			$(img).setStyle('margin-bottom','15px');
			$(imgElem).appendChild(img);
		} else 
			if (data['logo'] && data['status']==3 && data['website']) {

			var alink = document.createElement('a');
			$(alink).href = data['website'];
			$(alink).title = data['company'];
			$(alink).target = '_blank';
			$(imgElem).appendChild(alink);
			
			var img = document.createElement('img');
			$(img).src = data['logo'];
			$(img).setStyle('float','right');
			$(img).setStyle('margin-bottom','15px');
			$(alink).appendChild(img);
					
			}
			
		$(divElem).innerHTML += '<b>'+data['company']+'</b>';
		$(divElem).innerHTML += '<br>';
		
		if (data['ace']==1) { 
			var ace = document.createElement('img');
			$(ace).src = '/img/axigen-certified-partner.png';
			$(ace).setStyle('padding-top','5px');
			$(ace).setStyle('padding-bottom','5px');		
			$(divElem).appendChild(ace);
		}
		
		$(divElem).innerHTML += '<br>';
		
		if (data['phone']) {
		$(divElem).innerHTML += 'Tel: '+data['phone'];
		$(divElem).innerHTML += '<br>';
		}
		
		if (data['fax']) {
		$(divElem).innerHTML += 'Fax: '+data['fax'];
		$(divElem).innerHTML += '<br>';
		}

		if ((data['status']==3)&&(data['website'])&&(data['link_name'])) {
		$(divElem).innerHTML += '<a href="'+data['website']+'" target="blank" title="'+data['company']+'" class="blue-dots">'+data['link_name']+'<img style="margin: 0pt 3px;" alt="External link" src="/img/general/external-link-blue.gif"/></a>';
		$(divElem).innerHTML += '<br>';
		}

		$(divElem).innerHTML += data['city'];
		
		var separator = document.createElement('div');
		$(separator).addClass('bottomBorder');
		$('viewpartners').appendChild(separator);		
	}
}
	
//window.addEvent( 'domready', WorldMap.init );
window.addEvent( 'load', WorldMap.init );
