//default dating requirements
var minAge = 21;
var maxAge = 37;
var reqStatus = "Single";
var reqGender = "F";
//config
var d = new Date();
var year = d.getFullYear();
var cMinYear = year - minAge;
var cMaxYear = year - maxAge;
var cStatus = reqStatus;
var cGender = reqGender;
//generate template of students
var tmplStudent = "<div class='listItemDiv'><div style='float:left;'>${FName} ${LName}</div> <div style='float:right;'>${$item.classAverage()}</div><div style='clear:both;'></div></div>";
$.template( "studentTemplate", tmplStudent );
//generate map
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(0,0),0);
var bounds = new GLatLngBounds();
var overlays = [];
//eligable logic
var dateable = function(student){
var y2k = "";
var dob = new Date();
var dobYear = new Date();
y2k = student["DOB"].substring(0,6) + "19" + student["DOB"].substring(6);
dob = new Date(y2k);
dobYear = dob.getFullYear();
if (student["Gender"] === cGender &
student["Status"] === cStatus &
dobYear <= cMinYear &
dobYear >= cMaxYear){
return true;
}else{
return false;
}
};
// add students to list and map
var addToList = function(student, classAverage){
$.tmpl("studentTemplate", student,{
classAverage: function() {
return classAverage;
}
}).appendTo( "#studentInfo" );
var lat = parseFloat(student["Lat"]);
var lng = parseFloat(student["Lon"]);
var point = new GLatLng(lat, lng);
marker = new GMarker(point);
map.addOverlay(marker);
overlays.push(marker);
bounds.extend(point);
};
//find dateable students and get their quiz average
// reset map and list each time
var runFilter = function(){
deleteOverlays();
$("#studentInfo").remove();
$("body").append("<div id='studentInfo'><div style='float:left;'><b>Student Name</b></div> <div style='float:right;'><b>Quiz Average</b></div><div style='clear:both;'></div></div>");
$.each(students, function(index,student){
if (dateable(student)){
// add up quiz scores
var classScore = 0;
var quizNumber = 0;
$.each(student["Quizzes"], function(index,value){
classScore += value;
quizNumber++;
});
// add them to the list with their quiz average
addToList(student, classScore/quizNumber);
}
});
map.setZoom(map.getBoundsZoomLevel(bounds));
map.setCenter(bounds.getCenter());
};
// get initial filter
runFilter();
// select gender function
$("#gender").change(function(){
cGender = $("#gender").val();
runFilter();
});
//slider function
$(function() {
$( "#slider-range" ).slider({
range: true,
min: 18,
max: 60,
values: [ 21, 37 ],
slide: function( event, ui ) {
$( "#amount" ).val(ui.values[ 0 ] + " - " + ui.values[ 1 ] );
cMinYear = year - ui.values[ 0 ];
cMaxYear = year - ui.values[ 1 ];
runFilter();
}
});
$( "#amount" ).val($( "#slider-range" ).slider( "values", 0 ) + " - " + $( "#slider-range" ).slider( "values", 1 ) );
});
// Hide all markers in the array
function deleteOverlays() {
if (overlays) {
console.log(overlays);
for (i in overlays) {
overlays[i].remove();
}
overlays.length = 0;
}
}
External resources loaded into this fiddle:
<h1>Classroom Date Finder</h1>
<label for="amount">Eligable
<select id="gender">
<option value="F">Woman</option>
<option value="M">Men</option>
</select>
within an age range of:</label>
<input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" />
<div id="slider-range"></div>
<div id="map"></div>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAAA9pf7MF_DaLd5gJGHkgHWBSgRyJfKxvUsUDuKDID09Cb5D0_ORRS6PirPPO_m7H3rUopPQTIioauDQ" type="text/javascript"></script>
body{font-family:verdana; font-size:12px; color:#666;}
h1{font-size:20px;}
#map { width:500px; height:200px; font-weight:none;}
.listItemDiv{width:500px; height:15px; border-bottom:solid 1px #eee;}