/**
 * Search with autocomplete
*/
jQuery.fn.autocomplete = function() {
	var input = jQuery("#search-weather");
	var listWrapper = jQuery("#searchlist");
	var list = jQuery("#searchlist ol");
	
	var listSize = 0;
	var listSelectedItem = -1;
	var targetURL;
	
	var autocomplete_pause = 200;
	var autocomplete_timeout;
	var typing_timer = 0;
	
	var search_symbol;
	
	var counter = 0;
	
	var typewatch = (function(){
		return function(callback, ms){
			clearTimeout(typing_timer);
			typing_timer = setTimeout(callback, ms);
		}  
	})();
	
	if(input.focus()){
		input.keydown(function(e){
			window.clearTimeout(autocomplete_timeout);
			
			if(e.which == 27){
				clearList();
				input.blur();
			}else if(e.which == 40 || e.which == 38 || e.which == 9){
				//window.clearTimeout(typing_timer);
				
				if(search_symbol) search_symbol.abort();
				
				switch(e.which){
		            		case 40:
		            		case 9:
					listSelectedItem = listSelectedItem >= listSize - 1 ? 0 : listSelectedItem + 1; break;
		            		case 38:
					listSelectedItem = listSelectedItem <= 0 ? listSize - 1 : listSelectedItem - 1; break;
		            		default: break;
		          	}

				selectItem(listSelectedItem);
			}else if(e.which == 37 || e.which == 39 || e.which == 16){
				return false;
			}else if(e.which == 13){
				//window.clearTimeout(typing_timer);
				
				if(search_symbol) search_symbol.abort();
				
				if(listSelectedItem != "-1"){
					targetURL = jQuery("#searchlist ol li:eq(" + listSelectedItem + ") a").attr("href");
					location.href = targetURL;
					return false;
				}else{
					return false;
				}
		        }else{
				//window.clearTimeout(typing_timer);
				
				if(search_symbol) search_symbol.abort();
				autocomplete_timeout = window.setTimeout(function(){autocompleteData(input.val());},autocomplete_pause);
			}
		});	
	}
	
	function selectItem(item){
		jQuery("#searchlist ol li").removeClass("active").eq(item).addClass("active").text();
		jQuery("#searchlist ol li:eq(" + item + ")").focus();
		/*
		typewatch(function () {
			symbols();
		}, 1500);
		*/
	}
	
	function clearList(){
		window.clearTimeout(autocomplete_timeout);
		window.clearTimeout(autocomplete_pause);
		//window.clearTimeout(typing_timer);
		
		if(search_symbol) search_symbol.abort();
		
		listSelectedItem = -1;
		
		listWrapper.removeClass("open");
		listWrapper.fadeOut(500);
		list.html(" ");
	}
	
	function autocompleteData(strText){
		counter = parseInt(counter + 1);
		window.clearTimeout(autocomplete_timeout);
		window.clearTimeout(autocomplete_pause);
		
		listSelectedItem = -1;
		
		var items = jQuery("#searchlist ol li");
		var latitude;
		var longitude;
		var html = '';
		
		if (strText.length >= 2){
            items.each(function(index) {
                if(!(jQuery('span', this).text().toLowerCase().indexOf(strText.toLowerCase()) == 0 || jQuery('span', this).text().toLowerCase().indexOf(" "+strText.toLowerCase()) > -1))
                    jQuery(this).remove();
              });
            if(items.size() > 0) {
                listSelectedItem = 0;
            }
            else {
                listSelectedItem = -1;
                listWrapper.fadeIn(500);
                list.html("<li><span><i>&nbsp;Vänta...</i></span></li>");
                listWrapper.addClass("open");
            }
            selectItem(listSelectedItem);


			jQuery.ajax({
				url: jQuery.autocompleteurl + "?q=" + Url.encode(strText.toLowerCase()) + "&counter=" + counter,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: 5000,
				type: "GET",
				success: function(data) {
					if(data.total_hits == 0){
						//clearList();
						window.clearTimeout(autocomplete_timeout);
						
						window.clearTimeout(autocomplete_pause);
						
						listSelectedItem = -1;
						
						listWrapper.fadeIn(500);
						list.html("<li><span><i>&nbsp;Ingen träff på din sökning</i></span></li>");
						listWrapper.addClass("open");
					}else{
						listWrapper.fadeIn(500);
						list.html(" ");
						for (var i=0, il=data.search_results.length; i<il; i++){
							var listItem = new ListItem(data.search_results[i]);
							list.append(listItem);
						}
						listSize = data.search_results.length;
						listWrapper.addClass("open");
                        listSelectedItem = 0;
                        selectItem(listSelectedItem);
					}
				},
				error: function() {
					return false;
				}
			});			
		}else{
			clearList();
		}

		var ListItem = function(data) {
			var $element = this.$element = jQuery('<li />');
			
			var country = data.country;
			var city = data.city;
			var geonameid = data.geonameid;
			var municipality = data.municipality;
			var latitude = data.latitude;
			var longitude = data.longitude;

			var html = '';
			
			var country_municipality = checkCountry(municipality,country);
						
			html += '<a href="/vader/' + country + '/' + city + '/' + geonameid + '">';
			html += '<span>';
			html += city;
			html += '</span>';
			html += '&nbsp;';
			html += '<i>';
			html += country_municipality;
			html += '</i>';
			html += '</a>';			
			html += '<input type="hidden" class="lat" value="' + latitude +'" />';
			html += '<input type="hidden" class="long" value="' + longitude +'" />';

			$element.append(html);

			return $element;
		};
	}
	
	function checkCountry(municipality,country){
		if(country == "Sverige"){
			return municipality;
		}else{
			return country;
		}
	}
	
	function symbols(){
		var items = jQuery("#searchlist ol li");
		var length = items.length;
		var latitude;
		var longitude;
		
		for (var i=0, il=items.length; i<il; i++){
			latitude = jQuery("#searchlist ol li:eq(" + i + ") input.lat").val();
			longitude = jQuery("#searchlist ol li:eq(" + i + ") input.long").val();
			
			search_symbol = jQuery.ajax({
				url: jQuery.data_url + "forecast?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: 5000,
				async: false,
				success: function(data) {
					if(data.status == "ok"){
						jQuery("#searchlist ol li:eq(" + i + ") .symbol").attr("src","/images/weather-app/symboler/27x28px/" + data.data[0][1] + "/" + data.data[0][2] +".png");
					}
				},
				error: function() {
					return false;
				}			
			});
		}
	}
};


