﻿

//(function() {

//	function bustFrame() {
//		if (top != self) {
//			top.location.replace(self.location.href);
//		}
//	}

//	window.onload = bustFrame;

//})();
var query;
var map = null;
var pollnum = 0;
var lat = 54.45;
var long = -104.616667;
var zoom_level =5;
var zoom_level_single = 15;
var polls;
var pollCount = 0;
var boxes = new Array();
var locs = [];
var showMap = false;
var dateText;
var singlePoll = false;
var pollIndex=-1;

function GetMap() {
	countdown();
	if (showMap) {
		map = new Microsoft.Maps.Map(document.getElementById('mapDiv'), { credentials: 'AvN1uscVsJfyoAv_4vvRP7xluDFUPgcPSYItTX4KXZCWUknDi-1tAh7uQQ6MPbaG', enableClickableLogo: false, enableSearchLogo: false, center: new Microsoft.Maps.Location(lat, long), zoom: zoom_level });
		if (polls) {
			if (pollIndex >= 0) {
				singlePoll = true;
				AddOnePushpin(pollIndex);
			}
			else {
				singlePoll = false;
				AddPushpins();
			} 
		}
	}
}

function FindLocation() {
	map.getCredentials(CallSearchService);
}

function CallSearchService(credentials) {
	var searchRequest = 'http://dev.virtualearth.net/REST/v1/Locations/' + query + '?output=json&jsonp=SearchServiceCallback&key=' + credentials;
	var mapscript = document.createElement('script');
	mapscript.type = 'text/javascript';
	mapscript.src = searchRequest;
	document.getElementById('mapDiv').appendChild(mapscript)
}

function SearchServiceCallback(result) {

	if (result &&
          result.resourceSets &&
          result.resourceSets.length > 0 &&
          result.resourceSets[0].resources &&
          result.resourceSets[0].resources.length > 0) {		
		//var bbox = result.resourceSets[0].resources[0].bbox;
		//var viewBoundaries = Microsoft.Maps.LocationRect.fromLocations(new Microsoft.Maps.Location(bbox[0], bbox[1]), new Microsoft.Maps.Location(bbox[2], bbox[3]));
		//map.setView({ bounds: viewBoundaries });
		var location = new Microsoft.Maps.Location(result.resourceSets[0].resources[0].point.coordinates[0], result.resourceSets[0].resources[0].point.coordinates[1]);
		var pushpin = new Microsoft.Maps.Pushpin(location);
		map.entities.push(pushpin);
	}
	else {
		if (typeof (response) == 'undefined' || response == null) {
			alert("Invalid credentials or no response");
		}
		else {
			if (typeof (response) != 'undefined' && response && result && result.errorDetails) {
				resultsHeader.innerHTML = "Message :" + response.errorDetails[0];
			}
			alert("No results for the query");

		}
	}
}

function GetLocation(credentials) {
    var searchRequest = 'http://dev.virtualearth.net/REST/v1/Locations/' + encodeURI(query) + '?output=json&jsonp=GetLocationCallback&key=' + credentials;
	var mapscript = document.createElement('script');
	mapscript.type = 'text/javascript';
	mapscript.src = searchRequest;
	document.getElementById('mapDiv').appendChild(mapscript)
}

function GetLocationCallback(result) {

	if (result &&
          result.resourceSets &&
          result.resourceSets.length > 0 &&
          result.resourceSets[0].resources &&
          result.resourceSets[0].resources.length > 0) {
		var location = new Microsoft.Maps.Location(result.resourceSets[0].resources[0].point.coordinates[0], result.resourceSets[0].resources[0].point.coordinates[1]);
		CreatePushPin(location);
			
	}
	else {
		if (typeof (response) == 'undefined' || response == null) {
			//alert("Invalid credentials or no response");
		}
		else {
			if (typeof (response) != 'undefined' && response && result && result.errorDetails) {
				//resultsHeader.innerHTML = "Message :" + response.errorDetails[0];
			}
			//alert("No results for the query");
		}
	}
	
	if (singlePoll) {
		var bestview = Microsoft.Maps.LocationRect.fromLocations(locs);
	    map.setView({ bounds: bestview });
	    map.setView({ zoom: zoom_level_single });
	}else{
		pollnum++;
		AddPushpins();
	}
}


