/* 

Logicbox Web Solutions Ltd
18 Greek Street, London
http://logicbox.net

*/
if(logicbox === undefined) var logicbox = {};

(function($) {
		  
	logicbox.prototype = $.extend(logicbox, {
		bookingRequest: function() {
			//reset errors
			//$("label > em",this).remove();
			$("tr",this).removeClass('error')
			
			//custom errors
			var errors = {};
			
			//add basic errors
			errors = $.extend(errors,logicbox.validate(this,logicbox.bookingRequestRules));
				
			var i=0,self = this;
			$.each(errors, function(k, v) {
				i++;
				$(":input[name=" + k + "]",self)
					.parents('tr').addClass('error')
					//.find('label').append('<em> ' + v + '</em>'); 
			});
	
			return i==0 ? true : false;
		}	
	});
	
	$(function() {	
			   
		//Notification
		if ($("p.notification").length) {
			var notify = new logicbox.Dialog({fadeIn:false});
			notify.show($("p.notification").text());
			$("p.notification").remove();
		}
			   
		if ($(".c-index").length) {
			
			$.fn.flash.replace = function(htmlOptions) {
				this.innerHTML = '<span class="alt sIFR-alternate">'+this.innerHTML+'<span>';
				$(this)
					.addClass('flash-replaced')
					.addClass('sIFR-replaced')
					.prepend($.fn.flash.transform(htmlOptions));
			};
			
			$('#content-wrapper').flash({
				wmode: 'transparent',
				src: '/swf/'+ logicbox.urlPart[0] +'/home-assets/home.swf',
				width: 860,
				height: 409 },
				{ version: '8', update: false}
			);
		}
		
		if ($(".m-productionprocess").length && !$("#slider").length) {
			$('#section').flash({
				wmode: 'transparent',
				src: '/swf/'+ logicbox.urlPart[0] + '/productionprocess/process.swf',
				width: 710,
				height: 389 },
				{ version: '8'}
			);
		}
		
		$("div.image-cycle").cycle({
			timeout: 4000,
			speed: 1000
		});
		$('body').supersleight();
		
		if ($(".m-localarea").length) {
			
			$(".icon").click(function() {
				var index = $(this).index();
				$(".info").hide().filter(':eq('+index+')').show();
			});
			
			$(".m-localarea .close").click(function() {
				$(this).parents('.info').hide();				   
			});
		}	
		
	});
})(jQuery);