/**
 * Startpage
*/
jQuery.fn.startPage = function(timeout,data) {
	var strData = data;
	var intTimeout = timeout;

	if(jQuery(".startpage").length > 0){
		/*
		var arr=new Array();
		arr[0]=new Array(59.3262718787258,18.072509765625,"Stockholm");
		arr[1]=new Array(57.7166667,11.9666667,"Göteborg");
		arr[2]=new Array(55.6,13.0,"Malmö");
		arr[3]=new Array(63.8333333,20.25,"Umeå");
		
		var array = eval("arr");
		
		var j = -1;
		var element;
		var validFrom = jQuery("i#valid_from");
		var validTo = jQuery("i#valid_to");
		

		for (var i=0, il=array.length; i<il; i++){
			jQuery.ajax({
				url: jQuery.data_url + "" + strData + "?lat=" + array[i][0] + "&long=" + array[i][1],
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						j = parseInt(j + 1);

						element = jQuery("#weather-data-items a:eq("+j+")");

						var html = '';

						html += '<span class="item">';
						html += '<span class="icon">';
						html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" class="icon" />';
						html += '<span>' + array[j][2] + '</span>';
						html += '</span>';
						html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
						html += '</span>';

						element.html(html);
						
						validFrom.html(data.issuedate.substr(11,5));
						validTo.html(data.nextupdate.substr(11,5));
					}
				},
				error: function() {
					return false;
				}			
			});
		}
		*/	
		
		var arr=new Array();
		arr[0]=new Array(59.3262718787258,18.072509765625,"Stockholm","/vader/Sverige/Stockholm/2673730","Sverige");
		arr[1]=new Array(57.7166667,11.9666667,"Göteborg","/vader/Sverige/Göteborg/2711537","Sverige");
		arr[2]=new Array(55.6,13.0,"Malmö","/vader/Sverige/Malm%C3%B6/2692969","Sverige");
		arr[3]=new Array(63.8333333,20.25,"Umeå","/vader/Sverige/Umeå/602150","Sverige");
        if(jQuery.cookie('fave')) {
            for(i=0;i<jQuery.cookie('fave').cities.length;i++) {
            city = jQuery.cookie('fave').cities[i];
            arr[i] = new Array(city.latitude, city.longitude, city.name, encodeURI("/vader/"+city.country+"/"+city.name+"/"+city.geoid), city.country);
            }
        }

		var array = eval("arr");		
		var html;
		var name;
		var link;
		var degree;
		var day_night;
		var symbol;
		var validFrom = jQuery("i#valid_from");
		var validTo = jQuery("i#valid_to");
		
		jQuery.each(arr, function(i, val) {
			jQuery.ajax({
				url: jQuery.data_url + "" + forecastType(val[4]) + "?lat=" + val[0] + "&long=" + val[1],
				dataType: "json",
				cache: true,
				queue: true,
				timeout: 5000,
				success: function(data) {
					if(data.status == "ok"){
						element = jQuery("#weather-data-items span.wrapper:eq("+i+")");
						
						name = val[2];
						link = val[3];
						degree = data.data[0][3];
						day_night = data.data[0][1];
						symbol = data.data[0][2];

						html = '';
						
						html += '<span class="item"><span class="icon"><a href="' + link + '"><img src="/images/weather-app/symboler/130x134px/'+day_night+'/' + symbol + '.png" width="130" height="134" alt="" /><span>' + name + '</span></a></span><span class="number"><a href="' + link + '">' + jQuery.fn.degree(degree) +'&deg;</a></span></span>';
						
						jQuery(element).html(html);
						
						validFrom.html(data.issuedate.substr(11,5));
						validTo.html(data.nextupdate.substr(11,5));
					}
				},
				error: function() {
					return false;
				}			
			});
		});
		
	}
    	function forecastType(country){
		if(country == "Sverige" || country=="Norge" || country=="Danmark" || country=="Finland"){
			return "observation";
		}else{
			return "forecast";
		}
	}
};

