﻿var CountryPark = (function() {

    var PostcodePopup = $('#PostcodePopup');
    var PostcodePopupLoader = $('#PostcodePopup.AjaxLoader');

    var GoogleMap;

    var that = this;

    var DisplayPopupResult = function(Html) {
        $('#PostcodeHtml').html(Html);
    }

    return {
        'Init': function() {
            PostcodePopup.css('opacity', 0);

            $(document).click(function(e) {
                var ev = e ? e : window.event;
                var Target = ev.target ? ev.target : ev.srcElement;
                var TargetId = '#' + Target.id;

                var Coords = {
                    'X': ev.pageX ? ev.pageX : ev.clientX + document.body.scrollLeft,
                    'Y': ev.pageY ? ev.pageY : ev.clientY + document.body.scrollTop
                };

                var Offsets = PostcodePopup.offset();

                if (!(Coords.Y >= parseInt(Offsets.top) &&
                          Coords.Y <= (parseInt(Offsets.top) + parseInt(PostcodePopup.css('height'))) &&
                          Coords.X >= parseInt(Offsets.left) &&
                          Coords.X <= (parseInt(Offsets.left) + parseInt(PostcodePopup.css('width'))))) {
                    CountryPark.HidePostcodePopup();
                }
            });

            if (GBrowserIsCompatible()) {
                GoogleMap = new GMap2(document.getElementById("map_canvas"));
                GoogleMap.setMapType(G_PHYSICAL_MAP);
                GoogleMap.setCenter(new GLatLng(0, 0), 5);
                GoogleMap.disableDragging();
            }

            $('#PostcodeBox').bind('keyup', function(e) {
                var ev = e || window.event;
                var code = 0;

                if (e.keyCode) code = e.keyCode;
                else if (e.which) code = e.which

                if (code != 13) {
                    $(this).val($(this).val().toUpperCase());
                } else {
                    CountryPark.CheckPostcode();
                }

                return false;
            });
        },
        'Unload': function() {
            if (GUnload) GUnload();
        },
        'CheckPostcode': function() {

            if (!GoogleMap) return;

            var AreaCode = $('#PostcodeBox').val();

            if (AreaCode == '') {
                $('#PostcodeBox').addClass('Invalid');

                return;
            }

            DisplayPopupResult('<div class="AjaxLoader">Please wait...</div>');

            PostcodePopup.animate({ 'height': '370px', 'opacity': 1 }, { 'queue': false, 'complete': function() {

                GoogleMap.checkResize();
                GoogleMap.clearOverlays();

                $.ajax({
                    'type': 'POST',
                    'url': Root + '/Models/TestimonialHandler.ashx',
                    'data': 'postcode=' + AreaCode,
                    'dataType': 'json',
                    'success': function(Json) {
                        if (Json) {

                            var blueIcon = new GIcon(G_DEFAULT_ICON);

                            markerOptions = { icon: blueIcon };

                            if (Json.CanWork === true) {
                                DisplayPopupResult('<h2>We work in your area:</h2><br /><p>For more information please fill out the enquiry form on the right or call us on:</p><h2>01233 770 301</h2><br /><p>Alternatively you can email us at:<br /><a href="mailto:info@countryparklandscapes.co.uk">info@countryparklandscapes.co.uk</a></p>');
                            } else {
                                DisplayPopupResult('<h2>Unfortunately we don’t cover your area:</h2><br /><p>But for more information please fill out the enquiry form<br /> on the right or call us on:</p><h2>01233 770 301</h2><br /><p>Alternatively you can email us at:<br /><a href="mailto:info@countryparklandscapes.co.uk">info@countryparklansdcapes.co.uk</a></p>');
                            }

                            if (Json.Testimonials) {

                                if (Json.Testimonials.length > 0) {
                                    var i = 0;
                                    //var Html = '<span style="font-size: 24px; color:#074D1B;">We have ' + Json.Testimonials.length + ' customers in your area.</span><br /><br /><div id="accordion" style="height: 250px">';
                                    //var Html = '<div>';
                                    for (i; i < Json.Testimonials.length; i++) {
                                        //Html += '<a href="#" class="TestHeader">' + Json.Testimonials[i].Name + ' says</a><div>' + Json.Testimonials[i].Text + '<br /><br /><span>Created ' + Json.Testimonials[i].Created + ' | Area: ' + Json.Testimonials[i].Postcode + '</span><br /><br /></div>';

                                        var x = new GMarker(new GLatLng(Json.Testimonials[i].Latitude, Json.Testimonials[i].Longitude));

                                        GoogleMap.addOverlay(x, markerOptions);
                                    }
                                    //DisplayPopupResult(Html + '</div>');

                                    /*$("#accordion").accordion({
                                    'changestart': function(event, ui) {
                                    ui.newHeader.removeClass('Collapsed');
                                    ui.newHeader.addClass('Expanded');
                                    ui.oldHeader.removeClass('Expanded');
                                    ui.oldHeader.addClass('Collapsed');
                                    }
                                    });*/
                                } else {
                                    //DisplayPopupResult('<h2>No testimonials found in your area!</h2>');
                                }
                            } else if (Json.Errors) {
                                DisplayPopupResult('<h2>Whoops</h2>' + Json.Errors);
                            } else {
                                DisplayPopupResult('<h2>Whoops</h2>An unexpected error has occured.');
                            }

                            if (Json.YourArea) {
                                GoogleMap.zoomIn(new GLatLng(Json.YourArea.Latitude, Json.YourArea.Longitude), true, true);
                                GoogleMap.setZoom(11);

                                var x = new GMarker(new GLatLng(Json.YourArea.Latitude, Json.YourArea.Longitude));

                                GoogleMap.addOverlay(x, markerOptions);
                            }
                        }
                    },
                    'error': function(a, b, c) {
                        DisplayPopupResult('<h2>Whoops!</h2>' + a.responseText);
                    }
                });
            }
            });

        },
        'HidePostcodePopup': function(Callback) {
            PostcodePopup.animate({ 'height': '0px', 'opacity': 0 }, 250, 'linear', function() {
                if (typeof Callback != 'undefined') Callback();
            });
        },
        'SubmitPostcodeForm': function() {

            var Data = { 'Postcode': $('#PostcodeBox').removeClass('Invalid').val(),
                'Name': $('#NameBox').removeClass('Invalid').val(),
                'Phone': $('#PhoneBox').removeClass('Invalid').val(),
                'Email': $('#EmailBox').removeClass('Invalid').val(),
                'Message': $('#MessageBox').removeClass('Invalid').val()
            };

            $('#SubmitEnquiryButton').attr('disabled', 'disabled').val('Please wait...');

            $.ajax({
                'type': 'POST',
                'url': Root + '/Models/EnquirySubmission.ashx',
                'data': Data,
                'dataType': 'json',
                'success': function(Json) {
                    if (Json.Errors && Json.Errors.length > 0) {
                        var ErrorHtml = '';
                        for (var i = 0; i < Json.Errors.length; i++) {
                            $('#' + Json.Errors[i].Control + 'Box').addClass('Invalid');
                            ErrorHtml += Json.Errors[i].Error + '\r\n';
                        }
                        alert(ErrorHtml);
                    } else if (Json.Redirect) {
                        window.location.href = Json.Redirect;
                    }
                },
                'complete': function() {

                    $('#SubmitEnquiryButton').attr('disabled', '').val('Submit Enquiry');
                },
                'error': function(a, b, c) {
                    alert(b);
                }
            });

            return true;
        },
        'CheckSubPostcode': function() {

            var Data = {
                'Postcode': $('#SubPostcodeBox').removeClass('Invalid').val()
            };

            $('#SubPostcodeSubmit').attr('disabled', 'disabled');
            $('#SubPostcodeResult').fadeOut(500, function() {
                $('#SubPostcodeResult').html('');

                $.ajax({
                    'type': 'POST',
                    'url': Root + '/Models/PostcodeHandler.ashx',
                    'data': Data,
                    'dataType': 'json',
                    'success': function(Json) {
                        if (Json.Errors && Json.Errors.length > 0) {
                            var ErrorHtml = '';
                            for (var i = 0; i < Json.Errors.length; i++) {
                                $('#SubPostcodeBox').addClass('Invalid');
                                ErrorHtml += Json.Errors[i].Error + '\r\n';
                            }
                            alert(ErrorHtml);
                        } else if (Json.Success === false) {
                            $('#SubPostcodeResult').html('<br /><p style="font-size: 12px;">Unfortunately we don\'t cover your area, but for more information you can call us on:- <br /></p><h2>01233 770 301</h2>');
                            $('#SubPostcodeResult').fadeIn();
                        } else if (Json.Success === true) {
                            $('#PostcodeBox').val(Data.Postcode);
                            CountryPark.CheckPostcode();
                        }
                    },
                    'complete': function() {
                        $('#SubPostcodeSubmit').attr('disabled', '').val('Check');
                    },
                    'error': function(a, b, c) {
                        alert(b);
                    }
                });
            });

            return true;
        }
    };
})();

