/*
# jQuery datepicker from-to script 1.21 # 2010.08.05.
	@ argent_hun@hotmail.com
	& Concept Internet ltd.
*/
function in_array(needle, haystack, argStrict) { /* @@http://phpjs.org */
    var key = '',
        strict = !! argStrict;
    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }
    return false;
}
function date2date(date) {
	
	if(/[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}/.test(date)) {
		var spl = date.split(/\D/);
		return spl[1]+'/'+spl[2]+'/'+spl[0];
	}
	else return date;
}


var DateFromCalendar = function (DISABLED_DATES, CalendarsId, CalendarsTarget, dateFromTo,CalendarsTargetSpan,LastMinuteDates,callBack1,callBack2) {

    var now = new Date();
    now = new Date(now.getUTCFullYear(), now.getMonth(), now.getDate());
    now = now.getTime();

    var mindate = null;
    var maxdate = null;

    function output(dmin, dmax,invalid) {
		
		if (typeof dmin != 'undefined') {
            dmin = new Date(dmin);
            if (dmin > 0) dmin = dmin.getDate() + '/' + (parseInt(dmin.getMonth())+1) + '/' + dmin.getUTCFullYear();
            else dmin = '';

            jQuery(CalendarsTarget[0]).attr('value', dmin);
        }
		
			
			
      	if (typeof dmax != 'undefined') {
            dmax = new Date(dmax);
            if (dmax > 0) dmax = dmax.getDate() + '/' + (parseInt(dmax.getMonth())+1) + '/' + dmax.getUTCFullYear();
            else dmax = '';
            jQuery(CalendarsTarget[1]).attr('value', dmax);
        }
				
		if(typeof CalendarsTargetSpan != 'undefined' && CalendarsTargetSpan.length >= 4) {
			if(dmax != '' && dmin != '' ) {
				var text = CalendarsTargetSpan[1];
				text = text.replace('{from}',dmin);
				text = text.replace('{to}',dmax);
			}
			else if(typeof invalid != 'undefined' && invalid == true && typeof CalendarsTargetSpan[4] != 'undefined') {
				text = CalendarsTargetSpan[4];	
			}
			else if(dmax == '' && dmin == '') {
				text = CalendarsTargetSpan[2];
			}
			else {
				text = CalendarsTargetSpan[3];
			}
			jQuery(CalendarsTargetSpan[0]).html(text);
		}
			
    }

    function whichRange(d) {
        for (var i = 0; i < ADR.length; i++) {
            if ((d >= ADR[i][0] && ADR[i][1] == true) || (d >= ADR[i][0] && d <= ADR[i][1])) return i;
        }
        return false;
    }
    var invalid = false;
	var SDR = new Array(); // Special Date Range
    var defaultDate1 = defaultDate2 = new Date();
    
	var newDISABLED_DATES = new Array();
	for (var i = 0; i < DISABLED_DATES.length; i++) {
        var temp = new Date(date2date(DISABLED_DATES[i]));
        temp = temp.getTime();
		if (temp > 0 && temp >= now && !in_array(temp,newDISABLED_DATES)) {
			newDISABLED_DATES.push(temp);
		}
	}
    DISABLED_DATES = newDISABLED_DATES;
    DISABLED_DATES.sort();
	
	/* --- */
	
	if(typeof LastMinuteDates != 'undefined') {
		var newLastMinuteDates = new Array();
		for (var i = 0; i < LastMinuteDates.length; i++) {
			var temp = new Date(date2date(LastMinuteDates[i]));
			temp = temp.getTime();
			if (temp > 0 && temp >= now && !in_array(temp,newLastMinuteDates)) {
				newLastMinuteDates.push(temp);
			}
		}
		LastMinuteDates = newLastMinuteDates;
		LastMinuteDates.sort();
	}
	else LastMinuteDates = new Array();
	/* ====== */

    var ADR = new Array(); // Allowed Date Range
    if(DISABLED_DATES.length == 0) {
		ADR.push(new Array(now,true));
	}
	else if(DISABLED_DATES.length == 1) {
		ADR.push(new Array(now, DISABLED_DATES[0]));
		ADR.push(new Array(DISABLED_DATES[0],true));
	}
	else {
		for (var i = 0; i < DISABLED_DATES.length - 1; i++) {
			if (i == 0) {
				ADR.push(new Array(now, DISABLED_DATES[i]));
				if (DISABLED_DATES[i + 1] - DISABLED_DATES[i] > 60 * 60 * 24 * 1000)
					ADR.push(new Array(DISABLED_DATES[i], DISABLED_DATES[i + 1]));
			}
			else {
				if (typeof DISABLED_DATES[i + 1] != 'undefined') {
					if (DISABLED_DATES[i + 1] - DISABLED_DATES[i] > 60 * 60 * 24 * 1000) 
						ADR.push(new Array(DISABLED_DATES[i], DISABLED_DATES[i + 1]))
				}
			}
		}
		ADR.push(new Array(DISABLED_DATES[i],true));
	}
	
    /* ====== */

    if (typeof dateFromTo != 'undefined') {
        with(new Date(date2date(dateFromTo[0]))) {
            mindate = getTime()
        };
        with(new Date(date2date(dateFromTo[1]))) {
            maxdate = getTime()
        };
		
		if(isNaN(mindate)) mindate = null;
		if(isNaN(maxdate)) maxdate = null;
		  
		if(mindate != null && maxdate != null) {
			range1 = whichRange(mindate);
			range2 = whichRange(maxdate);	
			if(mindate < now || maxdate < mindate || range1 != range2 || in_array(mindate, DISABLED_DATES) || in_array(maxdate, DISABLED_DATES)) {
				mindate = maxdate = null;
				invalid = true;
			}
		}
		if(mindate == null) maxdate = null;
		
		if(mindate != null) defaultDate1 = new Date(mindate);
		if(maxdate != null) defaultDate2 = new Date(maxdate);
		
		
        output(mindate, maxdate,invalid);
        SDR = new Array(mindate, maxdate);
    }

    /* CAL 1 */

    jQuery(CalendarsId[0]).datepicker({
        defaultDate: defaultDate1,
        changeMonth: true,
        numberOfMonths: 1,
        beforeShowDay: function (date) {
            var date = date.getTime();
            range = whichRange(date);
 			
            //===
            if (mindate != null && maxdate != null) {
				range2 = whichRange(mindate);
				if ( date >= mindate && date < maxdate) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute highlight','Last Minute. Selected date.')	
					else
						return new Array(true, 'highlight', 'Selected date');	
                }
				else if(date < mindate && range == range2 && range !== false && date > ADR[range][0]) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute fader','Last Minute')	
					else
						return new Array(true,'fader')	
				}
				else if(date == maxdate) {
					return new Array(false, 'highlight', 'Selected date');
				}
				else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false)
                }
            }
            else {
                if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else if (range === false) {
					return new Array(false);
				}
				else {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else
						 return new Array(true);
                }
            }
			
		
        },

        onSelect: function (selectedDate) {
            var date = new Date(selectedDate);
            date = date.getTime();
            range = whichRange(date);

            if (mindate != null && date == mindate) {
                // jQuery(CalendarsId[0]+','+CalendarsId[1]).datepicker('setDate', null);
                mindate = null;
                maxdate = null;
                SDR = new Array();
                jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');
            }
            else {
                if (range !== false) {
                    SDR = new Array();
                    SDR[0] = date;
                    SDR[1] = ADR[range][1];
                    mindate = date;
                    jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');


                }
            }
            output(mindate, maxdate);
			if(typeof callBack1 == 'function') callBack1(mindate,maxdate);
        }
    });

    /* CAL 2 */

    jQuery(CalendarsId[1]).datepicker({
        defaultDate: defaultDate2,
        changeMonth: true,
        numberOfMonths: 1,
        beforeShowDay: function (date) {
            
			var date = date.getTime();
			range = whichRange(date);
			range2 = whichRange(maxdate);
			if (mindate != null && maxdate != null) {
                
				if (date > mindate && date <= maxdate) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute highlight','Last Minute. Selected date.')	
					else
						return new Array(true, 'highlight', 'Selected date');
                }
				else if(date == mindate) {
					return new Array(false, 'highlight', 'Selected date');	
				}
				else if(date > maxdate && range == range2 && range === false) {
					 return new Array(false, 'reserved', 'Reserved!');
				}
				else if(date > maxdate && range == range2 && ADR[range][1] == true) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute fader','Last Minute.')	
					else
						return new Array(true,'fader')	
				}
				else if(date > maxdate && range == range2 && date < ADR[range][1]) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute fader','Last Minute.')	
					else
						return new Array(true,'fader')
				}
				else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false)
                }
            }
            else if (SDR.length > 0) {
                if (date > SDR[0] && date < SDR[1]) {
                    if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else 
						return new Array(true);
                }
				else if(date == SDR[0]) {
					return new Array(false, 'highlight', 'Selected date');	
				}
                else if (date > SDR[0] && SDR[1] == true) {
                    if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else 
						return new Array(true);
                }
                else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false);
                }

            }
            
			if (mindate == null) return new Array(false);
			
            return new Array(false);

        },

        onSelect: function (selectedDate) {
            var date = new Date(selectedDate);
            date = date.getTime();
            range = whichRange(date);

            if (date == maxdate) {
                maxdate = null;
                SDR[1] = ADR[range][1];
                jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');
            }
            else {
                maxdate = date;
                SDR[1] = date;
                jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');
            }
            output(mindate, maxdate);
			if(typeof callBack2 == 'function') callBack2(mindate,maxdate);
        }
    });

}

