﻿var PATH_OPERATIONALDATA = "EIData/OperationalData.xml?date={0}";
var PATH_GOOGLE = "Google.php?q={0}";

var KIOSK_KEYWORD = /Kiosk/;
var HOTSPOT_KEYWORD = /Wi Fi/;

var MAX_AREA_CYCLES = 2;

var KioskSearchTextfield = null;
var HotspotSearchTextfield = null;

var Kiosks = null;
var KiosksFranchises = null;
var Hotspots = null;
var HotspotsFranchises = null;

var kioskdata = [];
var hotspotdata = [];

var kioskCompleter = null;
var hotspotCompleter = null;

var mainAreas = null;
var areaIndex = -1;
var areaCycles = -1;

var imagePaths = new Array(
    "EIImages/Link-Kiosks.jpg",
    "EIImages/Link-KiosksFranchises.jpg",
    "EIImages/Link-Hotspots.jpg",
    "EIImages/Link-HotspotsFranchises.jpg",
    "EIImages/Textfield.gif",
    "EIImages/Buttons.gif",
    "EIImages/Header-Deco.png",
    "EIImages/Footer-Deco.png",
    "EIImages/ContentArea.png",
    "EIImages/Footer-Dotted.gif",
    "EIImages/Logo.gif",
    "EIImages/Vertical-Dotted.gif"
);

var imgFormat = '<img src="{0}" alt="" onload="ImageLoaded();" onerror="ImageLoaded();" />';

var imagesProcessed = 0;
	
function PostInitializeDom() {
	
	KioskSearchTextfield = $("KioskSearchTextfield");
	HotspotSearchTextfield = $("HotspotSearchTextfield");
	
	Kiosks = $("Kiosks");
	KiosksFranchises = $("KiosksFranchises");
	Hotspots = $("Hotspots");
	HotspotsFranchises = $("HotspotsFranchises");
	
	Kiosks.onclick = ChangeUrl;
	KiosksFranchises.onclick = ChangeUrl;
	Hotspots.onclick = ChangeUrl;
	HotspotsFranchises.onclick = ChangeUrl;  
	
	//Kiosks.url = "kiosks.html";
	//Hotspots.url = "wi-fi.html";
	KiosksFranchises.url = "MapFranchises.php";
	HotspotsFranchises.url = "WiFi-Signup-Welcome.php";
	
	mainAreas = new Array(Kiosks, Hotspots, HotspotsFranchises, KiosksFranchises); 
	
	//Kiosks.url = "MapOperational.html";	
}

function ChangeUrl(e) {
    if (!e) var e = window.event
    var src = e.target || e.srcElement;
    if (src==KioskSearchTextfield||src==HotspotSearchTextfield) {
    } else {
        if (this.url) { document.location = this.url; }
    }
}

function KioskLocationSelected() {
	var value = null;
	for (var i=0 ;i<kioskdata.length; i++) {
	    if (kioskdata[i][0]==KioskSearchTextfield.value) {
	        value = kioskdata[i][1];
	    }
	}
	if (value) { document.location = "MapOperational.php?q=" + value; }	
}

function HotspotSelected() {
	var value = null;
	for (var i=0 ;i<hotspotdata.length; i++) {
	    if (hotspotdata[i][0]==HotspotSearchTextfield.value) {
	        value = hotspotdata[i][1];
	    }
	}
	if (value) { document.location = "MapOperational.php?q=" + value; }		
}

