/*
*	ADG
*	Author Cylinder
*   Copyright © 2011, cylinder.com
*   All rights reserved.
*/

adg = {

    //START VARS
    vars: {

        //check browser
        navigator_is_iPad: null,
        navigator_is_iPhone: null,
        navigator_is_ie7: null,
        navigator_is_ie8: null,

        //resize
        window_is_widescreen: false,
        container_size_widescreen: 1405,
        container_size_regular: 975,
        container_size_trigger: 1455,
        window_resize_speed: 600,
        canvasInt: null,

        //thumbnails
        thumbnail_width: 283,
        thumbnail_height: 166,

        //data
        feature_url: '/highlightproduct/getjsonhomefeatured',
        feature_category_url: '/ajax/getbycategory',
        casestudy_url: '/ajax/inspiration/load',
        email_url: '/member/enquiry',
        favourites_url: '/ajax/filterbyfavorites',
        promo_url: '/highlightproduct/getpromo',
        imagesData: new Array(),
        favouritesData: new Array(),
        favouriteImagesData: new Array(),
        tmpData: new Array(),
        projectIndex: 0,
        currNum: 0,
        loadData: false,
        loading: false,

        //Home
        totalWidth: 0,
        killScroll: false,
        homeCategoryUrl: null,

        //inspiration
        url: null,
        initialLoad: true,
        counter: 0,
        pos: 0,
        loadFavourites: false,
        message: 'There is nothing in your favourites list.',
        flag: false,

        //form
        firstNameVal: null,
        surnameVal: null,
        companyVal: null,
        phoneVal: null,
        emailToVal: null,
        commentsVal: null,
        caseStudyVal: null,
        xOffset: 1, // x distance from mouse
        yOffset: -25, // y distance from mouse

        //MW
        selectedCategoryUrl: null


    },
    //END VARS


    //START ELMS
    elms: {

        //Common
        content: $('.wrap'),
        loading: $('#loading'),
        loadingAnimation: $('#loadingAnimation'),
        home: $('#home'),
        inspiration: $('#inspiration'),
        menu: $('#primary'),
        menuToggle: $('#primary .toggle'),
        secondaryMenu: $('#secondary'),
        secondaryMenuToggle: $('#secondary .toggle'),

        //Form
        form: $('#form'),
        submit: $('#submit'),
        showForm: $('#show-form'),
        hideForm: $('#back'),
        //hiddenInput: $('#CaseStudyName'),
        hiddenHomeInput: $('#HighlightProductID'),
        hiddenInspirationInput: $('#InspirationProjectID'),
        response: $('#response'),
        email: $("#Email"),
        firstName: $('#FirstName'),
        surname: $('#Surname'),
        company: $('#Company'),
        phone: $('#Phone'),
        comments: $("#Comments"),

        mask: $('#slider'),
        prev: $('#prev'),
        next: $('#next'),
        images: $('#images'),
        canvas: $('#canvas'),

        //Home
        scroll: $('#scroll'),
        infoBox: $('#info'),
        infoToggle: $('#info-toggle'),
        options: $('#options'),
        docs: $('#docs'),

        //Inspiration
        title: $('span#title'),
        select: $('#category-list'),
        selectedOption: $('span#selected'),
        addFavourites: $('#add-favourites'),
        showFavourites: $('#show-favourites'),
        clearFavourites: $('#clear-favourites'),
        overlay: null,
        category: $('span#category'),
        modal: $('#modal'),
        close: $("#modal span.close")

    },
    //END ELMS


    //START INITIAL
    init: function() {

        adg.vars.navigator_is_iPad = (navigator.userAgent.match(/iPad/i) == null) ? false : true;
        navigator_is_iPhone = (navigator.userAgent.match(/iPhone/i) == null) ? false : true;
        navigator_is_ie7 = (navigator.appVersion.indexOf("MSIE 7.") == -1) ? false : true;
        navigator_is_ie8 = (navigator.appVersion.indexOf("MSIE 8.") == -1) ? false : true;

        $(document).bind("contextmenu", function(e) {
            e.preventDefault();
        });

        adg.elms.content.fadeIn(800);

        //run resize
        if (!adg.vars.navigator_is_iPad) {
            adg.resize.init();
            //check window size to set number of items per row and content width
            if ($(window).width() > adg.vars.container_size_trigger) {
                adg.elms.content.width(adg.vars.container_size_widescreen);
                adg.vars.window_is_widescreen = true;
            }
        }

        //load menu
        adg.menu.init();

        //load functions based on .content id
        if (adg.elms.home.length) {
            adg.home.init();
        } else if (adg.elms.inspiration.length) {
            adg.inspiration.init();
        }


    },
    //END INITIAL


    //START MENU: Inititalise menu toggle
    menu: {
        //Start Init
        init: function() {
            adg.menu.attachEvents();
        },
        //End Init
        attachEvents: function() {
            adg.elms.menuToggle
				.toggle(
					function() {
					    adg.menu.show();
					},
					function() {
					    adg.menu.hide();
					}
				);
            $('html').click(function() {
                adg.menu.hide();
            });
        },
        //Start show
        show: function() {
            adg.elms.menuToggle
				.addClass("open")
				.parent(adg.elms.menu)
					.animate({
					    marginLeft: 0
					}, {
					    duration: 300,
					    queue: false,
					    easing: 'easeInQuad'
					})
        },
        //End show

        //Start hide		
        hide: function() {
            adg.elms.menuToggle
				.removeClass("open")
				.parent(adg.elms.menu)
					.animate({
					    marginLeft: -350
					}, {
					    duration: 300,
					    queue: false,
					    easing: 'easeInQuad'
					})
        },
        //End hide		

        //Start check		
        isOpen: function() {
            adg.elms.menu.css('marginLeft') == '0px' ? adg.menu.hide() : null;
        }
        //End check	

    },
    //END MENU

    secondary_menu: {
        //Start Init
        init: function() {
            adg.secondary_menu.attachEvents();
        },
        //End Init
        attachEvents: function() {
            adg.elms.secondaryMenuToggle
				.toggle(
					function() {
					    adg.secondary_menu.show();
					},
					function() {
					    adg.secondary_menu.hide();
					}
				);
            $('html').click(function() {
                adg.secondary_menu.hide();
            });
        },
        select: function(target) {
            //get href
            var link = target.find('a').attr('id');
            //get url hash from href
            //newLink = link.substring(link.indexOf('#') + 1);
            //make sure currently not on that category
            if (adg.vars.homeCategoryUrl != link) {

                //close menu if open
                //adg.secondary_menu.isOpen();

                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();

                adg.vars.homeCategoryUrl = link;

                adg.home.reloadCategory();

                //store url hash
                //$.history.load(newLink);

                //reset select list
                //$('li', adg.elms.select).removeClass();

                //add active to current item
                //adg.elms.selectedOption.html(target.addClass('state-active').text());

                // if (adg.vars.url == 'favourites') {
                //  adg.vars.loadFavourites = false;
                //  adg.inspiration.reload();
                // } else {
                //MW
                //adg.inspiration.load();
                //adg.inspiration.reloadCategory();

                //reset active states from slideshow
                //adg.inspiration.selectCategory.reset();
                //begin filter
                //adg.inspiration.filter();
                // }


            } else {
                return false;
            }
        },
        //Start show
        show: function() {
            adg.elms.secondaryMenuToggle
				.addClass("open")
				.parent(adg.elms.secondaryMenu)
					.animate({
					    marginLeft: 0
					}, {
					    duration: 300,
					    queue: false,
					    easing: 'easeInQuad'
					})
        },
        //End show

        //Start hide		
        hide: function() {
            adg.elms.secondaryMenuToggle
				.removeClass("open")
				.parent(adg.elms.secondaryMenu)
					.animate({
					    marginLeft: -350
					}, {
					    duration: 300,
					    queue: false,
					    easing: 'easeInQuad'
					})
        },
        //End hide		

        //Start check		
        isOpen: function() {
            adg.elms.secondaryMenu.css('marginLeft') == '0px' ? adg.secondary_menu.hide() : null;
        }
        //End check	

    },



    //START RANDOMNUM - random number generator
    randomNum: function() {
        var html = '?v=' + new Date().getTime();
        return html;
    },
    //END RANDOMNUM


    //START RESIZE
    resize: {
        //Start Init
        init: function() {
            var winWidth = $(window).width();
            var winHeight = $(window).height();
            $(window).resize(function() {
                waitForFinalEvent(function() {

                    var winNewWidth = $(window).width();
                    var winNewHeight = $(window).height();

                    // compare the new height and width with old one
                    if (winWidth != winNewWidth || winHeight != winNewHeight) {
                        window.clearTimeout(adg.vars.canvasInt);
                        adg.vars.canvasInt = window.setTimeout('adg.resize.setWidth()', 20);
                    }
                    //Update the width and height
                    winWidth = winNewWidth;
                    winHeight = winNewHeight;

                }, 150, "ADG");
            })
        },
        //End Init

        //Start setWidth
        setWidth: function() {
            //set widescreen		
            if ($(window).width() > adg.vars.container_size_trigger) {
                adg.vars.window_is_widescreen = true;
                if (!adg.elms.content.is(':animated')) {
                    //resize feature list 
                    adg.elms.content
						.animate({
						    width: adg.vars.container_size_widescreen
						}, adg.vars.window_resize_speed)

                    if (adg.elms.home.length) {
                        if (!adg.vars.loadData) {
                            adg.vars.loadData = true;
                            if (typeof window.adg.home.thumbs.reload() == 'function') { adg.home.thumbs.reload() }
                            adg.elms.infoToggle.width() == 550 ? adg.home.slideShow.info.hide.init() : adg.home.reload();
                        }
                    } else {
                        if (!adg.vars.loadData) {
                            adg.vars.loadData = true;
                            if (typeof window.adg.inspiration.reload() == 'function') { adg.inspiration.reload() }
                        }
                    }

                } else {
                    //set resize function on timeout
                    adg.vars.canvasInt = window.setTimeout('adg.resize.setWidth()', 20);
                }

            } else {
                //set default size
                adg.vars.window_is_widescreen = false;
                if (!adg.elms.content.is(':animated')) {
                    adg.elms.content
						.animate({
						    width: adg.vars.container_size_regular
						}, adg.vars.window_resize_speed);
                    if (adg.elms.home.length) {
                        if (!adg.vars.loadData) {
                            adg.vars.loadData = true;
                            if (typeof window.adg.home.thumbs.reload() == 'function') { adg.home.thumbs.reload() }
                            adg.elms.infoToggle.width() == 550 ? adg.home.slideShow.info.hide.init() : adg.home.reload();
                        }
                    } else {
                        if (!adg.vars.loadData) {
                            adg.vars.loadData = true;
                            if (typeof window.adg.inspiration.reload() == 'function') { adg.inspiration.reload() }
                        }
                    }
                } else {
                    adg.vars.canvasInt = window.setTimeout('adg.resize.setWidth()', 20);
                }
            }
        }
        //End setWidth
    },
    //END RESIZE


    //START HOME
    home: {
        //Start Init
        init: function() {

            adg.secondary_menu.init();

            adg.home.attachEvents();

            //load in data and check for hash
            adg.home.load();

        },
        //End Init

        //start attachEvents
        attachEvents: function() {

            adg.elms.submit.click(function(e) {
                adg.enquiry.submit();
                return false;
            });

            adg.elms.showForm.click(function(e) {
                adg.enquiry.home.show(e);
            });

            adg.elms.hideForm.click(function() {
                adg.enquiry.reset();
                adg.enquiry.home.hide();
            });

            adg.elms.prev.bind('click', function() {
                adg.home.slideShow.nav.prev();
            })
            adg.elms.next.bind('click', function() {
                adg.home.slideShow.nav.next();
            })

            adg.elms.infoToggle.toggle(
				function() {
				    adg.home.slideShow.info.show();
				},
				function() {
				    adg.home.slideShow.info.hide.init();
				}
			);

            $('li', adg.elms.secondaryMenu)
				.live('click', function() { adg.secondary_menu.select($(this)) });

            $('li:not(.state-active)', adg.elms.images)
				.live('mouseenter mouseleave', function(e) {
				    if (e.type == 'mouseenter') {
				        $(this)
								.addClass('state-hover')
									.find('img.mono')
										.stop()
											.animate({ 'opacity': 0 }, { queue: false, easing: 'easeInQuad', duration: 200 })
								.end()
									.find('span.panel')
										.stop()
											.animate({ marginBottom: 0 }, { queue: false, easing: 'easeOutQuad', duration: 200 });
				    } else {
				        $(this)
								.removeClass('state-hover')
									.find('img.mono')
										.stop()
											.animate({ 'opacity': 1 }, { queue: false, easing: 'easeInQuad', duration: 200 })
								.end()
									.find('span.panel')
										.stop()
											.animate({ marginBottom: -50 }, { queue: false, easing: 'easeInQuad', duration: 200 });
				    }
				})
					.live('mouseleave', function() {
					    $(this).removeClass('state-hover');
					})
            $('li', adg.elms.images)
					.live('click', function() {
					    //get item link						
					    var link = $(this).find('a.item').attr('href');
					    //get url hash
					    var newLink = link.substring(link.indexOf('#') + 1);
					    if (window.location.hash.substr(1) != newLink) {
					        adg.vars.loading = true;
					        $('li', adg.elms.images).removeClass('state-active');
					        $(this).addClass('state-active');
					        $('li:not(.state-active)', adg.elms.images)
								.find('img.mono')
									.stop()
										.animate({ 'opacity': 1 }, { queue: false, easing: 'easeOutQuad', duration: 200 })
							.end()
								.find('span.panel')
									.stop()
										.animate({ marginBottom: -50 }, { queue: false, easing: 'easeOutCirc', duration: 200 });

					        adg.vars.currNum = $('li', adg.elms.images).index(this);

					        if ($('.error').length) { adg.enquiry.reset(); }

					        $.history.load(newLink);

					    } else {
					        return false;
					    }
					});

        },
        //end attachEvents

        //Start Load: Load Case Study Data
        load: function() {
            if (adg.vars.homeCategoryUrl != null) {
                $.getJSON(adg.vars.feature_category_url + "/" + adg.vars.homeCategoryUrl,
			    function(data) {
			        if (typeof data != 'undefined') {
			            //store data in slideshowData
			            adg.vars.imagesData = data.data;
			        }
			        adg.home.checkHistory();

			    });
            }
            else {
                $.getJSON(adg.vars.feature_url,
			    function(data) {
			        if (typeof data != 'undefined') {
			            //store data in slideshowData
			            adg.vars.imagesData = data.data;
			        }
			        adg.home.checkHistory();

			    });
            }
        },
        //End Load

        //start checkHistory
        checkHistory: function() {

            //get history from browser if no hash found show random
            $.history.init(function(hash) {

                //MW: check if there is a promotion first
                if (hash == "") {
                    $.getJSON(adg.vars.promo_url,
			        function(data) {
			            if (data.hash) {
			                hash = data.hash;
			                $.history.load(hash);
			                adg.vars.currNum = adg.home.findUrl(hash);
			                window.location.hash = adg.vars.imagesData[adg.vars.currNum]['url'];
			                adg.home.build.init(adg.vars.currNum);
			            }
			            else {
			                adg.home.getRandom();
			            }
			        });
                } else {
                    adg.vars.currNum = adg.home.findUrl(hash);
                    $('li', adg.elms.images)
							.removeClass('state-active')
							.eq(adg.vars.currNum)
								.find('img.mono')
									.stop()
										.animate({ 'opacity': 0 }, { queue: false, easing: 'easeInQuad', duration: 200 })
									.end()
								.find('span.panel')
									.stop()
										.animate({ marginBottom: 0 }, { queue: false, easing: 'easeOutQuad', duration: 200 })
									.end()
								.addClass('state-active')
							.end()
							.not('.state-active')
								.find('img.mono')
									.stop()
										.animate({ 'opacity': 1 }, { queue: false, easing: 'easeOutQuad', duration: 200 })
									.end()
								.find('span.panel')
									.stop()
										.animate({ marginBottom: -50 }, { queue: false, easing: 'easeOutCirc', duration: 200 });
                    adg.vars.loading = true;
                    adg.elms.infoToggle.width() == 550 ? adg.home.slideShow.info.hide.init() : adg.home.reload();
                }

            });

            //start showing thumbnails now that we have selected case study	
            adg.home.thumbs.init();

        },
        //end checkHistory

        //generate random case study
        getRandom: function() {
            adg.vars.currNum = Math.floor(Math.random() * adg.vars.imagesData.length);
            window.location.hash = adg.vars.imagesData[adg.vars.currNum]['url'];
            adg.home.build.init(adg.vars.currNum);
        },

        //find hash in order to get its index from array
        findUrl: function(hash) {
            for (i = 0; i < adg.vars.imagesData.length; i++) {
                if (hash == adg.vars.imagesData[i]['url']) {
                    return i;
                }
            }
        },

        reloadCategory: function() {

            if (adg.vars.loading) {
                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
            }

            adg.elms.options
				.animate({ marginTop: 50 }, { duration: 100, queue: false, complete: function() {
				    adg.elms.scroll
						.fadeOut(150, function() {

						    $('li', $(this)).remove();
						    //reset width
						    $(this)
								.css({ 'width': 0, 'margin': 0 })
								.show();

						    //remove slideshow
						    adg.home.slideShow.nav.hide();

						    adg.elms.infoToggle
								.unbind('click')
								.toggle(
									function() {
									    adg.home.slideShow.info.show();
									},
									function() {
									    adg.home.slideShow.info.hide.init();
									}
								)
						    //reset objects
						    adg.vars.counter = 0;
						    totalWidth = 0;
						    //remove info bar and reassign -issue with a onclick event when changing case studies
						    //adg.home.build.init(adg.vars.currNum);
						    adg.vars.currNum = 0;
						    adg.home.load();

						});
				}
				});
        },

        //Start Reset: Reset all values and widths in order to reload slideshow
        reload: function() {

            if (adg.vars.loading) {
                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
            }

            adg.elms.options
				.animate({ marginTop: 50 }, { duration: 100, queue: false, complete: function() {
				    adg.elms.scroll
						.fadeOut(150, function() {

						    $('li', $(this)).remove();
						    //reset width
						    $(this)
								.css({ 'width': 0, 'margin': 0 })
								.show();

						    //remove slideshow
						    adg.home.slideShow.nav.hide();

						    adg.elms.infoToggle
								.unbind('click')
								.toggle(
									function() {
									    adg.home.slideShow.info.show();
									},
									function() {
									    adg.home.slideShow.info.hide.init();
									}
								)
						    //reset objects
						    adg.vars.counter = 0;
						    totalWidth = 0;
						    //remove info bar and reassign -issue with a onclick event when changing case studies				
						    adg.home.build.init(adg.vars.currNum);

						});
				}
				});
        },
        //End Reset

        //Start Build: Build Case Study Slideshow
        build: {

            //Start Init
            init: function(num) {
                //add title to hidden input value
                //adg.elms.hiddenInput.val(adg.vars.imagesData[num]['title']);
                //MW
                adg.elms.hiddenHomeInput.val(adg.vars.imagesData[num]['id']);
                //insert title
                $('h1', adg.elms.infoToggle).html(adg.vars.imagesData[num]['title']);
                //insert category
                adg.elms.canvas.html('<h1><span>' + adg.vars.imagesData[num]['category'] + '</span> ' + adg.vars.imagesData[num]['title'] + '</h1>' + adg.vars.imagesData[num]['description']);
                //insert document & brochure
                var docs = '';
                //                if (adg.vars.imagesData['document'] != '') {
                //                    docs += '<li><a href="' + adg.vars.imagesData[num]['document'] + '" title="Download ' + adg.vars.imagesData[num]['title'] + ' Case Study Document">Download ' + adg.vars.imagesData[num]['title'] + ' Case Study Document</a></li>'
                //                }
                if (adg.vars.imagesData['brochure'] != '') {
                    for (var d = 0; d < adg.vars.imagesData[num]['brochure'].length; d++) {
                        docs += '<li><a href="' + adg.vars.imagesData[num]['brochure'][d] + '" title="Download ' + adg.vars.imagesData[num]['category'] + ' Brochure">Download ' + adg.vars.imagesData[num]['category'] + ' Brochure</a></li>'
                    }
                }
                //remove all docs except for last bullet list (contains form)
                adg.elms.docs.children('li').not('li:last').remove().end().end().prepend(docs);
                //add images			
                for (var i = 0; i < adg.vars.imagesData[num]['images'].length; i++) {
                    //add item
                    var html = '<li id="slide_' + adg.vars.counter + '" class="loading"></li>';
                    //check if item is last
                    var last = (adg.vars.counter == adg.vars.imagesData[num]['images'].length - 1) ? 1 : 0;
                    //if item is last bring it to the front to set up cloning for nav
                    last > 0 ? adg.elms.scroll.prepend(html) : adg.elms.scroll.append(html);
                    //add id for images to append to
                    var $item = '#slide_' + adg.vars.counter;
                    adg.home.build.complete(num, $item, last);
                    adg.vars.counter++;
                }
            },
            //End Init

            //Start Images
            complete: function(num, $item, last) {
                //create image	
                var $image = new Image();
                $($image)
					.hide()
					.load(function() {
					    //get image dimensions					
					    var w = this.width;
					    var h = this.height;
					    $($item)
							.css({ 'width': w, 'height': h })
							.append(this);
					    $(this).pauseAnim(300).fadeIn(150, function() { $($item).removeClass('loading'); })

					    //assign marginleft based on last image width
					    adg.elms.scroll.css({ width: adg.vars.totalWidth += w });
					    if (last > 0) {
					        if (adg.vars.imagesData[num]['images'].length > 1) {
					            adg.elms.scroll.css({ marginLeft: -$('li:first', adg.elms.scroll).width() });
					            //if slideshow is greater than mask then add nav
					            adg.elms.scroll.width() > adg.elms.content.width() ? adg.home.slideShow.nav.show() : adg.home.slideShow.nav.hide();
					        }
					        if (adg.vars.loading) {
					            if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();
					            adg.vars.loading = false;
					        }
					        adg.elms.options.animate({ marginTop: 0 }, 200);

					    }

					})
					.error(function() { $($item).html('Load Failed'); })
                //attach image
					.attr('src', "" + adg.vars.imagesData[num]['images'][adg.vars.counter] + adg.randomNum())
            }
            //Emd Images
        },
        //End Build

        //Start slideShow
        slideShow: {

            //Start Nav
            nav: {
                show: function() {
                    adg.elms.prev.show();
                    adg.elms.next.show();
                },
                //remove nav when new case studies are loaded
                hide: function() {
                    adg.elms.prev.hide();
                    adg.elms.next.hide();
                },
                //Start Next
                next: function() {
                    adg.home.slideShow.nav.move.init('next');
                },
                //End Next
                //Start Prev
                prev: function() {
                    adg.home.slideShow.nav.move.init('prev');
                },
                //End Prev
                //Start Move
                move: {
                    init: function(direction) {
                        if (direction == 'next') {
                            adg.home.slideShow.nav.move.next();
                        } else {
                            adg.home.slideShow.nav.move.prev();
                        }
                    },
                    next: function() {
                        //unbind click to prevent multiple clicks
                        adg.elms.next.unbind("click");
                        adg.elms.infoToggle.width() == 550 ? adg.home.slideShow.info.hide.init() : null;
                        //get first item width will be deducted to current left margin
                        var e = adg.elms.scroll.children(':first').next().width();
                        adg.elms.scroll.stop().animate({
                            marginLeft: '-=' + e
                        }, { duration: 300, easing: 'easeInQuad', queue: true, complete: function() {
                            //clone first image and add to the end of slideshow then remove
                            adg.elms.scroll.children(':first').clone().appendTo(adg.elms.scroll)
                            adg.elms.scroll.children(':first').remove();
                            //set marginleft of first item to keep slideshow in place
                            adg.elms.scroll.css({ marginLeft: -e });
                            //bind next function again once slideshow is in position
                            adg.elms.next.bind('click', function() { adg.home.slideShow.nav.next() });
                        }
                        });
                    },
                    prev: function() {
                        //unbind click to prevent multiple clicks
                        adg.elms.prev.unbind("click");
                        adg.elms.infoToggle.width() == 550 ? adg.home.slideShow.info.hide.init() : null;
                        //get last item width will be added to current left margin
                        var e = $('li:last', adg.elms.scroll).width();
                        adg.elms.scroll.stop().animate({
                            marginLeft: 0
                        }, { duration: 300, easing: 'easeInQuad', queue: true, complete: function() {
                            //set marginleft of first item to keep slideshow in place
                            adg.elms.scroll.css({ marginLeft: -e });
                            //clone last image and add to the end of slideshow then remove
                            adg.elms.scroll.children(':last').clone().prependTo(adg.elms.scroll)
                            adg.elms.scroll.children(':last').remove();
                            //bind prev function again once slideshow is in position
                            adg.elms.prev.bind('click', function() { adg.home.slideShow.nav.prev() });
                        }
                        });
                    }
                }
                //End Move
            },
            //End Nav

            //Start Info
            info: {
                //Start show
                show: function() {
                    //show info panel
                    adg.elms.infoToggle
						.stop()
						.animate({
						    width: 550
						}, {
						    duration: 300,
						    queue: true,
						    easing: 'easeInQuad',
						    complete: function() {
						        adg.menu.isOpen();
						        $(this)
									.children('h1')
										.fadeOut(300)
									.end()
									.addClass("open");
						        adg.elms.infoBox
									.stop()
									.animate({
									    marginTop: 0
									}, {
									    duration: 300,
									    easing: 'easeInQuad'
									})
						    }
						})
                },
                //End show

                hide: {
                    //Start init
                    init: function() {
                        //close info box based on whether form is open
                        $('.panel:first', adg.elms.mask).css('marginLeft') == '-520px' ? adg.home.slideShow.info.hide.openForm() : adg.home.slideShow.info.hide.closeForm();
                    },
                    //End init

                    //Start openForm
                    openForm: function() {
                        //reset form
                        adg.enquiry.reset();
                        $('.panel:first', adg.elms.mask).animate({ marginLeft: 0 }, {
                            duration: 300,
                            easing: 'easeInQuad',
                            queue: true,
                            complete: function() {
                                adg.elms.infoBox
										.stop()
										.animate({
										    marginTop: 427
										}, {
										    duration: 300,
										    easing: 'easeInQuad',
										    queue: true,
										    complete: function() {
										        adg.menu.isOpen();
										        adg.elms.infoToggle
													.children('h1')
														.fadeIn(300)
													.end()
													.removeClass("open")
													.stop()
													.animate({
													    width: 300
													}, {
													    duration: 300,
													    easing: 'easeOutQuad'
													})
										        adg.vars.loading ? adg.home.reload() : null;
										    }
										})
                            }
                        });
                    },
                    //End openForm

                    //Start closeForm				
                    closeForm: function() {
                        adg.elms.infoBox
							.stop()
							.animate({
							    marginTop: 427
							}, {
							    duration: 300,
							    queue: true,
							    easing: 'easeOutQuad',
							    complete: function() {
							        adg.menu.isOpen();
							        adg.elms.infoToggle
										.children('h1')
											.fadeIn(500)
										.end()
										.removeClass("open")
										.stop()
										.animate({
										    width: 300
										}, {
										    duration: 500
										})
							        adg.vars.loading ? adg.home.reload() : null;
							    }
							})
                    }
                    //End closeForm	
                }
            }
            //End Info

        },
        //End slideShow

        //Start Thumb
        thumbs: {
            init: function() {
                //check window size to set number of items per row and content width
                if ($(window).width() > adg.vars.container_size_trigger) {
                    adg.elms.content.width(adg.vars.container_size_widescreen);
                    adg.vars.window_is_widescreen = true;
                }
                //bind mousewheel
                //                $(window).bind("mousewheel", function() {
                //                    if (adg.vars.initialLoad) {
                //                        return false;
                //                    }
                //                });
                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
                adg.images.build.init(adg.vars.projectIndex);
            },
            reload: function() {
                adg.elms.images
					.fadeOut(300, function() {
					    adg.vars.projectIndex = 0;
					    $('li', this).remove();
					    adg.elms.images.show();
					    adg.images.build.init(adg.vars.projectIndex);
					});
            },

            scrollHandler: function() {
                adg.vars.killScroll = false;
                $(window).scroll(function() {
                    //check scroll position and index before loading in more items
                    if ($(window).scrollTop() == ($(document).height() - ($(window).height()))) {

                        if (adg.vars.killScroll == false) {
                            adg.vars.killScroll = true;
                            if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
                            //load more items
                            adg.vars.loadData = true;
                            adg.images.build.init(adg.vars.projectIndex);
                        }
                    }
                });
            }

        }
        //End Thumb
    },
    //END HOME



    //START BUILD IMAGES
    images: {
        build: {
            init: function(startIndex) {
                adg.vars.loadFavourites ? adg.images.build.favourites.start(startIndex) : adg.images.build.standard.start(startIndex);
            },
            favourites: {

                start: function(startIndex) {
                    $top = 0;
                    $left = 0;
                    //reset left position for next row
                    $rowEnd = (adg.vars.window_is_widescreen) ? (adg.vars.container_size_widescreen - 100) : (adg.vars.container_size_regular - 200);
                    //set max item load based on layout
                    if (adg.vars.window_is_widescreen) {
                        maxIndex = ((startIndex + 5) > adg.vars.favouriteImagesData.length) ? adg.vars.favouriteImagesData.length : (startIndex + 5);
                        //stopIndex = 20;
                        stopIndex = adg.vars.favouriteImagesData.length < 20 ?
                        adg.vars.favouriteImagesData.length : 20;
                        //stopIndex = adg.vars.favouriteImagesData.length;
                    } else {
                        maxIndex = ((startIndex + 3) > adg.vars.favouriteImagesData.length) ? adg.vars.favouriteImagesData.length : (startIndex + 3);
                        stopIndex = adg.vars.favouriteImagesData.length < 12 ?
                        adg.vars.favouriteImagesData.length : 12;

                    }
                    //set position for next row
                    var lastItem = $('li:last', adg.elms.images);
                    if (!lastItem.length == 0) {
                        $top = lastItem.position().top;
                        $left = (lastItem.position().left) + (adg.vars.thumbnail_width - 10);
                        newOffset = lastItem.position().top + adg.vars.thumbnail_height;
                        if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();
                    } else {
                        if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();
                    }

                    i = startIndex;

                    while (i < maxIndex) {
                        if ($left >= $rowEnd) {
                            $top += adg.vars.thumbnail_height;
                            $left = 0;
                        }

                        if (adg.vars.favouriteImagesData.length > 0) {
                            //build item
                            //var html = '<li id="images_' + i + '" class="loading state-favourite"><a href="' + adg.vars.imagesData[adg.vars.favouritesData[i]]['large'] + adg.randomNum() + '" title="' + adg.vars.imagesData[adg.vars.favouritesData[i]]['title'];
                            var html = '<li id="images_' + adg.vars.favouriteImagesData[i]['id'] + '" class="loading state-favourite"><a href="' + adg.vars.favouriteImagesData[i]['large'] + adg.randomNum() + '" title="' + adg.vars.favouriteImagesData[i]['title'];
                            html += '" class="item" style="display:none;">';
                            html += '<span class="panel">';
                            html += '<span class="category" style="display:none;">' + adg.vars.favouriteImagesData[i]['category'] + '</span>';
                            html += '<span class="cattitle">' + adg.vars.favouriteImagesData[i]['cattitle'] + '</span>';
                            html += '<span class="title">' + adg.vars.favouriteImagesData[i]['title'] + '</span>';
                            html += '</span>';
                            html += '</a></li>';
                            //add item to list
                            adg.elms.images.append(html);
                            //var $item = $('#images_' + i + ' .item');
                            var $item = $('#images_' + adg.vars.favouriteImagesData[i]['id'] + ' .item');
                            $item.parent().css({ 'left': $left, 'top': $top });
                            $left += adg.vars.thumbnail_width;
                            adg.images.build.complete(i, $item);
                        }
                        i++;
                        adg.vars.projectIndex++;
                    }

                    adg.elms.images.height($top += adg.vars.thumbnail_height);

                    if (adg.vars.favouriteImagesData.length >= stopIndex) {
                        if (adg.vars.projectIndex < stopIndex) {
                            adg.images.build.favourites.start(adg.vars.projectIndex);
                        } else if (adg.vars.projectIndex == stopIndex) {
                            //cache bullet list item in order to get height
                            adg.inspiration.nav.init();
                            if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();
                            //begin filtering
                        }
                    }

                    if (adg.vars.favouriteImagesData.length == 0) {
                        adg.elms.images.html('<li class="message">' + adg.vars.message + '</li>');
                    }

                }
            },
            standard: {

                start: function(startIndex) {
                    $top = 0;
                    $left = 0;
                    //reset left position for next row
                    $rowEnd = (adg.vars.window_is_widescreen) ? (adg.vars.container_size_widescreen - 100) : (adg.vars.container_size_regular - 200);
                    //set max item load based on layout
                    if (adg.vars.window_is_widescreen) {
                        maxIndex = ((startIndex + 5) > adg.vars.imagesData.length) ? adg.vars.imagesData.length : (startIndex + 5);
                        stopIndex = adg.vars.imagesData.length < 20 ? adg.vars.imagesData.length - 1 : 20;

                    } else {
                        maxIndex = ((startIndex + 3) > adg.vars.imagesData.length) ? adg.vars.imagesData.length : (startIndex + 3);
                        stopIndex = adg.vars.imagesData.length < 12 ? adg.vars.imagesData.length - 1 : 12;

                    }
                    //set position for next row
                    var lastItem = $('li:last', adg.elms.images);
                    if (!lastItem.length == 0) {
                        $top = lastItem.position().top;
                        $left = (lastItem.position().left) + (adg.vars.thumbnail_width - 10);
                        newOffset = lastItem.position().top + adg.vars.thumbnail_height;
                        if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();
                    }

                    i = startIndex;

                    while (i < maxIndex) {
                        if ($left >= $rowEnd) {
                            $top += adg.vars.thumbnail_height;
                            $left = 0;
                        }
                        //build item
                        //MW :- Use id here instead of counter
                        var html = '<li id="images_' + adg.vars.imagesData[i]['id'] + '" class="loading';
                        //var html = '<li id="images_' + i + '" class="loading';

                        if (adg.elms.home.length) {
                            //if url hash
                            if (adg.vars.imagesData[adg.vars.currNum]['url'] == adg.vars.imagesData[i]['url']) {
                                html += ' state-active';
                            }
                            //check if in favourites
                            html += '"><a href="#' + adg.vars.imagesData[i]['url'] + '" title="' + adg.vars.imagesData[i]['title'];

                        } else {

                            var str = adg.vars.imagesData[i]['category'];
                            str = str.replace(/\s+/g, '-').toLowerCase();
                            adg.vars.url == str || adg.vars.url == 'show-all' ? html += ' state-on' : '';
                            var index = i.toString();
                            //MW Use id to find faves
                            //adg.inspiration.favourites.find(index) ? html += ' state-favourite' : ' ';
                            adg.inspiration.favourites.find(adg.vars.imagesData[i]['id']) ? html += ' state-favourite' : ' ';
                            html += '" rel="' + str + '"><a href="' + adg.vars.imagesData[i]['large'] + adg.randomNum() + '" title="' + adg.vars.imagesData[i]['title'];

                        }
                        html += '" class="item" style="display:none;">'
                        html += '<span class="panel">';
                        html += '<span class="category" style="display:none;">' + adg.vars.imagesData[i]['category'] + '</span>';
                        html += '<span class="cattitle">' + adg.vars.imagesData[i]['cattitle'] + '</span>';
                        html += '<span class="title">' + adg.vars.imagesData[i]['title'] + '</span>';
                        html += '</span>';
                        html += '</a></li>';
                        //add item to list
                        adg.elms.images.append(html);
                        //var $item = $('#images_' + i + ' .item');
                        var $item = $('#images_' + adg.vars.imagesData[i]['id'] + ' .item');
                        $item.parent().css({ 'left': $left, 'top': $top });
                        $left += adg.vars.thumbnail_width;
                        adg.images.build.complete(i, $item);
                        i++;
                        adg.vars.projectIndex++;
                    }

                    adg.elms.images.height($top += adg.vars.thumbnail_height);

                    if (adg.elms.home.length) {

                        if (!adg.vars.navigator_is_iPad) {

                            if (maxIndex < adg.vars.imagesData.length - 1) {
                                var ie8 = navigator_is_ie8 ? 4 : 0;
                                if ($(window).scrollTop() == ($(document).height() - $(window).height() - ie8)) {
                                    adg.images.build.init(adg.vars.projectIndex);
                                } else {
                                    adg.home.thumbs.scrollHandler();
                                }
                            }

                        } else {

                            if (maxIndex < adg.vars.imagesData.length - 1) {
                                adg.images.build.init(adg.vars.projectIndex);
                            }

                        }

                    } else {

                        if (adg.vars.imagesData.length >= stopIndex) {

                            if (adg.vars.projectIndex < stopIndex) {
                                adg.images.build.standard.start(adg.vars.projectIndex);
                            } else if (adg.vars.projectIndex == stopIndex) {
                                //cache bullet list item in order to get height
                                adg.inspiration.nav.init();
                                //begin filtering
                            }
                        }
                    }
                }
            },
            complete: function(i, $item) {

                var color = adg.vars.loadFavourites ? adg.vars.favouriteImagesData[i]['thumb'][1] : adg.vars.imagesData[i]['thumb'][1];
                var mono = adg.vars.loadFavourites ? adg.vars.favouriteImagesData[i]['thumb'][0] : adg.vars.imagesData[i]['thumb'][0];

                //add colour image
                var $color = new Image();
                $($color).load(function() {
                    $item.prepend(this);
                })
				 .error(function() { $item.html('Load Failed'); })
				 .attr('src', "" + color + adg.randomNum());

                //add black and white image
                var $mono = new Image();
                $($mono).load(function() {
                    $item.prepend(this);
                    $($item).pauseAnim(300).fadeIn(150).parent().removeClass('loading');
                })
				 .error(function() { $item.html('Load Failed'); })
				 .attr({ 'src': "" + mono + adg.randomNum(), 'class': 'mono' });
                adg.vars.loadData = false;
            }


        }
    },
    //END BUILD IMAGES


    //START ENQUIRY FORM
    enquiry: {

        reset: function() {
            adg.elms.form.children('form')[0].reset();
            adg.elms.form.children('form').find('input, textarea').unbind('mouseenter mouseleave').removeClass('error').removeAttr('rel').removeAttr('title');

        },

        validate: function() {

            var hasError = false;

            var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

            adg.vars.emailToVal = adg.elms.email.val();
            if (adg.vars.emailToVal == '') {
                adg.elms.email.addClass('error').attr('rel', 'You forgot to enter the email address to send to');
                hasError = true;
            } else if (!emailReg.test(adg.vars.emailToVal)) {
                adg.elms.email.addClass('error').attr('rel', 'Enter a valid email address to send to');
                hasError = true;
            }

            adg.vars.firstNameVal = adg.elms.firstName.val();
            if (adg.vars.firstNameVal == '') {
                adg.elms.firstName.addClass('error').attr('rel', 'You forgot to enter your name');
                hasError = true;
            }

            adg.vars.surnameVal = adg.elms.surname.val();
            if (adg.vars.surnameVal == '') {
                adg.elms.surname.addClass('error').attr('rel', 'You forgot to enter your surname');
                hasError = true;
            }

            adg.vars.companyVal = adg.elms.company.val();
            if (adg.vars.companyVal == '') {
                adg.elms.company.addClass('error').attr('rel', 'You forgot to enter your company');
                hasError = true;
            }

            adg.vars.phoneVal = adg.elms.phone.val();
            if (adg.vars.phoneVal == '') {
                adg.elms.phone.addClass('error').attr('rel', 'You forgot to enter your phone');
                hasError = true;
            }

            adg.vars.commentsVal = adg.elms.comments.val();
            if (adg.vars.commentsVal == '') {
                adg.elms.comments.addClass('error').attr('rel', 'You forgot to enter a comment');
                hasError = true;
            }

            //adg.vars.caseStudyVal = $(adg.elms.hiddenInput).val();

            return hasError;
        },

        tooltip: function() {

            $(".error").unbind().hover(
				function(e) {
				    $(this).attr('title', ' ');
				    this.t = $(this).attr('rel');
				    this.title = '';
				    this.top = (e.pageY + adg.vars.yOffset); this.left = (e.pageX + adg.vars.xOffset);
				    $('body').append('<p id="vtip">' + this.t + '</p>');
				    $('p#vtip').css("top", this.top + "px").css("left", this.left + "px").fadeIn("slow");
				},
				function() {
				    this.title = this.t;
				    $("p#vtip").fadeOut("slow").remove();
				}
			).mousemove(
				function(e) {
				    this.top = (e.pageY + adg.vars.yOffset);
				    this.left = (e.pageX + adg.vars.xOffset);

				    $("p#vtip").css("top", this.top + "px").css("left", this.left + "px");
				}
			);

        },

        submit: function() {

            $("p#vtip").remove();

            adg.elms.form.children('form').find('input, textarea').unbind('mouseenter mouseleave').removeClass('error').removeAttr('rel').removeAttr('title');

            var result = adg.enquiry.validate();

            if (result == false) {

                adg.elms.submit.unbind('click');

                if (adg.elms.home.length) {
                    adg.elms.infoToggle.unbind('click');

                    adg.elms.prev.unbind('click');

                    adg.elms.next.unbind('click');
                }

                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();

                $.post(adg.vars.email_url,
                //MW { FirstName: adg.vars.firstNameVal, Surname: adg.vars.surnameVal, Company: adg.vars.companyVal, Phone: adg.vars.phoneVal, emailTo: adg.vars.emailToVal, Comments: adg.vars.commentsVal, CaseStudy: adg.vars.caseStudyVal },
					adg.elms.form.children('form').serialize(),
						function(data) {

						    adg.elms.form.children('form').fadeOut("normal", function() {

						        adg.enquiry.response();

						        if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();

						    });
						});
            } else {
                adg.enquiry.tooltip();
            }

        },

        response: function() {
            adg.elms.form.children('form').before('<div id="response"><h1>Success</h1><p>Your email was sent.</p><p><a href="#" onclick="adg.enquiry.reload(); return false;">Click here</a> to continue.</p></div>');
        },

        reload: function() {

            adg.elms.form.children('form').prev().fadeOut("normal", function() {

                adg.enquiry.reset();

                adg.elms.form.children('form').fadeIn(300,
					function() {

					    adg.elms.submit.bind('click', function(e) {
					        adg.enquiry.submit();
					        return false;
					    });

					    if (adg.elms.home.length) {

					        adg.elms.infoToggle.toggle(
								function() {
								    adg.home.slideShow.info.show();
								},
								function() {
								    adg.home.slideShow.info.hide();
								}
							);

					        adg.elms.prev.bind('click', function() {
					            adg.home.slideShow.nav.prev();
					        })
					        adg.elms.next.bind('click', function() {
					            adg.home.slideShow.nav.next();
					        })

					    }

					}
				);


            });

        },

        //Start Case Study Form
        home: {
            show: function(e) {
                $('.panel:first', adg.elms.mask).animate({ marginLeft: -520 }, { duration: 300, queue: false, easing: 'easeInQuad' });
                e.preventDefault();
            },
            hide: function(e) {
                $('.panel:first', adg.elms.mask).animate({ marginLeft: 0 }, { duration: 300, queue: false, easing: 'easeInQuad' });
            }
        },
        //End Case Study Form

        inspiration: {
            show: function() {
                adg.elms.showForm.fadeOut(300, function() {
                    $('.panel:first', adg.elms.modal)
						.stop()
						.animate({
						    marginLeft: '-' + adg.elms.modal.find('div.mask, .panel:first').width()
						}, 300)
                })
            },
            hide: function() {
                $('.panel:first', adg.elms.modal)
					.stop()
					.animate({
					    marginLeft: 0
					}, 300, function() { adg.elms.showForm.fadeIn() })
            }
        }

    },
    //END ENQUIRY FORM


    //START INSPIRATION
    inspiration: {
        init: function() {

            //run favourites									
            adg.inspiration.favourites.init();

            //run select drop down
            adg.inspiration.selectCategory.init();

            //run modal
            adg.inspiration.modal.init();

            adg.inspiration.attachEvents();

            //start loading gallery
            adg.inspiration.load();
        },

        attachEvents: function() {

            //bind functions to gallery thumbnails except for items in favourites
            $('li:not(.state-favourite)', adg.elms.images)
				.live('mouseenter mouseleave', function(e) {
				    if (e.type == 'mouseenter') {
				        if ($(this).hasClass('state-on')) {
				            $(this)
									.find('span.panel').stop().animate({ marginBottom: 0 }, { queue: false, easing: 'easeOutCirc', duration: 200 })
				        }
				    } else {
				        if ($(this).hasClass('state-on')) {
				            $(this)
									.find('span.panel').stop().animate({ marginBottom: -50 }, { queue: false, easing: 'easeOutCirc', duration: 200 })
				        }
				    }
				})
            $('li', adg.elms.images)
				.live('click', function(e) {
				    if ($(this).attr('rel') == adg.vars.url || adg.vars.url == 'show-all' || $(this).hasClass('state-favourite')) {
				        //add state-active class
				        if (!$(this).hasClass('state-active')) {
				            adg.inspiration.selectCategory.reset();
				            $(this).addClass('state-active');
				        }
				        //get details to pass to modal
				        var link = $(this).find('a').attr('href');
				        var title = $(this).find('span.title').text();
				        var category = $(this).find('span.cattitle').text();
				        var index = $('li', adg.elms.images).index($(this, adg.elms.images))
				        index = index.toString();
				        //run modal
				        adg.inspiration.modal.load(index, link, title, category, this);
				    }
				    e.preventDefault();
				});

            adg.elms.addFavourites
					.live('click', function(e) { adg.inspiration.favourites.add(); e.preventDefault(); });

            adg.elms.showFavourites
					.live('click', function(e) {
					    adg.inspiration.favourites.go($(this));

					    if (adg.vars.favouritesData.length > 0) {
					        adg.elms.clearFavourites.show();
					    }
					});

            adg.elms.clearFavourites
					.live('click', function(e) {
					    $.cookie('ADG_favourites', null);
					    adg.vars.favouriteImagesData = new Array(); //.length = 0;
					    adg.inspiration.favourites.getCookie();
					    adg.inspiration.favourites.updateCount();
					    adg.inspiration.reloadCategory();
					    adg.elms.clearFavourites.hide();
					    //adg.elms.images.html('<li class="message">' + adg.vars.message + '</li>');
					    //return false;
					});

            adg.elms.selectedOption
					.live('click',
						function() {
						    adg.elms.clearFavourites.hide();
						    if (!adg.elms.select.hasClass('open')) {
						        adg.inspiration.selectCategory.show();
						    } else {
						        adg.inspiration.selectCategory.hide();
						    }
						}
					)

            //assign select function when item in drop down is clicked
            $('li', adg.elms.select)
					.live('click', function() { adg.inspiration.selectCategory.select($(this)) });

            //close drop down on click
            $('html').click(function() {
                adg.inspiration.selectCategory.hide();
            });

            adg.elms.close
					.live('click', function() { adg.elms.showForm.is(':hidden') ? adg.elms.showForm.fadeIn() : null; adg.inspiration.modal.hide.init(); });

            adg.elms.showForm
					.live('click', function() { adg.enquiry.inspiration.show(); return false; });

            adg.elms.hideForm
					.live('click', function() { adg.enquiry.reset(); adg.enquiry.inspiration.hide(); });

            adg.elms.submit
					.live('click', function(e) { adg.enquiry.submit(); return false; });

        },

        reload: function() {

            adg.elms.images
				.fadeOut(200, function() {

				    //remove slideshow nav to reset
				    adg.inspiration.nav.remove();

				    adg.vars.counter = 0;
				    adg.vars.projectIndex = 0;

				    $('li', adg.elms.images).remove();

				    adg.elms.images
						.css({ height: 0, margin: 0 })
						.show();


				    //load projects back in
				    adg.images.build.init(adg.vars.projectIndex);

				});
        },

        reloadCategory: function() {

            adg.elms.images
				        .fadeOut(200, function() {

				            //remove slideshow nav to reset
				            adg.inspiration.nav.remove();

				            adg.vars.counter = 0;
				            adg.vars.projectIndex = 0;
				            adg.vars.currNum = 0;

				            $('li', adg.elms.images).remove();

				            adg.elms.images
						        .css({ height: 0, margin: 0 })
						        .show();


				            //load projects back in
				            // adg.images.build.init(adg.vars.projectIndex);
				            adg.vars.imagesData = new Array();
				            adg.inspiration.load();
				        });
        },

        //Start Load:
        load: function() {
            //get json data and add to slideshowData

            //MW: if category url, load for that category, else get randoms...
            $.getJSON(adg.vars.casestudy_url + "/" + adg.vars.selectedCategoryUrl,
			function(data) {
			    if (typeof data != 'undefined') {
			        for (var i = 0; i < data.data.length; i++) {
			            adg.vars.imagesData[adg.vars.imagesData.length] = data.data[i];
			        }

			        adg.inspiration.getHash();
			        adg.vars.selectedCategoryUrl = null;
			    }
			});
        },
        //End Load

        //Start getHash
        getHash: function() {
            $.history.init(function(hash) {

                switch (hash) {

                    case '':
                        adg.vars.url = 'show-all';
                        window.location.hash = adg.vars.url;
                        if (adg.vars.loadFavourites) {
                            adg.vars.loadFavourites = false;
                            adg.inspiration.reload();
                        } else {
                            adg.images.build.init(adg.vars.projectIndex);
                        }
                        break;
                    case 'favourites':
                        adg.vars.url = 'favourites';
                        if (!adg.vars.loadFavourites) {
                            adg.vars.loadFavourites = true;
                            adg.inspiration.reload();
                        } else {
                            adg.images.build.init(adg.vars.projectIndex);
                        }
                        break;
                    default:
                        adg.vars.url = hash;
                        if (adg.vars.loadFavourites) {
                            adg.vars.loadFavourites = false;
                            adg.inspiration.reload();
                        } else {
                            adg.images.build.init(adg.vars.projectIndex);
                            adg.inspiration.filter();
                        }
                }
                if (hash != 'favourites') {
                    $('li', adg.elms.select).removeClass();
                    var el = $(adg.elms.select).find('a[href$="' + adg.vars.url + '"]');
                    adg.elms.selectedOption.html(el.text());
                    el.parent().addClass('state-active');
                }


            });
        },
        //End getHash

        //Start Filter
        filter: function() {
            //check bullet list if url hash is not show-all
            if (adg.vars.url != 'show-all') {
                //check rel tags
                $('li[rel~=' + adg.vars.url + ']', adg.elms.images)
					.find('img.mono')
						.stop()
						.animate({
						    opacity: 0
						}, 300, function() {
						    $(this).parents('li')
										.addClass('state-on');
						}
								);
                $('li:not([rel~=' + adg.vars.url + '])', adg.elms.images)
					.removeClass('state-on')
					.find('img.mono')
						.stop()
						.animate({
						    opacity: 1
						}, 300
					);
            } else {
                $('li:not(.state-favourite)', adg.elms.images)
					.find('img.mono')
					.stop()
					.animate({
					    opacity: 0
					}, 300, function() {
					    $(this).parents('li')
							.addClass('state-on');
					}
					);
            }

        },
        //End Filter


        //Start Favourites
        favourites: {
            init: function() {
                //check for cookie
                adg.inspiration.favourites.getCookie();
                //if cookie available update counter
                adg.inspiration.favourites.updateCount();
            },

            add: function(e) {
                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
                //get title from gallery
                adg.vars.loadFavourites = true;
                //var item = $('li', adg.elms.images).index($('li.state-active', adg.elms.images))
                //MW:- use id
                var item = $('li.state-active', adg.elms.images).attr("id").replace("images_", "");
                //check if project is in favourites list
                adg.inspiration.favourites.find(item) ? alert('Already added!') : adg.inspiration.favourites.addToList(item);
            },
            addToList: function(item) {
                //add project to favourites list
                adg.vars.favouritesData.push(item);
                //hide favourites link in modal
                adg.inspiration.favourites.hide();
                //set favourite active state on thumbnail
                $('li.state-active', adg.elms.images).removeClass().addClass('state-favourite');
                //set or update cookie
                adg.inspiration.favourites.setCookie();
                adg.inspiration.favourites.getCookie();
                //update counter on favourites button
                adg.inspiration.favourites.updateCount();
                if (!adg.vars.navigator_is_iPad) adg.loadHandler.hide();
            },
            setCookie: function() {
                //remove cookie
                $.cookie('ADG_favourites', null);
                //add/override cookie
                $.cookie('ADG_favourites', adg.vars.favouritesData.join(','), { expires: 365, path: '/' });
            },
            getCookie: function() {
                //get cookie
                var cookie = $.cookie('ADG_favourites');
                //assign cookie data to favouritesData array
                adg.vars.favouritesData = cookie ? cookie.split(/,/) : new Array();

                //$.getJSON(adg.vars.favourites_url + "/" + cookie,
                $.ajax({
                    type: "POST",
                    cache: false,
                    url: adg.vars.favourites_url,
                    data: { "cookie" : cookie },
                    dataType: 'json',
                    jsonp: null,
                    jsonpCallback: null,
                    success: function(data) {
                        if (typeof data != 'undefined') {
			                adg.vars.favouriteImagesData = new Array();
			                for (var i = 0; i < data.data.length; i++) {
			                    adg.vars.favouriteImagesData[adg.vars.favouriteImagesData.length] = data.data[i];
			                }
			            }
                    }, error: function(e) {
                    }, complete: function() {
                    }
                });
                    
//			    function(data) {
//			        if (typeof data != 'undefined') {
//			            adg.vars.favouriteImagesData = new Array();
//			            for (var i = 0; i < data.data.length; i++) {
//			                adg.vars.favouriteImagesData[adg.vars.favouriteImagesData.length] = data.data[i];
//			            }
//			        }
//			    });
            },
            find: function(item) {
                //check if project is in array
                var found = -1 != $.inArray(item, adg.vars.favouritesData) ? true : false;
                return found
            },
            updateCount: function() {
                //update counter on favourites link
                if ($.cookie('ADG_favourites') != null) {
                    adg.elms.showFavourites.html('View Favourites (' + adg.vars.favouritesData.length + ')');
                }
                else {
                    adg.elms.showFavourites.html('View Favourites');
                }
            },
            show: function() {
                //show favourites button in modal
                adg.elms.addFavourites.show();
            },
            hide: function() {
                //hide favourites button in modal
                adg.elms.addFavourites.hide();
            },
            go: function(el) {

                //show favourites list
                //get href and grab url hash
                var link = el.attr('href');
                newLink = link.substring(link.indexOf('#') + 1);

                //if url hash is not the same as current link then show favourites list
                if (adg.vars.url != newLink) {

                    //close menu if open
                    adg.menu.isOpen();

                    //if there is nothing in favourites alert user
                    if ($.cookie('ADG_favourites') != null) {

                        if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
                        adg.vars.loadFavourites = true;
                        $.history.load(newLink);
                        adg.inspiration.reload();

                    }

                } else {
                    if (adg.vars.favouriteImagesData.length == 0) {
                        adg.elms.images.html('<li class="message">' + adg.vars.message + '</li>');
                    }
                    return false;
                }
            }
        },
        //End Favourites


        //Start Nav
        nav: {
            init: function() {
                //get number of clicks for scrolling
                if (adg.vars.window_is_widescreen) {
                    maxIndex = 5;
                } else {
                    maxIndex = 3;
                }
                adg.vars.pos = ((Math.ceil(adg.vars.imagesData.length / maxIndex) * adg.vars.thumbnail_height) - adg.elms.mask.height()) / adg.vars.thumbnail_height;
                adg.vars.counter = 0;
                adg.vars.loadData = false;

                adg.vars.pos > 0 ? adg.inspiration.nav.show() : null;

            },
            show: function() {

                adg.elms.prev
					.live('click', function() {
					    if (!adg.vars.flag) {
					        adg.vars.flag = true;
					        adg.inspiration.nav.prev();
					    }
					})

                adg.elms.next.fadeIn(300)
					.live('click', function() {
					    if (!adg.vars.flag) {
					        adg.vars.flag = true;
					        adg.inspiration.nav.next();
					    }
					})

            },
            //remove navigation used when jumping from all categories to favourites
            remove: function() {
                adg.vars.pos = 0;
                adg.vars.counter = 0;
                adg.elms.prev.unbind('click').hide();
                adg.elms.next.unbind('click').hide();
            },
            next: function() {
                //if total clicks is larger than counter to go forward
                if (adg.vars.pos > adg.vars.counter) {
                    adg.inspiration.nav.move('next');
                }
            },
            prev: function() {
                //counter needs to be greater than zero to go back
                if (adg.vars.counter > 0) {
                    adg.inspiration.nav.move('prev');
                }
            },
            move: function(direction) {

                if (direction == 'next') {
                    //animate to position
                    adg.elms.images.stop().animate({
                        marginTop: '-=' + adg.vars.thumbnail_height
                    }, {
                        duration: 300,
                        queue: true,
                        complete: function() {
                            if (adg.vars.imagesData.length > adg.vars.projectIndex) {
                                if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();
                                adg.images.build.init(adg.vars.projectIndex);
                            }

                            adg.vars.counter++;
                            //check if last or first row
                            adg.inspiration.nav.checkCounter();
                            adg.vars.flag = false;
                        }
                    });

                } else {
                    //animate to position
                    adg.elms.images.stop().animate({
                        marginTop: '+=' + adg.vars.thumbnail_height
                    }, {
                        duration: 300,
                        queue: true,
                        complete: function() {
                            adg.vars.counter--;
                            //check if last or first row
                            adg.inspiration.nav.checkCounter();
                            adg.vars.flag = false;
                        }
                    });
                }


            },
            //check if slideshow is on last row or first row to hide or show prev or next button	
            checkCounter: function() {
                adg.vars.pos == adg.vars.counter ? adg.elms.next.hide() : adg.elms.next.show();
                adg.vars.counter == 0 ? adg.elms.prev.hide() : adg.elms.prev.show();
            }
        },
        //End Nav


        //Start selectCategory
        selectCategory: {
            init: function() {
                //check for url hash to set active state on drop down
                if (window.location.hash.substr(1) != 'favourites') {
                    var el = $(adg.elms.select).find('a[href$="' + window.location.hash.substr(1) + '"]');
                    adg.elms.selectedOption.html(el.addClass('state-active').text());

                    //MW
                    adg.vars.selectedCategoryUrl = window.location.hash.substr(1);
                } else {
                    adg.elms.selectedOption.html($('li:first', adg.elms.select).addClass('state-active').text())
                }
            },
            hide: function() {
                adg.elms.select
					.removeClass("open")
            },
            show: function() {
                adg.elms.select
					.addClass("open")
            },
            select: function(target) {
                //get href
                var link = target.find('a').attr('href');
                //get url hash from href
                newLink = link.substring(link.indexOf('#') + 1);
                //make sure currently not on that category
                if (adg.vars.url != newLink) {

                    //close menu if open
                    adg.menu.isOpen();

                    if (!adg.vars.navigator_is_iPad) adg.loadHandler.show();

                    adg.vars.url = newLink;

                    //store url hash
                    $.history.load(newLink);

                    //reset select list
                    $('li', adg.elms.select).removeClass();

                    //add active to current item
                    adg.elms.selectedOption.html(target.addClass('state-active').text());

                    if (adg.vars.url == 'favourites') {
                        adg.vars.loadFavourites = false;
                        adg.inspiration.reload();
                    } else {
                        //MW
                        adg.vars.selectedCategoryUrl = adg.vars.url;
                        //adg.inspiration.load();
                        adg.inspiration.reloadCategory();

                        //reset active states from slideshow
                        //adg.inspiration.selectCategory.reset();
                        //begin filter
                        //adg.inspiration.filter();
                    }


                } else {
                    return false;
                }
            },
            reset: function() {
                //reset all active classes except for the ones that are added to favourites. active states are set on modal launch
                $('li.state-active:not(.state-favourite)', adg.elms.images)
					.find('span.panel').stop().animate({ marginBottom: -50 }, { queue: false, easing: 'easeOutCirc', duration: 200 })
					.end()
					.removeClass('state-active');
            }
        },
        //End selectCategory


        //Start Modal
        modal: {
            init: function() {
                //add overlay
                $('body').append('<div id="overlay" class="modal-overlay">&nbsp;</div>');
                adg.elms.overlay = $('#overlay');
            },
            load: function(item, img, title, category, li) {
                //close menu if open
                adg.menu.isOpen();
                //insert title
                adg.elms.title.html(title);
                //insert title to hidden input
                //adg.elms.hiddenInput.val(title);
                //MW
                adg.elms.hiddenInspirationInput.val($(li).attr("id").replace("images_", ""));
                //insert category	
                adg.elms.category.html(category);
                //hide or show the favourites link in modal if its in favourites list

                //if (!adg.vars.loadFavourites) {
                //adg.inspiration.favourites.find(item) ? adg.inspiration.favourites.hide() : adg.inspiration.favourites.show();
                var id = $(li).attr("id").replace("images_", "");
                adg.inspiration.favourites.find(id) ? adg.inspiration.favourites.hide() : adg.inspiration.favourites.show();
                //} else {
                //   adg.inspiration.favourites.hide();
                //}

                //add image to modal
                var $img = new Image();
                $($img)
				.hide()
				.load(function() {
				    var w = this.width;
				    var h = this.height;
				    adg.elms.canvas
						.css({ 'width': w < 600 ? 600 : w, 'height': h })
						.addClass('loading')
						.html(this);

				    $(this)
						.fadeIn(300, function() { adg.elms.canvas.removeClass('loading'); adg.inspiration.modal.show(w, h); })

				})
				.error(function() { adg.elms.canvas.html('Load Failed'); })
				.attr({ 'src': img })
            },
            show: function(width, height) {

                //set height of overlay
                adg.inspiration.modal.overlay.matchHeight();
                //set modal box dimensions - margintop = 2*25 padding, marginleft = 2*25 padding + close button width

                adg.elms.modal
					.css({
					    display: 'block',
					    top: "43%",
					    left: "50%",
					    marginTop: -(Math.ceil((height + 60) / 2)),
					    marginLeft: -(Math.ceil((width + 93) / 2))
					})
					.find('div.mask, .panel:first').css({
					    "width": width < 600 ? 600 : width,
					    "height": height > 400 ? height : 400
					})
					.end()
					.find('.box-outer').css({
					    "width": width < 600 ? 660 : width + 60
					})
                    .end()
					.find('#modal-options').css({ width: width < 600 ? 600 : width })
					.end()
					.animate({ opacity: 1 }, 200, "linear");
                adg.inspiration.modal.overlay.show();
            },
            hide: {
                init: function() {
                    if ($('.error').length) { adg.enquiry.reset(); }
                    //close form first before closing modal box
                    $('.panel:first', adg.elms.modal).css('margin-left') != '0px' ? adg.inspiration.modal.hide.openForm() : adg.inspiration.modal.hide.openForm();
                },
                openForm: function() {
                    $('.panel:first', adg.elms.modal)
						.animate({
						    marginLeft: 0
						}, {
						    duration: 300,
						    queue: false,
						    complete:
							function() {
							    adg.elms.modal
									.animate({ opacity: 0 }, 200, "linear", function() {
									    adg.elms.modal
										.css({
										    left: -9999,
										    marginTop: 0,
										    marginLeft: 0,
										    display: 'none'
										});
									});
							    adg.inspiration.modal.overlay.hide();
							}
						})

                },
                closeForm: function() {
                    adg.elms.modal
						.animate({ opacity: 0 }, 200, "linear", function() {
						    adg.elms.modal
							.css({
							    left: -9999,
							    marginTop: 0,
							    marginLeft: 0
							});
						    adg.inspiration.modal.overlay.hide();
						});
                }
            },
            overlay: {
                matchHeight: function() {
                    //match height of overlay with page height
                    adg.elms.overlay.height($(document).height());
                },
                show: function() {
                    adg.elms.overlay.show();
                },
                hide: function() {
                    adg.elms.overlay.hide();
                }
            }
        }
        //End Modal

    },
    //END INSPIRATION


    //START PRELOADER - show / hide preloader functions
    loadHandler: {
        show: function() {
            adg.elms.loading
				.animate({ marginBottom: 89 }, { queue: false, easing: 'swing', duration: 500 });
            adg.elms.loadingAnimation
				.animate({ marginBottom: 89 }, { queue: false, easing: 'swing', duration: 500 });
        },
        hide: function() {
            adg.elms.loading
				.pauseAnim(500)
				.animate({ marginBottom: -89 }, { queue: true, easing: 'swing', duration: 500 });

            adg.elms.loadingAnimation
				.pauseAnim(500)
				.animate({ marginBottom: -89 }, { queue: true, easing: 'swing', duration: 500 });
        }
    }
    //END PRELOADER	
}
$( function() {
	adg.init();
});

