﻿

var find_pin_array = new Array();
var find_pin_element_array = new Array();
var find_pin_pos = 0;
var find_finished = false;
var current_find = null;
var saveAP = null;
var idCounter = 1;

function screen_debug(output) {
    var debug_area = document.getElementById('debug');
    debug_area.innerHTML = debug_area.innerHTML + output + '\n<br/> ';
}

// Main Functions

function find_on_map(search_item, find_value, find_icon, find_pos) {

   // debugger;
    screen_debug('find start ');
    var find_var = find_value.replace(' ', '_');
    for (var f = 0; f < pc_array.length; f++) {
        //map.Find(find_info.pin_name,'SO31 7ZN',1,onFoundResults);
        screen_debug('postcode: ' + pc_array[f]);
    }
    
    find_pin_pos = find_pin_in_array(find_value, find_icon, find_pos);
    if (search_item.checked == true) {
        find_pin_pos = find_pin_in_array(find_value, find_icon, find_pos);
        find_near(find_pin_array[find_pin_pos]);
    }
    else {
        RemoveFindResult(find_pin_array[find_pin_pos]);
    }
}

function RemoveFindResult(find_info) {
    for (var l = 0; l < map.GetShapeLayerCount(); l++) {
        var checklayer = map.GetShapeLayerByIndex(l);
        var t = checklayer;
        if (checklayer.Name == find_info.id_name) {
            var layerId = checklayer.GetId();
            try {
                map.DeleteShapeLayer(checklayer);
            } catch (ex) {
            alert(ex.message);
            }
        }
    }
}


function find_near(find_info) {
    current_find = find_info;
    screen_debug('perfrom find 2:' + find_info.pin_name + ', ' + find_info.id_name + ', ' + find_info.count + ', ' + find_info.icon);
    map.Find(find_info.pin_name, '', null, null, 0, 10, false, true, false, null, onFoundResults);
}

function onFoundResults(layer, resultsArray, places, hasMore, veErrorMessage) {
    
    if (current_find != null) {
        var pin_counter = find_pin_array[find_pin_pos].count;
        var pin_exists = false;
        screen_debug('Result: ');

        var Finds = new Array();

        if (resultsArray != null) {
            for (var r = 0; r < resultsArray.length; r++) {
                try {
                    pin_counter++;
                    var pin = new VEShape(VEShapeType.Pushpin, resultsArray[r].LatLong);
                    pin.SetCustomIcon(find_pin_array[find_pin_pos].icon);
                    pin.SetTitle(resultsArray[r].Name);
                    pin.SetDescription(resultsArray[r].Description + '<br>' + resultsArray[r].Phone);

                    Finds.push(pin);

                    find_pin_array[find_pin_pos].count = pin_counter;
                } catch (e) {
                    // on error do nothing
                    alert(e.message);
                }

            }
            var FindLayer = new VEShapeLayer();
            FindLayer.SetTitle(current_find.id_name);
            map.AddShapeLayer(FindLayer);
            FindLayer.AddShape(Finds);
        }
        current_find = null;
    }
}


function delete_pins(find_info) {

    screen_debug('delete find:' + find_pin_array[find_info].pin_name + ', ' + find_pin_array[find_info].id_name + ', ' + find_pin_array[find_info].count + ', ' + find_pin_array[find_info].icon);
    var id = null;
    for (var d = 1; d <= find_pin_array[find_info].count; d++) {
        id = find_pin_array[find_info].id_name + d;
        screen_debug('delete pin : ' + id);
        try {
            map.DeletePushpin(id);


        } catch (e) {

        }
    }
    find_pin_array[find_info].count = 1;
    //find_pin_array.splice(find_info,1);
}

function find_near_postcode(find_info) {
    screen_debug('perfrom find:' + find_info.pin_name + ', ' + find_info.id_name + ', ' + find_info.count + ', ' + find_info.icon);
    //saveAP = map.AddPushpin;
    // change it to do nothing
    //map.AddPushpin = function() {};
    for (var f = 0; f < pc_array.length; f++) {
        map.Find(find_info.pin_name, pc_array[f], 1, onFoundResults);
    }
}


