var BigPicture = new Class({
	Implements:   [Options],
	
	options: {
		classname:  'photo',
		showdelay:  500,
		hidedelay:  50,
		divID:      'photoLayover',
		size:       400,
		injection:  document.body,
		offset:     { x : 2, y : 2},
		eventShow:  'click',
		eventHide:  'mouseleave'
	},
	
	getDiv: function() {
		this.div = $(this.options.divID);
		if(!this.div) {
			this.createDiv();
		}
	},
	
	createDiv: function() {
		this.div = new Element('div',{
			'id':this.options.divID
		});
		this.div.inject(document.body);
		this.div.setStyles({
			'position'  :'absolute',
			'opacity'   :'0'
		})
		this.div.store('bigPicture',this);
		this.div.addEvent(this.options.eventShow,function(e) {
				e.stopPropagation();
				var obj = this.retrieve('bigPicture');
				$clear(obj.timer);
			});
		this.div.addEvent(this.options.eventHide,function(e) {
				var obj   = this.retrieve('bigPicture');
				obj.timer = obj.hide.delay(obj.options.hidedelay,obj);
			}
		);
		return this.div;
	},
	
	initialize: function(options) {
		this.setOptions(options);
		this.elements = $$('.'+ this.options.classname);
		this.elements.store('bigPicture',this);
		this.elements.addEvent(this.options.eventShow,function(e) {
				e.stopPropagation();
			var obj   = this.retrieve('bigPicture');
			$clear(obj.timer);
			var src   = this.get('src').replace(/size=\d+/,'size='+ obj.options.size);
			var pos   = this.getPosition();
			obj.getDiv();
			obj.div.empty();
			var img   = new Element('img',{'src':src}).inject(obj.div);
			obj.div.setPosition({x:pos.x+obj.options.offset.x,y : pos.y + obj.options.offset.y});
			obj.div.fade.delay(obj.options.showdelay,obj.div,'in');
		});
		this.elements.addEvent(this.options.eventHide,function(e) {
			var obj   = this.retrieve('bigPicture');
			obj.timer = obj.hide.delay(obj.options.hidedelay,obj);
		});
	},
	
	
	hide: function() {
		this.getDiv();
		this.div.fade('out');
	}
});

function setRating(el) {
	var rating = (el.retrieve('rating') == null)?el.get('html'):el.retrieve('rating');
	//var rating = parseInt(el.get('html'));
	var id = el.get('id');
	var cls = el.get('class');
	arrCls = cls.split(' ');
	var url = arrCls[1] +'.php';
	var cmd = arrCls[2];
	/*
	if(el.retrieve('createdRating') == true) {
		return;
	}
	*/
	el.store('rating',rating);
	el.store('createdRating',true);
			el.set('html','');
	for(var x = 1; x <= 5; x++) {
		var src = ((x<=rating)?'../img/icon/star_small.png':'../img/icon/star_small_gray.png');
		var img = new Element('img',{'class':'star1 starVal','src':src}).inject(el);
		img.store('rating',x);
		img.store('original_source',src);
		if(el.hasClass('noaction')) {
			//don't do anything, no events
		} else {
			el.store('objectID',id.split('_')[1]);
			img.addEvent('mouseover',function(e) {
				var rating = this.retrieve('rating');
				var stars = $(this.parentNode).getChildren();
				stars.each(function(el2) {
					if(el2.retrieve('rating') <= rating) {
						el2.set('src','../img/icon/star_highlight.png');
					}
				});
			});
			
			img.addEvent('mouseout',function(e) {
				$$('.starVal').each(function(el) {
					el.set('src',el.retrieve('original_source'));
				})
			});
			
			img.addEvent('click',function(e) {
				var parent = this.getParent();
				var rating = this.retrieve('rating');
				var objectID = parent.retrieve('objectID');
				new Request({
					url:        url,
					method:     'get',
					data:       'cmd='+ cmd +'&ID='+ objectID +'&rating=' + rating,
					onSuccess:  processRating
				}).send();                                      
			});
		}
	}
	el.setStyle('visibility','visible');
}


