// iSpringsCam.markwoodman.com
// Copyright (C)2010 Mark Woodman.  All use or duplication prohibited.

// globar vars
var map = null;
var infowindow = null;
var cams = new Object();
var filteredCams = new Object();

function Cam(latLng, id, name)
{
	this.latLng = latLng;
	this.id = id;
	this.name = name;
	this.names = name.split('/');
	this.listItemNode = null;
	this.imageNode = null;
	this.mapImageNode = null;
	this.marker = null;
}

Cam.prototype.getListItem = function()
{
	if(this.listItemNode==null)
	{
		var li = document.createElement('li');
		li.setAttribute('class','menu');
		var a = document.createElement('a');
		var href = 'camera.html?id=' + this.id + '&name=' + escape(this.name) + '&latLng=' + this.latLng;
		a.setAttribute('href',href);
		li.appendChild(a);
		var span = document.createElement('span');
		span.setAttribute('class','name');
		span.innerHTML = this.name;
		a.appendChild(span);
		var arrow = document.createElement('span');
		arrow.setAttribute('class','arrow');
		a.appendChild(arrow);
		this.listItemNode = li;
	}
	return this.listItemNode;
}

Cam.prototype.getImage = function()
{
	if(this.imageNode==null)
	{
		var img = new Image();
		img.setAttribute('border','0');
		img.setAttribute('title', this.name);
		img.setAttribute('alt', this.name);
		this.imageNode = img;
		refreshCamImage();
	}
	return this.imageNode;
}

function refreshCamImage(manual)
{
	var id = gup('id');
	if(id.length>0)
	{
		var cam = cams[id];
		if(cam)
		{
			cam.imageNode.style['visibility'] = 'hidden';
			var camUrl = 'http://www.springsgov.com/Trafficeng/bImage.ASP?camID=' + id + '&t=' + new Date().getTime();
			cam.imageNode.setAttribute('src', camUrl);
			cam.imageNode.onload = function()
			{
				cam.imageNode.style['visibility'] = 'visible';
				if(!manual)
				{
					setTimeout(refreshCamImage,1000 * 60);
				}
			}
		}
	}
}

Cam.prototype.getMapImage = function()
{
	if(this.mapImageNode==null)
	{
		var mapUrl = 'http://maps.google.com/maps/api/staticmap?center=' + this.latLng + '&zoom=14&size=480x190&maptype=roadmap&markers=color:blue|' + this.latLng + '&sensor=false';
		var img = new Image();
		img.setAttribute('border','0');
		img.setAttribute('title', this.name);
		img.setAttribute('width', '480');
		img.setAttribute('src', mapUrl);
		img.style['z-indez'] = 2;
		this.mapImageNode = img;
	}
	return this.mapImageNode;
}

Cam.prototype.showMarker = function()
{
	var cam = this;
	var latLng = cam.latLng.split(',');
	if(map)
	{
		var marker = new google.maps.Marker({
			position: new google.maps.LatLng(latLng[0],latLng[1]),
			map: map,
			title:cam.name
		});
		cam.marker = marker;


		if(infowindow==null)
		{
			infowindow = new google.maps.InfoWindow(
			{
			});
		}

		google.maps.event.addListener(marker, 'click',
		function() {
			infowindow.close();
			var imgDiv = document.createElement('div');
			var img = cam.getImage();
			img.setAttribute('width', '240');
			img.setAttribute('height', '180');
			imgDiv.appendChild(img);
			img.onclick = function()
			{
				infowindow.close();
				document.location = 'camera.html?id=' + cam.id + '&name=' + escape(cam.name) + '&latLng=' + cam.latLng;
			}
			infowindow.setContent(imgDiv);
			infowindow.setPosition(marker.position);
			infowindow.open(map);
		});
	}
}




function gup( name )
{
	name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]');
	var regexS = '[\\?&]'+name+'=([^&#]*)';
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null )
	{
		return '';
	}
	else
	{
		return results[1];
	}
}