CountryPark.Presentation = (function() {


    return {
        'SlideShow': function(Setup) {

            if (typeof Setup.ElementId === 'undefined') return;

            var SlideContainer = $('#' + Setup.ElementId);

            var Slides = [];

            var CurrentIndex = 0;

            var ShowThumbs = Setup.ShowThumbs || false;
            var SlideTimeout = Setup.SlideTimeout || 5000;
            var ThumbInfoTimout = Setup.ThumbInfoTimout || 2000;

            var SlideTimeoutHandle;
            var ThumbInfoTimeoutHandle;

            var SuppressThumbTextHide = false;

            var Direction = 1;
            var Sliding = false;
            var CurrentSlide = 1;

            var Slide = $(document.createElement('div'));
            Slide.addClass('Slide');
            SlideContainer.append(Slide);

            var Slide2 = $(document.createElement('div'));
            Slide2.addClass('Slide');
            Slide2.css({ 'display': 'none' });
            SlideContainer.append(Slide2);

            if (ShowThumbs) {
                var SlideThumbs = $(document.createElement('div'));
                SlideThumbs.addClass('Thumbs');
                SlideThumbs.css((Setup.Align === 'Right') ? 'right' : 'left', '0px');
                SlideThumbs.css('position', 'absolute');
                SlideContainer.append(SlideThumbs);

                var ThumbInfo = $(document.createElement('div'));
                ThumbInfo.addClass('ThumbInfo');
                ThumbInfo.bind('mouseover', function() {
                    SuppressThumbTextHide = true;
                }).bind('mouseout', function() {
                    SuppressThumbTextHide = false;

                    clearTimeout(ThumbInfoTimeoutHandle);

                    ThumbInfoTimeoutHandle = setInterval(_s.HideText, ThumbInfoTimout);
                });
                SlideContainer.append(ThumbInfo);
                ThumbInfo.fadeOut(0);
            }

            var that = this;

            var _s = {
                'Start': function() {
                    _s.Stop();
                    _s.SlideTo(0, SlideTimeout, false);
                },
                'Stop': function() {
                    clearTimeout(SlideTimeoutHandle);
                },
                'Slide': function() {
                    _s.SlideTo(((CurrentIndex + 1) < Slides.length) ? CurrentIndex + 1 : 0, SlideTimeout, false);
                },
                'SlideTo': function(Index, SlideDelay, WhiteOut, Complete) {
                    if (Slides[Index] !== 'undefined' && !Sliding) {
                        Sliding = true;
                        Slide.stop();
                        clearTimeout(SlideTimeoutHandle);

                        var _s1 = (CurrentSlide == 0) ? Slide : Slide2;
                        var _s2 = (CurrentSlide == 0) ? Slide2 : Slide;

                        CurrentSlide = (CurrentSlide == 0) ? 1 : 0;

                        _s2.css('background-image', 'url(' + Slides[Index].Src + ')');
                        _s2.css({ 'background-position': ((Direction === 0) ? '-100px 0px' : '0px 0px') });

                        _s1.fadeOut(500);

                        _s2.fadeIn(500, function() {
                            CurrentIndex = Index;

                            _s2.css({ 'opacity': 1 });

                            SlideTimeoutHandle = setTimeout(_s.Slide, SlideDelay || SlideTimeout);

                            _s2.animate({ 'backgroundPosition': ((Direction === 1) ? '-100px 0px' : '0px 0px') }, { 'duration': (SlideDelay || SlideTimeout) + 500, 'easing': 'linear' });
                            Direction = (Direction === 0) ? 1 : 0;
                            if (typeof Complete !== 'undefined') Complete();
                            Sliding = false;
                        });



                        /*
                        Slide.fadeOut(function() {
                        Slide.css('background-image', 'url(' + Slides[Index].Src + ')');

                                Slide.css({ 'background-position': ((Direction === 0) ? '-100px 0px' : '0px 0px') });

                                Slide.fadeIn(function() {
                        CurrentIndex = Index;

                                    Slide.css({ 'opacity': 1 });

                                    SlideTimeoutHandle = setTimeout(_s.Slide, SlideDelay || SlideTimeout);

                                    Slide.animate({ 'backgroundPosition': ((Direction === 1) ? '-100px 0px' : '0px 0px') }, { 'duration': (SlideDelay || SlideTimeout) + 500, 'easing': 'linear' });
                        Direction = (Direction === 0) ? 1 : 0;
                        if (typeof Complete !== 'undefined') Complete();
                        Sliding = false;
                        });
                        });
                        */
                    }
                },
                'AddSlide': function(Options) {
                    if (typeof Options.Src === 'undefined') return;

                    var x = Slides.length;

                    if (typeof Options.ThumbSrc !== 'undefined' && ShowThumbs) {

                        var Thumb = $(document.createElement('div'));
                        Thumb.addClass('Thumb');
                        Thumb.css('background-image', 'url(' + Options.ThumbSrc + ')');
                        Thumb.bind('mouseover', function() {
                            if (typeof Options.ThumbText !== 'undefined') {
                                SuppressThumbTextHide = true;
                                _s.ShowText(x);
                            }
                            if (typeof Setup.OnThumbOver !== 'undefined') Setup.OnThumbOver.apply(this);
                        }).bind('mouseout', function() {
                            SuppressThumbTextHide = false;

                            clearTimeout(ThumbInfoTimeoutHandle);

                            ThumbInfoTimeoutHandle = setInterval(_s.HideText, ThumbInfoTimout);

                            if (typeof Setup.OnThumbOut !== 'undefined') Setup.OnThumbOut.apply(this);
                        }).bind('click', function() {
                            _s.SlideTo(x, 10000, true);
                        });

                        SlideThumbs.append(Thumb);

                        Options.Thumb = Thumb;
                    }

                    Slides[x] = Options;
                },
                'ShowText': function(Index) {
                    if (!ShowThumbs) return;

                    if (Slides[Index].Thumb !== 'undefined' && typeof Slides[Index].ThumbText !== 'undefined') {
                        var Top = Slides[Index].Thumb.offset().top - SlideContainer.offset().top - 5;

                        ThumbInfo.css((Setup.Align === 'Right') ? 'right' : 'left', SlideThumbs.outerWidth(true) + 'px');
                        ThumbInfo.animate({ 'top': Top + 'px' }, { 'queue': false, 'duration': 250 });
                        ThumbInfo.html('<p>' + Slides[Index].ThumbText + '</p>');

                        if (typeof Slides[Index].ThumbLink !== 'undefined')
                            ThumbInfo.append('<a href="' + Slides[Index].ThumbLink + '"></a>');

                        ThumbInfo.fadeIn();

                        clearTimeout(ThumbInfoTimeoutHandle);

                        ThumbInfoTimeoutHandle = setInterval(_s.HideText, ThumbInfoTimout);
                    } else {
                        SuppressThumbTextHide = false;
                        _s.HideText();
                    }
                },
                'HideText': function() {
                    if (!SuppressThumbTextHide && ShowThumbs) {
                        ThumbInfo.fadeOut();
                        clearTimeout(ThumbInfoTimeoutHandle);
                    }
                }
            };

            return _s;
        }
    };

})();

$(document).ready(function() {
    var x = $('.DropDownMenu').parent().each(function() {
        $(this).bind('mouseenter', function() {
            ShowMenu($(this).children('.DropDownMenu'));
        }).bind('mouseleave', function() {
            HideMenu($(this).children('.DropDownMenu'));
        });
    });
});


function ShowMenu(Element) {
    var Obj = $(Element);
    Obj.stop();
    Obj.css({ 'display': 'block', 'opacity': 0 });
    Obj.animate({ 'opacity': 1 });
}

function HideMenu(Element) {
    var Obj = $(Element);
    Obj.stop();
    Obj.fadeOut(250, function() {
        Obj.css('opacity', '0');
        Obj.css('display', 'none');
    });
}

$(document).ready(CountryPark.Init);

