/*
 * jQuery UI Autocomplete Auto Select Extension
 *
 * Copyright 2010, Scott González (http://scottgonzalez.com)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * http://github.com/scottgonzalez/jquery-ui-extensions
 */


(function( $ ) {

  $.ui.autocomplete.prototype.options.autoSelect = true;
  $( ".ui-autocomplete-input" ).live( "blur", function( event ) {
    var autocomplete = $( this ).data( "autocomplete" );
    if ( !autocomplete.options.autoSelect || autocomplete.selectedItem ) { return; }
    var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $(this).val() ) + "$", "i" );
    autocomplete.widget().children( ".ui-menu-item" ).each(function() {
      var item = $( this ).data( "item.autocomplete" );
      if ( matcher.test( item.label || item.value || item ) ) {
        autocomplete.selectedItem = item;
        return false;
      }
    });
    if ( autocomplete.selectedItem ) {
      autocomplete._trigger( "select", event, { item: autocomplete.selectedItem } );
    }
  });

}( jQuery ));


function adjustEndTime() {
  $('#booking_arrival_date_time_hour, #booking_pickup_date_time_hour').each ( function () {
    id = $(this).attr('id').replace(/_date_time_hour/, '').replace(/booking_/, '')
    check = $("#booking_" + id + "_departure_1").attr("checked") == "checked";
    hour =$(this).val();
    if (check) {
      $('#booking_' + id + '_date_time_hour option[value=5]').remove();
    } else {
      if ( !$('#booking_' + id + '_date_time_hour option[value=5]').length ) {
        $('#booking_' + id + '_date_time_hour option[value=4]').after('<option value="5">05</option>');
      }
      if ( 4 == hour ) {
        $.each([35,40,45,50,55], function(index, i) { 
          $('#booking_' + id + '_date_time_minute option[value='+ (i-5) +']').after('<option value="'+i+'">'+i+'</option>');
        });
      }
    }
    if ( 4 == hour && check ) {
      $('#booking_' + id + '_date_time_minute option').each ( function() {
        if ( $(this).val() > 30 ) {
          $(this).remove(); 
        }        
      });
    }
    
  });

}

//
//function setCookie(c_name,value,exdays) {
//  var exdate=new Date();
//  exdate.setDate(exdate.getDate() + exdays);
//  var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
//  document.cookie=c_name + "=" + c_value;
//}

function testCookies() {
  if ("" == document.cookie)  {
    $('<div class="fatal_error"/>').html(cookies_error_message).appendTo('body');
  }
}
function inputBlur(e) {
  inputFocus(e);
}
function inputFocus(e) {
  e.css("backgroundPosition", "left -36px");
  e.css("color", "#646464");
}
    
function inputFocusNewsletter(e) {
  e.css("backgroundPosition", "left -30px");
  e.css("color", "#646464");
}

function inputBlur(e) {
  e.css("backgroundPosition", "left top");
}


function checkCityValue(elt) {
  if (  elt.val().toUpperCase() == placeholder_city.toUpperCase()) {
    elt.attr('placeholder', placeholder_city);
    elt.val("");
    
    if ( !Modernizr.input.placeholder ) {
      $('#from-city').placeholder();
      $('#to-city').placeholder();
    }  
    
    return;
  }
  elt.val(elt.val().toUpperCase());
  // Value must be knowledgeable and well-known
  var aInput = elt.val();
  
  var found = false;
  $('.ui-autocomplete li a').each ( function () {
    if ( aInput == $(this).html() ) {
      found = true;
    }
  })

  if ( !found ) {
    elt.parent().addClass('error');
  } else {
    elt.parent().removeClass('error');
  }
}


function loadCoverStreets(op, elt) {
  
  if( lock_autocomplete ) return ; 
  
  lock_autocomplete = true;
  
  // Cleanup street input.
  elt.html("");
  elt.next().val("");
  elt.next().attr('placeholder', '');
  
  $.ajax({
    url : "/cover/getStreets",
    data: {
      street: op.street,
      postcode: op.postcode
    },
    dataType : "json",
    success : function(data) {
      elt.append($("<option />").val("").text(placeholder_cover_steet));
      $.each(data.getStreetsResult, function() {
        elt.append($("<option />").val(serialize(this)).text(this.street));
      });
      $(elt).combobox();
      elt.next().attr('placeholder', placeholder_cover_steet);
      //elt.next().focus();
      lock_autocomplete = false;
    },
    statusCode: { 500: function() { error500();} }
  });
}


function serialize (mixed_value) {
    // http://kevin.vanzonneveld.net
    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // +   improved by: Dino
    // +   bugfixed by: Andrej Pavlovic
    // +   bugfixed by: Garagoth
    // +      input by: DtTvB (http://dt.in.th/2008-09-16.string-length-in-bytes.html)
    // +   bugfixed by: Russell Walker (http://www.nbill.co.uk/)
    // +   bugfixed by: Jamie Beck (http://www.terabit.ca/)
    // +      input by: Martin (http://www.erlenwiese.de/)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net/)
    // +   improved by: Le Torbi (http://www.letorbi.de/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net/)
    // +   bugfixed by: Ben (http://benblume.co.uk/)
    // -    depends on: utf8_encode
    // %          note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
    var _utf8Size = function (str) {
        var size = 0,
            i = 0,
            l = str.length,
            code = '';
        for (i = 0; i < l; i++) {
            code = str.charCodeAt(i);
            if (code < 0x0080) {
                size += 1;
            } else if (code < 0x0800) {
                size += 2;
            } else {
                size += 3;
            }
        }
        return size;
    };
    var _getType = function (inp) {
        var type = typeof inp,
            match;
        var key;

        if (type === 'object' && !inp) {
            return 'null';
        }
        if (type === "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            match = cons.match(/(\w+)\(/);
            if (match) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';

    switch (type) {
    case "function":
        val = "";
        break;
    case "boolean":
        val = "b:" + (mixed_value ? "1" : "0");
        break;
    case "number":
        val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
        break;
    case "string":
        val = "s:" + _utf8Size(mixed_value) + ":\"" + mixed_value + "\"";
        break;
    case "array":
    case "object":
        val = "a";
/*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = this.serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
        var count = 0;
        var vals = "";
        var okey;
        var key;
        for (key in mixed_value) {
            if (mixed_value.hasOwnProperty(key)) {
                ktype = _getType(mixed_value[key]);
                if (ktype === "function") {
                    continue;
                }

                okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
                vals += this.serialize(okey) + this.serialize(mixed_value[key]);
                count++;
            }
        }
        val += ":" + count + ":{" + vals + "}";
        break;
    case "undefined":
        // Fall-through
    default:
        // if the JS object has a property which contains a null value, the string cannot be unserialized by PHP
        val = "N";
        break;
    }
    if (type !== "object" && type !== "array") {
        val += ";";
    }
    return val;
}


function error500() {

  alert ( cover_error_msg );
  location.href='/error500';
  
}



function errorTimerCover() {
  alert ( cover_timer_msg );
  location.href='/error500';
}


