var fromGMap;
var toGMap;
var routeGMap;
var fromLatLng, toLatLng;
var xmlHttp;

var blueIcon = new GIcon();
blueIcon.image = "img/airportBLUE.gif";
blueIcon.iconSize = new GSize(18, 18);
blueIcon.iconAnchor = new GPoint(9, 9);
blueIcon.infoWindowAnchor = new GPoint(5, 1);

var redIcon = new GIcon();
redIcon.image = "img/airportGREEN.gif";
redIcon.iconSize = new GSize(24, 24);
redIcon.iconAnchor = new GPoint(12, 12);
redIcon.infoWindowAnchor = new GPoint(5, 1);

Array.prototype.indexOf = function( v, b, s ) {
	for( var i = +b || 0, l = this.length; i < l; i++ ) {
		if( this[i]===v || s && this[i]==v ) { return i; }
	}
	return -1;
};

function grayOut(vis, options) {
  // Pass true to gray out screen, false to ungray
  // options are optional.  This is a JSON object with the following (optional) properties
  // opacity:0-100         // Lower number = less grayout higher = more of a blackout 
  // zindex: #             // HTML elements with a higher zindex appear on top of the gray out
  // bgcolor: (#xxxxxx)    // Standard RGB Hex color code
  // grayOut(true, {'zindex':'50', 'bgcolor':'#0000FF', 'opacity':'70'});
  // Because options is JSON opacity/zindex/bgcolor are all optional and can appear
  // in any order.  Pass only the properties you need to set.
  var options = options || {}; 
  var zindex = options.zindex || 50;
  var opacity = options.opacity || 70;
  var opaque = (opacity / 100);
  var bgcolor = options.bgcolor || '#000000';
  var dark=document.getElementById('darkenScreenObject');
  if (!dark) {
    // The dark layer doesn't exist, it's never been created.  So we'll
    // create it here and apply some basic styles.
    // If you are getting errors in IE see: http://support.microsoft.com/default.aspx/kb/927917
    var tbody = document.getElementsByTagName("body")[0];
    var tnode = document.createElement('div');           // Create the layer.
        tnode.style.position='absolute';                 // Position absolutely
        tnode.style.top='0px';                           // In the top
        tnode.style.left='0px';                          // Left corner of the page
        tnode.style.overflow='hidden';                   // Try to avoid making scroll bars            
        tnode.style.display='none';                      // Start out Hidden
        tnode.id='darkenScreenObject';                   // Name it so we can find it later
    tbody.appendChild(tnode);                            // Add it to the web page
    dark=document.getElementById('darkenScreenObject');  // Get the object.
  }
  if (vis) {
    // Calculate the page width and height 
    if( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) {
        var pageWidth = document.body.scrollWidth+'px';
        var pageHeight = document.body.scrollHeight+'px';
    } else if( document.body.offsetWidth ) {
      var pageWidth = document.body.offsetWidth+'px';
      var pageHeight = document.body.offsetHeight+'px';
    } else {
       var pageWidth='100%';
       var pageHeight='100%';
    }   
    //set the shader to cover the entire page and make it visible.
    dark.style.opacity=opaque;                      
    dark.style.MozOpacity=opaque;                   
    dark.style.filter='alpha(opacity='+opacity+')'; 
    dark.style.zIndex=zindex;        
    dark.style.backgroundColor=bgcolor;  
    dark.style.width= pageWidth;
    dark.style.height= pageHeight;
    dark.style.display='block';                          
  } else {
     dark.style.display='none';
  }
}

