/*
    Dealer functions & Google Maps functions for verosol-residential.com    

    Zicht Nieuwe Media Ontwerpers.
    Gerard van Helden & Jelle-Jan van Veelen
*/

var map      = null;
var markers  = [];
var infoHTML = [];
var bounds   = null;
var button   = 'offerte';
var baseIcon;

$(document).ready(
    function() { 
        loadGMaps();
    }
);

window.onunload = function() {
    GUnload();
}

zzDealer = {};
zzDealer.REGEX = RegExp ( '(^|\\s+)open(\\s+|$)', 'g' );
zzDealer.openSign = '-';
zzDealer.closeSign = '+';


zzDealer.rolloverrow = function ( dt, _id ) {
	zzElement.flipClassName(dt, 'hover');
	dt.onmouseout = function(){
		zzDealer.rolloverrow(this);
	}
}

zzDealer.closeAll = function ( dl ) {
    // walk through dd's of the DL and turn them off.
    var siblingDds = dl.getElementsByTagName ( 'dd' );
    for ( var i = 0; i < siblingDds.length; i ++ ) {
        zzElement.removeClassName ( siblingDds.item(i), 'active' );
    }
    var siblingDts = dl.getElementsByTagName ( 'dt' );

    for ( var i = 0; i < siblingDts.length; i ++ ) {
		zzElement.removeClassName ( siblingDts.item(i), 'active' );
    }
    
    for (var j in markers) {
        markers[j].show();
    }
    
}

zzDealer.showInfo = function ( questionClicked, _id ) {

    var ptr = questionClicked;
    
    // find dt parent node of clicked element
    while ( ptr && ptr.nodeName.toLowerCase () != 'dt' ) {
        ptr = ptr.parentNode;
    }
    if ( !ptr ) { alert ( 'DT not found' ); return;}
    var dt = ptr;
    var dl = dt.parentNode;
    
    // find dd sibling node of dt 
    do {
        ptr = ptr.nextSibling;
    } while ( ptr && ptr.nodeName.toLowerCase () != 'dd' );
    
    if ( !ptr ) { alert ( 'DD not found' ); return; }
    
    if ( zzElement.hasClassName ( ptr, 'active' ) ) {
		zzElement.flipClassName( ptr, '' );
        zzDealer.closeAll ( dl );
        
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.panTo(bounds.getCenter());
        markers[_id].closeInfoWindow();
        
    } else { 
        zzDealer.closeAll ( dl );
		zzElement.flipClassName( dt, 'active' );
		zzElement.flipClassName( ptr, 'active' );
        
        map.setZoom(15);
        map.panTo(markers[_id].getLatLng());
        markers[_id].openInfoWindowHtml(infoHTML[_id]);
        
    }
    
    return false;
}

function findDealer(_zipcode, _country) {
    
    $("div#dealer-List").show();
    $("#dealerListContent").slideUp("slow");
    $("#dealer-button-find").hide();
    $("#dealer-loading-small").show();
    //$("#dealer-loading-big").show();
    
    $.getJSON("http://" + window.location.hostname + "/scripts/ajax/find-dealer.php?zipcode=" + escape(_zipcode) + "&button=" + button ,
        
        function(data) {
            
            $("#dealerListContent").html(data.dealerhtml);
            $("#dealer-button-find").show();
            $("#dealer-loading-small").hide();
            //$("#dealer-loading-big").hide();
            
            $("#dealerListContent").slideDown("slow");
            
            for (var j in markers) {
                map.removeOverlay(markers[j]);
            }
            
            markers = [];
            
            for (var i = 0; i < data.dealermaps.length; i++) {
                var point  = new GLatLng(data.dealermaps[i].x, data.dealermaps[i].y);
                var marker = createMarker(point, 
                                          data.dealermaps[i].dealer_id, 
                                          data.dealermaps[i].name_escaped.replace("'", "\'"), 
                                          data.dealermaps[i].address, 
                                          data.dealermaps[i].zipcode, 
                                          data.dealermaps[i].city,
                                          data.dealermaps[i].rating);
                
                markers[data.dealermaps[i].dealer_id] = marker;
            }
            
            bounds = new GLatLngBounds;
            
            for (var j in markers) {
                map.addOverlay(markers[j]);
                bounds.extend(markers[j].getLatLng());
            }
            
            //map.setZoom(map.getBoundsZoomLevel(bounds));
            //map.panTo(bounds.getCenter());
            map.setZoom(data.zoom);
            map.panTo(new GLatLng(data.coords[0], data.coords[1]));
        }
        
    );
}

