require('calendar/Calendar.js');
Events = {
	ajax_file: '/pages/events/events_ajax.php',
	date: new Date(),
	content:'',
	openArticles: [],
	opened: [],
    orderCol: 'date',
	init: function() {
		if($('events_form'))
		{
            if ($('events_repeat_days') != undefined) 
            {
                // update repeat_days
                Events.setRepeatDays($('events_repeat_days').value);
                // update repeat_weeks
                Events.setRepeatWeeks($('events_repeat_weeks').value);
                
                
                //add event listeners
                $('events_no_repeat').observe('click', Events.setNoRepeat);
                $('events_repeat_weekly').observe('click', Events.setWeeklyRepeat);
                $('events_repeat_monthly').observe('click', Events.setMonthlyRepeat);
            }
            
			$('events_time').observe('change', Events.checkTime);
			$('events_start_date').observe('change', Events.checkDate);
			$('events_barname').observe('change', Events.setRegion);
			new Calendar('events_start_date', { language: 'de', resize: false });
			new Autocompleter('events_barname', {
				ajax_file: Events.ajax_file+'?request=getBars',
				maxlength: 15,
				onChoose: Events.setRegion
			})
            Events.setRegion();
		}
	},
	showArticle: function(id, table) {
        // always load from database ->1==0!
		if(Events.openArticles.indexOf(id)==-1 || 1==0)
		{
			$('events_link_'+id).addClassName('events_active_link')
			Events.openArticles.push(id);
			if(Events.opened.indexOf(id)==-1) {
				$('events_wait_'+id).show()
				new Ajax.Request(Events.ajax_file+'?request=show&article='+Number(id)+'&t='+table, {
					method:'get',
					onSuccess: function(result) {
						$('events_wait_'+id).hide();
						$('events_article_'+id).update(result.responseText);
						Events.displayArticle(id);
						Events.opened.push(id);
					}
				})
			} else {
				Events.displayArticle(id);
			}
		}
		else
		{
			$('events_article_'+id).hide();
			$('events_link_'+id).removeClassName('events_active_link');
			Events.openArticles = Events.openArticles.without(id);
		}
		return false;
	},
	displayArticle: function(id) {
		$('events_article_'+id).show();
		var y = $('events_article_'+id).viewportOffset().top;
		var h = $('evetns_article_'+id).getHeight();
		var h_v = document.viewport.getHeight();
		if(h>h_v)
			window.scrollTo(0,$('events_link_'+id).cumulativeOffset().top-10);
		else if(y+h>h_v)
			window.scrollBy(0,y+h-h_v);
	},
	saveArticle: function(id) {
        
		$('events_region').removeAttribute('disabled');
		$('events_location').removeAttribute('disabled');
		new Ajax.Request(Events.ajax_file+'?request=save&id='+id, {
			method:'post',
			parameters: $('events_form').serialize(true),
			onSuccess: function(r){
				ajaxUpdate('events_content', r);
			},
			onFailure: function(r) { showMessage(submitError[4]); }
		});
		return false;
	},
	deleteArticle: function(id) {
		if(confirm('Wollen Sie Ihren Artikel wirklich Löschen?'))
		{
			var values = $('events_form').serialize(true);
			new Ajax.Request(Events.ajax_file+'?request=delete&id='+id, {
				method: 'post',
				parameters: values,
				onSuccess: function(r) {
					if(Number(r.responseText)==1){
						alert('Eintrag gelöscht');
						location.href='events.html?list=' + values.sb + '&t=' + values.t;
					} else {
						alert('Fehler beim Löschen')
					}
				},
				onFailure: function(r) { showMessage(submitError[4]); }
			});
		}
		return false;    	
	},
    filterArticles: function() {
        var regions = [];
        $$('#form_eventfilter input[type=checkbox]').each(function(chbox) {
            if (chbox.checked)
                regions.push(chbox.name);
        });
        var date = '';
        new Ajax.Request(Events.ajax_file+'?request=list&regionfilter='+regions+'&datefilter='+date, {
            method: 'post',
            parameters: $('form_eventfilter').serialize(true),
            onSuccess: function(r) {
                $('events_list').update(r.responseText);
            }
        });
        return false;
    },
    order: function(column) {
        if (Events.orderCol == column) {
            $('events_order').value = column + " DESC";
            Events.orderCol = null;
        } else {
            $('events_order').value = column + " ASC";
            Events.orderCol = column;
        }
        return Events.filterArticles();
    },
	setRepeatWeeks: function(weeks) {
		$$('#events_repeat_monthly_choises input[type=checkbox]').each(function(item) {
			if(Number(item.value) & Number(weeks))
			{
				item.checked = true;
				$('events_repeat_monthly').checked=true;
			}
		});		
	},
	setRepeatDays: function(days) {
		$$('#events_repeat_weekly_choises input[type=checkbox]').each(function(item) {
			if(Number(item.value) & Number(days))
			{
				item.checked=true;
				$('events_repeat_weekly').checked = true;
			}
		});
	},
	setNoRepeat: function() {
		if($('events_no_repeat').checked)
		{
			$$('#events_repeat_choises input[type=checkbox]').each(function(item) {
				item.checked = false;
			});
			$('events_repeat_monthly_choises').hide();
			$('events_repeat_weekly_choises').hide();
			
		}
	},
	setWeeklyRepeat: function() {
		if($('events_repeat_weekly').checked)
		{
			$('events_repeat_weekly_choises').show();
			$('events_repeat_monthly_choises').hide();
			var date = Events.getDate();
			if(date)
			{
				Events.setRepeatDays(Math.pow(2,(date.getDay()-1)%7));
			}
		}
	},
	setMonthlyRepeat: function() {
		if($('events_repeat_monthly').checked)
		{
			$('events_repeat_weekly_choises').show();
			$('events_repeat_monthly_choises').show();
			var date = Events.getDate();
			if(date)
			{
				Events.setRepeatDays(Math.pow(2,(date.getDay()-1)%7));
				Events.setRepeatWeeks(Math.pow(2,Math.floor((date.getDate()-1)/7)));
			}
		}
	},
	getDate: function() {
    	var re_date = /^\s*(\d{2,4})\D?(\d{1,2})\D?(\d{1,2})\s*$/;
    	if(!re_date.exec($('events_start_date').value))
    	{
    		return false
    	}
    	var y = RegExp.$1;
    	var m = Math.max(1,Math.min(12,RegExp.$2))-1;
    	var d = Math.max(1,Math.min(32-(new Date(y,m,32)).getDate(), RegExp.$3));
    	return new Date(y,m,d);
	},
	checkTime: function()
	{
		var re_time = /^\s*(\d{1,2})\D?(\d{0,2})\s*$/;
		if($('events_time').value.strip().length==0)
			return false;
		if(!re_time.exec($('events_time').value))
		{
			$('events_time').value='';
			alert(submitError[7]);
			return false;
		}
		var h = Math.min(Number(RegExp.$1),23);
		var m = Math.min(Number(RegExp.$2),59);
		$('events_time').value = (h<10?'0':'')+h+':'+(m<10?'0':'')+m;
	},
	checkDate: function()
	{
		var date = Events.getDate();
		if(!date)
		{
			$('events_start_date').value='';
			alert(submitError[8]);
		}
        //$('events_start_date').value = date.toDBFormat();
    },
	setRegion: function() {
		new Ajax.Request(Events.ajax_file+'?request=getRegion', {
			method: 'post',
			parameters: {barname: $('events_barname').value},
			onSuccess: function(r) {
				if (r.responseText.length > 1) {
                    var pos = r.responseText.lastIndexOf("|");
                    $('events_location').value = r.responseText.slice(0, pos);
                    $('events_region').value = r.responseText.slice(pos + 1);
                    
                    $('events_region').disabled = 'disabled';
                    $('events_location').disabled = 'disabled';
                }
                else {
                    $('events_region').removeAttribute('disabled');
                    $('events_location').removeAttribute('disabled');
                }
			}
		})
	},
	submit: function() {
    	// update repeat_days value
    	val=0;
    	$$('#events_repeat_days_choises input[type=checkbox]').each(function(item) {
    		if(item.checked)
    			val = val & item.value;
    	});
    	$('events_repeat_days').value=val;
    	// update repeat_weeks value
    	var val=0;
		$$('#events_repeat_weeks_choises input[type=checkbox]').each(function(item) {
			if(item.checked)
				val = val & item.value;
		});
		$('events_repeat_weeks').value=val;
		
		new Ajax.request(Events.ajax_file+'?request=save', {
			method: 'post',
			parameters: $('events_form').serialize(true),
			onSuccess: function(r) {
				ajaxUpdate('events_content', r);
			},
			onFailure: function(r) { ajaxFailure() }
		});
		return false;
	}
}


    langs = {
      de:{
        location:{
          addressNotFound: "Adresse nicht gefunden, bitte Position manuell eingeben oder Adresse kontrollieren",
          addressFound: "Adresse gefunden, bitte Position kontrollieren",
          searchCoordinates: "Koordinaten suchen...",
          coordinatesFound: "Koordinaten suchen...gefunden!"
        },
        imageUploader:{
          upload_error: [
            'Datei erfolgreich hochgeladen',
            'Keine Bild-Parameter definiert',
            'Keine Datei hochgeladen',
            'Datei ist zu Gross',
            'Datei ist keine gï¿½ltige Bilddatei',
            'Bild ist zu klein',
            'Bildtype wird nicht unterstï¿½tzt',
            'Fehler beim speichern des Bildes'
          ]
        }
      }
    }