function displayProgress(vis) {
    // Calculate the page width and height
    if( document.body && ( document.body.scrollWidth || document.body.scrollHeight ) ) {
	var pageWidth = document.body.scrollWidth;
        var pageHeight = document.body.scrollHeight;
    } else if( document.body.offsetWidth ) {
      	var pageWidth = document.body.offsetWidth;
      	var pageHeight = document.body.offsetHeight;
    } else {
       	var pageWidth='100%';
       	var pageHeight='100%';
    }

    var x = pageWidth/2 - 150;
    var y = pageHeight/2 - 50;

    var tbody = document.getElementsByTagName("body")[0];
    var tnode = document.createElement('div');           // Create the layer.
	tnode.innerHTML = "<table height=100px width=300px><tr valign=middle><td valign=middle align=center><br><img src='/img/progressWheel.gif' alt='DREAMS Progress Wheel'><br><b>Progressing...<br>Thank you for your patience.</b></td></tr></table>";
        tnode.style.position='absolute';                 // Position absolutely
        tnode.style.top=y+'px';     // In the top
        tnode.style.left=x+'px';    // Left corner of the page
        tnode.style.overflow='hidden';                   // Try to avoid making scroll bars
        tnode.style.display='none';                      // Start out Hidden
        tnode.id='progressObject';                       // Name it so we can find it later
    tbody.appendChild(tnode);                            // Add it to the web page
    progress=document.getElementById('progressObject');  // Get the object.

    if(vis) {
	progress.style.zIndex=100;
	progress.style.backgroundColor='#FFFFFF';
	progress.style.border='3px double #000000';
	progress.style.width= '300px';
	progress.style.height= '100px';
	progress.style.display='block';
     } else {
	progress.style.display='none';
     }
}

function toggleBox(szDivID, iState) { /* 1 visible, 0 hidden */
    if(document.layers) {          /* NN4+ */
       document.layers[szDivID].visibility = iState ? "show" : "hide";
    }
    else if(document.getElementById) {    /* gecko(NN6) + IE 5+ */
        var obj = document.getElementById(szDivID);
        obj.style.visibility = iState ? "visible" : "hidden";
    }
    else if(document.all) {     /* IE 4 */
        document.all[szDivID].style.visibility = iState ? "visible" : "hidden";
    }
}

function refreshMarkers (fromto, index) {
	index = document.getElementById("" + fromto + "Apt").options.selectedIndex;
	if(fromto == "from") {
		fromGMap.clearOverlays();

		for(var i = 0; i < fromLatLng.length; i++) {
			var marker;
			if(i != index) { marker = new GMarker(fromLatLng[i], blueIcon); }
			else { marker = new GMarker(fromLatLng[i], redIcon); }

			fromGMap.addOverlay(marker);
		}
	}
	else if(fromto == "to") {
		toGMap.clearOverlays();
		
		for(var i = 0; i < toLatLng.length; i++) {
			if(i != index) { toGMap.addOverlay(new GMarker(toLatLng[i], blueIcon)); }
                        else { toGMap.addOverlay(new GMarker(toLatLng[i], redIcon)); } 
		}
	}
}

function checkCity(x) {
        if(x == 'from') {
                var city = document.getElementById('fromCity');
                var state = document.getElementById('fromState');
                var airport = document.getElementById('fromApt');
		var zip = document.getElementById('fromZip');
                var map = 'fromMap';
        }
        else if(x == 'to') {
                var city = document.getElementById('toCity');
                var state = document.getElementById('toState');
                var airport = document.getElementById('toApt');
		var zip = document.getElementById('toZip');
                var map = 'toMap';
        }

        if (city.value.length > 0 && state.value.length == 2) {
		zip.value = "";

                var cityVal = city.value;
                cityVal = stripWhite(cityVal);
                xmlHttp = GetXmlHttpObject();

                var url = 'include/ajax.php?q=aptList';
                url = url + '&city=' + cityVal + '&state=' + state.value;
                url = url + '&sid=' + Math.random();
                
		if(x == 'from') { xmlHttp.onreadystatechange = fromAirportChanged; }
                else if(x == 'to') { xmlHttp.onreadystatechange = toAirportChanged; }
                xmlHttp.open('GET', url, true);
                xmlHttp.send(null);
        }
}

function checkZip(x) {
        if(x == 'from') {
                var city = document.getElementById('fromCity');
                var state = document.getElementById('fromState');
                var airport = document.getElementById('fromApt');
                var zip = document.getElementById('fromZip');
                var map = 'fromMap';
        }
        else {
                var city = document.getElementById('toCity');
                var state = document.getElementById('toState');
                var airport = document.getElementById('toApt');
                var zip = document.getElementById('toZip');
                var map = 'toMap';
        }

        if(zip.value.length == 5) {
		city.value = "";
		state.value = "";

                xmlHttp = GetXmlHttpObject();
                var url = 'include/ajax.php?q=aptList';
                url = url + '&zip=' + zip.value;
                url = url + '&sid=' + Math.random();

                if(x == 'from') { xmlHttp.onreadystatechange = fromAirportChanged; }
                else if(x == 'to') { xmlHttp.onreadystatechange = toAirportChanged; }
                xmlHttp.open('GET', url, true);
                xmlHttp.send(null);
         }
}