/**
 * Current Conditions
*/
jQuery.fn.currentConditions = function(timeout,observation,forecast) {

	var intTimeout = timeout;
	var strObservation = observation;
	var strForecast = forecast;

	return this.each( function(){
		
		var latitude = jQuery("#latitude").val();
		var longitude = jQuery("#longitude").val();
        var geoid = jQuery("#geoid").val();
        var name = jQuery("#name").val();
        var country = jQuery("#country").val();
		
		if(jQuery("div.locality-now").length > 0 && latitude.length > 0 && longitude.length){
			var current_slide = 1;
			var max_slide = null;
			var input = jQuery("#search-weather");
			observation();
		}

        jQuery(function(){
            jQuery("#weather-app-header a.addFP").click(function(){
                if(jQuery.cookie('fave')) {
                    citiesJSON = jQuery.cookie('fave');
                    if(findCity(geoid)>=0) {
                        citiesJSON.cities.splice(findCity(geoid),1);
                    } else {
                        if(citiesJSON.cities.length >= 4) {
                            alert("Du har redan valt fyra orter. "+name+" ersätter " + citiesJSON.cities[0].name);
                            citiesJSON.cities.shift();
                        }
                        citiesJSON.cities.push({name: name, geoid: geoid, country: country, latitude: latitude, longitude: longitude});
                    }
                } else {
                    citiesJSON = {cities: [
                        {name: name, geoid: geoid, country: country, latitude: latitude, longitude: longitude}
                    ]
                    };
                }
                var cookie = jQuery.setCookie('fave', citiesJSON, {
        expires: 3653 // in days
    });
                isFavorite();
                return false;
            });
        });

        
		function observation(){
			var element = jQuery("span#forecast-items");
			var validFrom = jQuery("i#valid_from");
			var validTo = jQuery("i#valid_to");
			
			jQuery.ajax({
				url: jQuery.data_url + "" + strObservation + "?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						var html = '';
						
						html += '<span class="item">';
						html += '<span class="icon">';
						html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
						html += '<span><br />Just nu</span>';
						html += '</span>';
						html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
						html += '</span>';
						html += '</span>';
						
						element.html(html);
						
						validFrom.html(data.issuedate.substr(11,5));
						validTo.html(data.nextupdate.substr(11,5));
					}
					forecast();
				},
				error: function() {
					forecast("error");
					return false;
				}							
			});			
		}
		
		function forecast(strStatus){
			var element = jQuery("span#forecast-items");
			var today = jQuery("input#today").val();
			var tomorrow = jQuery("input#tomorrow").val();
			var validFrom = jQuery("i#valid_from");
			var validTo = jQuery("i#valid_to");
			
			//alert(tomorrow)
			jQuery.ajax({
				url: jQuery.data_url + "" + strForecast + "?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						
						if(strStatus = "error"){
							validFrom.html(data.issuedate.substr(11,5));
							validTo.html(data.nextupdate.substr(11,5));	
						}
						for (var i=0, il=data.data.length; i<il; i++) {
							var remainder = (i + 1) % 4;
							
							date = hours(data.data[i][0]);
							
							if(date == today || date == tomorrow){
								
								if(remainder === 1){
									var html = '';

									html += '<span class="item">';
									html += '<span class="icon">';
									html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[i][1],"time") + '/' + jQuery.fn.symbol(data.data[i][2],"symbol") + '.png" width="130" height="134" alt="" />';
									html += '<span>' + jQuery.fn.date(data.data[i][0],"locality") + '</span>';
									html += '</span>';
									html += '<span class="number">' + jQuery.fn.degree(data.data[i][3]) +'&deg;</span>';
									html += '</span>';
									html += '</span>';

									jQuery(html).appendTo(element);	
								}	
							}							
						}						
					}
					suntime();
				},
				error: function() {
					suntime();
					return false;
				}			
			});
		}
		
		function hours(date){
			var year = date.substr(0,10);
			return year;
		}
		function suntime(){
			var element = jQuery("#weather-app-header div.sun");
			var element_sunrise = jQuery("i#sunrise");
			var element_sunset = jQuery("i#sunset");
			
			jQuery.ajax({
				url: jQuery.data_url + "sun_times?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						element_sunrise.html(data.data[0][1]);
						element_sunset.html(data.data[0][2]);
						element.css({display:"block"});						
					}
					warning();
				},
				error: function() {
					warning();
					return false;
				}			
			});
		}
		
		function warning(){
			var element = jQuery("#weather-app-header .warnings");
			var element_content = jQuery("#current-warnings span");
			
			jQuery.ajax({
				url: jQuery.data_url + "warning_data?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						element_content.html(data.data[0][7] + "<br />" + data.data[0][8]);
						element.removeClass("display-none");						
					}
					seaweather();
				},
				error: function() {
					seaweather();
					return false;
				}			
			});
			
			jQuery(function(){
				jQuery("#weather-app-header a.warnings").click(function(){
					jQuery("#current-warnings").removeClass("display-none");
					return false;
				});
				
				jQuery("#current-warnings a").click(function(){
					jQuery("#current-warnings").addClass("display-none");
					return false;
				});
			});	
		}
		
		function seaweather(){
			var element = jQuery("div#weather-app-body div.have-sea");
			
			jQuery.ajax({
				url: jQuery.data_url + "sea_weather?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						element.css({display:"block"});						
					}
                    isFavorite();
				},
				error: function() {
					return false;
				}			
			});
		}

        function findCity(cityid) {
            if(!jQuery.cookie('fave')) return -1;
            var cities = jQuery.cookie('fave').cities;
            for(i=0;i<cities.length;i++) {
                if(cities[i].geoid == geoid) return i;
            }
            return -1;
        }

		function isFavorite() {
            var geoid = jQuery("#geoid").val();
            var element = jQuery("#weather-app-header div.addToFP a");
            if(findCity(geoid)>=0)
                element.html("Ta bort "+name+" från startsida");
            else
                element.html("Välj "+name+" till startsidan");
        }

		function slide(e,key){
			var elm = jQuery("#weather-data-items");
			var numbers = parseInt(jQuery("#weather-data-items span.item").length);
			var left = jQuery("div.weather-app-scroll a.left");
			var right = jQuery("div.weather-app-scroll a.right");
			var slide;
			var inactivateElm;
			var max_slide;

			if(jQuery(e).hasClass("left") || key == "left"){
				inactivateElm = left;
			}else if(jQuery(e).hasClass("right") || key == "right"){
				inactivateElm = right;
			}
			
			if(jQuery(inactivateElm).hasClass("inactive")) return false;
			
			if(jQuery(e).hasClass("left") || key == "left"){
				slide = "+=720px";
				current_slide = parseInt(current_slide) - 1;
			}else if(jQuery(e).hasClass("right") || key == "right"){
				slide = "-=720px";
				current_slide = parseInt(current_slide) + 1;
			}
			
			max_slide = parseInt(jQuery.fn.slideViews(numbers));
			
			
			jQuery(inactivateElm).addClass("inactive");
			
			elm.animate({
				left: slide
			}, 500, function() {
				if(current_slide > 1) left.removeClass("inactive");
				if(current_slide == 1) left.addClass("inactive");			
				if(current_slide < max_slide) right.removeClass("inactive");
			});
		}
		
		if(input.blur()){
			jQuery(document).keydown(function(e){
				if(e.which == 37){
					slide(this,"left");
				}else if(e.which == 39 || e.which == 16){
					slide(this,"right");
				}
			});
		}
		
		jQuery(function(){
			jQuery("a.scroll").live("click", function() {
				slide(this);
				return false;
			});
		});
	});
};

