var SERVICE_LOCATOR_INFO_URI = "/support/search/serviceLocatorProxy2.do";
var MARKER_IMAGE_DIR = "/images/function/icon_marker";
var MARKER_IMAGE_EXT = ".png";
var MARKER_LETTERS = new Array;
MARKER_LETTERS[0] = "A";
MARKER_LETTERS[1] = "B";
MARKER_LETTERS[2] = "C";
MARKER_LETTERS[3] = "D";
MARKER_LETTERS[4] = "E";
MARKER_LETTERS[5] = "F";
MARKER_LETTERS[6] = "G";
MARKER_LETTERS[7] = "H";
MARKER_LETTERS[8] = "I";
MARKER_LETTERS[9] = "J";
MARKER_LETTERS[10] = "K";
MARKER_LETTERS[11] = "L";
MARKER_LETTERS[12] = "M";
MARKER_LETTERS[13] = "N";
MARKER_LETTERS[14] = "O";

var gMap = null;
var geocoder = null;
var gMapType = G_NORMAL_MAP;
var markers = new Array;
var locators = new Array;
var locators2 = new Array;

var address = null;
var servicecenters = null;

var totalPages = 0;
var currPage = 1;
var ROWS_ON_A_PAGE = 15;
var COLS_ON_A_PAGE = 10;
var markCount = 0;

var scenter_msg_sitecode = null;
var scenter_msg_longitude = null;
var scenter_msg_latitude = null;
var scenter_msg_zoomlevel = null;
var scenter_msg_text1 = null;
var scenter_msg_text2 = null;
var scenter_msg_text3 = null;
var scenter_msg_text4 = null;
var scenter_msg_text5 = null;
var scenter_msg_text6 = null;
var scenter_msg_text7 = null;
var scenter_msg_text8 = null;
var scenter_msg_text9 = null;
var scenter_msg_text10 = null;
var scenter_msg_text11 = null;

Event.observe(window, 'unload', GUnload);
Event.observe(window, 'load', doWindowOnLoad);

function doWindowOnLoad() {
    // Global Variables
    scenter_msg_sitecode = $('scenter_msg_sitecode').innerHTML;
    scenter_msg_longitude = parseFloat($('scenter_msg_longitude').innerHTML);
    scenter_msg_latitude = parseFloat($('scenter_msg_latitude').innerHTML);
    scenter_msg_zoomlevel = parseInt($('scenter_msg_zoomlevel').innerHTML);
    scenter_msg_text1 = $('scenter_msg_text1').innerHTML;
    scenter_msg_text2 = $('scenter_msg_text2').innerHTML;
    scenter_msg_text3 = $('scenter_msg_text3').innerHTML;
    scenter_msg_text4 = $('scenter_msg_text4').innerHTML;
    scenter_msg_text5 = $('scenter_msg_text5').innerHTML;
    scenter_msg_text6 = $('scenter_msg_text6').innerHTML;
    scenter_msg_text7 = $('scenter_msg_text7').innerHTML;
    scenter_msg_text8 = $('scenter_msg_text8').innerHTML;
    scenter_msg_text9 = $('scenter_msg_text9').innerHTML;
    scenter_msg_text10 = $('scenter_msg_text10').innerHTML;
    scenter_msg_text11 = $('scenter_msg_text11').innerHTML;
    
    SERVICE_LOCATOR_INFO_URI = "/" + scenter_msg_sitecode + SERVICE_LOCATOR_INFO_URI;
    MARKER_IMAGE_DIR = "/" + scenter_msg_sitecode + MARKER_IMAGE_DIR;

    if (!GBrowserIsCompatible()) {
        return;
    }

    try {
        gMap = new GMap2($('gMap'));

        gMap.addControl(new GLargeMapControl());
        gMap.addControl(new GScaleControl());
        gMap.addControl(new GMapTypeControl());
        gMap.getPane(G_MAP_FLOAT_PANE).appendChild($('overlay'));
        
        gMap.setCenter(new GLatLng(scenter_msg_latitude, scenter_msg_longitude));
        gMap.setZoom(scenter_msg_zoomlevel);

        $('gMap').hide();

        geocoder = new GClientGeocoder();
    }
    catch (e) {
    }
}