function checkDistance() {
        var from = document.getElementById('fromApt');
        var to = document.getElementById('toApt');
        var adults = document.getElementById('num_adults');
        var child = document.getElementById('num_child');

        var adultsInt = parseInt(adults.value);
        var childInt = parseInt(child.value);

	if(from.value.length <= 4 && to.value.length <= 4 && (adultsInt + childInt > 0) && (adultsInt + childInt <= 3) &&
	   fromLatLng != null && toLatLng != null) {
                xmlHttp = GetXmlHttpObject();
                var url = 'include/ajax.php?q=distance';
                url = url + '&apt1=' + from.value + '&apt2=' + to.value;
		url = url + '&adults=' + adults.value + '&children=' + child.value;
                url = url + '&sid=' + Math.random();
                xmlHttp.onreadystatechange = distanceChanged;
                xmlHttp.open('GET', url, true);
                xmlHttp.send(null);
        }
}

function updateRouteMap() {
        var from = document.getElementById('fromApt');
        var to = document.getElementById('toApt');

        if((from.value != 'Please enter a valid city and state or zip code' && from.value != 'Please select an airport.') &&
           (to.value != 'Please enter a valid city and state or zip code' && to.value != 'Please select an airport.')) {
                var lat1, lng1, lat2, lng2;
                var apt1, apt2;
                var mapObj;
                var isDone;
                var xmlHttp1 = GetXmlHttpObject();
                var xmlHttp2 = GetXmlHttpObject();
                var xmlHttp3 = GetXmlHttpObject();
                var xmlHttp4 = GetXmlHttpObject();
                var ajax = 'ajax2.php';

                apt1 = from.value;
                apt2 = to.value;
                isDone = 0;

                if (xmlHttp1 == null) {
                        alert ('Browser does not support HTTP Request');
                        return;
                }

                var url = ajax + '?q=lnglat&w=lat&apt=' + apt1;
                xmlHttp1.onreadystatechange = function a() { lat1 = xmlHttp1.responseText; isDone += 1; };
                xmlHttp1.open('POST', url, true);
                xmlHttp1.send(null);

                url = ajax + '?q=lnglat&w=lng&apt=' + apt1;
                xmlHttp2.onreadystatechange = function a() { lng1 = xmlHttp2.responseText; isDone += 1; };
                xmlHttp2.open('POST', url, true);
                xmlHttp2.send(null);

                url = ajax + '?q=lnglat&w=lat&apt=' + apt2;
                xmlHttp3.onreadystatechange = function a() { lat2 = xmlHttp3.responseText; isDone += 1; };
                xmlHttp3.open('POST', url, true);
                xmlHttp3.send(null);

                url = ajax + '?q=lnglat&w=lng&apt=' + apt2;
                xmlHttp4.onreadystatechange = function a() { lng2 = xmlHttp4.responseText; isDone += 1; };
                xmlHttp4.open('POST', url, true);
                xmlHttp4.send(null);

                var pt1 = new GLatLng(parseFloat(lat1), parseFloat(lng1));
                var pt2 = new GLatLng(parseFloat(lat2), parseFloat(lng2));

                routeGMap.addMarker(new GMarker(pt1));
                routeGMap.addMarker(new GMarker(pt2));
                routeGMap.addOverlay(new GPolyline([pt1, pt2]), '#ff0000', 2, 0.75);

                var bounds = new GLatLngBounds();
                bounds.extend(pt1);
                bounds.extend(pt2);
                var zoom = routeGMap.getBoundsZoomLevel(bounds);
                routeGMap.setCenter(bounds.getCenter(), zoom);
                //routeGMap.setCenter(pt1, 6);
        }
}