function showCam()
{
	var id = gup('id');
	if(id.length>0)
	{
		var name = unescape(gup('name'));
		var latLng = gup('latLng');
		var cam = cams[id];
		if(cam==null)
		{
			cam = addCam(latLng, id, name);
		}

		var camImg = document.getElementById('camImg');
		if(camImg!=null)
		{
			document.title = 'iSpringsCam - ' + name;
			var mapBtn = document.getElementById('mapBtn');
			mapBtn.innerHTML = "Live Map: " + name;
			var camImg = document.getElementById('camImg');
			camImg.appendChild(cam.getImage());
			var camMap = document.getElementById('camMap');
			camMap.appendChild(cam.getMapImage());
		}
		else
		{
			if(map)
			{
				cam.showMarker();
				map.setZoom(13);
				google.maps.event.trigger(cam.marker, 'click');
			}
		}
	}
}

function addCam(latLng, id, name)
{
	var cam = cams[id];
	if(cam==null)
	{
		cam = new Cam(latLng, id, name);
		cams[id] = cam;
	}
	return cam;
}

function addCams()
{
	var latLng_4 = '38.952182769775398,-104.806831359863';
	addCam(latLng_4,4,'Academy / I-25');
	var latLng_5 = '38.943031311035199,-104.814163208008';
	addCam(latLng_5,5,'Pine Creek / I-25');
	var latLng_6 = '38.821449279785199,-104.83640289306599';
	addCam(latLng_6,6,'Motor City / I-25');
	var latLng_7 = '38.917278289794901,-104.81487274169901';
	addCam(latLng_7,7,'N Nevada / I-25');
	var latLng_8 = '38.884834289550803,-104.83553314209';
	addCam(latLng_8,8,'Ellston / I-25');
	var latLng_9 = '38.969650268554702,-104.804565429688';
	addCam(latLng_9,9,'Briargate / I-25');
	var latLng_10 = '38.990798950195298,-104.81404876709';
	addCam(latLng_10,10,'Interquest / I-25');
	var latLng_11 = '38.906684875488303,-104.826652526855';
	addCam(latLng_11,11,'Rusina / I-25');
	var latLng_12 = '38.855831146240199,-104.833770751953';
	addCam(latLng_12,12,'Uintah / I-25');
	var latLng_13 = '38.790683746337898,-104.802085876465';
	addCam(latLng_13,13,'Cheyenne / Venetucci');
	var latLng_14 = '38.889060,-104.785661';
	addCam(latLng_14,14,'Austin Blf / Union');
	var latLng_15 = '38.8439331054688,-104.830001831055';
	addCam(latLng_15,15,'Ped Bridge / I-25');
	var latLng_16 = '38.808132171630902,-104.80576324462901';
	addCam(latLng_16,16,'MLK Bypass / I-25');
	var latLng_17 = '38.765415191650398,-104.776000976563';
	addCam(latLng_17,17,'S. Academy / I-25');
	var latLng_18 = '38.772918701171903,-104.78188323974599';
	addCam(latLng_18,18,'Highway 85 / I-25');
	var latLng_19 = '38.7841186523438,-104.788467407227';
	addCam(latLng_19,19,'Stratmoor Hills / I-25');
	var latLng_21 = '38.866249084472699,-104.833053588867';
	addCam(latLng_21,21,'Fontanero / I-25');
	var latLng_22 = '38.896003723144503,-104.83096313476599';
	addCam(latLng_22,22,'Garden of Gods / I-25');
	var latLng_23 = '38.814834594726598,-104.81769516500';
	addCam(latLng_23,23,'S Nevada / I-25');
	var latLng_24 = '38.932365417480497,-104.812469482422';
	addCam(latLng_24,24,'Woodmen / I-25');
	var latLng_25 = '38.832916259765597,-104.830703735352';
	addCam(latLng_25,25,'Colorado / I-25');
	var latLng_26 = '38.838832855224602,-104.721382141113';
	addCam(latLng_26,26,'Platte / Powers');
	var latLng_27 = '38.897182464599602,-104.818519592285';
	addCam(latLng_27,27,'Garden of Gods / N. Nevada');
	var latLng_29 = '39.018032073974602,-104.830520629883';
	addCam(latLng_29,29,'Northgate / I-25');
	var latLng_30 = '38.876182556152301,-104.83553314209';
	addCam(latLng_30,30,'Fillmore / I-25');
	var latLng_31 = '39.030181884765597,-104.835098266602';
	addCam(latLng_31,31,'Gleneagle / I-25');
	var latLng_32 = '39.0575981140137,-104.851364135742';
	addCam(latLng_32,32,'Baptist / I-25');
	var latLng_33 = '39.118984222412102,-104.865913391113';
	addCam(latLng_33,33,'Monument / I-25');
	var latLng_34 = '38.814983367919901,-104.82527923584';
	addCam(latLng_34,34,'Tejon / I-25');
	var latLng_35 = '38.874217987060497,-104.81988525390599';
	addCam(latLng_35,35,'Nevada / Fillmore');
	var latLng_49 = '39.129917144775398,-104.864265441895';
	addCam(latLng_49,49,'County Line / I-25');
	var latLng_50 = '38.796398162841797,-104.79738616943401';
	addCam(latLng_50,50,'Circle / I-25');
	var latLng_51 = '38.827842712402301,-104.835487365723';
	addCam(latLng_51,51,'Cimarron / I-25');
	var latLng_52 = '38.841766357421903,-104.68254852294901';
	addCam(latLng_52,52,'Marksheffel / Highway 94');
	var latLng_53 = '38.840805053710902,-104.85910797119099';
	addCam(latLng_53,53,'21st / Highway 24');
	var latLng_54 = '38.845996856689503,-104.86663055419901';
	addCam(latLng_54,54,'26th / Highway 24');
	var latLng_55 = '38.811920166015597,-104.790031433105';
	addCam(latLng_55,55,'Union / Highway 24');
	var latLng_56 = '38.835880279541001,-104.849731445313';
	addCam(latLng_56,56,'14th / Highway 24');
	var latLng_57 = '38.855339050292997,-104.88298797607401';
	addCam(latLng_57,57,'Ridge / Highway 24');
	var latLng_58 = '38.851615905761697,-104.872718811035';
	addCam(latLng_58,58,'31st / Highway 24');
	var latLng_59 = '38.850379943847699,-104.82070922851599';
	addCam(latLng_59,59,'Uintah / Nevada');
	var latLng_60 = '38.838218688964801,-104.82176208496099';
	addCam(latLng_60,60,'Platte / N Nevada');
	var latLng_61 = '38.8266410827637,-104.821907043457';
	addCam(latLng_61,61,'Cimarron / S Nevada');
	var latLng_62 = '38.9323539733887,-104.795639038086';
	addCam(latLng_62,62,'Woodmen / N Academy');
	var latLng_63 = '38.9369926452637,-104.798263549805';
	addCam(latLng_63,63,'Shrider / N Academy');
	var latLng_64 = '38.920661926269503,-104.79012298584';
	addCam(latLng_64,64,'Lehman / N Academy');
	var latLng_65 = '38.9452095031738,-104.801216125488';
	addCam(latLng_65,65,'Briargate / N Academy');
	var latLng_66 = '38.901359558105497,-104.768173217773';
	addCam(latLng_66,66,'Flintridge / N Academy');
	var latLng_67 = '38.897422790527301,-104.761917114258';
	addCam(latLng_67,67,'Meadowland / N Academy');
	var latLng_68 = '38.914974212646499,-104.78761291503901';
	addCam(latLng_68,68,'Vickers / N Academy');
	var latLng_69 = '38.906959533691399,-104.78205871582';
	addCam(latLng_69,69,'Montebello / N Academy');
	var latLng_70 = '38.904247283935497,-104.775550842285';
	addCam(latLng_70,70,'Academy / Union');
	var latLng_71 = '38.890726,-104.757092';
	addCam(latLng_71,71,'Austin Bluffs / N Academy');
	var latLng_72 = '38.877052307128899,-104.756866455078';
	addCam(latLng_72,72,'Village / N Academy');
	var latLng_73 = '38.867744445800803,-104.757438659668';
	addCam(latLng_73,73,'Maizeland  / N Academy');
	var latLng_74 = '38.8823051452637,-104.756805419922';
	addCam(latLng_74,74,'Carefree / N Academy');
	var latLng_75 = '38.859409332275398,-104.757484436035';
	addCam(latLng_75,75,'Constitution / N Academy');
	var latLng_76 = '38.854375,-104.757401';
	addCam(latLng_76,76,'Palmer Park / N Academy');
	var latLng_77 = '38.851303100585902,-104.75717926025401';
	addCam(latLng_77,77,'San Miguel / N Academy');
	var latLng_78 = '38.840251922607401,-104.757675170898';
	addCam(latLng_78,78,'Platte / Academy');
	var latLng_79 = '38.813533782958999,-104.757865905762';
	addCam(latLng_79,79,'Fountain / S Academy');
	var latLng_80 = '38.832035064697301,-104.757682800293';
	addCam(latLng_80,80,'Pikes Peak / S Academy');
	var latLng_81 = '38.837848663330099,-104.82869720459';
	addCam(latLng_81,81,'Bijou / I-25');
}