function DateFromCalendar4(DISABLED_DATES, CalendarsId, CalendarsTarget, dateFromTo,CalendarsTargetSpan,LastMinuteDates,callBack1,callBack2) {
	
	this.deleteSelection = function() {
		this.mindate = null;
		this.maxdate = null;
		this.SDR = new Array();
		jQuery(CalendarsId[0]).datepicker('refresh');
		jQuery(CalendarsId[1]).datepicker('refresh');
		output(this.mindate,this.maxdate);
		if(typeof callBack1 == 'function') callBack1(this.mindate,this.maxdate);
	}
	
	
    var now = new Date();
    now = new Date(now.getUTCFullYear(), now.getMonth(), now.getDate());
    now = now.getTime();

    this.mindate = null;
    this.maxdate = null;

    function output(dmin, dmax,invalid) {
		
		if (typeof dmin != 'undefined') {
            dmin = new Date(dmin);
            if (dmin > 0) dmin = dmin.getDate() + '/' + (parseInt(dmin.getMonth())+1) + '/' + dmin.getUTCFullYear();
            else dmin = '';

            jQuery(CalendarsTarget[0]).attr('value', dmin);
        }
		
			
			
      	if (typeof dmax != 'undefined') {
            dmax = new Date(dmax);
            if (dmax > 0) dmax = dmax.getDate() + '/' + (parseInt(dmax.getMonth())+1) + '/' + dmax.getUTCFullYear();
            else dmax = '';
            jQuery(CalendarsTarget[1]).attr('value', dmax);
        }
				
		if(typeof CalendarsTargetSpan != 'undefined' && CalendarsTargetSpan.length >= 4) {
			if(dmax != '' && dmin != '' ) {
				var text = CalendarsTargetSpan[1];
				text = text.replace('{from}',dmin);
				text = text.replace('{to}',dmax);
			}
			else if(typeof invalid != 'undefined' && invalid == true && typeof CalendarsTargetSpan[4] != 'undefined') {
				text = CalendarsTargetSpan[4];	
			}
			else if(dmax == '' && dmin == '') {
				text = CalendarsTargetSpan[2];
			}
			else {
				text = CalendarsTargetSpan[3];
			}
			jQuery(CalendarsTargetSpan[0]).html(text);
		}
			
    }

    function whichRange(d) {
        for (var i = 0; i < ADR.length; i++) {
            if ((d >= ADR[i][0] && ADR[i][1] == true) || (d >= ADR[i][0] && d <= ADR[i][1])) return i;
        }
        return false;
    }
    var invalid = false;
	this.SDR = new Array(); // Special Date Range
    var defaultDate1 = defaultDate2 = new Date();
    
	var newDISABLED_DATES = new Array();
	for (var i = 0; i < DISABLED_DATES.length; i++) {
        var temp = new Date(date2date(DISABLED_DATES[i]));
        temp = temp.getTime();
		if (temp > 0 && temp >= now && !in_array(temp,newDISABLED_DATES)) {
			newDISABLED_DATES.push(temp);
		}
	}
    DISABLED_DATES = newDISABLED_DATES;
    DISABLED_DATES.sort();
	
	/* --- */
	
	if(typeof LastMinuteDates != 'undefined') {
		var newLastMinuteDates = new Array();
		for (var i = 0; i < LastMinuteDates.length; i++) {
			var temp = new Date(date2date(LastMinuteDates[i]));
			temp = temp.getTime();
			if (temp > 0 && temp >= now && !in_array(temp,newLastMinuteDates)) {
				newLastMinuteDates.push(temp);
			}
		}
		LastMinuteDates = newLastMinuteDates;
		LastMinuteDates.sort();
	}
	else LastMinuteDates = new Array();
	/* ====== */

    var ADR = new Array(); // Allowed Date Range
    if(DISABLED_DATES.length == 0) {
		ADR.push(new Array(now,true));
	}
	else if(DISABLED_DATES.length == 1) {
		ADR.push(new Array(now, DISABLED_DATES[0]));
		ADR.push(new Array(DISABLED_DATES[0],true));
	}
	else {
		for (var i = 0; i < DISABLED_DATES.length - 1; i++) {
			if (i == 0) {
				ADR.push(new Array(now, DISABLED_DATES[i]));
				if (DISABLED_DATES[i + 1] - DISABLED_DATES[i] > 60 * 60 * 24 * 1000)
					ADR.push(new Array(DISABLED_DATES[i], DISABLED_DATES[i + 1]));
			}
			else {
				if (typeof DISABLED_DATES[i + 1] != 'undefined') {
					if (DISABLED_DATES[i + 1] - DISABLED_DATES[i] > 60 * 60 * 24 * 1000) 
						ADR.push(new Array(DISABLED_DATES[i], DISABLED_DATES[i + 1]))
				}
			}
		}
		ADR.push(new Array(DISABLED_DATES[i],true));
	}
	
    /* ====== */

    if (typeof dateFromTo != 'undefined') {
        with(new Date(date2date(dateFromTo[0]))) {
            this.mindate = getTime()
        };
        with(new Date(date2date(dateFromTo[1]))) {
            this.maxdate = getTime()
        };
		
		if(isNaN(this.mindate)) this.mindate = null;
		if(isNaN(this.maxdate)) this.maxdate = null;
		  
		if(this.mindate != null && this.maxdate != null) {
			range1 = whichRange(this.mindate);
			range2 = whichRange(this.maxdate);	
			if(this.mindate < now || this.maxdate < this.mindate || range1 != range2 || in_array(this.mindate, DISABLED_DATES) || in_array(this.maxdate, DISABLED_DATES)) {
				this.mindate = this.maxdate = null;
				invalid = true;
			}
		}
		if(this.mindate == null) this.maxdate = null;
		
		if(this.mindate != null) defaultDate1 = new Date(this.mindate);
		if(this.maxdate != null) defaultDate2 = new Date(this.maxdate);
		
		
        output(this.mindate, this.maxdate,invalid);
        this.SDR = new Array(this.mindate, this.maxdate);
    }

    /* CAL 1 */

    jQuery(CalendarsId[0]).datepicker({
        defaultDate: defaultDate1,
        changeMonth: true,
        numberOfMonths: 1,
        beforeShowDay: (function(parent){ return function (date) { 
            var date = date.getTime();
            range = whichRange(date);
 			
            //===
            if (parent.mindate != null && parent.maxdate != null) {
				range2 = whichRange(parent.mindate);
				if ( date >= parent.mindate && date < parent.maxdate) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute highlight','Last Minute. Selected date.')	
					else
						return new Array(true, 'highlight', 'Selected date');	
                }
				else if(date < parent.mindate && range == range2 && range !== false && date > ADR[range][0]) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute fader','Last Minute')	
					else
						return new Array(true,'fader')	
				}
				else if(date == parent.maxdate) {
					return new Array(false, 'highlight', 'Selected date');
				}
				else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false)
                }
            }
            else {
                if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else if (range === false) {
					return new Array(false);
				}
				else {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else
						 return new Array(true);
                }
            }
			
		
        }})(this),

        onSelect: (function(parent){ return function (selectedDate) { 
            var date = new Date(selectedDate);
            date = date.getTime();
            range = whichRange(date);

            if (parent.mindate != null && date == parent.mindate) {
                // jQuery(CalendarsId[0]+','+CalendarsId[1]).datepicker('setDate', null);
                parent.mindate = null;
                parent.maxdate = null;
                parent.SDR = new Array();
                jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');
            }
            else {
                if (range !== false) {
                    parent.SDR = new Array();
                    parent.SDR[0] = date;
                    parent.SDR[1] = ADR[range][1];
                    parent.mindate = date;
                    jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');


                }
            }
            output(parent.mindate, parent.maxdate);
			if(typeof callBack1 == 'function') callBack1(parent.mindate,parent.maxdate);
        }})(this)
    });

    /* CAL 2 */

    jQuery(CalendarsId[1]).datepicker({
        defaultDate: defaultDate2,
        changeMonth: true,
        numberOfMonths: 1,
        beforeShowDay: (function(parent){ return function (date) { 
            
			var date = date.getTime();
			range = whichRange(date);
			range2 = whichRange(parent.maxdate);
			if (parent.mindate != null && parent.maxdate != null) {
                
				if (date > parent.mindate && date <= parent.maxdate) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute highlight','Last Minute. Selected date.')	
					else
						return new Array(true, 'highlight', 'Selected date');
                }
				else if(date == parent.mindate) {
					return new Array(false, 'highlight', 'Selected date');	
				}
				else if(date > parent.maxdate && range == range2 && range === false) {
					 return new Array(false, 'reserved', 'Reserved!');
				}
				else if(date > parent.maxdate && range == range2 && ADR[range][1] == true) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute fader','Last Minute.')	
					else
						return new Array(true,'fader')	
				}
				else if(date > parent.maxdate && range == range2 && date < ADR[range][1]) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute fader','Last Minute.')	
					else
						return new Array(true,'fader')
				}
				else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false)
                }
            }
            else if (parent.SDR.length > 0) {
                if (date > parent.SDR[0] && date < parent.SDR[1]) {
                    if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else 
						return new Array(true);
                }
				else if(date == parent.SDR[0]) {
					return new Array(false, 'highlight', 'Selected date');	
				}
                else if (date > parent.SDR[0] && parent.SDR[1] == true) {
                    if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else 
						return new Array(true);
                }
                else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false);
                }

            }
            
			if (parent.mindate == null) return new Array(false);
			
            return new Array(false);

        }})(this),

        onSelect: (function(parent){ return function (selectedDate) { 
            var date = new Date(selectedDate);
            date = date.getTime();
            range = whichRange(date);

            if (date == parent.maxdate) {
                parent.maxdate = null;
                parent.SDR[1] = ADR[range][1];
                jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');
            }
            else {
                parent.maxdate = date;
                parent.SDR[1] = date;
                jQuery(CalendarsId[0] + ',' + CalendarsId[1]).datepicker('refresh');
            }
            output(parent.mindate, parent.maxdate);
			if(typeof callBack2 == 'function') callBack2(parent.mindate,parent.maxdate);
        }})(this)
    });

}