(function($) {
	
	logicbox.prototype = $.extend(logicbox, {
		newWin: function(el) {
			if (el===undefined) {
				el = this;
			}
			var w = window.open($(el).attr('href'),'_blank');
			w.focus();
			return false;
		},
		pageTrack: function(el,url) {
			//for dynamic/inline pageview only allow once per element
       		if (typeof pageTracker !== 'undefined' && typeof el.tracked === 'undefined') {
				if (typeof url === 'undefined') {
					url = $(el).attr('href');
				}
           		pageTracker._trackPageview(url);
				el.tracked=true;
        	}	
		},
		eventTrack: function(e,cat,str) {
			//get event type
			var type = typeof e !== 'string' ? e.type : e;			
			
			//if google analytics loaded
       	  	if (typeof pageTracker !== 'undefined') {
				pageTracker._trackEvent(cat,type,str);
          	}
		},
		validEvent: function(e) {
			key = this.keyCode(e);
			return ((typeof key === 'undefined' || key==0) || (key && key == 13)) ? true : false;
		},
		keyCode: function(e) {
			return e.charCode || e.keyCode;
		},
		arraySearch: function(needle, haystack) { //non-strict as opposed to $.inArray or .indexOf()
			var k;
			for (k in haystack) {
				if (haystack[k] == needle) {
					return k;
					break;
				}
			}	
		},
		validateRequired: 'required',
		validateInvalid: 'invalid',
		validate: function(el,rules) {
			var error={};
			$(":input",el).each(
				function() {
					var attr = $(this).attr('name');
					var val  = $.trim($(this).val());
					if (typeof rules[attr] !== "undefined") {
						if (rules[attr][0]===true && val=="") {
							error[attr]=logicbox.validateRequired;
						}
						else if (typeof rules[attr][1] !== "undefined" && rules[attr][1] != "" && val!="") {					//do validation on field
							var regex = new RegExp("^" + rules[attr][1] + "$","i"); 
							if (!regex.test(val)) {
								//failed
								error[attr]= rules[attr][3]!=null ? rules[attr][3] : logicbox.validateInvalid;
							}
						}
					}
				}
			);
			return error;
		},
		urlPart: document.location.pathname.replace(/^\//,'').split('/'),
		getCookie: function( name ) {
			var start = document.cookie.indexOf( name + "=" );
			var len = start + name.length + 1;
			if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
				return null;
			}
			if ( start == -1 ) return null;
			var end = document.cookie.indexOf( ';', len );
			if ( end == -1 ) end = document.cookie.length;
			return unescape( document.cookie.substring( len, end ) );
		},
		setCookie: function( name, value, expires, path, domain, secure ) {
			var today = new Date();
			today.setTime( today.getTime() );
			if ( expires ) {
				expires = expires * 1000 * 60 * 60 * 24;
			}
			var expires_date = new Date( today.getTime() + (expires) );
			document.cookie = name+'='+escape( value ) +
				( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
				( ( path ) ? ';path=' + path : '' ) +
				( ( domain ) ? ';domain=' + domain : '' ) +
				( ( secure ) ? ';secure' : '' );
		},
		deleteCookie: function ( name, path, domain ) {
			if ( getCookie( name ) ) document.cookie = name + '=' +
					( ( path ) ? ';path=' + path : '') +
					( ( domain ) ? ';domain=' + domain : '' ) +
					';expires=Thu, 01-Jan-1970 00:00:01 GMT';
		}
	});
	
	logicbox.prototype = $.extend(logicbox, {
		Dialog: function(options) {
			
			this.options = {
				fadeIn: true,
				fadeOut: true,
				dialogClass: ".dialog",
				dialogTimeout: 5000
			};
			
			//override defaults with options
			this.options = $.extend(this.options,options);
		}
	});
	
	logicbox.Dialog.prototype = $.extend(logicbox.Dialog, {
		show: function(dialogText) {
			this.$dialog = $(this.options.dialogClass).clone();
			this.$dialog.find('p').text(dialogText).end().appendTo('body');
			//setup event
			var self = this,
				funcClose = function() { self.close(); return false; };
			
			$("a",this.$dialog).click(funcClose);
			this.timeout = setTimeout(funcClose,this.options.dialogTimeout);
			this.options.fadeIn ? this.$dialog.fadeIn(500) : this.$dialog.show();
		},
		close: function() {
			var self=this,funcDestroy = function() { self.destroy() };
			clearTimeout(this.timeout);
			this.options.fadeOut ? this.$dialog.fadeOut(500,funcDestroy) : this.$dialog.hide(this.funcDestroy);
			
		},
		destroy: function() {
			this.$dialog.remove();
			this.$dialog=null;
		}
	});


	$(function() { //DOM load
			   
		$("a[rel=external],a.newwin").bind('click keypress',
			function(e) {
				if (logicbox.validEvent(e)) {
					//only event track outgoing links
					if ($(this).attr('href').match(/^https?:\/\//)) {
						logicbox.eventTrack(e,'outgoing',$(this).attr('href'));
					}
					return logicbox.newWin(this);
				}
				return false;
			}
		);
		$("a[href^=mailto]").bind('click keypress',
			function(e) {
				if (logicbox.validEvent(e)) {
					logicbox.eventTrack(e,'email',$(this).attr('href'));
				}
				return true;
			}
		);
		$("a[href$=pdf]").bind('click keypress', 
			function(e){
				if (logicbox.validEvent(e)) {
					logicbox.pageTrack(this,e);
				}
			}
		);

	});

})(jQuery);

jQuery.fn.supersleight = function(settings) {
	settings = jQuery.extend({
		imgs: true,
		backgrounds: true,
		shim: '/images/x.gif',
		apply_positioning: true
	}, settings);
	
	return this.each(function(){
		if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
			jQuery(this).find('*').andSelf().each(function(i,obj) {
				//console.log(this);
				var self = jQuery(obj);
				// background pngs
				if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
					var bg = self.css('background-image');
					var src = bg.substring(5,bg.length-2);
					var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
					var styles = {
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
						'background-image': 'url('+settings.shim+')'
					};
					self.css(styles);
				};
				// image elements
				if (settings.imgs && self.is('img[src$=png],input[src$=png]')){
					var styles = {
						'width': self.width() + 'px',
						'height': self.height() + 'px',
						'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
					};
					self.css(styles).attr('src', settings.shim);
				};
				// apply position to 'active' elements
				if (settings.apply_positioning && self.is('a, input') && (self.css('position') === '' || self.css('position') == 'static')){
					self.css('position', 'relative');
				};
			});
		};
	});
};
// JQuery Cycle lite 1.0
(function(D){var A="Lite-1.0";D.fn.cycle=function(E){return this.each(function(){E=E||{};if(this.cycleTimeout){clearTimeout(this.cycleTimeout)}this.cycleTimeout=0;this.cyclePause=0;var I=D(this);var J=E.slideExpr?D(E.slideExpr,this):I.children();var G=J.get();if(G.length<2){if(window.console&&window.console.log){window.console.log("terminating; too few slides: "+G.length)}return }var H=D.extend({},D.fn.cycle.defaults,E||{},D.metadata?I.metadata():D.meta?I.data():{});H.before=H.before?[H.before]:[];H.after=H.after?[H.after]:[];H.after.unshift(function(){H.busy=0});var F=this.className;H.width=parseInt((F.match(/w:(\d+)/)||[])[1])||H.width;H.height=parseInt((F.match(/h:(\d+)/)||[])[1])||H.height;H.timeout=parseInt((F.match(/t:(\d+)/)||[])[1])||H.timeout;if(I.css("position")=="static"){I.css("position","relative")}if(H.width){I.width(H.width)}if(H.height&&H.height!="auto"){I.height(H.height)}var K=0;J.css({position:"absolute",top:0,left:0}).hide().each(function(M){D(this).css("z-index",G.length-M)});D(G[K]).css("opacity",1).show();if(D.browser.msie){G[K].style.removeAttribute("filter")}if(H.fit&&H.width){J.width(H.width)}if(H.fit&&H.height&&H.height!="auto"){J.height(H.height)}if(H.pause){I.hover(function(){this.cyclePause=1},function(){this.cyclePause=0})}D.fn.cycle.transitions.fade(I,J,H);J.each(function(){var M=D(this);this.cycleH=(H.fit&&H.height)?H.height:M.height();this.cycleW=(H.fit&&H.width)?H.width:M.width()});J.not(":eq("+K+")").css({opacity:0});if(H.cssFirst){D(J[K]).css(H.cssFirst)}if(H.timeout){if(H.speed.constructor==String){H.speed={slow:600,fast:200}[H.speed]||400}if(!H.sync){H.speed=H.speed/2}while((H.timeout-H.speed)<250){H.timeout+=H.speed}}H.speedIn=H.speed;H.speedOut=H.speed;H.slideCount=G.length;H.currSlide=K;H.nextSlide=1;var L=J[K];if(H.before.length){H.before[0].apply(L,[L,L,H,true])}if(H.after.length>1){H.after[1].apply(L,[L,L,H,true])}if(H.click&&!H.next){H.next=H.click}if(H.next){D(H.next).bind("click",function(){return C(G,H,H.rev?-1:1)})}if(H.prev){D(H.prev).bind("click",function(){return C(G,H,H.rev?1:-1)})}if(H.timeout){this.cycleTimeout=setTimeout(function(){B(G,H,0,!H.rev)},H.timeout+(H.delay||0))}})};function B(J,E,I,K){if(E.busy){return }var H=J[0].parentNode,M=J[E.currSlide],L=J[E.nextSlide];if(H.cycleTimeout===0&&!I){return }if(I||!H.cyclePause){if(E.before.length){D.each(E.before,function(N,O){O.apply(L,[M,L,E,K])})}var F=function(){if(D.browser.msie){this.style.removeAttribute("filter")}D.each(E.after,function(N,O){O.apply(L,[M,L,E,K])})};if(E.nextSlide!=E.currSlide){E.busy=1;D.fn.cycle.custom(M,L,E,F)}var G=(E.nextSlide+1)==J.length;E.nextSlide=G?0:E.nextSlide+1;E.currSlide=G?J.length-1:E.nextSlide-1}if(E.timeout){H.cycleTimeout=setTimeout(function(){B(J,E,0,!E.rev)},E.timeout)}}function C(E,F,I){var H=E[0].parentNode,G=H.cycleTimeout;if(G){clearTimeout(G);H.cycleTimeout=0}F.nextSlide=F.currSlide+I;if(F.nextSlide<0){F.nextSlide=E.length-1}else{if(F.nextSlide>=E.length){F.nextSlide=0}}B(E,F,1,I>=0);return false}D.fn.cycle.custom=function(K,H,I,E){var J=D(K),G=D(H);G.css({opacity:0});var F=function(){G.animate({opacity:1},I.speedIn,I.easeIn,E)};J.animate({opacity:0},I.speedOut,I.easeOut,function(){J.css({display:"none"});if(!I.sync){F()}});if(I.sync){F()}};D.fn.cycle.transitions={fade:function(F,G,E){G.not(":eq(0)").css("opacity",0);E.before.push(function(){D(this).show()})}};D.fn.cycle.ver=function(){return A};D.fn.cycle.defaults={timeout:4000,speed:1000,next:null,prev:null,before:null,after:null,height:"auto",sync:1,fit:0,pause:0,delay:0,slideExpr:null}})(jQuery);
/*
 * Copyright (C) 1999-2009 Jive Software. All rights reserved.
 *
 * This software is the proprietary information of Jive Software. Use is subject to license terms.
 */

