dojo.provide("visualtis.form");
dojo.provide("visualtis.form.validation");

var visualtis={}

visualtis.form = {}

visualtis.form.validation = {
	isChecked:function(value, fieldId) {
        var field = dojo.byId(fieldId);
        
        if (!field.checked)
			return false;
		
		field.checked = !field.checked;
        return true;
    },
    
    isValidDate:function(value, flags, referentId){
    	var referent = dojo.byId(referentId);
		if(!value){return false;}

		if (!flags){
			dojo.raise("isValidDate: value and flags must be specified");
			return;
		}
		
		if (!dj_undef("max", flags))
			flags.max = referent.value;
		
		if (!dj_undef("min", flags))
			flags.min = referent.value;

		// parse date value
		var dateValue=null;
		try {
			dateValue = dojo.date.parse(value, flags);
		} catch (e) {
			dojo.log.exception("Error parsing input date.", e, true);
			return false;
		}

		if(dateValue == null) { return false; }

		// convert to format that is validatable
		value=dojo.date.format(dateValue, flags);

		// TODO: This is totally useless right now, doesn't even accept formats with string equivs
		// See a better method http://www.mattkruse.com/javascript/date/source.html
		// basic format validation
		// if (!dojo.validate.isValidDate(value, flags.format))
		//	return false;

		// max date
		if (!dj_undef("max", flags)){
			if (typeof flags.max == "string"){
				flags.max=dojo.date.parse(flags.max, flags);
			}
			if (dojo.date.compare(dateValue, flags.max, dojo.date.compareTypes.DATE) >= 0)
				return false;
		}

		// min date
		if (!dj_undef("min", flags)){
			if (typeof flags.min == "string"){
				flags.min=dojo.date.parse(flags.min, flags);
			}
			

			for (i=0;i<temporadasAltasDesde.length;i++){
				var dateDesde = dojo.date.parse(temporadasAltasDesde[i], flags);
				var dateHasta = dojo.date.parse(temporadasAltasHasta[i], flags);
				
				//comprobamos si estamos en temporada alta
				if ( (dojo.date.compare(dateDesde, flags.min, dojo.date.compareTypes.DATE) <= 0 &&
					dojo.date.compare(dateHasta, flags.min, dojo.date.compareTypes.DATE) >= 0)
					||
					(dojo.date.compare(dateDesde, dateValue, dojo.date.compareTypes.DATE) <= 0 &&
					dojo.date.compare(dateHasta, dateValue, dojo.date.compareTypes.DATE) >= 0)){
					// Minimo tres noches de reserva
					flags.min = dojo.date.add(flags.min, dojo.date.dateParts.DAY, 2);
					break;
				}
			}	
			
			// Minimo una noche de reserva en caso de temporada normal
			flags.min = dojo.date.add(flags.min, dojo.date.dateParts.DAY, 1);
			
			if (dojo.date.compare(dateValue, flags.min, dojo.date.compareTypes.DATE) < 0)
				return false;
		}
		
		return true;
	}		
	
	
	
}