/*
---
description: MooTools time picker class.

license: MIT-style

authors:
- Christopher Pitt

requires:
- core/1.2.4: Class.Extras
- core/1.2.4: Element.Dimensions

provides: [TimePicker]

...
*/


/*  new code */
var picked_hour = 0;
var picked_minute = 0;

	function trimNumber(s) 
	{
	while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
	return s;
	}
/*  ------- */



var TimePicker = new Class({
    'Implements': [Options, Events],
    'options':
    {
        /*
        'onLoad': $empty,
        'onRender': $empty,
        'onPosition': $empty,
        'onShow': $empty,
        'onHide': $empty,
        'onPick': $empty,
        */
        'z-index': 1
    },
    'initialize': function(trigger, options)
    {
        this.setOptions(options);
        
        var self = this,
            doc = document.id(document.body),
            trigger = document.id(trigger),
            
            iframe = new Element('iframe', {
                'src': 'about:blank',
                'frameborder': 0,
                'scrolling': 'no',
                'class': 'timepicker-iframe',
                'styles': {
                    'position': 'absolute',
                    'opacity': 0,
                    'filter': 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)',
                    'z-index': self.options['z-index']
                }
            }).inject(doc),
            
            container = new Element('div', {
                'class': 'timepicker-container',
                'styles': {
                    'position': 'absolute',
                    'z-index': self.options['z-index'] + 1
                }
            }).inject(doc);
        
        self.trigger = trigger;
        self.iframe = iframe;
        self.container = container;
        
        self.render();
        trigger.addEvent('click', self.show.bind(self));
        
        self.fireEvent('onLoad');
    },
    'position': function()
    {
        var coords = this.trigger.getCoordinates(),
            size = this.container.getSize();
        
        this.iframe.setStyles({
            'top': coords.top,
            'left': coords.right,
            'width': size.x,
            'height': size.y
        });
        
        this.container.setStyles({
            'top': coords.top,
            'left': coords.right
        });  
        
        this.fireEvent('onPosition');
    },
    'show': function()
    {
        this.container.getElements('.timepicker-hour, .timepicker-minute').removeClass('picked');
        this.hour = this.minute = false;
        
        this.container.setStyle('display', 'block');  
        this.position();
        
        this.fireEvent('onShow');
    },
    'hide': function()
    {
        this.container.setStyle('display', 'none');
        this.fireEvent('onHide');
    },
    'render': function()
    {
        var self = this,
        
            hours_title = new Element('div', {
                'class': 'timepicker-hours-title',
                'text': 'Hour'
            }).inject(self.container),
            
            minutes_title = new Element('div', {
                'class': 'timepicker-minutes-title',
                'text': 'Minute'
            }).inject(self.container),
            
            hours = new Element('div', {
                'class': 'timepicker-hours'
            }).inject(self.container),
            
            minutes = new Element('div', {
                'class': 'timepicker-minutes'
            }).inject(self.container);
        
        for (i = 0; i < 24; i++)
        {
        	if( (i < 9) || (i > 17) )
        	{
        		
            new Element('a', {
                'text': i.toString().pad(2, '0', 'left'),
                'href': '#',
                'class': 'timepicker-hour not-available',
                'events': {
                    'click': function(e)
                    {
                        e.stop();
                        alert('Please choose a time between 9:00am and 5:45pm');
                        //self.pick(this, 'hour');
                    }
                }
            }).inject(hours);
            
        	} else {
        		
            new Element('a', {
                'text': i.toString().pad(2, '0', 'left'),
                'href': '#',
                'class': 'timepicker-hour',
                'events': {
                    'click': function(e)
                    {
                        e.stop();
                        self.pick(this, 'hour');
                    }
                }
            }).inject(hours);
            
        	}
        

        }
        
        for (i = 0; i < 60; i += 5)
        {
            new Element('a', {
                'text': i.toString().pad(2, '0', 'left'),
                'href': '#',
                'class': 'timepicker-minute',
                'events': {
                    'click': function(e)
                    {
                        e.stop();
                        self.pick(this, 'minute');
                    }
                }
            }).inject(minutes);
        }
        
        self.fireEvent('onRender');
    },
    'pick': function(element, type)
    {

        var self = this,
            other = type == 'hour' ? 'minute' : 'hour';
            
        self[type] = element.get('text'); //value
        
        

        
        	/* new code */
        	var n = trimNumber(self[type]);
        	var errors = false;
        	
        	if(type == 'hour')
        	{
        	
        		if( (n == 17) && (picked_minute > 45) )
        		{
        		errors = true;
        		} else {
	        	picked_hour = n;
        		}

        	} else {
        	
        		if( (n > 45) && (picked_hour == 17) )
        		{
        		errors = true;
        		} else {
	        	picked_minute = n;
        		}
        	
        	}
			/* ------ */
        
        
        
             
			if(!errors) // new code
			{
                
		        if (self[other])
		        {
		            self.hide.apply(self);
		        }
		        else
		        {
		            self.container.getElements('.timepicker-' + type).removeClass('picked');
		            element.addClass('picked');
		        }
		        
		        self.fireEvent('onPick', [element, type]);
	        } else {
			alert('Please choose a time between 9:00am and 5:45pm');
	        }
    }
});

String.implement({
    
    'repeat': function(times){
		return new Array(times + 1).join(this);
	},
    
    'pad': function(length, character, direction)
    {
        if (this.length >= length) return this;
        
        var result = this,
            direction = (direction || 'center'),
            until = length - this.length,
            character = (character.toString() || ' '),            
            additional = character.repeat(until).substr(0, until);
        
        switch (direction.toLowerCase())
        {
        
            case 'left':
            
                result = additional + result;
                break;
        
            case 'right':
            
                result = result + additional;
                break;
        
            default:
        
                var length = additional.length,
                    left = Math.floor(length / 2),
                    right = Math.ceil(length / 2);
                    
                    
                result = additional.substr(0, left) + this + additional.substr(0, right);
                break;
        }
        
        return result;
	}
    
});