function DateFromCalendar3(DISABLED_DATES, CalendarsId, CalendarsTarget, dateFromTo,CalendarsTargetSpan,LastMinuteDates,callBack1,callBack2) {
	
	this.deleteSelection = function() {
		this.mindate = null;
		this.maxdate = null;
		this.SDR = new Array();
		jQuery(CalendarsId[0]).datepicker('refresh');
		output(this.mindate,this.maxdate);
		if(typeof callBack1 == 'function') callBack1(this.mindate,this.maxdate);
	}
    
	var now = new Date();
    now = new Date(now.getUTCFullYear(), now.getMonth(), now.getDate());
    now = now.getTime();

    this.mindate = null;
    this.maxdate = null;
	this.test = 123;
    
	/**/
	
	function output(dmin, dmax,invalid) {
		
		if (typeof dmin != 'undefined') {
            dmin = new Date(dmin);
            if (dmin > 0) dmin = dmin.getDate() + '/' + (parseInt(dmin.getMonth())+1) + '/' + dmin.getUTCFullYear();
            else dmin = '';

            jQuery(CalendarsTarget[0]).attr('value', dmin);
        }
		
			
			
      	if (typeof dmax != 'undefined') {
            dmax = new Date(dmax);
            if (dmax > 0) dmax = dmax.getDate() + '/' + (parseInt(dmax.getMonth())+1) + '/' + dmax.getUTCFullYear();
            else dmax = '';
            jQuery(CalendarsTarget[1]).attr('value', dmax);
        }
				
		if(typeof CalendarsTargetSpan != 'undefined' && CalendarsTargetSpan.length >= 4) {
			if(dmax != '' && dmin != '' ) {
				var text = CalendarsTargetSpan[1];
				text = text.replace('{from}',dmin);
				text = text.replace('{to}',dmax);
			}
			else if(typeof invalid != 'undefined' && invalid == true && typeof CalendarsTargetSpan[4] != 'undefined') {
				text = CalendarsTargetSpan[4];	
			}
			else if(dmax == '' && dmin == '') {
				text = CalendarsTargetSpan[2];
			}
			else {
				text = CalendarsTargetSpan[3];
			}
			jQuery(CalendarsTargetSpan[0]).html(text);
		}
			
    }

    function whichRange(d) {
        for (var i = 0; i < ADR.length; i++) {
            if ((d >= ADR[i][0] && ADR[i][1] == true) || (d >= ADR[i][0] && d <= ADR[i][1])) return i;
        }
        return false;
    }
	function debug(a) {
		document.getElementById('debug').innerHTML += a+'<br>';
	}
	
	/**/
	
    var invalid = false;
	this.SDR = new Array(); // Special Date Range
    var defaultDate1 = defaultDate2 = new Date();
    
	var newDISABLED_DATES = new Array();
	for (var i = 0; i < DISABLED_DATES.length; i++) {
        var temp = new Date(date2date(DISABLED_DATES[i]));
        temp = temp.getTime();
		if (temp > 0 && temp >= now && !in_array(temp,newDISABLED_DATES)) {
			newDISABLED_DATES.push(temp);
		}
	}
    DISABLED_DATES = newDISABLED_DATES;
    DISABLED_DATES.sort();
	
	/* --- */
	
	if(typeof LastMinuteDates != 'undefined') {
		var newLastMinuteDates = new Array();
		for (var i = 0; i < LastMinuteDates.length; i++) {
			var temp = new Date(date2date(LastMinuteDates[i]));
			temp = temp.getTime();
			if (temp > 0 && temp >= now && !in_array(temp,newLastMinuteDates)) {
				newLastMinuteDates.push(temp);
			}
		}
		LastMinuteDates = newLastMinuteDates;
		LastMinuteDates.sort();
	}
	else LastMinuteDates = new Array();
	/* ====== */

    var ADR = new Array(); // Allowed Date Range
    if(DISABLED_DATES.length == 0) {
		ADR.push(new Array(now,true));
	}
	else if(DISABLED_DATES.length == 1) {
		ADR.push(new Array(now, DISABLED_DATES[0]));
		ADR.push(new Array(DISABLED_DATES[0],true));
	}
	else {
		for (var i = 0; i < DISABLED_DATES.length - 1; i++) {
			if (i == 0) {
				ADR.push(new Array(now, DISABLED_DATES[i]));
				if (DISABLED_DATES[i + 1] - DISABLED_DATES[i] > 60 * 60 * 24 * 1000)
					ADR.push(new Array(DISABLED_DATES[i], DISABLED_DATES[i + 1]));
			}
			else {
				if (typeof DISABLED_DATES[i + 1] != 'undefined') {
					if (DISABLED_DATES[i + 1] - DISABLED_DATES[i] > 60 * 60 * 24 * 1000) 
						ADR.push(new Array(DISABLED_DATES[i], DISABLED_DATES[i + 1]))
				}
			}
		}
		ADR.push(new Array(DISABLED_DATES[i],true));
	}
	
    /* ====== */
	
    if (typeof dateFromTo != 'undefined') {
        with(new Date(date2date(dateFromTo[0]))) {
            this.mindate = getTime()
        };
        with(new Date(date2date(dateFromTo[1]))) {
            this.maxdate = getTime()
        };
		
		if(isNaN(this.mindate)) this.mindate = null;
		if(isNaN(this.maxdate)) this.maxdate = null;
		  
		if(this.mindate != null && this.maxdate != null) {
			range1 = whichRange(this.mindate);
			range2 = whichRange(this.maxdate);	
			if(this.mindate < now || this.maxdate < this.mindate || range1 != range2 || in_array(this.mindate, DISABLED_DATES) || in_array(this.maxdate, DISABLED_DATES)) {
				this.mindate = this.maxdate = null;
				invalid = true;
			}
		}
		if(this.mindate == null) this.maxdate = null;
		
		if(this.mindate != null) defaultDate1 = new Date(this.mindate);
		if(this.maxdate != null) defaultDate2 = new Date(this.maxdate);
		
		
        output(this.mindate, this.maxdate,invalid);
        this.SDR = new Array(this.mindate, this.maxdate);
    }

    /* CAL 1 */

    jQuery(CalendarsId[0]).datepicker({
        defaultDate: defaultDate1,
        changeMonth: true,
        numberOfMonths: 1,
        beforeShowDay: (function(parent){ return function (date) {
            var date = date.getTime();
            range = whichRange(date);
 			
            //===
            if (parent.mindate != null && parent.maxdate != null) {
				range2 = whichRange(parent.mindate);
				if ( date >= parent.mindate && date < parent.maxdate) {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute highlight','Last Minute. Selected date.')	
					else
						return new Array(true, 'highlight', 'Selected date');	
                }
				else if(date < parent.mindate && range == range2 && range !== false && date > ADR[range][0]) {
					if(in_array(date,LastMinuteDates))
						return new Array(false,'lastminute fader','Last Minute')	
					else
						return new Array(false,'fader')	
				}
				else if(date == parent.maxdate) {
					return new Array(false, 'highlight', 'Selected date');
				}
				else if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else {
                    return new Array(false)
                }
            }
            else if(parent.mindate != null) {
				if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
				else if(date >= parent.SDR[0] && (parent.SDR[1] == true || parent.SDR[1] !== true && date <= parent.SDR[1]))
					return new Array(true);
				else
					return new Array(false);
                
			}
			else {
                if (in_array(date, DISABLED_DATES)) {
                    return new Array(false, 'reserved', 'Reserved!');
                }
                else if (range === false) {
					return new Array(false);
				}
				else {
					if(in_array(date,LastMinuteDates))
						return new Array(true,'lastminute','Last Minute.')	
					else
						 return new Array(true);
                }
            }
			
		
        }})(this),

        onSelect: (function(parent){ return function (selectedDate) {
            var date = new Date(selectedDate);
            date = date.getTime();
            range = whichRange(date);
						
            if (parent.mindate != null && date == parent.mindate) {
                // jQuery(CalendarsId[0]+','+CalendarsId[1]).datepicker('setDate', null);
                parent.mindate = null;
                parent.maxdate = null;
                parent.SDR = new Array();
                jQuery(CalendarsId[0]).datepicker('refresh');
            }
			else if(parent.mindate != null && parent.maxdate == null) {
				parent.maxdate = date;
                parent.SDR[1] = date;
				jQuery(CalendarsId[0]).datepicker('refresh');
			}
			else if(parent.mindate != null && parent.maxdate != null) {
				if (range !== false) {
                    parent.SDR = new Array();
                    parent.SDR[0] = ADR[range][0];
                    parent.SDR[1] = date;
                    parent.maxdate = date;
                    jQuery(CalendarsId[0]).datepicker('refresh');
                }
			}
            else {
                if (range !== false) {
                    parent.SDR = new Array();
                    parent.SDR[0] = date;
                    parent.SDR[1] = ADR[range][1];
                    parent.mindate = date;
                    jQuery(CalendarsId[0]).datepicker('refresh');
                }
            }
            output(parent.mindate, parent.maxdate);
			if(typeof callBack1 == 'function') callBack1(parent.mindate,parent.maxdate);
        }
			})(this)
    });
	
 
}