// set language
language = langs['de'];



// object for upload responses
var UploaderResponse = {};

/**
 * Image Uploader 
 * 
 * @param {Object} uploadField
 * @param {Object} imagefields
 * @param {Object} image
 * @param {Object} settings
 */
var ImageUploader = Class.create({
    ajax_file: "/php/imageUpload.php",
    initialize: function(uploadField, image, settings){
        
        // this.uploadField = input-upload tag
        // this.form = form that contains the input
        
        // check for fileupload-input
        this.uploadField = $(uploadField);
        if(this.uploadField.tagName.toLowerCase()!='input' || this.uploadField.type.toLowerCase()!='file')
            throw('ImageUploader works only with upload fields');
        
        
        // check for form create one ev.
        var p=this.uploadField.parentNode;
        while(p && p.tagName && p.tagName.toLowerCase()!='form')
            p=p.parentNode;
        if(!p || !p.tagName || p.tagName.toLowerCase()!='form')
            this.form = this.uploadField.wrap('form');
        else
            this.form = $(p);
        
        // create fields
        this.name = this.uploadField.name;
        
        this.originalPath = new Element('input', { type: 'hidden', name: this.name + '_original' });
        this.resizedPath  = new Element('input', { type: 'hidden', name: this.name + '_resized'  });
        this.thumbPath    = new Element('input', { type: 'hidden', name: this.name + '_thumb'    });
        
        this.form.insert(this.originalPath);
        this.form.insert(this.resizedPath);
        this.form.insert(this.thumbPath);
        
        // add submit observer to the form
        this.form.observe('submit', this.submit.bind(this));
        
        // check image tag for prewiev
        this.image = $(image);
        if(this.image) {
            if(this.image.tagName.toLowerCase()!= 'img')
                throw 'preview parameter must be an IMG - Element';
        }
        
        //settings
        this.settings = Object.extend({
            language: 'en',
            max_filesize: 0 // 0 no limit
        }, settings || {})
        
        //backup form attributes
        this.formAttributes = {
            action: this.form.action,
            target: this.form.target,
            method: this.form.method,
            enctype: this.form.enctype,
            onsubmit: this.form.onsubmit
        };
        
        // iframe
        this.iframe = new Element('iframe',{
            style: 'display:none;',
            name: 'image_iframe_'+this.uploadField.id
        });
        this.form.insert(this.iframe);
        
        // Event Listeners
        this.firstLoad = true;
        this.uploadField.observe('change', this.upload.bindAsEventListener(this));
        this.iframe.observe('load', this.update.bindAsEventListener(this));
    },
    /**
     * Upload file: called when the upload field changes (user selects a file)
     * @param {Event Object} e
     */
    upload: function(e){
        
        showMessage("Bild wird hochgeladen");        
        /*
        if(this.files) {
            // delete created images
            query = '';
            for(name in this.files) query+='&files[]='+this.files[name];
            new Ajax.Request(this.ajax_file + '?request=unlink' + query, {
                    method: 'post'
            });
        }
        */
        this.firstLoad = false;
        with(this.form){
            action = this.ajax_file + '?request=upload&type=event&upload_param_name=' + this.name;
            target = this.iframe.name;
            method = 'post';
            enctype = 'multipart/form-data';
            onsubmit = function() {return true};
            submit();
            // restore form arguments
            action = this.formAttributes.action;
            target = this.formAttributes.target;
            method = this.formAttributes.method;
            enctype = this.formAttributes.enctype;
            onsubmit = this.formAttributes.onsubmit;
        }
    },
    update: function(){
        
        hideMessage()
        
        // if iframe is loaded when loading the page dont update
        if(this.firstLoad) return;
        response = UploaderResponse[this.uploadField.name];
        if(response.ERRORNO==0){
            this.originalPath.value = response.FILENAME_ORIGINAL;
            this.resizedPath.value  = response.FILENAME_RESIZED;
            this.thumbPath.value    = response.FILENAME_THUMB;
            
            if(this.image)
                this.image.src = response.FILENAME_RESIZED;
            this.image.show();
        }
        else
            alert(language.imageUploader.upload_error[response.ERRORNO]);
    },
    submit: function() {
        if(this.files)
            this.imagefields.each((function(field){
                field.value = this.files[field.name];
            }).bind(this));
    }
});



document.observe('dom:loaded', function() {
    Events.init();
    
	if($('events_barname'))
		new Autocompleter('events_barname', {
			ajax_file: Events.ajax_file+'?request=getBars',
			maxlength: 15,
            autosubmit: false,
			onChoose: Events.setRegion
		})
        
   if ($('form_eventfilter'))
       $('form_eventfilter').hide();
   
   if ($('event_pic'))
   {
       new ImageUploader('event_pic', 'event_pic_img');
   }
});