/////////////////////////////////
// CONSTANTS
/////////////////////////////////
var SLIDE_SPEED = 800;

/////////////////////////////////
// FUNCTIONS
/////////////////////////////////

$(document).ready(function(){
  $('a.icon.delete').click(function(){
    return confirm("Estas seguro que quieres eliminarlo?");
  });
  //------------------------------------------------------------------------ //
  //----------------------------- NAV -------------------------------------- //
  //------------------------------------------------------------------------ //
  $('#buscador a,  #win_buscador a.close').click(function(){
    focus_window('win_buscador', 'buscador');
    return false;
  });

  $('#la_guia a,  #win_la_guia a.close').click(function(){
    focus_window('win_la_guia', 'la_guia');
    return false;
  });

  $('#ofertes a,  #win_ofertes a.close').click(function(){
    focus_window('win_ofertes', 'ofertes');
    return false;
  });

  $('#demandes a,  #win_demandes a.close').click(function(){
    focus_window('win_demandes', 'demandes');
    return false;
  });
  //------------------------------------------------------------------------ //
  //----------------------------- WIN -------------------------------------- //
  //------------------------------------------------------------------------ //
  $('#win_buscador ul.categories li a').click(function(){
    $(this).parents().eq(1).find('a').removeClass('selected');
    $('#win_buscador div.optional').hide();
    $('#win_buscador #form_'+$(this)[0].className).show();
    $(this).addClass('selected');
    $('input#categoria').val($(this).text());
    return false;
  });

  $('div.llista_categories ul.categories li ul li a.mas').click(function(){
    $(this).next().next().toggle();
    ($(this).text().replace(/^\s+|\s+$/g,"") == '[+]') ? $(this).text('[-]') : $(this).text('[+]');
    return false;
  });

  $('#win_buscador select#allotjament_subcategories').change(function(){
    if($(this).val() == 107){
      $('#allotjament_estrelles').show();
      $('label[for=allotjament_estrelles]').show();
    }else{
      $('#allotjament_estrelles').hide();
      $('label[for=allotjament_estrelles]').hide();
    }
  });

  //------------------------------------------------------------------------ //
  //---------------------------- LOGIN ------------------------------------- //
  //------------------------------------------------------------------------ //

  // hide estrelles
  $('#win_buscador #allotjament_estrelles').hide();
  $('#win_buscador label[for=allotjament_estrelles]').hide();

  // hide subcategories except restaurant
  $('ul.categories li ul li ul').hide();
  $('div.llista_categories ul.categories li.restaurant ul li a.mas').click();
  // Especiel Navidad empresas
  $('div.llista_categories a#cat_170').click();
  // Hoteles
  $('div.llista_categories a#cat_107').click();
  // Espacios para eventos
  $('div.llista_categories a#cat_205').click();
  // opacity for ie6
  if($.browser.msie){
    $("#win_buscador").fadeTo(0, 0.95);
    $("#win_la_guia").fadeTo(0, 0.95);
    $("#win_ofertes").fadeTo(0, 0.95);
    $("#win_demandes").fadeTo(0, 0.95);
  }
  
});

//------------------------------------------------------------------------ //
//--------------------- EVENTS FUNCTIONS --------------------------------- //
//------------------------------------------------------------------------ //
function focus_window(window_str, nav_str){
  $('div:not(#'+window_str+').window, div:not(#'+window_str+').window_closed').hide();
  $('#'+window_str).toggle();
  $('#nav ul li:not(#'+nav_str+')').removeClass('selected');
  $('#nav ul li#'+nav_str+'').toggleClass('selected');
  $('object').removeClass('invisible');
  if($('#nav ul li#'+nav_str+'').hasClass('selected')){
    switch(window_str){
      case 'win_ofertes':
      case 'win_demandes':
      case 'win_la_guia':
        $('.banner object').addClass('invisible');
      default:
        $('#fitxa object').addClass('invisible');
    }
  }else{
    $('object').removeClass('invisible');
  }
}

function toggle_login(){
  $('#options').css('border-right-width','1px');
  $('#options').animate({ marginLeft: "0px" },SLIDE_SPEED,'swing');
  $('#login_form').animate({ marginRight: "0px" },SLIDE_SPEED,'swing');
}

function callback_login(){
  $('#options').animate({ marginLeft: "349px" },SLIDE_SPEED,'swing',function(){
    $('#options').css('border-right-width','0px');
  });
  $('#login_form').animate({ marginRight: "-349px"},SLIDE_SPEED,'swing');
}

/////////////////////////////////
// VALIDATION
/////////////////////////////////
function validateMail(element){
  var value = $(element).val();
  if(!isMailCorrect(value)){
    displayError($(element), "Dirección de email incorrecta");
  }else{
    hideError($(element));
  }
}

function validateDate(day, month, year, element){
  if(!isValidDate(day, month, year)){
    displayError($(element), "Fecha incorrecta");
  }else{
    hideError($(element));
  }
}

function validatePresence(element){
  var value = $(element).val();
  if(value == "") {
    displayError($(element), "Este campo es obligatorio");
  }else{
    hideError($(element));
  }
}

function validateLength(element,num){
  var value = $(element).val();
  if(value.length != num) {
    displayError($(element), "Este campo debe tener "+num+" caracteres");
  }else{
    hideError($(element));
  }
}

function validateMinMaxLength(element,min, max){
  var value = $(element).val();
  if(value.length < min || value.length > max) {
    displayError($(element), "Este campo debe tener entre "+min+" y "+max+" caracteres");
  }else{
    hideError($(element));
  }
}