FormValidator.addAllThese([
	['validate-elfproef', {
		errorMsg: function() {
			return 'Het nummer voldoet niet aan de elf-proef';
		},
		test: function(element) {
			var val   = element.get('value');
			var total = 0;
			val = val.replace(/\./gi,'');
			//val = val.replace(/ /gi,'');
			element.set('value',val);
			if(val.length < 9 || val.length > 10) return true;
			
			var j = val.length;
			for( var i = 0; i < val.length; i++ ) {
				total += val.charAt( i ) * j;
				j -= 1;
			}
			if( ( total % 11 ) != 0 ) {
				return false;
			}
			return true;
		}
	}],
	['validate-bsn',{
		errorMsg: function() {
			return 'Het nummer is geen geldig burger service nummer';
		},
		test: function(element) {
			var val   = element.get('value');
			if(val.length == 0) return true;
			var total = 0;
			val = val.replace(/\./gi,'');
			//val = val.replace(/ /gi,'');
			element.set('value',val);
			if(val.length != 9) return false;
			
			var j = val.length;
			for( var i = 0; i < val.length; i++ ) {
				subval = val.charAt( i ) * j;
				if(j==1) {
					total -= subval;
				} else {
					total += subval;
				}
				j -= 1;
			}                
			if( ( total % 11 ) != 0 ) {
				return false;
			}
			return true;
		}
	}],
	['validate-time', {
		errorMsg: function(){
			return FormValidator.getMsg('time');
		},
		test: function(element){
			element.set('value',element.get('value').replace(':','').replace('.',''));
			switch(element.get('value').length) {
				case 0:
					element.set('value','00:00');
					break;
				case 1:
					element.set('value','0'+ element.get('value') +':00');
					break;
				case 2:
					element.set('value',element.get('value') +':00');
					break;
				case 3:
					element.set('value','0'+ element.get('value').substr(0,1) +':'+ element.get('value').substr(1,2));
					break;
				case 4:
					element.set('value',element.get('value').substr(0,2) +':'+ element.get('value').substr(2,2));
					break;
			}
			return FormValidator.getValidator('IsEmpty').test(element) || (/^[0-9][0-9]:[0-9][0-9]$/).test(element.get('value'));
		}
	}],
	
	['validate-date-nl', {
		errorMsg: function() {
			return FormValidator.getMsg('date');
		},
		test: function(element) {
			element.set('value',element.get('value').replace(/\//g,'-'));
			val = element.get('value');
			switch(val.length) {
				case 6:
					val = val.substr(0,2) +'-'+ val.substr(2,2) +'-20'+ val.substr(4,2);
					break;
				case 8:
					if(!isNaN(val)) {
						val = val.substr(0,2) +'-'+ val.substr(2,2) +'-'+ val.substr(4,4);
					} else {
						var arr = val.split('-');
						if(arr.length == 3) {
							val = '0'+ arr[0] +'-0'+ arr[1] +'-'+ arr[2];
						} else {
							val = val.substr(0,6) +'20'+ val.substr(6,2);
						}
					}
					break;
				case 9:
					var arr = val.split('-');
					if(arr.length == 3) {
						val = ((arr[0].length==1)?'0':'') + arr[0] +'-'+ ((arr[1].length==1)?'0':'') + arr[1] +'-'+ arr[2];
					}
					break;
			}
			element.set('value',val);
			return FormValidator.getValidator('IsEmpty').test(element) || (/^[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]$/).test(element.get('value'));
		}
	}],
	
	['validate-zip-nl', {
		errorMsg: FormValidator.getMsg('zip'),
		
		test: function(element) {
			var val = element.set('value',element.get('value').toUpperCase().replace(' ',''));
			return FormValidator.getValidator('IsEmpty').test(element) ||
				(/^[1-9][0-9][0-9][0-9][A-Z][A-Z]$/).test(element.get('value'));
		}
	}],
	
	['username-unique', {
	 errorMsg: 'De gebruikersnaam bestaat al',
	 test: function(element, props) {
			if (element.value.length > 0) {
				 var req = new Request({
						url: '../username_unique.php',
						async: false
				 }).send("un=" + element.value);
				 return (req.response.text == '1');
			}
			return true;
		}
	}],

	['validate-num', {
		errorMsg: FormValidator.getMsg.pass('numeric'),
		test: function(element){
			element.set('value',element.get('value').replace(',','.'));
			return FormValidator.getValidator('IsEmpty').test(element) ||
				(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value'));
		}
	}]
]);

Form.Validator.Inline.implement({
	makeAdvice: function(className, field, error, warn){
		var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
			errorMsg += (this.options.useTitles) ? field.title || error:error;
		var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
		var advice = this.getAdvice(className, field);
		if(advice) {
			advice = advice.set('title', errorMsg);
		} else {
			advice = new Element('div', {
				title: errorMsg,
				styles: { display: 'none' },
				id: 'advice-' + className + '-' + this.getFieldId(field)
			}).addClass(cssClass);
		}
		field.store('advice-' + className, advice);
		return advice;
	}
});

HtmlTable.Parsers.date = {
	match: /^\d{2}[-\/ ]\d{2}[-\/ ]\d{2,4}$/,
	convert: function() {      
		var txt = this.get('text');
		var arr = txt.split('-');
		var dte = new Date(arr[2],arr[1]-1,arr[0]);
		return dte.format('Ymd');
	},
	type: 'date'
}

HtmlTable.Parsers.string = {
	match: null,
	convert: function() {
		return this.get('text').toLowerCase();
	}
};

HtmlTable.Parsers.datetime = {
	match: /^\d{2}[-\/ ]\d{2}[-\/ ]\d{2,4}[ ]\d{2}:\d{2}$/,
	convert: function() {      
		var txt = this.get('text');
		var arr = txt.split(' ');
		var arrdate = arr[0].split('-');
		var arrtime = arr[1].split(':');
		var dte = new Date(arrdate[2],arrdate[1]-1,arrdate[0],arrtime[0],arrtime[1]);
		return dte.format('Ymdhi');
	},
	type: 'date'
}