function selectLST(oform) {
    var lstValue = $F($(oform)['loc_search_type']);
    
    if ("CITY" == lstValue) {
        $(oform)['loc_search_keyword'].style.display = 'none';
        $(oform)['loc_search_selectbox_area'].style.display = 'none';
        $(oform)['loc_search_selectbox_city'].style.display = '';
    } else if ("AREA" == lstValue) {
        $(oform)['loc_search_keyword'].style.display = 'none';
        $(oform)['loc_search_selectbox_city'].style.display = 'none';
        $(oform)['loc_search_selectbox_area'].style.display = '';
    } else {
        $(oform)['loc_search_selectbox_city'].style.display = 'none';
        $(oform)['loc_search_selectbox_area'].style.display = 'none';
        $(oform)['loc_search_keyword'].style.display = '';
    }
}

var isOnSubmit = false;
function doOnSearchFormSubmit(oform) {

    if(isOnSubmit) {
        return;
    }
    
    $('noServiceCenter').hide();

    if($('gMap').visible() || $('searchResult').visible()) {
        gMap.clearOverlays();
        $('gMap').hide();
        $('searchResult').hide();
        $('locators2').hide();
        $('pagingFrame').hide();
    }

    var addr = '';
    var lstValue = $F($(oform)['loc_search_type']);
    if ("CITY" == lstValue) {
        addr = $F($(oform)['loc_search_selectbox_city']);
    } else if ("AREA" == lstValue) {
        addr = $F($(oform)['loc_search_selectbox_area']);
    } else {
        addr = $F($(oform)['loc_search_keyword']);
    }
    
    if(addr=='' || addr==scenter_msg_text1) {
        $(oform)['loc_search_keyword'].focus();
        $('msgwinIsEmpty').show();
        return;
    }
    
    isOnSubmit = true;
    
    address = addr;
    currPage = 1;
    $('msgwinIsEmpty').hide();
    $(oform)['loc_search_keyword'].value = addr;
    queryLocationData(oform);
    
    isOnSubmit = false;
}

function queryLocationData(oform) {

    try {
        new Ajax.Request( SERVICE_LOCATOR_INFO_URI, {
                method: 'get',
                parameters: {
                    loc_search_type: oform.loc_search_type.value,
                    loc_search_keyword: oform.loc_search_keyword.value,
					loc_product_ia_level: oform.loc_product_ia_level.value,
					prd_ia_cd: oform.prd_ia_cd.value
                },
                onSuccess: function(transport) {
                    if (navigator.userAgent.indexOf('Firefox') >= 0) {
                        servicecenters = ((new DOMParser()).parseFromString(transport.responseText, "text/xml")).getElementsByTagName("servicecenter");
                    } else {
                        servicecenters = transport.responseXML.getElementsByTagName("servicecenter");
                    }
                    
                    if(!servicecenters || servicecenters.length==0) {
                        $('noServiceCenter').show();
                    }
                    else {
                        totalPages = (servicecenters.length==0)? 0: Math.floor((servicecenters.length - 1)/ROWS_ON_A_PAGE) + 1;
                        
                        drawSearchResult();
                        servicePaging(1);
                    }
                },
                onFailure: function(transport) {
                },
                onException: function(request, exception) {
                    alert(exception);
                }
            }
        );
    }
    catch (e) {
        alert(e);
        return false;
    }

    return true;
}

function servicePaging(p) {

    currPage = p;
    markCount = 0;

    $('pagingFrame').hide();

    loadLocationPage();
    drawLocatorsAndMarkers();

    $('pagingFrame').innerHTML = getPaging(totalPages, currPage);
    $('pagingFrame').show();

    return false;
}

function drawSearchResult() {
    $('searchResult').innerHTML = getSearchResult(servicecenters.length, address);
    $('searchResult').show();
}