/**
 * Ten day forecast
*/
jQuery.fn.tenDayForecast = function(timeout,observation,forecast) {
	var intTimeout = timeout;
	var strObservation = observation;
	var strForecast = forecast;
	
	return this.each( function(){
		var latitude = jQuery("#latitude").val();
		var longitude = jQuery("#longitude").val();
		
		if(jQuery("div.locality-ten").length > 0 && latitude.length > 0 && longitude.length){
			observation();
		}
		
		function observation(){
			var element = jQuery("span#forecast-items");
			var validFrom = jQuery("i#valid_from");
			var validTo = jQuery("i#valid_to");
			
			jQuery.ajax({
				url: jQuery.data_url + "" + strObservation + "?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						var html = '';
						
						html += '<span class="item">';
						html += '<span class="icon">';
						html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
						html += '<span>Just nu</span>';
						html += '</span>';
						html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
						html += '</span>';
						html += '</span>';
						
						element.html(html);
						
						validFrom.html(data.issuedate.substr(11,5));
						validTo.html(data.nextupdate.substr(11,5));
					}
					forecast();
				},
				error: function() {
					forecast();
					return false;
				}							
			});			
		}
		
		function forecast(){
			var element = jQuery("span#forecast-items");
			var date;
			var last;
			var time;
			var dateString;
			var j = 0;
			
			jQuery.ajax({
				url: jQuery.data_url + "" + strForecast + "?lat=" + latitude + "&long=" + longitude,
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				success: function(data) {
					if(data.status == "ok"){
						last = parseInt(data.data.length - 1);
						
						if(data.data[last][0].substr(11,5) == "00:00" || data.data[last][0].substr(11,5) == "01:00" || data.data[last][0].substr(11,5) == "02:00" || data.data[last][0].substr(11,5) == "03:00"){
							lookForHour = data.data[parseInt(last-1)][0].substr(11,5);
						}else{
							lookForHour = data.data[last][0].substr(11,5);
						}
						
						
						$("#forecast-valid-from").html(lookForHour)
						
						for (var i=0, il=data.data.length; i<il; i++){
							time = data.data[i][0].substr(11,5);
							if(time == lookForHour){
								var html = '';
								
								j = j + 1;
								
								html += '<span class="item">';
								html += '<span class="icon">';
								html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[i][1],"time") + '/' + jQuery.fn.symbol(data.data[i][2],"symbol") + '.png" width="130" height="134" alt="" />';
								html += '<span>' + jQuery.fn.date(data.data[i][0],"locality-ten") + '</span>';
								html += '</span>';
								html += '<span class="number">' + jQuery.fn.degree(data.data[i][3]) +'&deg;</span>';
								html += '</span>';
								html += '</span>';

								jQuery(html).appendTo(element);	
							}		
						}
					}
				},
				error: function() {
					return false;
				}			
			});
		}


	});
};