function ProcessOperationalData() {
	
	var xml = this.response["xml"].documentElement;
	
	var locations = xml.getElementsByTagName("Location");
	for (var i=0; i<locations.length; i++) {
		var node = locations[i];
		var obj = {};
		var status = GetNodeData(node, "Status");
		var coordinates = GetNodeData(node, "Coordinates");
		var name = GetNodeData(node, "Name");
		var postcode = GetNodeData(node, "Postcode");
		var state = GetNodeData(node, "State").toUpperCase();
		
		name = name + (state ? " " + state : "") + (postcode ? " " + postcode : "");
		
		var dataentry = [name, coordinates];
		
		if (status.match(KIOSK_KEYWORD)) {
			kioskdata.push(dataentry);
		} 
		
		if (status.match(HOTSPOT_KEYWORD)) {
			hotspotdata.push(dataentry);		
		}

	}
	
	kioskCompleter = new Autocompleter.Local(KioskSearchTextfield, kioskdata, {
		'delay': 100,
		'injectChoice': function(choice) {
			var el = new Element('li')
				.setHTML(this.markQueryValue(choice[0]))
				//.adopt(new Element('span', {'class': 'example-info'}).setHTML(this.markQueryValue(choice[1])));
			el.inputValue = choice[0];
			this.addChoiceEvents(el).injectInside(this.choices);
			KioskSearchTextfield.dataValue = choice[1];
		},
		'maxChoices' : 15,
		'className': 'kioskcompleter',
		'onSelect' : KioskLocationSelected
	});
	
	kioskCompleter.globalSearch = true;
	
	kioskCompleter.enterPressed = function() {
        var q = KioskSearchTextfield.value;
        q += (q.length>0?" ":"") + "Australia";
        
        var operationalXHR = new XHR({
	        method: 'get',
	        onSuccess: ProcessGoogleCoordinates,
	        onFailure: GoogleCoordinatesLoadError
        }).send(PATH_GOOGLE.replace(/\{0\}/, q));	    
	}
	
	hotspotCompleter = new Autocompleter.Local(HotspotSearchTextfield, hotspotdata, {
		'delay': 100,
		'injectChoice': function(choice) {
			var el = new Element('li')
				.setHTML(this.markQueryValue(choice[0]))
				//.adopt(new Element('span', {'class': 'example-info'}).setHTML(this.markQueryValue(choice[1])));
			el.inputValue = choice[0];
			this.addChoiceEvents(el).injectInside(this.choices);
			HotspotSearchTextfield.dataValue = choice[1];
		},
		'maxChoices' : 15,
		'className': 'hotspotcompleter',
		'onSelect' : HotspotSelected
	});	
	
	hotspotCompleter.globalSearch = true;
	
	hotspotCompleter.enterPressed = function() {
        var q = HotspotSearchTextfield.value;
        q += (q.length>0?" ":"") + "Australia";
        
        var operationalXHR = new XHR({
	        method: 'get',
	        onSuccess: ProcessGoogleCoordinates,
	        onFailure: GoogleCoordinatesLoadError
        }).send(PATH_GOOGLE.replace(/\{0\}/, q));	    
	}	
	
		
}

function OperationalDataLoadError() {
	ErrorHandler("OperationalDataLoadError");
}

function ProcessGoogleCoordinates() {
    var data = this.response["text"];
    data = data.split(",");
    if (data.length==4) {
        var status = data[0];
        if (status=="200") {
            var x = data[2];
            var y = data[3];
            document.location = "MapOperational.php?q=" + x+ "," + y;
        }
    }
}

function GoogleCoordinatesLoadError() {

}
	
function InitializeComplete() {
    
    var operationalXHR = new XHR({
	    method: 'get',
	    onSuccess: ProcessOperationalData,
	    onFailure: OperationalDataLoadError
    }).send(PATH_OPERATIONALDATA.replace(/\{0\}/, new Date()));
    
    InitializeClassNames();
    
    if (Cookie.get("animation")!="true") {
    
        Cookie.set("animation", "true")
        
        var div = new Element('div', {
            'styles': {
                'display': 'none'
            }
        });
        
        div.injectInside(document.body);
        
        var html = "";
        for (var i=0; i<imagePaths.length; i++) {
            html += imgFormat.replace(/\{0\}/, imagePaths[i]);
        }
        
        div.setHTML(html);
    
    }

}

function ImageLoaded() {
    if (++imagesProcessed==imagePaths.length) {
        HighlightAreas();
    }
}

// Search
function SearchKiosks() {
    kioskCompleter.enterPressed();
}

function SearchHotspots() {
    hotspotCompleter.enterPressed();
}

// Highlights

function HighlightAreas() {

    if (areaIndex>-1) {
        mainAreas[areaIndex].onmouseout();
    }

    areaIndex++;
    
    if (areaIndex<4) {
        mainAreas[areaIndex].onmouseover();
        setTimeout("HighlightAreas();", 250);
    } else {
        if (++areaCycles < MAX_AREA_CYCLES) {
            areaIndex = -1;
            setTimeout("HighlightAreas();", 0);
        } 
    }

}

function Default() {
    this.className = this.className.replace(/Over/, "Default");
}

function Over() {
    this.className = this.className.replace(/Default/, "Over");
}

function InitializeClassNames() {
	
	Kiosks.className = "KiosksDefault";
	KiosksFranchises.className = "KiosksFranchisesDefault";
	Hotspots.className = "HotspotsDefault";
	HotspotsFranchises.className = "HotspotsFranchisesDefault";

	Kiosks.onmouseout = Default;
	KiosksFranchises.onmouseout = Default;
	Hotspots.onmouseout = Default;
	HotspotsFranchises.onmouseout = Default;	
	Kiosks.onmouseover = Over;
	KiosksFranchises.onmouseover = Over;
	Hotspots.onmouseover = Over;
	HotspotsFranchises.onmouseover = Over;
	
}