function getSearchResult(number, address) {
    return (number==0)? scenter_msg_text2 : scenter_msg_text3 + number;
}

function loadLocationPage() {
    
    $('locators2').innerHTML = '';
    
    // index
    var start = (currPage - 1)*ROWS_ON_A_PAGE;
    if(start>=servicecenters.length) {
        return;
    }

    // count
    var end = currPage*ROWS_ON_A_PAGE;
    if(end > servicecenters.length) {
        end = servicecenters.length;
    }

    var html = '';
    for(var i=start; i<end; i++) {
        html += getLocator2(i, servicecenters[i]);
    }
    
    $('locators2').innerHTML = '<table id="locatorsFrame2">' + getHeader() + html + '</table>';
    $('locators2').show();
}

var bounds = null;
var nDisplayed;
function drawLocatorsAndMarkers() {

    $('locators').innerHTML = '';

    var dl = document.createElement('dl');
    dl.setAttribute('id', 'locatorsFrame');
    $('locators').appendChild(dl);

    // index
    var start = (currPage - 1)*ROWS_ON_A_PAGE;
    if(start>=servicecenters.length) {
        return;
    }

    // count
    var end = currPage*ROWS_ON_A_PAGE;
    if(end > servicecenters.length) {
        end = servicecenters.length;
    }

    $('overlay').hide();
    gMap.clearOverlays();

    bounds = new GLatLngBounds;
    for(var i=start; i<end; i++) {
        drawLocatorAndMarker(i, servicecenters[i]);
    }
    
    if (markCount == 0) {
        //gMap.setMapType(G_NORMAL_MAP);
        //gMap.setCenter(new GLatLng(scenter_msg_latitude, scenter_msg_longitude));
        //gMap.setZoom(scenter_msg_zoomlevel);
        $('gMap').hide();
    } else {
        $('gMap').show();
        
        nDisplayed = end - start;
        var iIntervalID = setInterval( function() {
    
                if($('locatorsFrame').childNodes.length >= nDisplayed) {
    
                    var zoomlevel = gMap.getBoundsZoomLevel(bounds);
    
                    // Set the zoom level & center to encompass all
                    var lat = (bounds.getSouthWest().lat() + bounds.getNorthEast().lat())/2;
                    var lng = (bounds.getSouthWest().lng() + bounds.getNorthEast().lng())/2;
    
                    gMap.setCenter(new GLatLng(lat, lng), zoomlevel - 1);
                    gMap.setMapType(gMapType);
    
                    clearInterval(iIntervalID);
                }
            },
            1000
        );
    }
}

function drawLocatorAndMarker(i, child) {

    var longitude = getLongitude(child);
    var latitude = getLatitude(child);
    
    var gLatLng = null;
    if (!isNaN(longitude) && !isNaN(latitude)) {
        gLatLng = new GLatLng(latitude, longitude);
    }
    
    var mapType = getMapType(child);
    if(i==ROWS_ON_A_PAGE*(currPage-1)) {
        if('N' == mapType) {
            gMapType = G_NORMAL_MAP;
        } else if('S' == mapType) {
            gMapType = G_SATELLITE_MAP;
        } else if('H' == mapType) {
            gMapType = G_HYBRID_MAP;
        } else {
            gMapType = G_NORMAL_MAP;
        }
    }
    
    var html = createLocator(i, child);
    if(i==ROWS_ON_A_PAGE*(currPage-1)) {
        new Insertion.Top('locatorsFrame', html);
    }
    else if($('locator_' + (i-1))) {
        new Insertion.After('locator_' + (i-1), html);
    }
    else {
        new Insertion.Bottom('locatorsFrame', html);
    }

    if(!locators[i] || locators[i].innerHTML == '') {
        locators[i] = $('locator_' + i);
        locators[i].internalId = i;
    }
    
//    if(!locators2[i] || locators2[i].innerHTML == '') {
        locators2[i] = $('locator2_' + i);
        locators2[i].internalId = i;
//    }

    if(!gLatLng) {
//        Event.observe(locators2[i].down('a'), 'click', doLocatorNotFound);
    }
    else {
//        Event.observe(locators2[i].down('a'), 'click', doLocatorOnClick);

        markers[i] = createMarker(i, gLatLng);
        gMap.addOverlay(markers[i]);
        markCount += 1;

        bounds.extend(gLatLng);
    }
}

