var Providers = new Class({

	Implements: Options,

	options: {
        'i': 1,
        'prefix_contact': 'perfs_',
        'prefix_perf': 'perf_',
        'prefix_notes': 'notes_',
        'object_name': 'providers', //Objekto pavadinimas. Reikalingas url'ui.
        'calendarObj' : 'cal',
        'errorContainer' : 'errors',
        'errorMsg': ""
	},


	initialize: function(options) {
		this.setOptions(options);
	},


    initList: function(elements, hover_class) {
          $$(elements).each(function(el, i) {
            el.addEvent('mouseover', function() {
                el.addClass(hover_class);
            }).addEvent('mouseout', function() {
               el.removeClass(hover_class);
            });
          });
    },


    updatePlaceNotes: function(container_id) {
        
        var items = $('perfs_' + container_id).getElements('div.performance');
        if ($(this.options.prefix_notes + container_id)) {

            $(this.options.prefix_notes + container_id).setStyle('display', (items.length > 0) ? 'none' : 'block');
        }
    },
    

    addPerformance: function(container_id) {
        var div = new Element('div', {
            'class':    'clearfix performance',
            'id':       this.options.prefix_perf + this.options.i
        });

        var labelPradzia = new Element('label', {'text' : 'Prad\u017eia'});
        var labelPabaiga = new Element('label', {'text' : 'Pabaiga', 'class' : 'event_end'});

        var input1 = new Element('input', {
            'type': 'text',
            'name': 'perf[' + this.options.i + '][startdate]',
            'id': 'perf_' + this.options.i + '_startdate',
            'maxlength': 10,
            'class': 'must-date date'
        });
        var input2 = new Element('input', {
            'type': 'text',
            'name': 'perf[' + this.options.i + '][starttime]',
            'maxlength': 5,
            'class': 'must-time day_time'
        });
        var input3 = new Element('input', {
            'type': 'text',
            'name': 'perf[' + this.options.i + '][enddate]',
            'id': 'perf_' + this.options.i + '_enddate',
            'maxlength': 10,
            'class': 'date'
        });
        var input4 = new Element('input', {
            'type': 'text', 'name': 'perf[' + this.options.i + '][endtime]', 'maxlength': 5, 'class' : 'day_time'
        });
        var input5 = new Element('input', {
            'type': 'hidden', 'name': 'perf[' + this.options.i + '][contact]', 'value': container_id
        });
        var cal1 = new Element('a', {
            'href' : 'javascript:void(0);',
            'class': 'date_picker',
            'text' : ''
        });
				cal1.__parent = this;
				cal1.__i = this.options.i;
				cal1.onclick = function() {
					eval(this.__parent.options.calendarObj + ".showMinCalendar('perf_" + this.__i + "_startdate', 'perf_" + this.__i + "_enddate')")
				}
        var cal2 = new Element('a', {
            'href' : 'javascript:void(0);',
            'class': 'date_picker',
            'text' : ''
        });
				cal2.__parent = this;
				cal2.__i = this.options.i;
				cal2.onclick = function() {
					eval(this.__parent.options.calendarObj + ".showMinCalendar('perf_" + this.__i + "_enddate', 'perf_" + this.__i + "_startdate')")
				}
        var deleteEvent = new Element('a', {
            'href' : 'javascript:void(0);',
            'class': 'delete_event',
            'text' : 'Trinti'
        });
				deleteEvent.__parent = this;
				deleteEvent.__i = this.options.i;
				deleteEvent.onclick = function() {
					eval(this.__parent.options.object_name + ".delPerformance('" + this.__i + "')");
				}

        labelPradzia.inject(div);
        input1.inject(div);
        cal1.inject(div);
        input2.inject(div);
        labelPabaiga.inject(div);
        input3.inject(div);
        cal2.inject(div);
        input4.inject(div);
        deleteEvent.inject(div);
        input5.inject(div);

        div.inject(this.options.prefix_contact + container_id);
        this.options.i = this.options.i + 1;
        input1.focus();

        this.updatePlaceNotes(container_id);
    },

    setCalendarObject: function(obj) {
        this.options.calendarObj = obj;
    },


    delPerformance: function(container_id) {
        var parent = $(this.options.prefix_perf + container_id).getParent('fieldset');
        $(this.options.prefix_perf + container_id).destroy();
        if (parent) {
            var parent_id = parent.get('id').substr(this.options.prefix_contact.length);
            this.updatePlaceNotes(parent_id);
        }
    },


    checkIfEmptyElements: function (parent_id, pattern) {
        var items = $(parent_id).getElements(pattern);
        var result = true;

        $each(items, function(item, key) {
            if (item.value == "" && result === true) {
                item.focus();
                result = false;
            }
        });
        return result;
    },


    checkPerformances: function() {
        $$('#events_places fieldset div').each(function(el, i) {
            var validDate = true;
            var validTime = true;

            if (el.getChildren('input.must-date').get('value') == "") {
                validDate = false;
            }

            if (el.getChildren('input.must-time').get('value') == "") {
                validTime = false;
            }

            if (!validDate && !validTime) {
                el.destroy();
            }
        });
    },


    validateDate: function(value) {
        if(value.length !== 10) {
            alert("Neteisingai \u012fvesta data.");
            return false;
        }
        else{
            var C = value.substr(0,4);
            var E = value.substr(5,2);
            var A = value.substr(8,2)
        }
        if(A.match(/[0-9]{2}/)===null||E.match(/[0-9]{2}/)===null||C.match(/[0-9]{4}/)===null) {
            alert("Neteisingai \u012fvesta data.");
            return false;
        }
        return true;
    },

    checkTime: function(value) {
        if(value.length !== 5) {
            alert("Neteisingai \u012fvestas laikas.");
            return false;
        }
        else{
            var C = value.substr(0,2);
            var E = value.substr(3,2);
        }
        if(C.match(/[0-9]{2}/)===null||E.match(/[0-9]{2}/)===null) {
            alert("Neteisingai \u012fvestas laikas.");
            return false;
        }
        return true;
    },


    riseError: function(text) {
        $(this.options.errorContainer).setStyle('display', 'block');
        $(this.options.errorContainer).set('text', text);
    },

    validatePerformances: function() {

        this.checkPerformances();

        var times = this.checkIfEmptyElements('events_places', 'input.must-time');
        var dates = this.checkIfEmptyElements('events_places', 'input.must-date');

        


        if (times === false || dates === false) {
            var message = "U\u017epildykite pasirodymų pradžios ";
            if (dates === false) message += "datas";
            if (dates === false && times === false) message += " ir ";
            if (times === false) message += "laikus";
            message += ".";

            this.options.errorMsg = message;
            this.riseError(this.options.errorMsg);
            return false;
        }
        return true;
    }
});

window.addEvent('domready', function() {

    var submit = $('object-submit');
    if (submit !== null) {
        submit.addEvent('click', function() {
            return providers.validatePerformances();
        });
    }
});