function toGoogleLatLng(strLatLng)
{
	if(strLatLng==null) return null;
	var latLngArr = strLatLng.split(',');
	if(latLngArr.length==2)
	{
		return new google.maps.LatLng(latLngArr[0],latLngArr[1]);
	}
	else
	{
		return null;
	}
}

function initMap()
{
	// Get camera specifics from url
	var parms = new String(document.location).split('?');
	if(parms.length>1)
	{
		var leftNav =document.getElementById('leftnav');
		var camLink = document.createElement('a');
		camLink.setAttribute('href', '#');
		camLink.onclick = function() { window.location = 'camera.html?' + parms[1]; return false;};
		camLink.innerHTML=unescape(gup('name'));
		leftNav.appendChild(camLink);
		document.getElementById('title').innerHTML = '';
	}

	// Get zoom level
	var zoomLvl;
	if(parms.length>1)
	{
		zoomLvl = 13;
	}
	else
	{
		zoomLvl = 10;
	}

	// Get map center
	var latLng = toGoogleLatLng(gup('latLng'));
	if(latLng==null)
	{
		latLng = new google.maps.LatLng(38.9369926452637,-104.798263549805);
	}

	// Set map options
	var myOptions = {
		backgroundColor: "backgroundColor",
		mapTypeControl: false,
		scaleControl: false,
		zoom: 12,
		minZoom: 8,
		center: latLng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);

	// Set traffic overlay
	var trafficOptions = {
		getTileUrl: function(coord, zoom) {
			return "http://mt3.google.com/mapstt?" +
			"zoom=" + zoom + "&x=" + coord.x + "&y=" + coord.y + "&client=google";
		},
		tileSize: new google.maps.Size(256, 256),
		isPng: true
	};
	var trafficMapType = new google.maps.ImageMapType(trafficOptions);
	map.overlayMapTypes.insertAt(0, trafficMapType);



	// Show camera image
	if(parms.length>1)
	{
		showCam();
	}
	else
	{
		mapAllCams();
	}
	
		// show location
	findLocation();
}