function createMarker(i, gLatLng) {

    var markImage = MARKER_IMAGE_DIR + MARKER_LETTERS[i%ROWS_ON_A_PAGE] + MARKER_IMAGE_EXT;
    var icon = new GIcon(G_DEFAULT_ICON, markImage);
    icon.iconSize = new GSize(21, 32);
    icon.iconAnchor = new GPoint(6, 21);
    icon.infoWindowAnchor = new GPoint(9, 5);

    var marker = new GMarker(gLatLng, icon);

    marker.internalId = i;
    GEvent.addListener(marker, "click", function() {
        doMarkerOnClick(marker);
    });

    return marker;
}

function createLocator(i, node) {
    return getLocator(i, node);
}

function getAddress(node) {

    var contact = node.getElementsByTagName('contact')[0];

    var str_address = contact.getElementsByTagName('address')[0].childNodes[0].nodeValue.strip();
    if (contact.getElementsByTagName('city')[0].childNodes.length > 0) {
        str_address += ' ' + contact.getElementsByTagName('city')[0].childNodes[0].nodeValue.strip();
    }
    
    if (contact.getElementsByTagName('area')[0].childNodes.length > 0) {
        str_address += ', ' + contact.getElementsByTagName('area')[0].childNodes[0].nodeValue.strip();
    }

    return str_address;
}

function getLongitude(node) {

    var map = node.getElementsByTagName('map')[0];
    var longitude = '';
    if (map.getElementsByTagName('longitude')[0].childNodes.length > 0) {
        longitude = map.getElementsByTagName('longitude')[0].childNodes[0].nodeValue.strip();
    }
    
    return parseFloat(longitude);
}

function getLatitude(node) {

    var map = node.getElementsByTagName('map')[0];
    var latitude = '';
    if (map.getElementsByTagName('latitude')[0].childNodes.length > 0) {
        latitude = map.getElementsByTagName('latitude')[0].childNodes[0].nodeValue.strip();
    }
    
    return parseFloat(latitude);
}

function getZoomlevel(node) {

    var map = node.getElementsByTagName('map')[0];
    var zoomlevel = '';
    if (map.getElementsByTagName('zoomlevel')[0].childNodes.length > 0) {
        zoomlevel = map.getElementsByTagName('zoomlevel')[0].childNodes[0].nodeValue.strip();
    }
    
    return parseInt(zoomlevel);
}

function getMapType(node) {

    var map = node.getElementsByTagName('map')[0];
    var maptype = null;
    if (map.getElementsByTagName('type')[0].childNodes.length > 0) {
        maptype = map.getElementsByTagName('type')[0].childNodes[0].nodeValue.strip();
    }
    
    return maptype;
}