/*
* $ lightbox_me
* By: Buck Wilson
* Version : 2.2
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/


(function($) {

    $.fn.lightbox_me = function(options) {

        return this.each(function() {

            var
                opts = $.extend({}, $.fn.lightbox_me.defaults, options),
                $overlay = $('div.' + opts.classPrefix + '_overlay'),
                $self = $(this),
                $iframe = $('iframe#lb_iframe'),
                ie6 = ($.browser.msie && $.browser.version < 7);
            
            if ($overlay.length > 0) {
                $overlay[0].removeModal(); // if the overlay exists, then a modal probably exists. Ditch it!
            } else {
                $overlay =  $('<div class="' + opts.classPrefix + '_overlay" style="display:none;"/>'); // otherwise just create an all new overlay. 
            }

            $iframe = ($iframe.length > 0) ? $iframe : $iframe = $('<iframe id="lb_iframe" style="z-index: ' + (opts.zIndex + 1) + '; display: none; border: none; margin: 0; padding: 0; position: absolute; width: 100%; height: 100%; top: 0; left: 0;"/>');

            /*----------------------------------------------------
               DOM Building
            ---------------------------------------------------- */
            if (ie6) {
                var src = /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank';
                $iframe.attr('src', src);
                $('body').append($iframe);
            } // iframe shim for ie6, to hide select elements
            $('body').append($self).append($overlay);

            /*----------------------------------------------------
               CSS stuffs
            ---------------------------------------------------- */

            // set css of the modal'd window

            setSelfPosition();
            $self.css({left: '50%', marginLeft: ($self.outerWidth() / 2) * -1,  zIndex: (opts.zIndex + 3) });

            // set css of the overlay

            setOverlayHeight(); // pulled this into a function because it is called on window resize.
            $overlay.css({ position: 'absolute', width: '100%', top: 0, left: 0, right: 0, bottom: 0, zIndex: (opts.zIndex + 2) })
                    .css(opts.overlayCSS);

            /*----------------------------------------------------
               Animate it in.
            ---------------------------------------------------- */

            if ($overlay.is(":hidden")) {
                $overlay.fadeIn(opts.overlaySpeed, function() {
                    $self[opts.appearEffect](opts.lightboxSpeed, function() { setOverlayHeight(); opts.onLoad()});
                });
            } else {
                $self[opts.appearEffect](opts.lightboxSpeed, function() { setOverlayHeight(); opts.onLoad()});
            }

            /*----------------------------------------------------
               Bind Events
            ---------------------------------------------------- */

            $(window).resize(setOverlayHeight)
                     .resize(setSelfPosition)
                     .scroll(setSelfPosition)
                     .keydown(observeEscapePress);
                     
            $self.find(opts.closeSelector).click(function() { removeModal(true); return false; });
            $overlay.click(function() { if(opts.closeClick){ removeModal(true); return false;} });

            
            $self.bind('close', function() { removeModal(true) });
            $self.bind('resize', setSelfPosition);
            $overlay[0].removeModal = removeModal;

            /*----------------------------------------------------------------------------------------------------------------------------------------
              ---------------------------------------------------------------------------------------------------------------------------------------- */

            /*----------------------------------------------------
               Private Functions
            ---------------------------------------------------- */


            function removeModal(removeO) {
                // fades & removes modal, then unbinds events
                $self[opts.disappearEffect](opts.lightboxDisappearSpeed, function() {
                    
                    if (removeO) {
                      removeOverlay();  
                    } 
                    
                    opts.destroyOnClose ? $self.remove() : $self.hide()
                    
                    
                    $self.find(opts.closeSelector).unbind('click');
                    $self.unbind('close');
                    $self.unbind('resize');
                    $(window).unbind('scroll', setSelfPosition);
                    $(window).unbind('resize', setSelfPosition);
                    
                    
                });
            }
            
            
            function removeOverlay() {
                // fades & removes overlay, then unbinds events
                $overlay.fadeOut(opts.overlayDisappearSpeed, function() {
                    $(window).unbind('resize', setOverlayHeight);

                    $overlay.remove();
                    $overlay.unbind('click');
                    
                    
                    opts.onClose();

                })
            }
            


            /* Function to bind to the window to observe the escape key press */
            function observeEscapePress(e) {
                if((e.keyCode == 27 || (e.DOM_VK_ESCAPE == 27 && e.which==0)) && opts.closeEsc) removeModal(true);
            }

            /* Set the height of the overlay
                    : if the document height is taller than the window, then set the overlay height to the document height.
                    : otherwise, just set overlay height: 100%
            */
            function setOverlayHeight() {
                if ($(window).height() < $(document).height()) {
                    $overlay.css({height: $(document).height() + 'px'});
                } else {
                    $overlay.css({height: '100%'});
                    if (ie6) {$('html,body').css('height','100%'); } // ie6 hack for height: 100%; TODO: handle this in IE7
                }
            }

            /* Set the position of the modal'd window ($self)
                    : if $self is taller than the window, then make it absolutely positioned
                    : otherwise fixed
            */
            function setSelfPosition() {
                var s = $self[0].style;

                if (($self.height() + 80  >= $(window).height()) && ($self.css('position') != 'absolute' || ie6)) {
                    var topOffset = $(document).scrollTop() + 40;
                    $self.css({position: 'absolute', top: topOffset + 'px', marginTop: 0})
                    if (ie6) {
                        s.removeExpression('top');
                    }
                } else if ($self.height()+ 80  < $(window).height()) {
                    if (ie6) {
                        s.position = 'absolute';
                        if (opts.centered) {
                            s.setExpression('top', '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"')
                            s.marginTop = 0;
                        } else {
                            var top = (opts.modalCSS && opts.modalCSS.top) ? parseInt(opts.modalCSS.top) : 0;
                            s.setExpression('top', '((blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"')
                        }
                    } else {
                        if (opts.centered) {
                            $self.css({ position: 'fixed', top: '50%', marginTop: ($self.outerHeight() / 2) * -1})
                        } else {
                            $self.css({ position: 'fixed'}).css(opts.modalCSS);
                        }
                    }
                }
            }
        });
    };


    $.fn.lightbox_me.defaults = {

        // animation when appears
        appearEffect: "fadeIn",
        overlaySpeed: 300,
        lightboxSpeed: "fast",
        
        // animation when dissapears
        disappearEffect: "fadeOut",
        overlayDisappearSpeed: 300,
        lightboxDisappearSpeed: "fast",

        // close
        closeSelector: ".close",
        closeClick: true,
        closeEsc: true,

        // behavior
        destroyOnClose: false,

        // callbacks
        onLoad: function() {},
        onClose: function() {},

        // style
        classPrefix: 'lb',
        zIndex: 999,
        centered: false,
        modalCSS: {top: '40px'},
        overlayCSS: {background: 'black', opacity: .6}
    }


})(jQuery);