function checkPax() {
        var adults = parseInt(document.getElementById('num_adults').value);
        var child = parseInt(document.getElementById('num_child').value);

        if(adults + child > 3) {
                alert('Total number of passengers cannot exceed three (3)');
        }
}

function fromAirportChanged() {
	fromLatLng = new Array();
	var bounds = new GLatLngBounds();
        if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
                if(xmlHttp.responseText == "Internal Error") {
                        document.getElementById("fromApt").innerHTML = "<option value=''>No airports found. Please check spelling</option>";
                }
                else {
                        var response = xmlHttp.responseText;
                        var lines = response.split("\n");
			document.getElementById("fromApt").innerHTML = "";

			if(lines.length > 1) {
				var i, line;

				for(i = 0; i < lines.length - 1; i++) {
					line = lines[i].split("//");

					var option = new Option("" + line[1] + " - (" + line[0] + ") - " + line[3], "" + line[0]);
					var len = document.getElementById("fromApt").options.length;
					document.getElementById("fromApt").options[len] = option;

					fromLatLng[i] = new GLatLng(line[4], line[5]);
					bounds.extend(fromLatLng[i]);
				}

				var zoom = fromGMap.getBoundsZoomLevel(bounds);
				if(zoom > 9) { zoom = 9; }
				fromGMap.setCenter(bounds.getCenter(), zoom);
				refreshMarkers("from", 0);
		
				toggleBox('noMap', 0);
				toggleBox('toMap', 0);
				toggleBox('routeMap', 0);
				toggleBox('fromMap', 1);
			}
			else {
				var option = new Option("Location is outside of our service area");
				document.getElementById("fromApt").options[0] = option;
			} 
                }
	
		checkDistance();
        }
}

function toAirportChanged() {
        toLatLng = new Array();
        var bounds = new GLatLngBounds();
        if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete') {
                if(xmlHttp.responseText == '') {
                         document.getElementById('toApt').innerHTML = '<option value=\'\'>No airports found. Please check spelling</option>';
                }
                else {
                        var response = xmlHttp.responseText;
                        var lines = response.split('\n');
			document.getElementById('toApt').innerHTML = '';

			if(lines.length > 1) {
				var i, line;

				for(i = 0; i < lines.length - 1; i++) {
					line = lines[i].split('//');

					var option = new Option("" + line[1] + " - (" + line[0] + ") - " + line[3], "" + line[0]);
					var len = document.getElementById("toApt").options.length;
					document.getElementById("toApt").options[len] = option;

					toLatLng[i] = new GLatLng(line[4], line[5]);
					bounds.extend(toLatLng[i]);
				}

				var zoom = toGMap.getBoundsZoomLevel(bounds);
				if(zoom > 9) { zoom = 9; }	
				toGMap.setCenter(bounds.getCenter(), zoom);
				refreshMarkers("to", 0);

				toggleBox('noMap', 0);
				toggleBox('fromMap', 0);
				toggleBox('routeMap', 0);
				toggleBox('toMap', 1);
			}
                        else {
                                var option = new Option("Location is outside of our service area");
                                document.getElementById("toApt").options[0] = option;
                        }
		}

		checkDistance();
        }
}