// Find Object and Functions   

function find_pins(pin_name, pin_icon, find_pos) {
    var pin_var = pin_name.replace(' ', '_');
    this.pin_name = pin_name;
    this.id_name = pin_var + '_';
    this.count = 0;
    this.icon = pin_icon;
    this.find_results_array = new Array();
    this.pos = find_pos;
}

function find_pin_in_array(pin_name, pin_icon) {
    var found_pin = false;
    var found_pin_pos = 0;
    screen_debug('find pin size ' + find_pin_array.length + ' to find ' + pin_name);
    for (var p = 0; p < find_pin_array.length; p++) {
        if (find_pin_array[p].pin_name == pin_name) {
            found_pin = true;
            found_pin_pos = p;
            screen_debug('find found at p = ' + p);
            p = find_pin_array.length;

        }
    }

    if (found_pin == false) {
        found_pin_pos = find_pin_array.length;
        var new_finder = new find_pins(pin_name, pin_icon);
        new_finder.find_pin_count_lead = ((found_pin_pos) + 1) * 1000;
        find_pin_array[found_pin_pos] = new_finder;
        screen_debug('cant find ' + find_pin_array[found_pin_pos].find_pin_name + ' pin id lead = ' + find_pin_array[found_pin_pos].find_pin_count_lead + ' array size = ' + found_pin_pos);

    }
    return found_pin_pos;
}

function find_obj_in_results_array(pin_pos, find_result) {

    var obj_array_size;
    var found_result = false;
    obj_array_size = find_pin_array[pin_pos].find_results_array.length;

    for (x = 0; x < obj_array_size; x++) {
        screen_debug('Check source:  ' +
                     find_pin_array[pin_pos].find_results_array[x].Name + ' , ' +
                     find_pin_array[pin_pos].find_results_array[x].Description + ' , ' +
                     find_pin_array[pin_pos].find_results_array[x].Phone + ' |' +
                     find_result.Name + ' , ' +
                     find_result.Description + ' , ' +
                     find_result.Phone + ' , ');

        if ((find_pin_array[pin_pos].find_results_array[x].Name == find_result.Name) &&
            (find_pin_array[pin_pos].find_results_array[x].Description == find_result.Description) &&
            (find_pin_array[pin_pos].find_results_array[x].Phone == find_result.Phone)) {
            x = obj_array_size + 1;
            found_result = true;
            screen_debug('FOUND MATCH');
        }
    }

    // if (found_result == false ) {
    find_pin_array[pin_pos].find_results_array[obj_array_size] = find_result;
    // }

    return found_result
}




function perform_refind(q) {
    refind(0);
}

function refind(p) {

    //debugger;
    screen_debug('refind search');

    if (p > find_pin_array.length) { return; }

    if (find_pin_array[p]) {
        RemoveFindResult(find_pin_array[p]);
        
        find_pin_pos = find_pin_in_array(find_pin_array[p].pin_name, find_pin_array[p].icon, 1);
        find_near(find_pin_array[find_pin_pos]);
    }
    var timeout = 250 * find_pin_array.length;
    setTimeout("refind(" + (p + 1) + ");", timeout);
}

function add_element(element_id) {
    screen_debug('add ' + element_id);
    find_pin_element_array.push(element_id);
    screen_debug('element array = ' + find_pin_element_array.join(' | '));
}

function remove_element(element_id) {
    var element_pos;
    for (var e = 0; e < find_pin_element_array.length - 1; e++) {
        if (find_pin_element_array[e] == element_id) {
            element_pos = e;
            //alert(element_id + ' found at ' + e);
            find_pin_element_array.splice(e, 1);
            e = find_pin_element_array.length;

        }
    }
    screen_debug('element array = ' + find_pin_element_array.join(' | '));
}