function createMarker(_point, _dealer_id, _name, _address, _zipcode, _city, _rating) {
    
    markerOptions = { icon : baseIcon };
    if (_rating > 0) {
        var ratingIcon = new GIcon(baseIcon);
        ratingIcon.image = "/images/pointers/pointer_" + _rating + "ster.png";
        markerOptions = { icon : ratingIcon };
    }
    
    var m = new GMarker(_point, markerOptions);
    if (button == 'select') {
        buttoncode = '<a href="javascript:selectDealer(' + _dealer_id + ', \'' + _name + '\', \'' + _city + '\');">selecteer dealer</a>';
    } else {
        buttoncode = '<a href="javascript:getOffer(' + _dealer_id + ');">vraag offerte aan</a>';
    }
    infoHTML[_dealer_id] = "<strong>" + _name + "</strong><br />" + 
                          _address + "<br />" + 
                          _zipcode + " " + _city + "<br />" +
                          buttoncode;
    
    GEvent.addListener(m, "click", function() {
        m.openInfoWindowHtml(infoHTML[_dealer_id]);  
    });                                    
    return m;
}

function getOffer(_dealer_id) {
    window.location.href = url_get_offer + '?dealer_id=' + _dealer_id;
}

function selectDealer(_dealer_id, _name, _city) {
	$("#selectDealerBar").hide();
    $("#selectedDealer").show();
    $("#send-button").show();
    $("#dealer-List").hide();
    $("#accent").html("<strong>" + _name + "</strong> " + _city);
    document.getElementById("dealer_id").value = _dealer_id;
    markers[_dealer_id].closeInfoWindow();
    showDealerList();
    $.scrollTo(200, 500);
    if (window.feedbackSubmitCheck) {
    	
        feedbackSubmitCheck();
    }
    
}

function loadGMaps() {
	
	baseIcon = new GIcon(G_DEFAULT_ICON);
	with (baseIcon) {
	    shadow           = "http://www.google.com/mapfiles/shadow50.png";
	    iconSize         = new GSize(32, 46);
	    shadowSize       = new GSize(60, 46);
	    iconAnchor       = new GPoint(16, 46);
	    infoWindowAnchor = new GPoint(13, 2);
	    image            = "/images/pointers/pointer_0ster.png";
	}
            
    if (GBrowserIsCompatible() && document.getElementById("googleMapsUI")) {
        map = new GMap2(document.getElementById("googleMapsUI"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableDoubleClickZoom();
        map.enableContinuousZoom();
        map.enableScrollWheelZoom();
        
        centerMap();
    }
}

function centerMap() {
    var lat  = document.getElementById('lat').value;
    var lng  = document.getElementById('lng').value;
    var zoom = document.getElementById('zoom').value;
    
    var center = new GLatLng(lat, lng);		
    map.setCenter(center, parseInt(zoom));
    
    if (bounds) {
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.panTo(bounds.getCenter());
    }
}

function setField(radiobttn) {
    var fieldObj = radiobttn.id;
    if (fieldObj == 'contact_via_phone'){
        document.getElementById('phone').parentNode.parentNode.style.display = '';
        document.getElementById('email').parentNode.parentNode.style.display = 'none';
    } else {
        document.getElementById('phone').parentNode.parentNode.style.display = 'none';
        document.getElementById('email').parentNode.parentNode.style.display = '';
    }						
}


function showDealerList() {
    var dealerList      = document.getElementById('dealerList');
    var isVisible       = dealerList.style.display;
    var blockBackground = document.getElementById('offerForm');
    var dealerBttn      = document.getElementById('selectDealer');
    //var footerTxt       = document.getElementById('offerFooter');
    
    if (isVisible == 'none') {
    	// Set zipcode to form value and load dealers
    		$('#zipcode_search')[0].value = $('#zipcode')[0].value;
    		findDealer($('#zipcode')[0].value);
    	
    	if (blockBackground) {
            zzElement.flipClassName(blockBackground, 'block-dark' );
            zzElement.flipClassName(blockBackground, 'block-light' );
            zzElement.flipClassName(dealerBttn, 'active');
        }
        dealerList.style.display = 'block';
        map.checkResize();
        centerMap();
        //window.location.href = "#jumpto";
        //footerTxt.style.display  = 'none';
    } else {
        if (blockBackground) {
            zzElement.removeClassName(blockBackground, 'block-light');
            zzElement.flipClassName(blockBackground, 'block-dark');
            zzElement.flipClassName(dealerBttn, 'active');
        }
        dealerList.style.display = 'none';
        //window.location.href = "#selectDealer";
        //footerTxt.style.display  = 'block';
    }
    
    //window.location.href = "#selectDealer";
}						

function sendQuotation() {
    
    form = document.getElementById('quotationform');
    ret  = [];
    
    for (var i = 0; i < form.elements.length; i++) {
        if (form.elements[i].getAttribute('validation') == 'required' && form.elements[i].value == '') {
            ret.push(form.elements[i].getAttribute('message'));
        }
    }
    
    if (ret.length) {
        alert(ret.join('\n'));
    } else {
        $('#quotationform').submit();
    }
    
}