/**
 * Touristpage 
*/
jQuery.fn.touristPage = function(timeout,data) {
	var intTimeout = timeout;
	var strData = data;
	
	if(jQuery("div.app-body-tourist-list").length > 0){
		/*var element;
		
		jQuery.ajax({
			url: jQuery.data_url + "" + strData + "?lat=51.5084152563931&long=-0.125532746315002",
			dataType: "json",
			cache: true,
			queue: false,
			timeout: intTimeout,
			success: function(data) {
				if(data.status == "ok"){
					element = jQuery("#weather-data-items a:eq(0)");
					var html = '';					
					html += '<span class="item">';
					html += '<span class="icon">';
					html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
					html += '<span>London</span>';
					html += '</span>';
					html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
					html += '</span>';
					element.html(html);
				}
				
				jQuery.ajax({
					url: jQuery.data_url + "" + strData + "?lat=40.4165020941502&long=-3.70256423950195",
					dataType: "json",
					cache: true,
					queue: false,
					timeout: intTimeout,
					success: function(data) {
						if(data.status == "ok"){
							element = jQuery("#weather-data-items a:eq(1)");
							var html = '';					
							html += '<span class="item">';
							html += '<span class="icon">';
							html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
							html += '<span>Madrid</span>';
							html += '</span>';
							html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
							html += '</span>';
							element.html(html);
						}
						
						jQuery.ajax({
							url: jQuery.data_url + "" + strData + "?lat=40.7142691&long=-74.0059729",
							dataType: "json",
							cache: true,
							queue: false,
							timeout: intTimeout,
							success: function(data) {
								if(data.status == "ok"){
									element = jQuery("#weather-data-items a:eq(2)");
									var html = '';					
									html += '<span class="item">';
									html += '<span class="icon">';
									html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
									html += '<span>New York</span>';
									html += '</span>';
									html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
									html += '</span>';
									element.html(html);
								}
								
								jQuery.ajax({
									url: jQuery.data_url + "" + strData + "?lat=30.05&long=31.25",
									dataType: "json",
									cache: true,
									queue: false,
									timeout: intTimeout,
									success: function(data) {
										if(data.status == "ok"){
											element = jQuery("#weather-data-items a:eq(3)");
											var html = '';					
											html += '<span class="item">';
											html += '<span class="icon">';
											html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
											html += '<span>Kairo</span>';
											html += '</span>';
											html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
											html += '</span>';
											element.html(html);
										}
										
										jQuery.ajax({
											url: jQuery.data_url + "" + strData + "?lat=37.9833333&long=23.7333333",
											dataType: "json",
											cache: true,
											queue: false,
											timeout: intTimeout,
											success: function(data) {
												if(data.status == "ok"){
													element = jQuery("#weather-data-items a:eq(4)");
													var html = '';					
													html += '<span class="item">';
													html += '<span class="icon">';
													html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
													html += '<span>Aten</span>';
													html += '</span>';
													html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
													html += '</span>';
													element.html(html);
												}
											},
											error: function() {
												return false;
											}			
										});
										
									},
									error: function() {
										return false;
									}			
								});
								
							},
							error: function() {
								return false;
							}			
						});
						
					},
					error: function() {
						return false;
					}			
				});
				
			},
			error: function() {
				return false;
			}			
		});
		*/
		
		/*
		var arr=new Array();

		arr[0]=new Array(51.5084152563931,-0.125532746315002,"London");
		arr[1]=new Array(40.4165020941502,-3.70256423950195,"Madrid");
		arr[2]=new Array(40.7142691,-74.0059729,"New York");
		arr[3]=new Array(30.05,31.25,"Kairo");
		arr[4]=new Array(37.9833333,23.7333333,"Aten");
		
		var array = eval("arr");
		
		var j = -1;
		var element;
		
		for (var i=0, il=array.length; i<il; i++){
			jQuery.ajax({
				url: jQuery.data_url + "" + strData + "?lat=" + array[i][0] + "&long=" + array[i][1],
				dataType: "json",
				cache: true,
				queue: false,
				timeout: intTimeout,
				async: false,
				success: function(data) {
					if(data.status == "ok"){
						j = parseInt(j + 1);
						element = jQuery("#weather-data-items a:eq("+j+")");
						
						var html = '';
						
						html += '<span class="item">';
						html += '<span class="icon">';
						html += '<img src="/images/weather-app/symboler/130x134px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="130" height="134" alt="" />';
						html += '<span>' + array[j][2] + '</span>';
						html += '</span>';
						html += '<span class="number">' + jQuery.fn.degree(data.data[0][3]) +'&deg;</span>';
						html += '</span>';
						
						element.html(html);
					}
				},
				error: function() {
					return false;
				}			
			});
		}
		*/
		
		var arr=new Array();

		arr[0]=new Array(51.5084152563931,-0.125532746315002,"London");
		arr[1]=new Array(40.4165020941502,-3.70256423950195,"Madrid");
		arr[2]=new Array(40.7142691,-74.0059729,"New York");
		arr[3]=new Array(30.05,31.25,"Kairo");
		arr[4]=new Array(37.9833333,23.7333333,"Aten");
		
		var array = eval("arr");		
		var html;
		var name;
		var degree;
		var day_night;
		var symbol;
		
		jQuery.each(arr, function(i, val) {
			jQuery.ajax({
				url: "/api_proxy/forecast?lat=" + val[0] + "&long=" + val[1],
				dataType: "json",
				cache: true,
				queue: true,
				timeout: 5000,
				success: function(data) {
					if(data.status == "ok"){
						element = jQuery("#weather-data-items a:eq("+i+")");
						
						name = val[2];
						degree = data.data[0][3];
						day_night = data.data[0][1];
						symbol = data.data[0][2];

						html = '';
						
						html += '<span class="item"><span class="icon"><img src="/images/weather-app/symboler/130x134px/'+day_night+'/' + symbol + '.png" width="130" height="134" alt="" /><span>' + name + '</span></span><span class="number">' + jQuery.fn.degree(degree) +'&deg;</span></span>';
						
						jQuery(element).html(html);
					}
				},
				error: function() {
					return false;
				}			
			});
		});
		
		

		jQuery(function(){
			jQuery(".app-body-tourist-list p.more").live("click", function() {
				jQuery(".app-body-tourist-list p.more").css({visibility:"hidden"});
				jQuery("#more-turistorter").fadeIn();
				jQuery.fn.touristWeather();
				return false;
			});
		});
	}
};

