var Loop = new Class({

    loopCount: 0,
    isStopped: true,
    isLooping: false,
    loopMethod: $empty,

    setLoop: function(fn,delay){
        if(this.isLooping) {
            this.stopLoop();
            var wasLooping = true;
        } else {
            var wasLooping = false;
        }
        this.loopMethod = fn;
        this.loopDelay = delay || 3000;
        if(wasLooping) this.startLoop();
        return this;
    },

    stopLoop: function() {
        this.isStopped = true;
        this.isLooping = false;
        $clear(this.periodical);
        return this;
    },

    startLoop: function(delay) {
        if(this.isStopped){
            var delay = (delay) ? delay : this.loopDelay;
            this.isStopped = false;
            this.isLooping = true;
            this.periodical = this.looper.periodical(delay,this);
        };
        return this;
    },

    resetLoop: function(){
        this.loopCount = 0;
        return this;
    },

    looper: function(){
        this.loopCount++;
        this.loopMethod(this.loopCount);
        return this;
    }

});
/*
---

script: SlideShow.js

description: Easily extendable, class-based, slideshow widget. Use any element, not just images. Comes with packaged transitions but is easy to extend and create your own transitions.  The class is built to handle the basics of a slideshow, extend it to implement your own navigation piece and custom transitions.

license: MIT-style license.

authors: Ryan Florence

docs: http://moodocs.net/rpflo/mootools-rpflo/SlideShow

requires:
  - Loop

provides: [SlideShow]

...
*/


var SlideShow = new Class({
    
    Implements: [Options, Events, Loop],
        
        options: {
            /*
            onShow: $empty,
            onShowComplete: $empty,
            onReverse: $empty,
            onPlay: $empty,
            onPause: $empty
            */
            delay: 7000,
            transition: 'crossFade',
            duration: '500',
            autoplay: false,
			nav: true,
			navcontainer: 'slider-nav-container',
			navid: 'slider-nav',
			navclass: 'dot',
			loader: 'slider-loader'
        },
    
    initialize: function(element, options){
        this.setOptions(options);
		
	
        this.setLoop(this.showNext, this.options.delay);
        this.element = document.id(element);
		if(!this.element) return false;
        this.slides = this.element.getChildren();
		if(this.options.loader)
			this.loader = $(this.options.loader);
        
		this.current = this.slides[0];
        this.setup();
    },
    
    setup: function(){
      this.setupSlides();
      this.setupElement();
 	  if(this.options.nav) this.setupNavigation();
        
		return this;
    },
    
	
    setupElement: function(){
        var el = this.element;
        if(el.getStyle('position') != 'absolute' && el != document.body) el.setStyle('position','relative');
		
		el.addEvent('mouseover', function(e){		  
			this.pause();
		}.bindWithEvent(this));
		
		el.addEvent('mouseout', function(e){		  
			this.play();
		}.bindWithEvent(this));
        
		return this;
    },
    
    setupSlides: function(){
        this.slides.each(function(slide, index){
            this.storeTransition(slide).reset(slide);
            slide.setStyle('display','none');
        }, this);
		
		if(this.loader){
			this.loader.fade('in');
			new Asset.images(this.slides.getElements('img'), { 
				onComplete: function() {
					this.loader.setStyle('display', 'none');
					this.current.setStyle('display', 'block');
					if(this.options.autoplay) this.startLoop();
				}.bind(this) 
			});
			
			return this;
		}
    },
    
    storeTransition: function(slide){
        var classes = slide.get('class');
        var transitionRegex = /transition:[a-zA-Z]+/;
        var durationRegex = /duration:[0-9]+/;
        var transition = (classes.match(transitionRegex)) ? classes.match(transitionRegex)[0].split(':')[1] : this.options.transition;
        var duration = (classes.match(durationRegex)) ? classes.match(durationRegex)[0].split(':')[1] : this.options.duration;
        slide.store('ssTransition', transition);
        slide.store('ssDuration', duration);
        return this;
    },
    
    getTransition: function(slide){
        return slide.retrieve('ssTransition');
    },
    
    getDuration: function(slide){
        return slide.retrieve('ssDuration');
    },
    
    show: function(slide){
        this.fireEvent('show');
            var transition = this.getTransition(slide);
            var duration = this.getDuration(slide);
            var previous = this.current.setStyle('z-index', 1);
            var next = this.reset(slide);
            this.transitions[transition](previous, next, duration, this);
			(function() { 
                previous.setStyle('display','none');
                this.fireEvent('showComplete');
            }).bind(this).delay(duration);
            this.current = next;
        return this;
    },
    
    reset: function(slide){
        return slide.setStyles({
            'position': 'absolute',
            'z-index': 0,
            'display': 'block',
            'left': 0,
            'top': 0
        }).fade('show');
        return this;
    },
    
    nextSlide: function(){
        var next = this.current.getNext();
        return (next) ? next : this.slides[0];
    },

    previousSlide: function(){
        var previous = this.current.getPrevious();
        return (previous) ? previous : this.slides.getLast();
    },
    
    showNext: function(){
        this.show(this.nextSlide());
        return this;
    },
    
    showPrevious: function(){
        this.show(this.previousSlide());
        return this;
    },
    
    play: function(){
        this.startLoop();
        this.fireEvent('play');
        return this;
    },
    
    pause: function(){
        this.stopLoop();
        this.fireEvent('pause');
        return this;
    },
    
    reverse: function(){
        var fn = (this.loopMethod == this.showNext) ? this.showPrevious : this.showNext;
        this.setLoop(fn, this.options.delay);
        this.fireEvent('reverse');
        return this;
    },
	
	setupNavigation: function(){
		var nav = new Element('ul', {'id': this.options.navid}).inject($(this.options.navcontainer));
        this.slides.each(function(slide, index){
			var navitem = new Element('li', {'class': this.options.navclass});
			navitem.inject(nav).addEvent('click', function(){
				this.show(this.slides[index]);
				this.pause();
				this.play();
			}.bindWithEvent(this));
		}, this);
		
		this.navitems = nav.getChildren();
		this.navitems[0].addClass('current');
		
		this.addEvent('showComplete', function(){
			var current = this.navitems[this.slides.indexOf(this.current)];
			this.navitems.each(function(el){
				el.removeClass('current');
			}.bind(this));
			current.addClass('current');
		});
		
		
		return this;
	}
    
});