function getLocator(i, node) {

    var contact = node.getElementsByTagName('contact')[0];
    
    var str_name = '';
    if (node.getElementsByTagName('name')[0].childNodes.length > 0) {
        str_name = node.getElementsByTagName('name')[0].childNodes[0].nodeValue.strip();
    }
    
    var str_postalcode = '';
    if (contact.getElementsByTagName('postal-code')[0].childNodes.length > 0) {
        str_postalcode = contact.getElementsByTagName('postal-code')[0].childNodes[0].nodeValue.strip();
    }
    
    var str_email = '';
    if (contact.getElementsByTagName('email')[0].childNodes.length > 0) {
        str_email = contact.getElementsByTagName('email')[0].childNodes[0].nodeValue.strip();
    }
    
    var str_phone = '';
    if (contact.getElementsByTagName('phone')[0].childNodes.length > 0) {
        str_phone = contact.getElementsByTagName('phone')[0].childNodes[0].nodeValue.strip();
		str_phone = str_phone.replace(/[,/;]/g, ', ');
    }
    
    var str_fax = '';
    if (contact.getElementsByTagName('fax')[0].childNodes.length > 0) {
        str_fax = contact.getElementsByTagName('fax')[0].childNodes[0].nodeValue.strip();
		str_fax = str_fax.replace(/[,/;]/g, ', ');
    }
    
    var str_saletype = '';
    if (contact.getElementsByTagName('saletype')[0].childNodes.length > 0) {
        str_saletype = contact.getElementsByTagName('saletype')[0].childNodes[0].nodeValue.strip();
        str_saletype = '(' + str_saletype + ')';
    }

    var s = '';
    s += "<div id='locator_" + i + "' class='locator'>";
    s += ' <dt><strong>' + MARKER_LETTERS[i%ROWS_ON_A_PAGE] + '. <a href="#">' + str_name + '</a></strong>' + str_saletype + '</dt>';
    s += ' <dd>';
    s += ' <ul>';
    s += '     <li>' + getAddress(node) + ' ' + str_postalcode + '</li>';
    s += '     <li>' + scenter_msg_text7 + ': ' + str_email + '</li>';
    s += '     <li>' + scenter_msg_text5 + ': ' + str_phone + '</li>';
    s += '     <li>' + scenter_msg_text6 + ': ' + str_fax + '</li>';
    s += ' </ul>';
    s += ' </dd>';
    s += '</div>';

    return s;
}

function getLocator2(i, node) {

    var contact = node.getElementsByTagName('contact')[0];
    
    var str_name = '';
    if (node.getElementsByTagName('name')[0].childNodes.length > 0) {
        str_name = node.getElementsByTagName('name')[0].childNodes[0].nodeValue.strip();
    }
    
    var str_email = '';
    if (contact.getElementsByTagName('email')[0].childNodes.length > 0) {
        str_email = contact.getElementsByTagName('email')[0].childNodes[0].nodeValue.strip();
    }
    
    var str_phone = '';
    if (contact.getElementsByTagName('phone')[0].childNodes.length > 0) {
        str_phone = contact.getElementsByTagName('phone')[0].childNodes[0].nodeValue.strip();
		str_phone = str_phone.replace(/[,/;]/g, '<br/>');
    }
    
    var str_fax = '';
    if (contact.getElementsByTagName('fax')[0].childNodes.length > 0) {
        str_fax = contact.getElementsByTagName('fax')[0].childNodes[0].nodeValue.strip();
		str_fax = str_fax.replace(/[,/;]/g, '<br/>');
    }
    
    var str_saletype = '';
    if (contact.getElementsByTagName('saletype')[0].childNodes.length > 0) {
        str_saletype = contact.getElementsByTagName('saletype')[0].childNodes[0].nodeValue.strip();
        str_saletype = '(' + str_saletype + ')';
    }
    
    var str_city = '';
	if (contact.getElementsByTagName('city')[0].childNodes.length > 0) {
        str_city = contact.getElementsByTagName('city')[0].childNodes[0].nodeValue.strip();
	}
    
    var s = '';
    s += "<tr id='locator2_" + i + "' class='locator'>";
    s += ' <td>' + str_city + '</td>';
    s += ' <td>' + str_name + str_saletype + '</td>';
    s += ' <td>' + str_email + '<br/>' + getAddress(node) + '</td>';
    s += ' <td class="lasttd_center">' + str_phone + '<br/><font color="#D8D8D8">\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500</font><br/>' + str_fax + '</td>';
    s += '</tr>';

    return s;
}

function getHeader() {

    var s = '';

    s += ' <colgroup>';
    s += '    <col width="77"/>';
    s += '    <col width="80"/>';
    s += '    <col width="221"/>';
    s += '    <col width="137"/>';
    s += ' </colgroup>';
    s += ' <thead>';
    s += ' <tr>';
    s += '    <th scope="col">' + scenter_msg_text8.toLowerCase() + '</th>';
    s += '    <th scope="col">' + scenter_msg_text9 + '</th>';
    s += '    <th scope="col">' + scenter_msg_text10 + '</th>';
    s += '    <th scope="col" class="last">' + scenter_msg_text11 + '</th>';
    s += ' </tr>';
    s += ' </thead>';

    return s;
}