function listAllCams()
{
		addCams();
		var list = document.getElementById('list');
		if(list!=null)
		{
			for(var id in cams)
			{
				var li = cams[id].getListItem();
				list.appendChild(li);
			}
		}
}

function listFilteredCams()
{
		var filter = document.getElementById('search').value;
		
		if(filter==null || filter.length==0)
		{
			listAllCams();
			return;
		}
		else
		{
			addCams();
			filter = filter.toUpperCase();
			var list = document.getElementById('list');
			if(list!=null)
			{
				list.innerHTML = "";
				for(var id in cams)
				{
					var cam = cams[id];
					var name = cam.name.toUpperCase();
					if(name.indexOf(filter)>=0)
					{
						var li = cams[id].getListItem();
						list.appendChild(li);
					}
				}
			}
		}
		return false;
}

function mapAllCams()
{
	addCams();
	for(var id in cams)
	{
		cams[id].showMarker();
	}
}

function findLocation() 
{
	if(navigator.geolocation)
	{
		navigator.geolocation.watchPosition(
		showLocation, 				
		function(error)
		{
			setTimeout(findLocation, 1000* 30);
		},
		{enableHighAccuracy:true,maximumAge:1000 * 30});
	}
}

var currentLocationMarker;
function showLocation(position)
{
	if(map)
	{
		if(currentLocationMarker)
		{
			currentLocationMarker.position = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
		}
		else
			{
		currentLocationMarker = new google.maps.Marker({
			position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
			map: map,
			icon: 'http://ispringscam.markwoodman.com/images/ball.png'
		});
	}
	}
}
