
	try {
	
		// Load the language API from Google..
		google.load("language", "1");
	
		var num_trans = 0;
	
		var load_el = $('translation_status');
	
		var mylasttrans = false;
		var mylastfrom = false;
		var mylastto = false;
		var toLang = false;
		
		// Namespaced refernce obj for the survey form.
		var survey=new Object();
		survey.completed = false;
		survey.text = false;
	
		// Namespace our methods.
		var translate=new Object();
		
		// internal reference
		translate.ready=false;
		// Hold all current requests.
		translate.queried=new Array();
	
		translate.lastpair = false;
		translate.from = false;
		translate.to = false;
	
	
		var logRequest = new Request({
			method: 'get', 
			url: 'http://www.northyorksfire.gov.uk',
			onComplete:function(response) {
																						
			}
		});
		
		
		var surveyRequest = new Request({
			method: 'get', 
			url: 'http://www.northyorksfire.gov.uk',
			onComplete:function(response) {
																										
			}
		});
	
	
		window.addEvent('domready', function() {
		
			var Sexy = new SexyAlertBox();
		
			var main_content = $('contenttable2');
			if(main_content) {
				var main_paras = main_content.getElements('p, span, li, b, font, h1, h3');
				if(main_paras && main_paras.length) {
					main_paras.each(function(el, ind) {
						if(!el.hasClass('to_translate')) {
							if(el.get('html').trim() !== '') {
								el.addClass('to_translate');
							}
						}
					});
				}
			}
		
		
	
			// This requests the translation.		
			translate.run=function(text,toLang,onTranslated, targ) {
		        if(this.ready) {
		            google.language.translate(
		                text,
		                "",
		                toLang,
		                function(result){
		                    if (result){
		                    	onTranslated(result,result, targ);
		                    }
		                }
		            );
		        } else {
		        	return false;
		        }
			};
			
			// This runs the query, or pushes the request on to the stack.
			translate.query=function(text, toLang, onTranslated, targ){
		        if(this.ready){
		        	this.run(text,toLang,onTranslated, targ);
		        } else {
		        	this.queried.push(new Array(text,toLang,onTranslated,targ));
		        }
			};
			
			// This is used to translate the page automatically.
			translate.processQuery=function() {
		        if(this.ready){
		            var cur;
		            while(this.queried.length>0){
		                cur=this.queried.shift();
		                this.run(cur[0],cur[1],cur[2],cur[3]);
		            }
		            this.queried=new Array();
		            return true;
		        } else {
		        	return false;
		        }
			}; 
								
			
			// This is called when the translation API is ready.
			function translateInit() {
		        translate.ready=true;
		        translate.processQuery();
			}
						
			// Set the load callback.
			google.setOnLoadCallback(translateInit); 
		
		
			function doLog(message) {
			
				if(Browser.Engine.gecko) {
					// console.log(message);
				} else {
					// $('app_console').set('html', $('app_console').get('html') + ' - ' + message);
				}
			
			}
		
		
			// The user has their translation - we want to find out if they think the service is helpful.
			// We only want to show this once.
			function presentPanel() {
				var done_survey = (Cookie.read('survey_complete') || survey.completed);	
				if(!done_survey) {
					Sexy.prompt('', '' , { onComplete: function(returnvalue) { return false; } });
				}
			}
		
		
			// Simple function to show/hide a status element.
			function showTranslationLoading(hide) {
				var new_style = 'block';
				if(hide) { new_style = 'none'; }
				
				var load_el = $('translation_status');
				if(load_el) {
					load_el.setStyle('display', new_style);
				}
			}
			
			
			function getLanguagePair(tr) {
				if(!tr) { return []; }
				var tr2 = tr.split('langpair=');
				if(tr2[1]) {
					var tr3 = tr2[1].split('|');
					if(tr3) {
						if(tr3[0] && tr3[1]) {
							return new Array(tr3[0],tr3[1]);
						}
					}
				}
				return [];
			}
		
		
			// This will gather up the 'chopped' text and pass it to our translate object in packets.
			function translatePage(toLang,pair){
			
				// The selectors here correspond to DOM elements in the page,
				var translate_elements = $$(".to_translate");
				
				translate.elements = translate_elements;
				var num_trans = translate.elements.length - 1;
				
				translate_elements.each(function(tel, tind) {
					tel.store('my_index', tind);
				});
			
				if(!toLang || toLang == '' || num_trans == 0) { return false; }
			    if(translate.elements && translate.elements.length) {
					
					var murl = $('cur_page').get('value');
	
					showTranslationLoading();								
	
					if(pair && pair !=='') {
						
						var lpair = getLanguagePair(pair);
						var from = lpair[0];
	
						translate.lastpair = pair;
						translate.to = toLang;
						translate.from = from;
	
						Cookie.write('last_translation', pair, {path: '/'});
						Cookie.write('last_from', from, {path: '/'});
						Cookie.write('last_to', toLang, {path: '/'});
					}
			    
			    	
			    	translate.elements.each(function(el, ind) {					    		
			    								    		
			    		var tt = el.get('html', false);
			    		var ti = el.get('id');					    							    		
			    		
			    		if(tt && tt !=='') {
			    		
			     			translate.query(tt, toLang, function(t,r,targ) { 
						
								var targ_index = targ.retrieve('my_index');
								var remain = (num_trans - targ_index);
								var percent_done = Math.ceil((targ_index * 100) / num_trans);
								
						    	// $('app_console').set('html', '(' + remain + '/' + num_trans + ') ' + percent_done + '%');
						    	$('app_console').set('html', '(' + percent_done + '%) ');	
						    		
								try {
				    				if(t.translation) {
				    					if(targ) { $(targ).set('html', t.translation); }
				    				} else {
				    					if(t.error) {
				    						showTranslationLoading(true);
				    						$('app_console').set('html', t.error);
				    					}
				    				}
			    				} catch(e) {
			    					doLog(e);
			    				}
			    								    				
			    				if((num_trans - targ_index) == 0) {					    				
			    					showTranslationLoading(true);
			    					presentPanel();
			    				}
			    			}, el);
			    		}						    		
			    	});
			    } 
			    
			    if(pair) {
			    	logRequest.send('ltr=1&' + pair, {url: 'http://www.northyorksfire.gov.uk' + murl });
			    }
				return false;
			
			} 
				
	
			// Attach the event to the select menu.					
			var t_holder = $('translate_holder');
			if(t_holder) {
				var t_select = $('lang_select');
				if(t_select) {
					var attachEvs = function() {
						t_select.addEvent('change', function() {
						
							// The user has chosen a translation.
							var tr = this.get('value');																								var lpair = getLanguagePair(tr);
							var to = lpair[1];
							
							if(to && tr) {
								// Translate the page elements					
								translatePage(to,tr);		
															
							}
						});	
					}	
					attachEvs();
				}			
			}						
	
			// If the user was already in translation mode...
			mylasttrans = Cookie.read('last_translation');
			mylastfrom = Cookie.read('last_from');
			mylastto = Cookie.read('last_to');
	
			mylastto = (typeof mylastto !=='undefined' && mylastto && mylastto !=='' && mylastto.length == 2) ? mylastto : false;
			if($chk(mylastto) && mylastto !== '' && mylastto.length > 1) {
				survey.completed = true;
				if(mylastto !== 'en') {
					translatePage(mylastto, mylasttrans);						
				}					
			}
	
		});
		
	
	} catch(e) {
		alert(e);
	}