function validateMinLength(element,min){
  var value = $(element).val();
  if(value.length < min) {
    displayError($(element), "Este campo debe tener como mínimo "+min+" caracteres");
  }else{
    hideError($(element));
  }
}

function validateMaxLength(element,max){
  var value = $(element).val();
  if(value.length > max) {
    displayError($(element), "Este campo debe tener como máximo "+max+" caracteres");
  }else{
    hideError($(element));
  }
}

function validateOnlyNumbers(element){
  var value = $(element).val();
  if(!isOnlyNumbers(value)) {
    displayError($(element), "Este campo solo acepta valores numéricos");
  }else{
    hideError($(element));
  }
}
function isMailCorrect(email){
  var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return filter.test(email);
}

function isOnlyNumbers(field){
  var filter  = /^\d{5}/;
  return filter.test(field);
}

function displayError(element,error){
  if(!$(element).parent().hasClass("error")){
    if($(element)[0].tagName == "INPUT" || $(element)[0].tagName == "SELECT")
      var error_message = "<div class='error_message'><p>"+error+"</p></div><div class='clearer'></div>";
    else{
      var error_message = "<div class='error_message textarea'><p>"+error+"</p></div><div class='clearer'></div>";
    }
    $(element).parent().addClass("error");
    $(element).after(error_message);
  }
}

function hideError(element){
  if($(element).parent().hasClass("error")){
    $(element).parent().removeClass("error");
    $(element).nextAll().remove();
  }
}

// MISC
function isValidDate(day, month, year){
  var day = parseInt(day);
  var month = parseInt(month);
  var year = parseInt(year);
  if (day <= 0 || month <= 0 || month > 12 || year <= 1900){return false;}
  if(month == 2){
    if (year == Math.round(year/4)*4){
      if (day > 29){return false;}
    }else{
      if (day > 28){return false;}
    }
  }else if(month == 4 || month == 6 || month == 9 || month == 11){
    if (day > 30){return false;}
  }else{
    if (day > 31){return false;}
  }
  return true;
}

// GEOCODER
function startgeocoder(input, output,mapa,input_lat,input_long,starthelper,selecthelper,draghelper,dragendhelper){
    // Init geocoder
    var geocoder = new GClientGeocoder(); 
    var markerpopup=false;
    
    var map = new GMap2(document.getElementById(mapa));
    if($(input_long).attr('value')!=''){
      var center = new GLatLng($(input_lat).attr('value'),$(input_long).attr('value'));
    }else{
      var center = new GLatLng(37.4419, -122.1419);
    }
    
    map.setCenter(center, 16);
    var marker = new GMarker(center, {draggable: true});
    GEvent.addListener(marker, "dragend", function() {
        var location=marker.getLatLng();
        $(input_lat).attr('value',location.lat());
        $(input_long).attr('value',location.lng());
        alreadyclicked=true;
        marker.openInfoWindowHtml($(dragendhelper).html());
        markerpopup=false;
    });
    
    GEvent.addListener(marker, "dragstart", function() {
       map.closeInfoWindow();
    });
    
    map.addOverlay(marker);
    map.addControl(new GLargeMapControl());
    //map.addControl(new GMapTypeControl());

  $(input).keyup(function(){
    if($(input).attr('value')==''){
      marker.openInfoWindowHtml($(starthelper).html());
      markerpopup=false;
    }else{
      geocoder.getLocations($(input).attr('value'), function(response){
        if (response.Placemark!=undefined) {
          if(markerpopup==false){
            marker.openInfoWindowHtml($(selecthelper).html());
            markerpopup=true;
          }
          str = '<ul>';
          for (i = 0; i < response.Placemark.length; i++) {
            str += '<li>' + response.Placemark[i].address + "</li>"
          }
          str += "</ul>"
          $(output).html(str);
          $('li', output).click(function(){
            $(input).unbind('blur');
            //$(input).attr('value', $(this).html());
            
            index=$(this).parent().children().index(this);
            coords=response.Placemark[index].Point.coordinates;
            point=new GLatLng(coords[1],coords[0]);
            marker.setLatLng(point);
            map.panTo(point);
            
            marker.openInfoWindowHtml($(draghelper).html());
            
            $(input_lat).attr('value',point.lat());
            $(input_long).attr('value',point.lng());
            //marker.setLatLng(geocoder.getLatLng($(input).attr('value')));
          });
          $(input).blur(function(){
            if ($(input_lat).attr('value')==''&&alreadyclicked==false){
              $('li:first', output).click()
            }
          })
        }
      });
    }
  })
  if($(input_long).attr('value')!=''){
    var lng=$(input_long).attr('value');
    var lat=$(input_lat).attr('value');
    
    marker.openInfoWindowHtml($(dragendhelper).html());
  }else{
    $(input).keyup();
  }
  
  $('#codi_postal').blur(function(){
    geocoder.getLatLng($(this).attr('value')+', Spain', function(point){
      if(point!=null){
        map.setCenter(point,12);
        marker.setPoint(point);
        marker.openInfoWindowHtml($(starthelper).html());
      }
    });
  });
  
  if($(input_lat).attr('value')=='') $('#codi_postal').blur();
  
}

function charcounter(input, output,maxlimit){
  $(input).keyup(function(){   
    if (input.attr('value').length > maxlimit) // if too long...trim it! 
    input.attr('value',input.attr('value').substring(0, maxlimit)); // otherwise, update 'characters left' counter 
    output.html($(input).attr('value').length.toString());
  });
  $(input).keyup();
}
