webcams = {};
webcams.list = [];
webcams.mode = 'live';
webcams.current = -1;

webcams.load = function(lat, lng, radius) {
	webcams.mylat = parseFloat(lat);
	webcams.mylng = parseFloat(lng);

	var url = 'http://api.webcams.travel/rest'

	var p = 'method=wct.webcams.list_nearby';
	p = p + '&devid=0e667f1c9165dcac50fb637979df1678';
	p = p + '&lat=' + encodeURIComponent(lat);
	p = p + '&lng=' + encodeURIComponent(lng);
	p = p + '&radius=' + encodeURIComponent(radius);
	p = p + '&unit=km';
	p = p + '&per_page=30';
	p = p + '&format=json';
	p = p + '&callback=webcams.store';

	var script = document.createElement('script');
	script.setAttribute('src', url + '?' + p);
	script.setAttribute('type', 'text/javascript');
	document.documentElement.firstChild.appendChild(script);
}

webcams.store = function(response) {
	var webcams = response.webcams.webcam;

	for(var i = 0; i < webcams.length; i++)
		this.list.push(webcams[i]);

	if(this.list.length == 0)
		return;

	display('webcams-unavailable', 'none');
	display('webcams-available', '');

	this.next();
}

webcams.display = function() {
	if(this.current >= this.list.length - 1) {
		this.current = this.list.length - 1;
		this.disable('next');
	}
	else
		this.enable('next');

	if(this.current <= 0) {
		this.current = 0;
		this.disable('previous');
	}
	else
		this.enable('previous');

	var webcam = this.list[this.current];

	// Calculating the distance
	webcam.distance = Math.round(this.distance(this.mylat, this.mylng, webcam.latitude, webcam.longitude) * 10) / 10.0;

	// Display Loading Throbber.......................
	var loadingTimeout = setTimeout(function(){
		show('webcams-loading')}, 500
	);
	var loadingImage = new Image();
	loadingImage.onload = function() {
		hide('webcams-loading');
		clearTimeout(loadingTimeout);
	};

	switch(this.mode) {
		case 'live':
			loadingImage.src = 'http://images.webcams.travel/webcam/' + webcam.webcamid + '.jpg';
			break;
			
		case 'daylight':
			loadingImage.src = 'http://archive.webcams.travel/daylight/webcam/' + webcam.webcamid + '.jpg';
			break;
		
		default:
			break;
	}
	// Display Loading Throbber......................./

	$('webcams-image-link').href = webcam.url;
	$('webcams-image-link').title = 'Mehr Infos zur Webcam ' + webcam.title;
	$('webcams-image').src = loadingImage.src;
	$('webcams-image').alt = 'Webcam ' + webcam.title;

	var now = new Date();
	var timestamp = new Date(webcam.last_update * 1000);
	var difference = (now - timestamp) / 1000;

	var hours = Math.floor(difference / (60 * 60));
	var minutes = Math.floor((difference - (hours * 60 * 60)) / 60);
	var seconds = Math.floor(difference - (hours * 60 * 60) - (minutes * 60));
	var age = 'vor ';

	if(hours > 0) {
		age += hours + ' Stunde';
		if(hours > 1)
			age += 'n';
	}
	else if(minutes > 0) {
		age += minutes + ' Minute';
		if(minutes > 1)
			age += 'n';
	}
	else {
		age += seconds + ' Sekunde';
		if(seconds > 1)
			age += 'n';
	}
	
	setText('webcams-info-city', webcam.city + ', ' + webcam.country);
	setText('webcams-last-update', age);

	$('webcams-info-link').href = webcam.url;
	$('webcams-info-link').title = 'Mehr Infos zur Webcam ' + webcam.title;

	setText('webcams-info-count', 'Webcam ' + (this.current + 1) + ' von ' + this.list.length);
	setText('webcams-info-distance', webcam.distance + 'km');
	setText('webcams-count', this.list.length.toString());

	if(GLOBAL['IE'])
		show('webcams');
	else
		animate.show('webcams');

	return;
}

webcams.next = function() {
	this.current++;

	this.display();
}

webcams.previous = function() {
	this.current--;

	this.display();
}

webcams.switchToDaylight = function() {
	hide('webcams-live-mode');
	show('webcam-daylight-mode');
	hide('webcams-last-update');
	
	this.mode = 'daylight';
	this.display();
}
webcams.switchToLive = function() {
	show('webcams-live-mode');
	hide('webcam-daylight-mode');
	show('webcams-last-update');
	
	this.mode = 'live';
	this.display();
}

webcams.disable = function(direction) {
	display('webcams-' + direction + '-enabled', 'none');
	display('webcams-' + direction + '-disabled', '');
}

webcams.enable = function(direction) {
	display('webcams-' + direction + '-disabled', 'none');
	display('webcams-' + direction + '-enabled', '');
}

webcams.distance = function(src_lat, src_lng, dst_lat, dst_lng) {
	var d_lat = Math.abs(src_lat - dst_lat) * 111.12;
	var d_lng = Math.abs(src_lng - dst_lng) * 111.12 * Math.cos((dst_lat * Math.PI / 180.0));

	return Math.sqrt(d_lat * d_lat + d_lng * d_lng);
}