function addzero( value )
{
  while( value.length<2 ) value = String("0") + value;
  return value;
}
    
function checkDateOrder(frm, ci_day, ci_month_year, co_day, co_month_year) {
	if (document.getElementById) {
		var frm = document.getElementById(frm);
		// create date object from checkin values
		// set date to 12:00 to avoid problems with one
		// date being wintertime and the other summertime
		var my = frm[ci_month_year].value.split("-");
	    var ci = new Date (my[0], my[1]-1, frm[ci_day].value, 12, 0, 0, 0);
 
        // create date object from checkout values
	    my = frm[co_month_year].value.split("-");
	    var co = new Date (my[0], my[1]-1, frm[co_day].value, 12, 0, 0, 0);
 
		// if checkin date is at or after checkout date,
		// add a day full of milliseconds, and set the
		// selectbox values for checkout date to new value
	    if (ci >= co){
    	    co.setTime(ci.getTime() + 1000 * 60 * 60 * 24);
	        frm[co_day].value =  co.getDate();
    	    var com = co.getMonth()+1;
	        frm[co_month_year].value = co.getFullYear() + "-" + com;
    	}
	}
}


    var days3 = ['','','','','','',''];
    Date.MILLISECONDS_PER_DAY = Date.prototype.MILLISECONDS_PER_DAY = 86400000;

    function tickCheckBox(el) {
        if (document.getElementById) {
            if (document.getElementById(el)) {
                document.getElementById(el).checked = false;
            }
        }
        return true;
    }

    Date.prototype.getTwoDigitMonth = function () {
        // Returns a two-digit string from '01' to '12' representing the month property of a Date object.
        var month = (this.getMonth() + 1).toFixed().toString();
        if (month.length == 1) {
            month = '0' + month;
        }
        return month;
    };

    function checkDateOrder(me, ci_day, ci_month_year, co_day, co_month_year) {
        var
            frm = document.getElementById('frm'),
            my,
            ci = new Date( 0 ),
            co = new Date( 0 ),
            com,
            today = new Date();
        // create date object from checkin values
        // set date to 12:00 to avoid problems with one
        // date being wintertime and the other summertime
        if ( frm[ci_day].value !== '0' )
        {
            ci.setDate( frm[ci_day].value );
        }
        if ( frm[ci_month_year].value !== '0' )
        {
            my = frm[ci_month_year].value.split( "-" );
            ci.setFullYear( my[0] );
            ci.setMonth( my[1] - 1 );
        }
        ci.setHours( 12 );
        ci.setMinutes( 0 );
        ci.setSeconds( 0 );
        // create date object from checkout values
        if ( frm[co_day].value !== '0' )
        {
            co.setDate( frm[co_day].value );
        }
        if ( frm[co_month_year].value !== '0' )
        {
            my = frm[co_month_year].value.split( "-" );
            co.setFullYear( my[0] );
            co.setMonth( my[1] - 1 );
        }
        co.setHours( 12 );
        co.setMinutes( 0 );
        co.setSeconds( 0 );
        // If the new checkin date's month does not match
        // the current value of the dropdown, then it is
        // because the month was incremented creating an
        // invalid date (e.g. February 31st).
        // We'll cycle back the checkin date until we're in
        // the correct month.
        if ( frm[ci_month_year].value !== '0' )
        {
            while ( ci.getMonth() != frm[ci_month_year].value.split( "-" )[1] - 1 )
            {
                ci.setDate( ci.getDate() - 1 );
                frm[ci_day].value = ci.getDate();
            }
            var cim = ci.getMonth() + 1;
            frm[ci_month_year].value = ci.getFullYear() + "-" + cim;
        }
        // if checkin date is at or after checkout date,
        // add a day full of milliseconds, and set the
        // selectbox values for checkout date to new value
        if ( ci >= co )
        {
            co.setTime( ci.getTime() + Date.prototype.MILLISECONDS_PER_DAY );
            com = co.getMonth() + 1;
            if ( frm[ci_day].value !== '0' )
            {
                frm[co_day].value = co.getDate();
            }
            if ( frm[ci_month_year].value !== '0' )
            {
                frm[co_month_year].value = co.getFullYear() + "-" + com;
            }
        }
    }

    function updateDaySelect( me )
    {
        // 1-2 testing
        if ( !days3 )
        {
            return;
        }
        var frm = document.getElementById('frm');
        if ( frm.getAttribute( 'id' ) !== 'frm' && frm.className !== 'availForm' )
        {
            return;
        }
        // Check if we have all fields. If not, we are in the first stage
        // of the book process and should not auto-update selects since there
        // is only the check-in select and the amount of nights.
        if ( !frm.checkin_monthday || !frm.checkout_monthday || !frm.checkin_year_month || !frm.checkout_year_month )
        {
            return;
        }
        if ( frm.checkin_monthday.value === '0' && frm.checkout_monthday.value === '0' && frm.checkin_year_month.value === '0' && frm.checkout_year_month.value === '0' )
        {
            return;
        }
        // If the year-month fields have nonzero values, prepend the day of the week to each monthday in the check-in and check-out monthday Selects.
        var
            ci_d = frm.checkin_monthday,
            co_d = frm.checkout_monthday,
            ci_my,
            co_my,
            todaysDate;
        // If the form field has a nonzero value, use it;
        if ( frm.checkin_year_month.value !== '0' )
        {
            ci_my = frm.checkin_year_month.value.split( "-" );
        }
        else
        {
            // Use the current date value.
            todaysDate = new Date();
            ci_my = [ todaysDate.getFullYear(), todaysDate.getTwoDigitMonth() ];
        }
        if ( frm.checkout_year_month.value !== '0' )
        {
            co_my = frm.checkout_year_month.value.split( "-" );
        }
        else
        {
            todaysDate = new Date();
            co_my = [ todaysDate.getFullYear(), todaysDate.getTwoDigitMonth() ];
        }
        var
            ci_sel = Math.max( ci_d.selectedIndex, 0 ),
            co_sel = Math.max( co_d.selectedIndex, 0 ),
            ci_sel_value = ci_d[ ci_sel ].value,
            co_sel_value = co_d[ co_sel ].value,
            monthDays = [],
            opt,
            i;

        ci_d.innerHTML = '';
        co_d.innerHTML = '';

        var MonthdayPromptOption = function ()
        {
            this.option = {
                "_this" : this,
                "@selected" : "selected",
                "@class" : "day prompt site_experiment_encourage_date_entry_2",
                "@value" : 0,
                "#text" : "Zi"
            };
        };
        if ( ci_sel_value === '0' )
        {
            buildHtmlNode( new MonthdayPromptOption(), ci_d ).selected = true;
        }
        if ( co_sel_value === '0' )
        {
            buildHtmlNode( new MonthdayPromptOption(), co_d ).selected = true;
        }

        function writeMonthdaysOptions( numberOfMonthdaysToShow, yearMonthSelectElement, monthDaysArray, monthDaysSelectElement, monthDaySelectValue )
        {
            var i, optionElementInnerHTML, optionElement;
            for ( i = 0; i < numberOfMonthdaysToShow; i++ )
            {
                optionElement = document.createElement( 'option' );
                optionElementInnerHTML = i + 1;
                if ( yearMonthSelectElement.value !== '0' )
                {
                    optionElementInnerHTML = monthDaysArray[i] + ' ' + optionElementInnerHTML;
                }
                optionElement.innerHTML = optionElementInnerHTML;
                optionElement.value = ( i + 1 );
                if ( i > 0 && monthDaySelectValue == i + 1 )
                {
                    optionElement.defaultSelected = optionElement.selected = true;
                }
                monthDaysSelectElement.appendChild( optionElement );
            }
        }
        // Check-in month
        monthDays = buildDaysForMonth( ci_my[0], ci_my[1] );
        var numberOfMonthdaysToShow = 31;
        if ( frm.checkin_year_month.value !== '0' )
        {
            numberOfMonthdaysToShow = monthDays.length;
        }
        writeMonthdaysOptions( numberOfMonthdaysToShow, frm.checkin_year_month, monthDays, ci_d, ci_sel_value );
        // Checkout month
        monthDays = buildDaysForMonth( co_my[0], co_my[1] );
        numberOfMonthdaysToShow = 31;
        if ( frm.checkout_year_month.value !== '0' )
        {
            numberOfMonthdaysToShow = monthDays.length;
        }
        writeMonthdaysOptions( numberOfMonthdaysToShow, frm.checkout_year_month, monthDays, co_d, co_sel_value );
        // IE 6 exhibits a bug whereby the value of the monthday select always jumps to zero.
        if ( document.all && !gClientIsOpera && /MSIE 6\.0/.test(navigator.appVersion) )
        {
            ci_d.value = ci_sel_value;
            co_d.value = co_sel_value;
        }
    }

    function buildDaysForMonth( year, month )
    {
        // Month index starts on 0(-11) in Date()-object
        var monthDate = new Date( year, month - 1 );
        var orgMonth = monthDate.getMonth();
        var dayArray = [], weekDay;
        while ( monthDate.getMonth() == orgMonth )
        {
            // Week starts on Sunday in Date()-object
            weekDay = ( monthDate.getDay() == 0 ) ? 6 : ( monthDate.getDay() - 1 );
            dayArray.push( days3[weekDay] );
            monthDate.setDate( monthDate.getDate() + 1 );
        }
        return dayArray;
    }

    function buildHtmlNode (elementsObject, targetNode, refChild)
    {
        /*
        Accepts an object of elements where the key specifies the tagname unless prefixed by @, in which case it specifies an attribute of the parent, or when it is #cdata, in which case it specifies a CDATA child.
        
        http://xml.com/pub/a/2006/05/31/converting-between-xml-and-json.html
        
        The big flaw now is the case <a><b/><c/><b/><a/>, which cannot be represented as a JS object. In that case interject an array of generic div or span elements.
        */
        // If we want to validate as JSON, we must make sure what we pass in is JSON, which it presently isn??.
        //elementsObject = booking.json.validate(elementsObject);
        var
            key,
            counter,
            found,
            newElement,
            newNode;
        for (key in elementsObject)
        {
            if (elementsObject.hasOwnProperty(key))
            {
                var
                    prefix = key.substring(0, 1),
                    primaryKey = key.substring(1);
                if (prefix != '_') // We??e on a non-DOM key, so skip.
                {
                    if (prefix == '@') // Attribute
                    {
                        if (!targetNode.getAttribute(primaryKey))
                        {
                            // Perhaps extend this in the future to support multiple class values.
                            targetNode.setAttribute(primaryKey, elementsObject[key]);
                        }
                    }
                    else
                    {
                        if (prefix == '#') // Text or CDATA
                        {
                            if (primaryKey == 'text') // Text
                            {
                                found = false;
                                if (targetNode.childNodes && targetNode.childNodes.length > 0)
                                {
                                    // Traverse text node children and append only if it isn?? already there.
                                    counter = 0;
                                    while (counter < targetNode.childNodes.length && !found)
                                    {
                                        if (targetNode.childNodes[counter].nodeType == Node.TEXT_NODE && targetNode.childNodes[counter].nodeValue == elementsObject[key])
                                        {
                                            found = true;
                                        }
                                        counter++;
                                    }
                                }
                                if (!found)
                                {
                                    // MGP 040209: Cope with strings split by linebreaks - need to insert <br> elements
                                    if ( elementsObject[key].indexOf("\n") == -1 )
                                    {
                                        newNode = document.createTextNode(elementsObject[key]);
                                        if (refChild)
                                        {
                                            targetNode.insertBefore(newNode, refChild);
                                        }
                                        else
                                        {
                                            targetNode.appendChild(newNode);
                                        }
                                    }
                                    else
                                    {
                                        // Found some linebreaks - split the string into component parts
                                        var newNodeParts = elementsObject[key].split("\n");
                                        // Loop through the parts, adding a linebreak after each one (except the last one)
                                        for ( var i = 0; i < newNodeParts.length; i++ )
                                        {
                                            // Check for the existence of a star rating in the text node
                                            if ( newNodeParts[i].match(/\d\*$/) )
                                            {
                                                // Found a star rating - extract the star
                                                lastSpace = newNodeParts[i].lastIndexOf(" ");
                                                newNodeString = newNodeParts[i].substring( 0, lastSpace );
                                                starImgSrc = '/static/img/icons/stars/' + newNodeParts[i].substr( lastSpace + 1, 1 ) + 'sterren-small.png';
                                            }
                                            else
                                            {
                                                newNodeString = newNodeParts[i];
                                                starImgSrc = '';
                                            }
                                            newNode = document.createTextNode(newNodeString);
                                            if (refChild)
                                            {
                                                targetNode.insertBefore(newNode, refChild);
                                                if ( starImgSrc )
                                                {
                                                    newImg = document.createElement('img');
                                                    newImg.setAttribute('src', starImgSrc);
                                                    newImg.className = "stars";
                                                    targetNode.insertBefore(newImg, refChild);
                                                }
                                            }
                                            else
                                            {
                                                targetNode.appendChild(newNode);
                                                if ( starImgSrc )
                                                {
                                                    newImg = document.createElement('img');
                                                    newImg.setAttribute('src', starImgSrc);
                                                    newImg.className = "stars";
                                                    targetNode.appendChild(newImg);
                                                }
                                            }
                                            if ( i < newNodeParts.length - 1)
                                            {
                                                // Add a <br>
                                                newBR = document.createElement("br");
                                                if (refChild)
                                                {
                                                    targetNode.insertBefore(newBR, refChild);
                                                }
                                                else
                                                {
                                                    targetNode.appendChild(newBR);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (primaryKey == 'cdata') // CDATA
                                {
                                    targetNode.appendChild(document.createCDATASection(elementsObject[key]));
                                }
                            }
                        }
                        else // Element
                        {
                            // If targetNode was passed into this function, append the new child to it??
                            if (targetNode)
                            {
                                // If elementsObject[key] is an array, we??l create an element of type key for each array member.
                                if (elementsObject[key].length > 0)
                                {
                                    for (counter = 0; counter < elementsObject[key].length; counter++)
                                    {
                                        if (elementsObject[key][counter])
                                        {
                                            if (!elementsObject[key][counter]._node)
                                            {
                                                newElement = document.createElement(key);
                                                elementsObject[key][counter]._node = newElement;
                                                var r = counter + 1;
                                                while (r < elementsObject[key].length && !refChild)
                                                {
                                                    if (elementsObject[key][r])
                                                    {
                                                        refChild = elementsObject[key][r]._node;
                                                    }
                                                    r++;
                                                }
                                                if (refChild)
                                                {
                                                    newNode = targetNode.insertBefore(
                                                        elementsObject[key][counter]._node,
                                                        refChild);
                                                }
                                                else
                                                {
                                                    newNode = targetNode.appendChild(
                                                        elementsObject[key][counter]._node);
                                                }
                                                arguments.callee(
                                                    elementsObject[key][counter],
                                                    newNode);
                                                newElement._elementTree = elementsObject[key][counter];
                                            }
                                            else
                                            {
                                                arguments.callee(
                                                    elementsObject[key][counter],
                                                    elementsObject[key][counter]._node);
                                            }
                                        }
                                    }
                                }
                                else
                                {
                                    if (elementsObject[key].length !== 0)
                                    {
                                        if (!elementsObject[key]._node)
                                        {
                                            newElement = document.createElement(key);
                                            elementsObject[key]._node = newElement;
                                            if (refChild)
                                            {
                                                newNode = targetNode.insertBefore(
                                                    elementsObject[key]._node,
                                                    refChild);
                                            }
                                            else
                                            {
                                                newNode = targetNode.appendChild(
                                                    elementsObject[key]._node);
                                            }
                                            arguments.callee(
                                                elementsObject[key],
                                                newNode);
                                            newElement._elementTree = elementsObject;
                                        }
                                        else
                                        {
                                            arguments.callee(
                                                elementsObject[key],
                                                elementsObject[key]._node);
                                        }
                                    }
                                }
                            }
                            // ??else create the new element as targetNode.
                            else
                            {
                                if (!elementsObject[key]._node)
                                {
                                    arguments.callee(elementsObject[key],
                                        elementsObject[key]._node = targetNode = document.createElement(key));
                                }
                                else
                                {
                                    arguments.callee(elementsObject[key],
                                        elementsObject[key]._node);
                                }
                            }
                        }
                    }
                }
            }
        }
        return targetNode;
    };

window.addEvent('domready', function(){
    // Put placeholder in destination input box if empty, and remove when focused
    var destination = document.getElementById('destination');
    destination.onblur = function () {
        if (!this.value) {
            this.value = this.getAttribute('title');
            this.className += ' blur';
        }
    }
    
    destination.onfocus = function () {
        if (this.value == this.getAttribute('title')) {
            this.value = '';
            this.className = this.className.replace(/ blur/, '');
        }
    }
    
    destination.onblur();
    
    var f = document.id(document.frm);
    
    f.setAttribute('target', 'page');
    f.addEvent('submit', function (e){
        document.id('frame-container').setStyle('display', 'block');
        document.id(document.body).setStyle('overflow', 'hidden');
        (function(){
            document.id('iframe-page').setStyle('display', 'block');
        }).delay(1000);
    });
});