SlideShow.adders = {
    
    transitions:{},
    
    add: function(className, fn){
        this.transitions[className] = fn;
        this.implement({
            transitions: this.transitions
        });
    },
    
    addAllThese : function(transitions){
        $A(transitions).each(function(transition){
            this.add(transition[0], transition[1]);
        }, this);
    }
    
}

$extend(SlideShow, SlideShow.adders);
SlideShow.implement(SlideShow.adders);

SlideShow.add('fade', function(previous, next, duration, instance){
    previous.set('tween',{duration: duration}).fade('out');
    return this;
});

SlideShow.addAllThese([

    ['none', function(previous, next, duration, instance){
        previous.setStyle('display','none');
        return this;
    }],

    ['crossFade', function(previous, next, duration, instance){
        previous.set('tween',{duration: duration}).fade('out');
        next.set('tween',{duration: duration}).fade('in');
        return this;
    }],
    
    ['fadeThroughBackground', function(previous, next, duration, instance){
        var half = duration/2;
        next.set('tween',{
            duration: half
        }).fade('hide');
        previous.set('tween',{
            duration: half,
            onComplete: function(){
                next.fade('in');
            }
        }).fade('out');
    }],

    ['pushLeft', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('width').toInt();
        next.setStyle('left', distance);
        [next, previous].each(function(slide){
            var to = slide.getStyle('left').toInt() - distance;
            slide.set('tween',{duration: duration}).tween('left', to);
        });
        return this;
    }],
    
    ['pushRight', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('width').toInt();
        next.setStyle('left', -distance);
        [next, previous].each(function(slide){
            var to = slide.getStyle('left').toInt() + distance;
            slide.set('tween',{duration: duration}).tween('left', to);
        });
        return this;
    }],
    
    ['pushDown', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('height').toInt();
        next.setStyle('top', -distance);
        [next, previous].each(function(slide){
            var to = slide.getStyle('top').toInt() + distance;
            slide.set('tween',{duration: duration}).tween('top', to);
        });
        return this;
    }],
    
    ['pushUp', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('height').toInt();
        next.setStyle('top', distance);
        [next, previous].each(function(slide){
            var to = slide.getStyle('top').toInt() - distance;
            slide.set('tween',{duration: duration}).tween('top', to);
        });
        return this;
    }],
    
    ['blindLeft', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('width').toInt();
        next
            .setStyles({
                'left': distance,
                'z-index': 1
            })
            .set('tween',{duration: duration})
            .tween('left', 0);
        return this;
    }],

    ['blindRight', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('width').toInt();
        next
            .setStyles({
                'left': -distance,
                'z-index': 1
            })
            .set('tween',{duration: duration})
            .tween('left', 0);
        return this;
    }],
    
    ['blindUp', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('height').toInt();
        next
            .setStyles({
                'top': distance,
                'z-index': 1
            })
            .set('tween',{duration: duration})
            .tween('top', 0);
        return this;
    }],
    
    ['blindDown', function(previous, next, duration, instance){
        var distance = instance.element.getStyle('height').toInt();
        next
            .setStyles({
                'top': -distance,
                'z-index': 1
            })
            .set('tween',{duration: duration})
            .tween('top', 0);
        return this;
    }],
    
    ['blindDownFade', function(previous, next, duration, instance){
        this.blindDown(previous, next, duration, instance).fade(previous, next, duration, instance);
    }],
    
    ['blindUpFade', function(previous, next, duration, instance){
        this.blindUp(previous, next, duration, instance).fade(previous, next, duration, instance);
    }],
    
    ['blindLeftFade', function(previous, next, duration, instance){
        this.blindLeft(previous, next, duration, instance).fade(previous, next, duration, instance);
    }],
    
    ['blindRightFade', function(previous, next, duration, instance){
        this.blindRight(previous, next, duration, instance).fade(previous, next, duration, instance);
    }]
    
]);
var SimpleSelectStyle = new Class(
{
	Implements: Options,
	
	options : 
	{	
		select_class : '',
		form_id : '',
		left_padding : 15
	},
	
	initialize: function(options)
	{
		this.setOptions(options);
		if ($chk(this.options.select_class))
		{			
			this.selects = $chk($(this.options.form_id)) ? $(this.options.form_id).getElements('select') : $$('select.'+this.options.select_class) ;
			this.selects.each(this.style_selects.bind(this));
		}
	},
	
	style_selects : function(select_el)
	{		
		var select_el_width = 217;  	
		var value = select_el.getFirst().get('value');		
		var text = select_el.getFirst().get('text');
	
		select_el.getElements('option').each(function(o){ if(o.selected == true){ value = o.get('value'); text = o.get('text'); } });
		
		var span = new Element('span',{'class':this.options.select_class}).set('text',text).inject(select_el,'before').setStyles({'width':select_el_width - this.options.left_padding,'display':'inline-block', 'height' : '30px', 'padding-top' : '5px' ,'padding-left':this.options.left_padding});
		
		select_el.addClass(this.options.select_class).setProperty('size',1).setStyles({'width':select_el_width + span.getStyle('border-left-width').toInt() + span.getStyle('border-right-width').toInt(),'height' : 25 ,'opacity':.01,'display':'inline-block','position':'relative','margin-left':-(select_el_width + span.getStyle('border-left-width').toInt() + span.getStyle('border-right-width').toInt())}).addEvent('change',function(){span.set('text',this.options[this.options.selectedIndex].get('text'));});
	}	
});
function echeck(str) 
{

	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   return false
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   return false
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		return false
	}

	 if (str.indexOf(at,(lat+1))!=-1){
		return false
	 }

	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		return false
	 }

	 if (str.indexOf(dot,(lat+2))==-1){
		return false
	 }
	
	 if (str.indexOf(" ")!=-1){
		return false
	 }

	 return true					
}
var ContactPopup = new Class({
    
	initialize: function(){
		
		this.popup = $('contact-popup').setStyles({
			'position': 'fixed',
			'top': (window.getHeight() / 2) - 189,
			'left': (window.getWidth() / 2) - 171,
			'z-index': 9999
		});

		this.overlay = new Element('div',{'id':'overlay'}).inject(document.body,'top').fade('hide').addEvent('click', function(){
			this.closePopup();
		}.bindWithEvent(this));
		
		
		this.closebutton = $('contact-popup-close').addEvent('click', function(){
			this.closePopup();
		}.bindWithEvent(this));
		
	},
	
	openPopup: function(){
		this.overlay.fade(.4);
		this.popup.setStyle('display','block');
	},
	closePopup: function(){
		this.overlay.fade('out');
		this.popup.setStyle('display','none');
	}
});