/**
 * Touristpage, item by item
*/
jQuery.fn.touristWeather = function(element,latitude,longitude){
	var latitude;
	var longitude;
	var elm;
	var degree;
	var day_night;
	var symbol;
	var html = '';
	
	var arr=new Array();
	arr[0]=new Array("europa-00","Alanya",36.552500000000000,32.002500000000000);
	arr[1]=new Array("europa-01","Barcelona",41.388786889071600,2.158985137939450);
	arr[2]=new Array("europa-02","Dublin",53.333055600000000,-6.248888900000000);
	arr[3]=new Array("europa-03","Köpenhamn",55.6833333,12.5833333);
	arr[4]=new Array("europa-04","Lissabon",38.716666700000000,-9.133333300000000);
	arr[5]=new Array("europa-05","Moskva",55.752222200000000,37.615555600000000);
	arr[6]=new Array("europa-06","Nice",43.703126104186000,7.266082763671880);
	arr[7]=new Array("europa-07","Split",43.5089077621721,16.439151763916);
	arr[8]=new Array("europa-08","Venedig",45.4386111,12.3266667);
	arr[9]=new Array("europa-09","Wien",48.2084877601653,16.3720750808716);
	arr[10]=new Array("america-00","Calgary",51.050112282000000,-114.085285152000000);
	arr[11]=new Array("america-01","Chicago",41.850033000000000,-87.650052300000000);
	arr[12]=new Array("america-02","Kingston",17.9970194353704,-76.7935752868652);
	arr[13]=new Array("america-03","Lima",-12.05,-77.05);
	arr[14]=new Array("america-04","Los Angeles",34.052234200000000,-118.243684900000000);
	arr[15]=new Array("america-05","Miami",25.774265800000000,-80.193658900000000);
	arr[16]=new Array("america-06","New Orleans",29.954648200000000,-90.075072000000000);
	arr[17]=new Array("america-07","San Francisco",37.774929500000000,-122.419415500000000);
	arr[18]=new Array("america-08","Buenos Aires",-34.576125631884800,-58.408813476562500);
	arr[19]=new Array("america-09","Rio de Janeiro",-22.902777780000000,-43.207500000000000);	
	arr[20]=new Array("asia-00","Bangkok",13.750000000000000,100.516666700000000);
	arr[21]=new Array("asia-01","Goa",15.501946141329600,73.910093307495100);
	arr[22]=new Array("asia-02","Hongkong",22.284013600962500,114.150073528290000);
	arr[23]=new Array("asia-03","Jakarta",-6.174444400000000,106.829444400000000);
	arr[24]=new Array("asia-04","Kuala Lumpur",3.166666700000000,101.700000000000000);
	arr[25]=new Array("asia-05","Phuket",7.883333300000000,98.400000000000000);
	arr[26]=new Array("asia-06","Singapore",1.293055600000000,103.855833300000000);
	arr[27]=new Array("asia-07","Sydney",-33.867849963938200,151.207323074341000);
	arr[28]=new Array("asia-08","Tel-Aviv",32.066666700000000,34.766666700000000);
	arr[29]=new Array("asia-09","Tokyo",35.689526593079900,139.691677093506000);
	arr[30]=new Array("africa-00","Banjul",13.456408409113300,-16.581287384033200);
	arr[31]=new Array("africa-01","Kairo",30.050000000000000,31.250000000000000);
	arr[32]=new Array("africa-02","Kapstaden",-33.916666700000000,18.416666700000000);
	arr[33]=new Array("africa-03","Marrakesch",31.630000000000000,-8.000000000000000);
	arr[34]=new Array("africa-04","Nairobi",-1.283333300000000,36.816666700000000);
	arr[35]=new Array("africa-05","Luanda",-8.838333300000000,13.234444400000000);
	arr[36]=new Array("africa-06","Praia",14.916666700000000,-23.516666700000000);
	arr[37]=new Array("africa-07","Tunis",36.802777800000000,10.179722200000000);
	arr[38]=new Array("africa-08","Victoria",48.432935738000000,-123.369299678000000);
	arr[39]=new Array("africa-09","Zansibar",-6.163936944377130,39.197931289672900);
	
	jQuery.each(arr, function(i, val) {
		jQuery.ajax({
			url: "/api_proxy/forecast?lat=" + val[2] + "&long=" + val[3],
			dataType: "json",
			cache: true,
			queue: true,
			timeout: 5000,
			success: function(data) {
				if(data.status == "ok"){
					degree = data.data[0][3];
					day_night = data.data[0][1];
					symbol = data.data[0][2];
										
					html = '';
				
					html += '<span>' + jQuery.fn.degree(degree) + '&deg;</span><img src="/images/weather-app/symboler/27x28px/'+day_night+'/' + symbol + '.png" width="27" height="28" alt="" />';
					
					jQuery("#" + val[0] + " span").html(html);
				}
			},
			error: function() {
				return false;
			}			
		});
	});
};

/**
 * Push area for tourist weather
*/
jQuery.fn.touristPush = function() {
	return this.each( function(){
		var arr=new Array();
		
		arr[0]=new Array(51.5084152563931,-0.125532746315002,"London");
		arr[1]=new Array(40.4165020941502,-3.70256423950195,"Madrid");
		arr[2]=new Array(40.7142691,-74.0059729,"New York");
		arr[3]=new Array(30.05,31.25,"Kairo");
		arr[4]=new Array(37.9833333,23.7333333,"Aten");

		var array = eval("arr");
		
		if(array.length < 0) return false;
		
		var randomnumber = Math.floor(Math.random()*5);
		
		jQuery.ajax({
			url: jQuery.data_url + "forecast?lat=" + array[randomnumber][0] + "&long=" + array[randomnumber][1],
			dataType: "json",
			queue: false,
			error: function() {
				return false;
			},
			success: function(data) {
				if(data.status == "ok"){
					jQuery(".header-tourist-weather h5").html(array[randomnumber][2] + " " + jQuery.fn.degree(data.data[0][3]) + "&ordm;");	
				}
			}
		});
	});
};

