jQuery(function ($) {

    //browser detection
    if ($.browser.msie) {
        var $ie = true;
        if ($.browser.version.substr(0, 1) < 7) {
            var $ie6 = true;
        } else if ($.browser.version.substr(0, 1) == 7) {
            var $ie7 = true;
        } else if ($.browser.version.substr(0, 1) >= 8) {
            var $ie8 = true;
        }
    }
	if ($.browser.opera){
		var $opera = true;
		$('html').addClass('opera');
	}
	if ($.browser.safari){
		var $safari = true;
		$('html').addClass('safari');
	}
	if ($.browser.mozilla){
		var $mozilla = true;
		$('html').addClass('mozilla');
	}
	if ($.browser.webkit){
		var $webkit = true;
		$('html').addClass('webkit');
	}

    //mobile device detection
    if (navigator.userAgent.match(/Android/i) ||
 	navigator.userAgent.match(/webOS/i) ||
 	navigator.userAgent.match(/iPhone/i) ||
 	navigator.userAgent.match(/iPod/i)) {
        //allow caching on mobile devices
        var $mobile = true;
        $('html').attr('manifest', '/includes/cache.manifest');
    }
    //orientation detection and auto scaling
    $(window).bind('orientationchange', function (event) {
        if (window.orientation == 90 || window.orientation == -90 || window.orientation == 270) {
            $('meta[name="viewport"]').attr('content', 'height=device-width,width=device-height,initial-scale=1.0,maximum-scale=1.0');
            $(window).resize();
        } else {
            $('meta[name="viewport"]').attr('content', 'height=device-height,width=device-width,initial-scale=1.0,maximum-scale=1.0');
            $(window).resize();
        }
    }).trigger('orientationchange');

    //global variables
    var $body = $('body');
    var $currentPage = $body.attr('id');
    var $margin = 25;

    var $mainNav = $('header nav');
    var $mainNavHtml;
    var $mainNavRounded = false;

    var $sideNav;
    var $sideNavWidth = 500;
    var $sideNavHtml;

    //global functions
    var delay = (function () {
        //delay by x (callback value)
        var timer = 0;
        return function (callback, ms) {
            clearTimeout(timer);
            timer = setTimeout(callback, ms);
        };
    })();
    var windowWidth = (function () {
        //width detection
        if ($(window).devicePixelRatio > 1.5 && $(window).width() < 1000 && !$ie6) {
            $('html').addClass('hiResSmall');
        }
        if ($(window).width() > 990) {
            $('html').addClass('gt990w');
        } else {
            $('html').removeClass('gt990w');
        }
        if ($(window).width() < 990 && !$ie6) {
            $('html').addClass('lt990w');
        } else {
            $('html').removeClass('lt990w');
        }
        if ($(window).width() < 670 && !$ie6) {
            $('html').addClass('lt670w');
        } else {
            $('html').removeClass('lt670w');
        }
        if ($(window).width() > 650) {
            $('html').addClass('gt650w');
        } else {
            $('html').removeClass('gt650w');
        }
        if ($(window).width() < 650 && !$ie6) {
            $('html').addClass('lt650w');
        } else {
            $('html').removeClass('lt650w');
        }
        if ($(window).width() < 340 && !$ie6) {
            $('html').addClass('lt340w');
        } else {
            $('html').removeClass('lt340w');
        }
    });
    var replaceLogo = (function () {
        //replace logo with a vertical one for screens with narrow width
        var $logoImg = $("header .logo img");
        if ($(window).width() < 245 && !$ie6) {
            $logoImg.attr({
                src: 'images/logo-header-vertical-trans.gif',
                width: '91',
                height: '66'
            });
        } else if ($logoImg.width() == 91) {
            $logoImg.attr({
                src: 'images/logo-header-trans.gif',
                width: '220',
                height: '24'
            });
        }
    });
    var replaceMenu = (function () {
        //replace main navigation buttons
        if (($(window).width() < 650 && $mainNavRounded == false) && !$ie6 || ($mobile && $mainNavRounded == false) && !$ie6) {
            $mainNavHtml = $mainNav.html();
            roundedButtonInner($mainNav.find('li:not(.enquire)'));
            $mainNav.find('li').wrapInner('<div class="active"></div>');
            $mainNavRounded = true;
        } else if ($(window).width() > 650 && $mainNavRounded == true) {
            $mainNav.html($mainNavHtml); //get original menu back
            $mainNavRounded = false;
        }
        //replace side navigation with a drop down
        var $sideNavHeight = $sideNav.height();
        if (($(window).width() < 980 && $sideNavHeight > 130) && !$ie6 || $mobile && !$ie6) {
            $sideNavWidth = $sideNav.width();
            if ($currentPage == 'about') {
                var html = [];
                html.push('<nav class="side">');
                html.push('<select onchange="navigateTo(this);">');
                html.push('<option value="about.php">Profile</option>');
                html.push('<option value="about-team.php">Our Team</option>');
                html.push('<option value="about-careers.php">Careers</option>');
                html.push('</select>');
                html.push('</nav>');
                $sideNav.html(html.join(''));
            } else if ($currentPage == 'services') {
                var html = [];
                html.push('<nav class="side">');
                html.push('<select onchange="navigateTo(this);">');
                html.push('<option value="services-responsive.php">Responsive Sites</option>');
                html.push('<option value="services-creative.php">Creative Services</option>');
                html.push('<option value="services-ecommerce.php">E-Commerce &amp; CMS</option>');
                html.push('<option value="services-mobile.php">Mobile &amp; Tablet Apps</option>');
                html.push('<option value="services-intranet.php">Intranet &amp; Extranet</option>');
                html.push('<option value="services-web.php">Web Apps</option>');
                html.push('</select>');
                html.push('</nav>');
                $sideNav.html(html.join(''));
            }
        } else if ($sideNav.width() > $sideNavWidth) {
            $sideNav.html($sideNavHtml); //get original menu back
        }
    });

    var backButton = (function () {
        //create a back-to-top button if section is greater than 200 in height
        
        if ($(window).width() < 650 && !$ie6 || $mobile && !$ie6) {
            $('section:not(:has(.back-to-top))').each(function (i) {
                if ($(this).height() > 200) {
                    //$(this).append('<a href="#' + $currentPage + '" class="back-to-top">&lt; Back to top</a>');
                }
            });
            $('.back-to-top').show();
        } else {
            $('.back-to-top').hide();
        }
    });
    var resizeFooter = (function () {
        //push footer to bottom of page
        if ($body.height() < $(window).height() && !$ie) {
            if ($('body:has(footer)')) {
                var $footer = $('footer');
                var $diff = $(window).height() - $body.height();
                $footer.css('borderTopWidth', $margin*2 + $diff + 'px');
            }
        }
    });
    //rounded buttons and boxes
    var roundedBox = (function (object) {
        //global rounded box
        object.wrap('<div class="roundedBox"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });
    var roundedBox2 = (function (object) {
        //global rounded box 2
        object.wrap('<div class="roundedBox2"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });
    var roundedBox3small = (function (object) {
        //global rounded box 3
        object.wrap('<div class="roundedBox3small"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });
    var dialog = (function (object) {
        //global dialog box
        object.wrap('<div class="dialog"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });
    var roundedButton = (function (object) {
        //global rounded button outside
        object.wrap('<div class="roundedButton"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });
    var roundedButtonInner = (function (object) {
        //global rounded button inside
        object.wrapInner('<div class="roundedButton"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });
    var roundedButtonSmall = (function (object) {
        //global rounded button outside
        object.wrapInner('<div class="roundedButtonSmall"><div class="bd"><div class="c"><div class="s"></div></div></div></div>');
    });

    var init = (function () {

        if (!$ie) {
            roundedButtonSmall($('#home section.blog nav li a'));
        }
        if (!$ie6) {
            roundedBox2($('nav.side'));
            $('.roundedBox2:has(nav.side)').wrap('<div class="sideNav"></div>');
            roundedButtonInner($('a.button'));
            roundedButtonSmall($('a.buttonSmall'));
            //home page only - blog navigation
            dialog($('#home section.twitter q'));
            $('#home section.blog li').wrapInner('<span class="subtle">');
            roundedBox3small($('#home section.blog .headlines li a'));
            //not home page
            if ($currentPage != "home") {
                roundedBox($('section.twitter'));
            }
        }
        //enlarge first heading
        if ($('.content article h1').size() > 1) {
            $('.content article h1').eq(0).wrapInner('<span class="scale"></span>');
        }
        roundedButton($('header nav .enquire a'));
        roundedButtonSmall($('.banner nav li a'));
        //multiple banners
        if ($('.banner:has(.banner2)')) {
            //initiate banners - original css set to display:none
            $('.banner dl').hide();
            $('.banner dl.banner1').show();
        }
        //figures
        $('figure').each(function (i) {
            $(this).addClass('figure' + (i + 1));
        });
        //rounded corners
        //if ($.browser.msie && parseInt($.browser.version) < 9) {
        //    $('.button-style').corner("cc:#ffffff 3px");
        //    $('.button2').corner("cc:#ffffff 3px");
        //}
        //form show/hide 
        $("#contact-form").validationEngine();
        $("#top-contact-form").validationEngine();
        $('.enquire').click(function () {
            if ($(window).width() > 990) {
                $('.enquire-form').slideToggle(300);
                $('.enquire-bg').css('display', 'block');
                $('html').animate({ scrollTop: 0 }, 'slow');
            } else {
                window.location = 'contact.php';
            }
        });
		
        $('.enquire-bg').click(function () {
            $('.enquire-form').slideToggle(400);
            $('.enquire-bg').css('display', 'none');
            $('#top-contact-form').validationEngine('hide');
            $('#contact-form').validationEngine('hide');
        });
        //showcase screenshots
        $('#screenshots').innerfade({
            speed: 'slow',
            timeout: 4000,
            type: 'sequence',
            containerheight: '340px'
        });
		
        //first run only
        $('.roundedBox')
			.prepend('<div class="hd"><div class="c"></div></div>')
			.append('<div class="ft"><div class="c"></div></div>');
        $('.roundedBox2')
			.prepend('<div class="hd"><div class="c"></div></div>')
			.append('<div class="ft"><div class="c"></div></div>');
        $('.roundedBox3small')
			.prepend('<div class="hd"><div class="c"></div></div>')
			.append('<div class="ft"><div class="c"></div></div>');
        $('.dialog')
			.prepend('<div class="hd"><div class="c"></div></div>')
			.append('<div class="ft"><div class="c"></div></div>');
        $('ul.zebra li:nth-child(odd)').addClass('alternate'); // zebra list
        /*find and add span around arrows
        $('*', 'body')
        .andSelf()
        .contents()
        .filter(function(){
        return this.nodeType === 3;
        })
        .filter(function(){
        // Only match when contains 'simple string' anywhere in the text
        return this.nodeValue.indexOf('>') != -1;
        })
        .each(function(){
        $(this).wrap('<span class="arrow"></span>');
        });*/

        //update side navigation html
        $sideNav = $('.sideNav');
        $sideNavHtml = $sideNav.html();

    }); //endof init

    //initialize
    init();
    windowWidth();
    replaceMenu();
    backButton();
    resizeFooter();

    $(window).resize(function () {
        delay(function () {

            windowWidth();
            replaceLogo();
            replaceMenu();
            backButton();
            resizeFooter();

        }, 200);
    });

});

//mobile navigation
function navigateTo(object) {
    top.location = '' + object.options[object.selectedIndex].value;
}