function getPaging(pages, curr) {

    var s = '';
    var pgStart = Math.floor((curr - 1) / COLS_ON_A_PAGE) * COLS_ON_A_PAGE + 1;
    var pgEnd = (Math.floor((curr - 1) / COLS_ON_A_PAGE) + 1) * COLS_ON_A_PAGE;

    s += "<div id='paging' class='paging'>";

    if(pgStart > 1) {
        s += "<a href='#' onclick='servicePaging(" + (pgStart - 1) + "); return false;'>";
    }

    s += "<img src='/" + scenter_msg_sitecode + "/images/public/btn_leftarrow1.gif' border='0' alt='previous' class='paging_prev' align='absmiddle' />";

    if(pgStart > 1) {
        s += "</a>";
    }

    if(pages > 0) {
        s += (curr == pgStart) ? ("<strong>" + pgStart + "</strong>") : ("<a href='#' onclick='servicePaging(" + pgStart + "); return false;'>" + pgStart + "</a>");
    }

    for(var p = pgStart + 1; p <= pgEnd && p <= pages; p++) {
        s += "<span>|</span>";
        s += (p == curr) ? "<strong>" + p + "</strong>": "<a href='#' onclick='servicePaging(" + p + "); return false;'>" + p + "</a>";
    }

    if(pgEnd < pages) {
        s += "<a href='#' onclick='servicePaging(" + (pgEnd + 1) + "); return false;'>";
    }

    s += "<img src='/" + scenter_msg_sitecode + "/images/public/btn_rightarrow1.gif' border='0' alt='next' class='paging_next' align='absmiddle' />";

    if(pgEnd < pages) {
        s += "</a>";
    }

    s += "</div>";

    return s;
}

function doMarkerOnClick(marker) {
    activateLocator(locators2[marker.internalId]);
    showInfoWindow(marker);
}

function doLocatorOnClick(event) {

    try {

        var locator = Event.element(event);
        while(locator.tagName.toLowerCase()!='tr') {
            locator = locator.parentNode;
        }

        if(!locator) {
            return;
        }

        activateLocator(locator);
        showInfoWindow(markers[locator.internalId]);
    }
    catch(e) {
    }
}

function doLocatorNotFound(event) {
    layerAlert(scenter_msg_text4, event);
    return false;
}

var locatorSelected = false;
function activateLocator(o) {

    if(locatorSelected == o) {
        return false;
    }

    try {
        var i = (o.childNodes[0].tagName=='td')? 0: 1;

        o.childNodes[i].childNodes[0].className = "selected";

        if (locatorSelected && locatorSelected.hasChildNodes()) {
            locatorSelected.childNodes[i].childNodes[0].className = "";
        }
    }
    catch (e) {
    }

    locatorSelected = o;
}

function showInfoWindow(marker) {

    $('overlay').hide();
    
    gMap.panTo( new GLatLng( marker.getPoint().lat(), marker.getPoint().lng() ) );
    
    var map_point = gMap.fromLatLngToDivPixel(marker.getPoint());

    var vert_loc = parseInt(map_point.y) + 12;
    $('overlay').style.top = vert_loc  + "px";

    var horiz_loc = parseInt(map_point.x) - 140;
    $('overlay').style.left = horiz_loc + "px";

    $('scenterInfo').innerHTML = getLocationInfo(marker.internalId);
    $('overlay').show();
}

function getLocationInfo(index) {

    var l = locators[index];
    var s = '<dl>' + l.innerHTML + '</dl>';

    return s;
}

function layerAlert(message, event) {
    var clickY = Event.pointerY(event) - 100;
	
    $('alertmessage').innerHTML = message;
	$('alertframe').style.top = clickY + 'px';
    $('alertframe').show();
}