/**
 * Weather map
*/
jQuery.fn.weatherMap = function(data){
	if(jQuery("div#current-weather-map").length > 0){
		var arr=new Array();
		arr[0]=new Array(67.850000000000000,20.216666700000000);
		arr[1]=new Array(63.833333300000000,20.250000000000000);
		arr[2]=new Array(63.183333300000000,14.650000000000000);
		arr[3]=new Array(59.329468135986900,18.062639236450200);		
		arr[4]=new Array(57.633333300000000,18.300000000000000);
		arr[5]=new Array(55.600000000000000,13.000000000000000);
		arr[6]=new Array(57.716666700000000,11.966666700000000);
		
		var j = -1;
		var element;
		var array = eval("arr");
		
		for (var i=0, il=array.length; i<il; i++){
			for (var i=0, il=array.length; i<il; i++){
				jQuery.ajax({
					url: jQuery.data_url + "forecast?lat=" + array[i][0] + "&long=" + array[i][1],
					dataType: "json",
					cache: true,
					queue: false,
					timeout: 5000,
					success: function(data) {
						if(data.status == "ok"){
							j = parseInt(j + 1);
							element = jQuery("div#current-weather-map span:eq("+j+") a");
							
							var html = '';
							
							html += '<img src="/images/weather-app/symboler/27x28px/' + jQuery.fn.symbol(data.data[0][1],"time") + '/' + jQuery.fn.symbol(data.data[0][2],"symbol") + '.png" width="27" height="28" alt="" />';
							html += '<i>' + jQuery.fn.degree(data.data[0][3]) + '&deg;</i>';
							
							element.html(html);
						}
					},
					error: function() {
						return false;
					}			
				});
			}
		}
	}
}

/**
 * Seaweather from flash
*/
jQuery.fn.seaweather = function(latitude,longitude) {
	jQuery("#sea-data h3").html("Laddar data...");
	
	jQuery.ajax({
		url: jQuery.data_url + "sea_weather?lat=" + latitude + "&long=" + longitude,
		dataType: "json",
		cache: true,
		queue: false,
		timeout: 5000,
		error: function() {
			jQuery("#sea-data h3").html("Just nu finns ingen data för detta område");
			jQuery("#sea-data-list").html(" ");
			return false;
		},
		success: function(data) {
			if(data.status == "ok"){
				jQuery("#sea-data h3").html("Prognos för " + data.areaname);
				
				jQuery("#sea-data-list").html(" ");

				jQuery("#weather-forecast-valid").html("Prognosen utfärdad kl. " + data.issuedate.substr(11,5) + ". Nästa uppdatering: " + data.nextupdate.substr(11,5));

				for (var i=0, il=data.data.length; i<il; i++) {
					jsonhtml = '<li><span class="date">'+ jQuery.fn.date(data.data[i][0],"seaweather") +'</span><div><span class="risk">Risk för vind >10 m/s = '+ data.data[i][5] +'%</span><img src="/images/weather-app/symboler/27x28px/' + jQuery.fn.symbol(data.data[i][1],"time") + '/' + jQuery.fn.symbol(data.data[i][3],"symbol") + '.png" width="27" height="28" alt="" /><span class="temp">'+jQuery.fn.degree(data.data[i][2])+'&deg;</span><span class="wind">'+data.data[i][4]+'</span></div></li>';
					jQuery(jsonhtml).appendTo(jQuery("#sea-data-list"));
				}
				
				jQuery("div#sea-data").css({display:"block"});
			}else{
				jQuery("#sea-data h3").html("Just nu finns ingen data för detta område");
				jQuery("#sea-data-list").html(" ");
			}
		}
	});
};

/**
 * Seaweather from load
*/
jQuery.fn.sea_weather = function() {
	
	if(jQuery("ul#sea-data-list").length > 0){
		
		data(param("lat"),param("long"));
		
	}
	
	function param(param){
		param = param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+param+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( window.location.href );
		if( results == null )
		return "";
		else
		return results[1];
	}

	function data(longitude,latitude){
		jQuery("#sea-data h3").html("Laddar data...");
		
		jQuery.ajax({
			url: jQuery.data_url + "sea_weather?lat=" + longitude + "&long=" + latitude,
			dataType: "json",
			cache: true,
			queue: false,
			timeout: 5000,
			error: function() {
				jQuery("#sea-data h3").html("Just nu finns ingen data för detta område");
				jQuery("#sea-data-list").html(" ");
				return false;
			},
			success: function(data) {
				if(data.status == "ok"){
					jQuery("#sea-data h3").html("Prognos för " + data.areaname);
					
					jQuery("#sea-data-list").html(" ");			

					jQuery("#weather-forecast-valid").html("Prognosen utfärdad kl. " + data.issuedate.substr(11,5) + ". Nästa uppdatering: " + data.nextupdate.substr(11,5));

					for (var i=0, il=data.data.length; i<il; i++) {
						jsonhtml = '<li><span class="date">'+ jQuery.fn.date(data.data[i][0],"seaweather") +'</span><div><span class="risk">Risk för vind >'+data.data[i][5]+' m/s</span><img src="/images/weather-app/symboler/27x28px/' + jQuery.fn.symbol(data.data[i][1],"time") + '/' + jQuery.fn.symbol(data.data[i][3],"symbol") + '.png" width="27" height="28" alt="" /><span class="temp">'+jQuery.fn.degree(data.data[i][2])+'&deg;</span><span class="wind">'+data.data[i][4]+'</span></div></li>';
						jQuery(jsonhtml).appendTo(jQuery("#sea-data-list"));
					}
					
					jQuery("div#sea-data").css({display:"block"});
				}else{
					jQuery("#sea-data h3").html("Just nu finns ingen data för detta område");
					jQuery("#sea-data-list").html(" ");
				}
			}
		});
	}
};

/**
 * Warnings, called from flash
*/
jQuery.fn.warning = function(latitude,longitude){
	jQuery.ajax({
		url: jQuery.data_url + "warning_data?lat=" + latitude + "&long=" + longitude,
		dataType: "json",
		cache: true,
		queue: false,
		timeout: 5000,
		error: function() {
			jQuery("#warning-data h3").html("Varningar");
			jQuery("#warning-data p").html("Det finns inga varningar utfärdade för detta område");
			return false;
		},
		success: function(data) {
			if(data.status == "ok"){
				jQuery("#warning-data h3").html("Prognos för " + data.data[0][1]);

				jQuery("#warning-data p").html(data.data[0][7]);

				jQuery("div#warning-data").css({display:"block"});	
			}else{
				jQuery("#warning-data h3").html("Varningar");

				jQuery("#warning-data p").html("Det finns inga varningar utfärdade för detta område");

				jQuery("div#warning-data").css({display:"block"});
			}
		}
	});
};

