var photo_count = 0;
var attachment_count = 0;
var photos = new Array();
var attachments = new Array();
var fileAjax;
var imageAjax;

var current_step = 0;
var category_list = new Object();
var category_count = 0;
var step_titles  = new Array(
	'',
	'Als eerste vragen wij u hier de gegevens van uw bedorven vakantie in te vullen',
	'Alles over uw bedorven vakantie gaan we nu op een rijtje zetten',
	'Uw gegevens en inlogbeheer',
	'U bent bijna klaar!'
);
var step_footers = new Array(
    '',
    'Laat u niet kisten, u heeft recht op schadevergoeding!',
    'Niet goed = geld terug! Claim wat u is beloofd!',
    'Al vele gedupeerde vakantiegangers zijn u voorgegaan!',
    'Rond uw claim af en behaal uw recht!'
);

jQuery(document).ready(function(){
	// Show tooltips on help icons
	jQuery('.generator-help-tooltip').tooltip({showURL: false});
	
	// Set the height of the background to the entire body height
	jQuery('#login-overlay').height(jQuery(document).height());
	//jQuery('#generator-overlay').show();
	//jQuery('#generator-holder').show();
	
	// Close the generator by clicking the "CLOSE" button
	jQuery('.generator-close-button img').click(function()
	{
		jQuery('#generator-overlay').hide();
		jQuery('#generator-holder').hide();
	});
	
	// Unset all accomodation checks
	jQuery.each(jQuery('.generator-body-block-list li'), function(){
		jQuery(this).removeClass('isChecked');
	});
	
	jQuery.each(jQuery('.generator-body-block-list-sub input[type=checkbox]'), function(){
		jQuery(this).attr('checked', false);
	});
    
	// Max words counter
    var maxWords = 600;
            
    //jQuery('#report').bind('keyup click blur focus change paste', function(){
    jQuery('#report').bind('keyup click blur focus change paste', function(){
        var numWords = jQuery.trim(jQuery(this).val()).split(' ').length;
        if(jQuery(this).val() === '') {
            numWords = 0;
        }
        
        jQuery('#report-word-counter').text(numWords == 1 ? '1 woord' : numWords + ' woorden');
    });
    
	// Checkboxes and radiobuttons
	jQuery('#generator-holder input[type=radio]').prettyCheckboxes({display: 'inline'});
	jQuery('#generator-holder input[type=checkbox]').prettyCheckboxes({display: 'list'});
    jQuery('#generator-holder input#startdate').keydown(function(event){event.preventDefault();});
    jQuery('#generator-holder input#startdate').datepicker({
		dateFormat		: 'dd-mm-yy',
        monthNames      : ["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],
        monthNamesShort : ["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],
        dayNames        : ["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],
        dayNamesShort   : ["Zon","Maa","Din","Woe","Don","Vrij","Zat"],
        dayNamesMin     : ["Zo","Ma","Di","Wo","Do","Vr","Za"],
        closeText       : 'Klaar',
        prevText        : 'Vorige',
        nextText        : 'Volgende',
        currentText     : 'Vandaag',
		showOn			: 'both',
		buttonImage		: '/fileadmin/admin/templates/shared/kal.png', 
        maxDate         : '0D',
		buttonImageOnly	: true,
        onSelect        : function(dateText, inst) {
            var parts    = dateText.split('-');
            var date     = new Date(parts[2], parts[1]-1, parts[0]);
            var today    = new Date();
            today.setDate(today.getDate()-25);
            
            if(date > today)
            {
                jQuery('#generator-holder input#enddate').datepicker('option', 'minDate', date);
            } else
            {
                jQuery('#generator-holder input#enddate').datepicker('option', 'minDate', today);
            }
            
            // Set the min date for the "notifiedagency" field
            jQuery('#generator-holder input#notifiedagency').datepicker('option', 'minDate', date);
        }
	});
    
    jQuery('#generator-holder input#enddate').keydown(function(event){event.preventDefault();});
    jQuery('#generator-holder input#enddate').datepicker({
		dateFormat		: 'dd-mm-yy',
        monthNames      : ["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],
        monthNamesShort : ["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],
        dayNames        : ["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],
        dayNamesShort   : ["Zon","Maa","Din","Woe","Don","Vrij","Zat"],
        dayNamesMin     : ["Zo","Ma","Di","Wo","Do","Vr","Za"],
        closeText       : 'Klaar',
        prevText        : 'Vorige',
        nextText        : 'Volgende',
        currentText     : 'Vandaag',
		showOn			: 'both',
		buttonImage		: '/fileadmin/admin/templates/shared/kal.png', 
        minDate         : '-25D',
        maxDate         : '0D',
		buttonImageOnly	: true,
        onSelect        : function(dateText, inst) {
            var parts    = dateText.split('-');
            var date     = new Date(parts[2], parts[1]-1, parts[0]);
            
            jQuery('#generator-holder input#startdate').datepicker('option', 'maxDate', date);
            
            // Set the min date for the "notifiedagency" field
            jQuery('#generator-holder input#notifiedagency').datepicker('option', 'maxDate', date);
        }
	});
    
    jQuery('#generator-holder input#notifiedagency').keydown(function(event){event.preventDefault();});
    jQuery('#generator-holder input#notifiedagency').datepicker({
        dateFormat		: 'dd-mm-yy',
        monthNames      : ["Januari","Februari","Maart","April","Mei","Juni","Juli","Augustus","September","Oktober","November","December"],
        monthNamesShort : ["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],
        dayNames        : ["Zondag","Maandag","Dinsdag","Woensdag","Donderdag","Vrijdag","Zaterdag"],
        dayNamesShort   : ["Zon","Maa","Din","Woe","Don","Vrij","Zat"],
        dayNamesMin     : ["Zo","Ma","Di","Wo","Do","Vr","Za"],
        closeText       : 'Klaar',
        prevText        : 'Vorige',
        nextText        : 'Volgende',
        currentText     : 'Vandaag',
		showOn			: 'both',
		buttonImage		: '/fileadmin/admin/templates/shared/kal.png', 
        minDate         : '-25D',
        maxDate         : '0D',
		buttonImageOnly	: true
    });
    
    // Step 1 booked via
    jQuery('#bookingvia-agency').click(function(){
        jQuery('#generator-booking-fields-online').hide();
        jQuery('#generator-booking-fields-agency').show();
        
        // Add required fields
        jQuery('#company').rules('add', { required : true, defaultValue : true });
        jQuery('#street').rules('add', { required : true, defaultValue : true });
        jQuery('#housenumber').rules('add', { required : true, defaultValue : true });
        jQuery('#companyzip').rules('add', { required : true, defaultValue : true });
        jQuery('#bookingcity').rules('add', { required : true, defaultValue : true });
        
        // Remove other fields
        jQuery('#website').rules('remove');
        jQuery('#website').rules('add', { required : false, defaultValue : false });
    });
    
    jQuery('#bookingvia-online').click(function(){
        jQuery('#generator-booking-fields-agency').hide();
        jQuery('#generator-booking-fields-online').show();
        
        // Add required fields
        jQuery('#website').rules('add', { required : true, defaultValue : true });
        
        // Remove other fields
        jQuery('#company').rules('remove');
        jQuery('#street').rules('remove');
        jQuery('#housenumber').rules('remove');
        jQuery('#companyzip').rules('remove');
        jQuery('#bookingcity').rules('remove');
        
        jQuery('#company').rules('add', { required : false, defaultValue : false });
        jQuery('#street').rules('add', { required : false, defaultValue : false });
        jQuery('#housenumber').rules('add', { required : false, defaultValue : false });
        jQuery('#companyzip').rules('add', { required : false, defaultValue : false });
        jQuery('#bookingcity').rules('add', { required : false, defaultValue : false });
    });
    
	//jQuery('#generator-holder select.country-box').selectbox({className: 'jquery-selectbox-country-box'});
	//jQuery('#generator-holder select.date-box').selectbox({className: 'jquery-selectbox-date'});
    
	
	// Remove the value of the input field when selected
	jQuery.each(jQuery('#generator-form input,#generator-form textarea'), function(){
        if(jQuery(this).title != '')
        {
            jQuery(this).focus(function(){
                if(jQuery(this).attr('title') == jQuery(this).val() || jQuery(this).attr('title') == '')
                {
                    jQuery(this).attr('title', jQuery(this).val());
                    jQuery(this).val('');
                }
            });
            jQuery(this).blur(function(){
                if(jQuery(this).val() == '')
                {
                    jQuery(this).val(jQuery(this).attr('title'));
                }
            });
        }
	});
    
    
    // Image upload
	var button      = jQuery('#generator-upload-image');
	imageAjax   = new AjaxUpload(button, {
		action     : '?tx_clickandclaim_pi1[code]=UPLOAD_IMAGE',
		onSubmit   : function(file, ext){
			if(photo_count == 3)
			{
				return false;
			}
			if(!(ext && /^(jpg|png|jpeg|gif)$/.test(ext)))
			{
				alert('U mag alleen afbeeldingen uploaden als foto');
				return false;
			} else
			{
				// Upload completed
				photo_count++;
				jQuery('#generator-upload-image').attr('class', 'generator-upload-button-disabled');
			}
			
			this.disable();
		},
		onComplete : function(file, response){
			if(response == 'filesize exceeded') { alert('De foto die u wilt uploaden is groter dan 3MB'); photo_count--; }
			else if(response == 'failure') { alert('Het uploaden van het bestand is mislukt. Probeer het nog eens'); photo_count--; }
			else
			{
                // HACK!!!!!!!
                //alert(response);
                if(!jQuery('#generator-upload-file-holder ol').length) { jQuery('#generator-upload-file-holder').html('<ol></ol>'); }
				var html = '<li class="upload-image" id="upload-image-' + photo_count + '"><a href="javascript:void(0)" onclick="showFile(\'/uploads/tx_clickandclaim/' + response + '\')">' + file + '</a> <a href="javascript:void(0)" onclick="removeFile(\'' + response + '\', \'' + photo_count + '\', \'image\')"><img src="/fileadmin/admin/templates/shared/kruis.png" alt="Bestand verwijderen" /></a></li>';
				jQuery(html).appendTo(jQuery('#generator-upload-file-holder'));
				photos.push(response);
				jQuery('input[name=images]').val(photos.join(','));
			}
			
			if(photo_count < 3)
			{
				this.enable();
				jQuery('#generator-upload-image').attr('class', 'generator-upload-button');
			}
		}
	});
	
	// File upload
	var button      = jQuery('#generator-upload-file');
	fileAjax    = new AjaxUpload(button, {
		action     : '?tx_clickandclaim_pi1[code]=UPLOAD_FILE',
		onSubmit   : function(file, ext){
			if(attachment_count == 1)
			{
				return false;
			}
			
			// Upload starting
			attachment_count++;
			jQuery('#generator-upload-file').attr('class', 'generator-upload-button-disabled');
			this.disable();
		},
		onComplete : function(file, response){
			if(response == 'filesize exceeded') { alert('Het bestand dat u wilt uploaden is groter dan 1MB'); attachment_count--; }
			else if(response == 'failure') { alert('Het uploaden van het bestand is mislukt. Probeer het nog eens'); attachment_count--; }
			else
			{
				var html = '<li class="upload-file" id="upload-file-' + attachment_count + '"><a href="javascript:void(0)" onclick="showFile(\'/uploads/tx_clickandclaim/' + response + '\')">' + file + '</a> <a href="javascript:void(0)" onclick="removeFile(\'' + response + '\', \'' + attachment_count + '\', \'file\')"><img src="/fileadmin/admin/templates/shared/kruis.png" alt="Bestand verwijderen" /></a></li>';
				jQuery(html).appendTo(jQuery('#generator-upload-file-holder'));
				attachments.push(response);
				jQuery('input[name=attachments]').val(attachments.join(','));
			}
			
			if(attachment_count < 1)
			{
				this.enable();
				jQuery('#generator-upload-file').attr('class', 'generator-upload-button');
			}
		}
	});
    
	
	// Complaints
	jQuery.each(jQuery('.generator-body-block-list li'), function(){
		jQuery(this).click(function(){
			var id = jQuery(this).attr('id');
			id     = id.split('-');
			id     = id[id.length-1];
            
            jQuery('.generator-body-block-list li').removeClass('active');
            jQuery(this).addClass('active');
			
			jQuery.each(jQuery('.generator-body-block-list-sub'), function(){
				jQuery(this).hide();
			});
			
			jQuery('#generator-sublist-' + id).show();
		});
	});
	
	// Check the number of selected complaints and categories
	jQuery.each(jQuery('.generator-body-block-list-sub label'), function(){
		jQuery(this).click(function(){
			var input    = jQuery('input#' + jQuery(this).attr('for'));
			var category = input.attr('id').split('-');
			category     = category[category.length-2];
			var catObj   = jQuery('#generator-list-' + category);
			
			if(input.is(':checked'))
			{
				// Unchecking it
				category_list[category]--;
				
				if(category_list[category] == 0)
				{
					delete category_list[category];
					catObj.removeClass('isChecked');
					
				}
			} else
			{
				// Checking
				if(category_list[category] == undefined )
				{
					if(getObjectLength(category_list) < 3)
					{
						category_list[category] = 1;
						catObj.addClass('isChecked');
					} else
					{
						delete category_list[category];
						catObj.removeClass('isChecked');
						jQuery(this).removeClass('checked');
						input.attr('checked', false);
						return false;
					}
				} else
				{
					if(category_list[category] == 3)
					{
						jQuery(this).removeClass('checked');
						return false;
					} else
					{
						category_list[category]++;
					}
				}
			}
		});
	});
	
	// Password replacer
	jQuery('#fepassword_fake').focus(function()
	{
		jQuery(this).hide();
		jQuery('#fepassword').show();
		jQuery('#fepassword').focus();
	});
	
	jQuery('#fepassword').blur(function()
	{
		if(jQuery(this).val() == '')
		{
			jQuery(this).hide();
			jQuery('#fepassword_fake').val(jQuery('#fepassword_fake').attr('title'));
			jQuery('#fepassword_fake').show();
		}
	});
	
	jQuery('#fepasswordconfirm_fake').focus(function()
	{
		jQuery(this).hide();
		jQuery('#fepasswordconfirm').show();
		jQuery('#fepasswordconfirm').focus();
	});
	
	jQuery('#fepasswordconfirm').blur(function()
	{
		if(jQuery(this).val() == '')
		{
			jQuery(this).hide();
			jQuery('#fepasswordconfirm_fake').val(jQuery('#fepasswordconfirm_fake').attr('title'));
			jQuery('#fepasswordconfirm_fake').show();
		}
	});
	
	// Stappenplan	
	jQuery.each(jQuery('.generator-steps-block'), function(){
		jQuery(this).hide();
	});
	
	jQuery('.generator-tabs li').attr('class', '');
	
	for(var i = 1; i < current_step; i++){
		jQuery('#generator-tabs-' + i).attr('class', 'tab-success');
	}
	
	jQuery('#generator-steps-' + current_step).show();
	jQuery('#generator-tabs-' + current_step).attr('class', 'tab-active');
	jQuery('.generator-footer-next-button').click(function() {
        if(current_step == 2)
        {
            // Check if the report doesn't exceed the limit
            // Report word counter
            var maxWords = 600;
            
            //jQuery('#report').bind('keyup click blur focus change paste', function(){
            var report   = jQuery('#report').val();
            var numWords = report.split(' ').length;
            
            if(numWords > maxWords) { 
                window.scrollTo(0, 0);
                jQuery('#report_exceeded').parent().parent().show();
                jQuery('#report_exceeded').show();
            } else {
                jQuery('#report_exceeded').hide();
                gotoNextStep(3);
            }
        } else if(current_step < 4)
		{
			gotoNextStep(current_step+1);
		}
	});
	
	// Form validation
	jQuery('#generator-form').validate({
		rules : {
			// Step 1
			'destinationcountry' : {
				required : true
			},
			'destinationcity' : {
				required : true,
				defaultValue : true
			},
			'accomodation' : {
				required : true,
				defaultValue : true
			},
			'operatorcompany' : {
				required : true,
				defaultValue : true
			},
            'operatorcity' : {
				required : true,
				defaultValue : true
			},
            'bookingvia' : {
				required : true,
				defaultValue : false
			},
            
            // Booked offline
            'company' : {
				required : false,
				defaultValue : false
			},
            'street' : {
				required : false,
				defaultValue : false
			},
            'housenumber' : {
				required : false,
				defaultValue : false
			},
            'companyzip' : {
				required : false,
				defaultValue : false
			},
            'bookingcity' : {
				required : false,
				defaultValue : false
			},
            
            // Booked online
            'website' : {
				required : false,
				defaultValue : false
			},
            /*
			'holidaytype' : {
				required : true,
				defaultValue : false
			},
            */
			'startdate': {
				required : true
			},
			'enddate': {
				required : true
			},
			'adults' : {
				required : true,
				defaultValue : true
			},
			'children' : {
				required : true,
				defaultValue : true
			},
			'totalcost' : {
				required : true,
				defaultValue : true
			},
			
			// Step 2
			'complaints[]': {
				required : true,
				defaultValue: false
			},
            'report' : {
                required: true,
                defaultValue: false
            },
            'notifiedagency' : {
                required : true,
                defaultValue : false
            },
            'contactpersoon' : {
                required : true,
                defaultValue : true
            },
            'anonymous' : {
                required : true,
                defaultValue : false
            },
			
			// Step 3
			'fegender': {
				required : true,
				defaultValue: false
			},
			'feinitials': {
				required : true,
				defaultValue: true
			},
			'felastnameprefix' : {
				required: false,
				defaultValue: false
			},
			'ferealName': {
				required : true,
				defaultValue: true
			},
			'fezip': {
				required : true,
				defaultValue: true
			},
			'festreet': {
				required : true,
				defaultValue: true
			},
			'fehousenumber': {
				required : true,
				defaultValue: true
			},
			'fecity': {
				required : true,
				defaultValue: true
			},
			'fephone': {
				required : true,
				defaultValue: true
			},
            'femobilephone' : {
                required: false,
                defaultValue: false
            },
            'febank' : {
                required: true,
                defaultValue: true
            },
			'feemail': {
				required : true,
				defaultValue: true
			}
		},
		errorPlacement : function(error, element)
		{
			var name = element.attr('name');
			name = name.split('[]').join('');
			
			var holder = jQuery('#' + name + '_error');
			holder.show();
			holder.parent().parent().show();
		}
	});
});

function fillOverview()
{
	jQuery.each(jQuery('#generator-form input,#generator-form select,#generator-form textarea'), function()
	{
        if(jQuery(this).attr('name') == 'bookingvia')
        {
            // Check the selected value and show the correct block
            if(jQuery(this).is(':checked'))
            {
                if(jQuery(this).val() == 'Online')
                {
                    jQuery('#booking-result-agency').hide();
                    jQuery('#booking-result-online').show();
                    
                    var value = 'Online';
                } else
                {
                    jQuery('#booking-result-online').hide();
                    jQuery('#booking-result-agency').show();
                    
                    var value = 'Boekingskantoor / reisbureau';
                }
            }
        } else if(jQuery(this).attr('name') == 'complaints[]')
		{
			var values = new Array();
            var value  = jQuery('<div></div>');
			jQuery.each(jQuery('input[name=' + jQuery(this).attr('name') + ']:checked'), function(){
				// Get the text
				var parent = jQuery(this).parent();
				var label  = jQuery('label', parent);
				var text   = jQuery.trim(label.text());
				values.push(text);
			});
			
            for(var i = 0; i < values.length; i++)
            {
                value.append(values[i]);
                
                if(i+1 != values.length)
                {
                    value.append('<br />');
                }
            }
        } else if(jQuery(this).attr('name') == 'anonymous')
        {
            if(jQuery(this).is(':checked'))
            {
                var value = jQuery(this).val() == 1 ? 'Ja' : 'Nee';
            }
        } else if(jQuery(this).attr('type') == 'checkbox' || jQuery(this).attr('type') == 'radio')
		{
			var values = new Array();
            var value  = jQuery('<div></div>');
			jQuery.each(jQuery('input[name=' + jQuery(this).attr('name') + ']:checked'), function(){
				values.push(jQuery(this).val());
			});
            
            for(var i = 0; i < values.length; i++)
            {
                value.append(values[i]);
                
                if(i+1 != values.length)
                {
                    value.append('<br />');
                }
            }
			
			//value = value.join(', ');
		} else if(jQuery(this).attr('name') == 'felastnameprefix')
		{
            var value = jQuery(this).val() == '' || jQuery(this).val() == 'Tussenvoegsels' ? '' : jQuery(this).val();
		} else if(jQuery(this).attr('name') == 'holidaytype')
		{
			var value = jQuery(':selected', this).text();
        } else if(jQuery(this).attr('name') == 'contactpersoon')
        {
            var value = jQuery(this).val() == jQuery(this).attr('title') ? '' : jQuery(this).val();
		} else
        {
			var value = jQuery(this).val();
		}
		
		var name  = jQuery(this).attr('name');
		name      = name.split('[]').join('');
		
		var block = jQuery('#' + name + '_value');
		
		block.html(value);
	});
    
    // Images and attachments
    var values = new Array();
    var value  = jQuery('<div></div>');
    var files  = photos.concat(attachments);
    
    for(var i = 0; i < files.length; i++)
    {
        value.append('<a href="/uploads/tx_clickandclaim/' + files[i] + '" target="_blank">' + files[i] + '</a>');
        
        if(i+1 != values.length)
        {
            value.append('<br />');
        }
    }
    
    var block = jQuery('#attachments_value');
    block.html(value);
}

function gotoNextStep(stepId)
{
	if(!checkStep(current_step))
	{
		// Jump to the top of the screen
		window.scrollTo(0, 0);
		
		return false;
	}

        jQuery.ajax({
            url : 'index.php?tx_clickandclaim_pi1[code]=SEND_TESTMAIL',
            data : { step : stepId },
            type : 'POST',
            success : function(msg)
            {
                // Do nothing
            }
        });
    
	current_step = stepId;
	
	jQuery.each(jQuery('.generator-steps-block'), function(){
		jQuery(this).hide();
	});
	
	jQuery('.generator-title').html('<span class="generator-title-orange">Stap ' + current_step + '.</span> <span class="generator-title-blue">' + step_titles[current_step] + '</span>');
	
	jQuery('.generator-tabs li').attr('class', '');
	jQuery('#generator-steps-' + current_step).show();
	
	for(var i = 1; i < current_step; i++){
		jQuery('#generator-tabs-' + i).attr('class', 'tab-success');
	}
	
	jQuery('#generator-tabs-' + current_step).attr('class', 'tab-active');
	jQuery('.generator-footer-next-button').text('Door naar stap ' + (current_step+1));
    jQuery('.generator-footer .trigger-text').text(step_footers[current_step]);
    
	if(current_step == 4)
	{
		fillOverview();
		jQuery('#generator-steps-' + current_step).show();
		jQuery('.generator-footer-next-button').click(function(){
			// Form is filled in completely, so we will submit it
			jQuery('#generator-form').submit();
		});;
	}
	
	// And now scroll to the top of the page
	window.scrollTo(0, 0);
}

function checkStep(current_step)
{
	// Hide all error blocks
	jQuery.each(jQuery('.generator-body-block-error-line'), function(){
		jQuery(this).hide();
	});
	
	jQuery.each(jQuery('.generator-body-block-error-holder'), function(){
		jQuery(this).hide();
	});
    
    return jQuery('#generator-form').validate().partial('#generator-steps-' + current_step);
}

jQuery.validator.prototype.partial = function(parent) {
	this.prepareForm();
    
	var inContainer = $(parent).find('input, select, textarea, button')
		.not(":submit, :reset, :image, [disabled]")
		.not( this.settings.ignore );
	
	for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
		if(inContainer.index(elements[i]) != -1)
		{
            //alert(elements[i].name + ' => ' + this.check(elements[i]));
			this.check( elements[i] );
		}
	}

	$.extend(this.submitted, this.errorMap);
	this.invalid = $.extend({}, this.errorMap);
	if (!this.valid())
		$(this.currentForm).triggerHandler("invalid-form", [this]);
		
	this.showErrors();

	return this.valid();
}


jQuery.validator.addMethod('defaultValue', function(value, element, params){
	return this.optional(element) || value != element.getAttribute('title');
}, 'This field is required');

function fillDate(id)
{
	var day   = jQuery('#' + id + '-day');
	var month = jQuery('#' + id + '-month');
	var year  = jQuery('#' + id + '-year');
	
	if(day.val() == '' || month.val() == '' || year.val() == '')
	{
		// One of the fields is empty, so the date is not set
		return false;
	}
	
	var date = jQuery('#' + id);
	date.val(day.val() + '-' + month.val() + '-' + year.val());
}

function getObjectLength(obj)
{
	var size = 0;
	for(q in obj)
	{
		size++;
	}
	
	return size;
}

function showBlock(id)
{
	current_step = id;
	
	jQuery.each(jQuery('.generator-steps-block'), function(){
		jQuery(this).hide();
	});
	
	jQuery('.generator-title').html('<span class="generator-title-orange">Stap ' + current_step + '.</span> <span class="generator-title-blue">' + step_titles[current_step] + '</span>');
	
	jQuery('.generator-tabs li').attr('class', '');
	jQuery('#generator-steps-' + current_step).show();
	
	for(var i = 1; i < current_step; i++){
		jQuery('#generator-tabs-' + i).attr('class', 'tab-success');
	}
	
	jQuery('#generator-tabs-' + current_step).attr('class', 'tab-active');
	jQuery('.generator-footer-next-button').text('Door naar stap ' + (current_step+1));
    jQuery('.generator-footer-next-button').unbind('click');
    
    jQuery('.generator-footer-next-button').click(function() {
        if(current_step < 4)
        {
            gotoNextStep(current_step+1);
        }
    });
}

function openGenerator(join)
{
    if(!join)
    {
        if(jQuery('#generator-holder').find('#destinationcountry-input').length)
        {
            jQuery('#generator-holder').find('input#accomodation')
                .removeAttr('readonly');
            jQuery('#generator-holder').find('input#destinationcity')
                .removeAttr('readonly');
            jQuery('#generator-holder').find('#destinationcountry-input').remove();
            jQuery('#generator-holder').find('select#destinationcountry').show();
            //jQuery('#generator-holder').find('select#destinationcountry').selectbox({className: 'jquery-selectbox-country-box'});
        }
    }

    jQuery.ajax({
        url : 'index.php?tx_clickandclaim_pi1[code]=SEND_TESTMAIL',
        data : { step : 'Start' },
        type : 'POST',
        success : function(msg)
        {
            // Do nothing
        }
    });
    
	jQuery('#generator-overlay').show();
	jQuery('#generator-overlay').height(jQuery('html').height());
	jQuery('#generator-holder').show();
	
	// Check the current step
	jQuery.each(jQuery('.generator-steps-block'), function(){
		jQuery(this).hide();
	});
	
	jQuery('.generator-tabs li').attr('class', '');
	
	for(var i = 0; i < current_step; i++){
		jQuery('#generator-tabs-' + i).attr('class', 'tab-success');
	}
	
    jQuery('#generator-steps-' + current_step).show();
	jQuery('#generator-tabs-' + current_step).attr('class', 'tab-active');
	jQuery('.generator-footer-next-button').text('Door naar stap ' + (current_step+1));
	
	window.location = String(window.location).replace(/\#.*$/, "") + "#generator-header";
}

// Special function for joining a claim
function joinGenerator(accomodation, city, country)
{
	jQuery('#generator-holder').find('input#accomodation')
        .attr('readonly', 'true')
        .val(accomodation);
	jQuery('#generator-holder').find('input#destinationcity')
        .attr('readonly', 'true')
        .val(city);
	//jQuery('#generator-holder').find('select#destinationcountry').val(country);
    
    // To ensure that the country in not changed, I will hide the dropdown and create a new field
    var _country = jQuery('#generator-holder').find('select#destinationcountry');
    var text    = jQuery('<input type="text" name="destinationcountry" id="destinationcountry-input" class="input-text" readonly="readonly" />');
    text.val(country);
    _country.parents('.jquery-selectbox-country-box').unselectbox();
    _country.hide();
    _country.parent().prepend(text);
	
	openGenerator(true);
}

jQuery(document).ready(function(){
    jQuery('.ideal img').hover(function(){
        var src = jQuery(this).attr('src').match(/[^\.]+/) + "2.png";
		jQuery(this).attr('src', src);
    }, 
    function(){
        var src = jQuery(this).attr("src").replace("2.png", ".png");
		jQuery(this).attr("src", src);
    });
});

function removeFile(file, id, type)
{
	// Make ajax call to remove file
	var html = '<iframe id="generator-file-iframe" width="1" height="1" src="?tx_clickandclaim_pi1[code]=REMOVE_FILE&tx_clickandclaim_pi1[file]=' + file + '"></iframe>';
	jQuery(html).appendTo(jQuery('#generator-holder'));
	jQuery('#generator-file-iframe').remove();
	
	if(type == 'image')
	{
		jQuery('#upload-image-' + id).remove();
		photo_count--;
		
		if(photo_count < 3)
		{
			jQuery('#generator-upload-image').attr('class', 'generator-upload-button');
		}
		
		var _photos = new Array();
		for(var i = 0; i < photos.length; i++)
		{
			if(photos[i] != file) {_photos.push(photos[i]); }
		}
		
		photos = _photos;
		
		jQuery('input[name=images]').val(photos.join(','));
        imageAjax.enable();
	} else if(type == 'file')
	{
		jQuery('#upload-file-' + id).remove();
		attachment_count--;
		
		if(attachment_count < 1)
		{
			jQuery('#generator-upload-file').attr('class', 'generator-upload-button');
		}
		
		var _attachments = new Array();
		for(var i = 0; i < attachments.length; i++)
		{
			if(attachments[i] != file) {_attachments.push(photos[i]); }
		}
		
		attachments = _attachments;
		
		jQuery('input[name=attachments]').val(attachments.join(','));
        fileAjax.enable();
	}
}

function showImage(file)
{
    window.open('/index.php?tx_clickandclaim_pi1[code]=POPUP_IMAGE&file=' + file, 'upload-popup', 'width=200,height=200,scrollbars=no, toolbar=no, location=no');
    
    return false;
}

function showFile(file)
{
    window.open('/index.php?tx_clickandclaim_pi1[code]=POPUP_IMAGE&file=' + file, 'upload-popup', 'width=200,height=200,scrollbars=no, toolbar=no, location=no');
    
    return false;
}

function getDateFromFormat(val,format){val=val+"";format=format+"";var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getYear();var month=now.getMonth()+1;var date=1;var hh=now.getHours();var mm=now.getMinutes();var ss=now.getSeconds();var ampm="";while(i_format < format.length){c=format.charAt(i_format);token="";while((format.charAt(i_format)==c) &&(i_format < format.length)){token += format.charAt(i_format++);}if(token=="yyyy" || token=="yy" || token=="y"){if(token=="yyyy"){x=4;y=4;}if(token=="yy"){x=2;y=2;}if(token=="y"){x=2;y=4;}year=_getInt(val,i_val,x,y);if(year==null){return 0;}i_val += year.length;if(year.length==2){if(year > 70){year=1900+(year-0);}else{year=2000+(year-0);}}}else if(token=="MMM"||token=="NNN"){month=0;for(var i=0;i<MONTH_NAMES.length;i++){var month_name=MONTH_NAMES[i];if(val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()){if(token=="MMM"||(token=="NNN"&&i>11)){month=i+1;if(month>12){month -= 12;}i_val += month_name.length;break;}}}if((month < 1)||(month>12)){return 0;}}else if(token=="EE"||token=="E"){for(var i=0;i<DAY_NAMES.length;i++){var day_name=DAY_NAMES[i];if(val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()){i_val += day_name.length;break;}}}else if(token=="MM"||token=="M"){month=_getInt(val,i_val,token.length,2);if(month==null||(month<1)||(month>12)){return 0;}i_val+=month.length;}else if(token=="dd"||token=="d"){date=_getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return 0;}i_val+=date.length;}else if(token=="hh"||token=="h"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>12)){return 0;}i_val+=hh.length;}else if(token=="HH"||token=="H"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>23)){return 0;}i_val+=hh.length;}else if(token=="KK"||token=="K"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<0)||(hh>11)){return 0;}i_val+=hh.length;}else if(token=="kk"||token=="k"){hh=_getInt(val,i_val,token.length,2);if(hh==null||(hh<1)||(hh>24)){return 0;}i_val+=hh.length;hh--;}else if(token=="mm"||token=="m"){mm=_getInt(val,i_val,token.length,2);if(mm==null||(mm<0)||(mm>59)){return 0;}i_val+=mm.length;}else if(token=="ss"||token=="s"){ss=_getInt(val,i_val,token.length,2);if(ss==null||(ss<0)||(ss>59)){return 0;}i_val+=ss.length;}else if(token=="a"){if(val.substring(i_val,i_val+2).toLowerCase()=="am"){ampm="AM";}else if(val.substring(i_val,i_val+2).toLowerCase()=="pm"){ampm="PM";}else{return 0;}i_val+=2;}else{if(val.substring(i_val,i_val+token.length)!=token){return 0;}else{i_val+=token.length;}}}if(i_val != val.length){return 0;}if(month==2){if( ((year%4==0)&&(year%100 != 0) ) ||(year%400==0) ){if(date > 29){return 0;}}else{if(date > 28){return 0;}}}if((month==4)||(month==6)||(month==9)||(month==11)){if(date > 30){return 0;}}if(hh<12 && ampm=="PM"){hh=hh-0+12;}else if(hh>11 && ampm=="AM"){hh-=12;}var newdate=new Date(year,month-1,date,hh,mm,ss);return newdate.getTime();}

function trim (str, charlist) {
    var whitespace, l = 0, i = 0;
    str += '';
    
    if (!charlist) {
        // default list
        whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
    } else {
        // preg_quote custom list
        charlist += '';
        whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '$1');
    }
    
    l = str.length;
    for (i = 0; i < l; i++) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(i);
            break;
        }
    }
    
    l = str.length;
    for (i = l - 1; i >= 0; i--) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    
    return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}