function distanceChanged() {
        if ((xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") && xmlHttp.responseText != "") {
		var line = xmlHttp.responseText.split("//");
                document.getElementById("distance_box").innerHTML = line[0] + " Miles";

		var timeMin = Math.round(((parseInt(line[0])/180 + ((parseInt(line[1])+1)*0.32)) * 60) - 15);
		var timeHr = Math.floor(timeMin/60);
		var timeMin = Math.round(timeMin % 60);

		document.getElementById("time_box").innerHTML = "<p><input type=hidden name='submit' value='Add this flight to your trip'><input type=image src='img/buttons/add_flight.gif' name='submit' value='Add this flight to your trip' style='border: none;'>";

		document.getElementById("time_box").innerHTML += "Flight Time: " + timeHr + " Hour(s) " + timeMin + " Minutes<br>";

		if(line[1] <= 0) { 
			document.getElementById("time_box").innerHTML += "Expect No Stops";
		}
		else if(line[1] == 1) {
			document.getElementById("time_box").innerHTML += "Expect 1 Stop for refueling";
	        }
		else {
			document.getElementById("time_box").innerHTML += "Expect " + line[1] + " Stops for refueling";
		}

		document.getElementById("stops").value = line[1]; 

                var fromIndex = document.getElementById('fromApt').selectedIndex;
                var toIndex = document.getElementById('toApt').selectedIndex;
                var fromApt = document.getElementById('fromApt').options[fromIndex].value;
                var toApt = document.getElementById('toApt').options[toIndex].value;
                var bounds = new GLatLngBounds();

		var point1 = fromLatLng[fromIndex];
		var point2 = toLatLng[toIndex];

                bounds.extend(point1);
                bounds.extend(point2);

                routeGMap.setCenter(bounds.getCenter(), routeGMap.getBoundsZoomLevel(bounds));
		routeGMap.clearOverlays();

                routeGMap.addOverlay(new GMarker(point1, blueIcon));
                routeGMap.addOverlay(new GMarker(point2, blueIcon));
		
		var points = new Array(point1, point2);
                routeGMap.addOverlay(new GPolyline(points));
	}
}

function stripWhite(x) {
        var i = 0;
        var z = '';
        var j = i + 1;
        while(x.charAt(i) == ' ' && j < x.length) {
                while(j < x.length) {
                        z = z + x.charAt(j);
                        j = j + 1;
                }
                i = 0;
                x = z;
                z = '';
                j = i + 1;
        }
        i = x.length - 1;
        while(x.charAt(i) == ' ') {
                z = '';
                j = 0;
                while(j < i) {
                        z = z + x.charAt(j);
                        j = j + 1;
                }
                x = z;
                i = x.length - 1;
        }
        return x;
}

function highlightBox(i) {
        document.getElementById('fromBox').style.backgroundColor = 'FFFFFF';
        document.getElementById('toBox').style.backgroundColor = 'FFFFFF';
        document.getElementById('datetimeBox').style.backgroundColor = 'FFFFFF';

        if(i == 1) {
                document.getElementById('fromBox').style.backgroundColor = 'CCCCCC';

                if(document.getElementById('fromApt').value.length != 47) {
                        toggleBox('noMap', 0);
                        toggleBox('fromMap', 1);
                        toggleBox('toMap', 0);
                        toggleBox('routeMap', 0);
                }
                else {
                        toggleBox('noMap', 1);
                        toggleBox('fromMap', 0);
                        toggleBox('toMap', 0);
                        toggleBox('routeMap', 0);
                }
        }
        else if(i == 2) {
                document.getElementById('toBox').style.backgroundColor = 'CCCCCC';

                if(document.getElementById('toApt').value.length != 47) {
                        toggleBox('noMap', 0);
                        toggleBox('fromMap', 0);
                        toggleBox('toMap', 1);
                        toggleBox('routeMap', 0);
                }
                else {
                        toggleBox('noMap', 1);
                        toggleBox('fromMap', 0);
                        toggleBox('toMap', 0);
                        toggleBox('routeMap', 0);
                }
        }
        else if(i == 3) {
                document.getElementById('datetimeBox').style.backgroundColor = 'CCCCCC';

                if(document.getElementById('fromApt').value != '' && document.getElementById('toApt').value != '') {
                        toggleBox('noMap', 0);
                        toggleBox('fromMap', 0);
                        toggleBox('toMap', 0);
                        toggleBox('routeMap', 1);
                }
                else {
                        toggleBox('noMap', 1);
                        toggleBox('fromMap', 0);
                        toggleBox('toMap', 0);
                        toggleBox('routeMap', 0);
                }
        }
}

function addAirport (map, airport) {
        var lat, lng;
        var mapObj;
        var xmlHttp1 = GetXmlHttpObject();
        var xmlHttp2 = GetXmlHttpObject();

        if(map == 'fromMap') { mapObj = fromGMap; }
        else if(map == 'toMap') { mapObj = toGMap; }

        if (xmlHttp1 == null) {
                alert ('Browser does not support HTTP Request');
                return;
        }
        var url = 'ajax2.php';
        url = url + '?q=lnglat&apt=' + airport;
        xmlHttp1.onreadystatechange = function a() { lat = xmlHttp1.responseText; };
        xmlHttp1.open('POST', url, true);
        xmlHttp1.send(null);

        var url = 'ajax2.php';
        url = url + '?q=lnglat&apt=' + airport;
        xmlHttp2.onreadystatechange = function a() { lng = xmlHttp2.responseText; mapObj.addOverlay(new GMarker(new GLatLng(lat, lng))); };
        xmlHttp2.open('POST', url, true);
        xmlHttp2.send(null);
}

function centerMapByZip (zip, map) {
        var lat, lng;
        var mapObj;
        var xmlHttp1 = GetXmlHttpObject();
        var xmlHttp2 = GetXmlHttpObject();

        if(map == 'fromMap') { mapObj = fromGMap; }
        else if(map == 'toMap') { mapObj = toGMap; }

        if (xmlHttp1 == null) {
                alert ('Browser does not support HTTP Request');
                return;
        }
        var url = 'ajax2.php';
        url = url + '?q=lnglat&zip=' + zip + '&w=lat';
        xmlHttp1.onreadystatechange = function a() { lat = xmlHttp1.responseText; };
        xmlHttp1.open('POST', url, true);
        xmlHttp1.send(null);

        var url = 'ajax2.php';
        url = url + '?q=lnglat&zip=' + zip + '&w=lng';
        xmlHttp2.onreadystatechange = function a() { lng = xmlHttp2.responseText; mapObj.setCenter(new GLatLng(lat, lng), 9); };
        xmlHttp2.open('POST', url, true);
        xmlHttp2.send(null);
}

function centerMapByCity (city, state, map) {
        var lat, lng;
        var mapObj;
        var xmlHttp1 = GetXmlHttpObject();
        var xmlHttp2 = GetXmlHttpObject();

        if(map == 'fromMap') { mapObj = fromGMap; }
        else if(map == 'toMap') { mapObj = toGMap; }

        if (xmlHttp1 == null) {
                alert ('Browser does not support HTTP Request');
                return;
        }
        var url = 'ajax2.php';
        url = url + '?q=lnglat&city=' + city + '&state=' + state + '&w=lat';
        xmlHttp1.onreadystatechange = function a() { lat = xmlHttp1.responseText; };
        xmlHttp1.open('POST', url, true);
        xmlHttp1.send(null);

        var url = 'ajax2.php';
        url = url + '?q=lnglat&city=' + city + '&state=' + state + '&w=lng';
        xmlHttp2.onreadystatechange = function a() { lng = xmlHttp2.responseText; mapObj.setCenter(new GLatLng(lat, lng), 9); };
        xmlHttp2.open('POST', url, true);
        xmlHttp2.send(null);
}

function authenticateUser() {
	var username = document.getElementById('username');
	var passwd = document.getElementById('passwd');

        if(zip.value.length == 5) {
                xmlHttp = GetXmlHttpObject();
                var url = "https://www.flyimagineair.com/include/userauth.php?username=" + username.value + "&password=" + passwd.value;
                url = url + '&sid=' + Math.random();

                xmlHttp.onreadystatechange = authResponse;
                xmlHttp.open('GET', url, true);
                xmlHttp.send(null);
         }
	
}

function authResponse() {
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete') {
                if(xmlHttp.responseText == '') {
			document.getElementById("loginTitle").bgColor = "#FFCCCC";
			document.getElementById("loginTitle").innerHTML = "Login Failed. Please try again.";
			document.getElementById("passwd").value=""
		}
		else {
                        document.getElementById("loginTitle").bgColor = "green";
                        document.getElementById("loginTitle").innerHTML = "Welcome back, <NAME>";
                        document.getElementById("loginContent").value="Welcome!!"	
		}
	}
}

function GetXmlHttpObject() {
     var objXMLHttp = null;
     if(window.XMLHttpRequest) {
          objXMLHttp = new XMLHttpRequest();
     }
     else if (window.ActiveXObject) {
          objXMLHttp = new ActiveXObject('Microsoft.XMLHttp');
     }
     return objXMLHttp;
}
 