/**
 * Random meteorolog
*/
jQuery.fn.meteorolog = function() {
	var country = jQuery("#country").val();
    var city = jQuery("#name").val();
	var arr=new Array();
	
	arr[0]=new Array("peter");
	arr[1]=new Array("tone");
	arr[2]=new Array("madeleine");
	arr[3]=new Array("anders");
	arr[4]=new Array("ulrika");
	
	var array = eval("arr");
	
	if(array.length < 0) return false;

	var randomnumber = Math.floor(Math.random()*5);

    if(city && country) {
        var seed = country ? country.charCodeAt(3)*1e4 : 0;
        for(i=0;i<city.length;i++)
            seed += i*city.charCodeAt(i);
        if(Math.floor(seed/10000) == 103) {randomnumber=1;}
        if(seed == 1141564) {randomnumber=seed/285391;}
        if(seed == 1092344) {randomnumber=seed%11;}
        if(seed == 1082233) {randomnumber=Math.floor(seed/5e5);}
    }


	jQuery("#meteorolog span.meteorolog").addClass("person-" + array[randomnumber][0]).css({display:"block"});
	
	jQuery(function(){
		jQuery("#meteorolog a").hover(function() {
			jQuery(this).addClass("hover");
		}, function() {
			jQuery(this).removeClass("hover");
		});
	});
};

/**
 * Validate degrees
*/
jQuery.fn.degree = function(data){
	if(data.substr(0,1) != "-"){
		return "+" + data;
	}else{
		return data;
	}
};

/**
 * Validate weather symbol
*/
jQuery.fn.symbol = function(data,type){
	if(type == "time"){
		if(isNaN(data)){
			return data;	
		}else{
			return "not_available";
		}
	}else if(type == "symbol"){
		if(data.length != 0) {
			return data;
		}else{
			return "not_available"; 
		}
	}
};

/**
 * Handle date/time
*/
jQuery.fn.date = function(date,app){
    weekdays = new Array("sön","mån","tis","ons","tors","fre","lör");
    months = new Array("januari","februari","mars","april","maj","juni","juli","augusti","september","oktober","november","december");
    d1 = new jQuery.fn.parseIsoDate(date);

    switch (app) {
        case "locality":
            return "<i>" + weekdays[d1.getDay()] + "dag " + d1.getDate() + " " + months[d1.getMonth()] +
                    "</i><br />" + formatTime(d1.getHours(), d1.getMinutes());
        break;
        case "locality-ten":
            return weekdays[d1.getDay()] + "dag " + d1.getDate() + "/" + (d1.getMonth()+1);
        break;
        case "seaweather":
            return d1.getDate() + " " + months[d1.getMonth()] + " " + formatTime(d1.getHours(), d1.getMinutes());
        break;
    }

    function formatTime(hour, minute) {
        return hour + ":" + (minute < 10 ? "0" : "") + minute;
    }
};

jQuery.fn.parseIsoDate = function(s){
    date = new Date();
    date.setFullYear(s.substring(0,4));
    date.setDate(s.substring(8,11));
    date.setMonth(parseInt(s.substring(5,7),10)-1);
    date.setHours(s.substring(11,13));
    date.setMinutes(s.substring(14,16));
    return date;
};

/**
 * Hide empty Ad's
*/
jQuery.fn.checkads = function(data){
	var adElm = jQuery(".ad");
	for (var i=0, il=adElm.length; i<il; i++){
		adItem = adElm[i];
		if(jQuery(adItem).children().has("embed").length > 0 || jQuery(adItem).children().has("iframe").length > 0 || jQuery(adItem).children().has("object").length > 0 || jQuery(adItem).children().has("img").length > 0) {
			jQuery(adItem).addClass("have-ad");
		}else{
			jQuery(adItem).addClass("display-none");
		}
	}
};

/**
 * Slide view counters
*/
jQuery.fn.slideViews = function(intItems){
    return aviews = 1 + ( intItems - 1 - ((intItems - 1) % 3) ) / 3;
};

/**
 * Init functions
*/
(function(jQuery){
	
	jQuery(function(){
		jQuery.data_url = "/api_proxy/";
		
		jQuery.autocompleteurl = "/api_proxy/search";
		
		jQuery("div.startpage").startPage(5000,"observation");
		
		jQuery("input#search-weather").autocomplete();
		
		jQuery("#search-weather").blur();
		
		jQuery("div.locality-now").currentConditions(5000,"observation","forecast");
		
		jQuery("div.locality-ten").tenDayForecast(5000,"observation","forecast");
		
		jQuery("div.app-body-tourist-list").touristPage(5000,"forecast");
		
		jQuery("ul#sea-data-list").sea_weather();
		
		jQuery("#header div.header-tourist-weather").touristPush();
		
		jQuery("div#current-weather-map").weatherMap();
		
		jQuery("div#meteorolog").meteorolog();
		
		//jQuery(".ad").checkads();

        jQuery("#searchlist").hide();
		
		jQuery(".open-in-new").click(function() {
			window.open(this.href);
			return false;
		});
		
		jQuery(document).click(function() {
			if(jQuery("#searchlist").hasClass("open")){
				jQuery("#searchlist").removeClass("open");
				jQuery("#searchlist").fadeOut(0);
				jQuery("#searchlist ol").html(" ");
				jQuery("#search-weather").blur();
			}
		});
	});
		
})(jQuery);

/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Url = {
 
	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},
 
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}