function AddOnePushpin(index) {
	boxes = [];
	locs = [];

	pollnum = index;
	var poll=index;	

	if (poll < pollCount) {
		if (polls[poll][3] != null) {
		    CreatePushPin(new Microsoft.Maps.Location(polls[poll][3], polls[poll][4], null));
		} else {
		    if(polls[poll][2] != null)
			{
		        query = polls[poll][2];
			    map.getCredentials(GetLocation);
			}
		}
	} 	
}

function AddPushpins() {
	//for (var poll in polls) {
	var poll = pollnum;
	if (poll < pollCount) {
		if (polls[poll][3] != null) {
		    CreatePushPin(new Microsoft.Maps.Location(polls[poll][3], polls[poll][4], null));
		    pollnum++;
		    AddPushpins();
		} else {
		    if(polls[poll][2] != null)
			    {
		        query = polls[poll][2];
			    map.getCredentials(GetLocation);
			}
		    else {
		        pollnum++;
		        AddPushpins();    
		    }	
		}
	} else {
        
	    if (pollCount == 1) {
	        var bestview = Microsoft.Maps.LocationRect.fromLocations(locs);
	        map.setView({ bounds: bestview });
	        map.setView({ zoom: zoom_level_single });
        }
        else {
            var bestview = Microsoft.Maps.LocationRect.fromLocations(locs);
            map.setView({ bounds: bestview });    
        }    
	}		//}
}

function CreatePushPin(location) {
	var pushpin = new Microsoft.Maps.Pushpin(location, { text: polls[pollnum][0] });
	var pinInfobox = new Microsoft.Maps.Infobox(pushpin.getLocation(),
    { title: 'Poll #'+polls[pollnum][0],
    	description: polls[pollnum][1],
        visible: false,
        width: 200,
        height: 100, 
        offset: new Microsoft.Maps.Point(0, 15)
       });

	// Add handler for the pushpin click event.
       Microsoft.Maps.Events.addHandler(pushpin, 'click', displayInfobox);
    // Hide the infobox when the map is moved.
    Microsoft.Maps.Events.addHandler(map, 'click', hideInfobox);

    map.entities.push(pushpin);
    map.entities.push(pinInfobox);
    locs.push(location);
    boxes[pushpin.getText()] = pinInfobox;
}

function displayInfobox(e) {
	var pin = e.target;
	clearInfoboxes();
	if (pin != null) {
		boxes[pin.getText()].setOptions({ visible: true });
		map.setView({ center: pin.getLocation() });
	}
}

function hideInfobox(e) {
//	pinInfobox.setOptions({ visible: false });
clearInfoboxes();
}

function clearInfoboxes() {
	for (var box in boxes)
	{
		boxes[box].setOptions({ visible: false });
	}
}


 function pad(value, length, padChar) {
 	if (length + 1 >= value.length) {
 		value = Array(length + 1 - value.length).join(padChar) + value;
 	}
	return value;
}

function FindIndex(Name) {
	var i = 0;	
	for (i = 0; i < polls.length; i++) {

		if (Name == polls[i][5]) {
			return (i);
			break;
		}
	}
	return (-1);
}


function countdown() {
	var oneDay = 86400000;
	var oneHour = 3600000;
	var oneMinute = 60000;
	var oneSecond = 1000;
	
	var today = new Date();
 	var eventDate = new Date(dateText);
	difference = eventDate - today;
	days = Math.floor(difference / (oneDay) * 1);
	hours = Math.floor((difference % (oneDay)) / (oneHour) * 1);
 	minutes = Math.floor(((difference % (oneDay)) % (oneHour)) / (oneMinute) * 1);
	seconds = Math.floor((((difference % (oneDay)) % (oneHour)) % (oneMinute)) / oneSecond * 1);
	if (days <= 0 && hours <= 0 && minutes <= 0 && seconds <= 0) {
//		var endSpan = document.getElementById("countdownCalendarDateTimerId");
//		endSpan.firstChild.data = "Is here!";
//		return;
	}
	else {
		var daySpan = document.getElementById("countdownCalendarDays");
		if (daySpan) {
			daySpan.firstChild.data = days.toString();
		}

		var hrSpan = document.getElementById("countdownCalendarHours");
		if (hrSpan) {
			hrSpan.firstChild.data = pad(hours.toString(), 2, "0");
		}
		
		var minSpan = document.getElementById("countdownCalendarMins");
		if (minSpan) {
			minSpan.firstChild.data = pad(minutes.toString(), 2, "0");
		}
		var secSpan = document.getElementById("countdownCalendarSecs");
		if (secSpan) {
			secSpan.firstChild.data = pad(seconds.toString(), 2, "0");
		}
	}
setTimeout("countdown()", 1000);

}


