var util = {

    randomString: function(length) {
        var sChrs;
        var type = (arguments.length > 1) ? arguments[1] : 'alphanumeric';
        var numeric = "0123456789";
        var alpha = "abcdefghijklmnopqrstvwxyz";
        alpha += alpha + alpha.toUpperCase();
        switch(type){
            case 'alphanumeric':sChrs = numeric + alpha;break;
            case 'numeric':sChrs = numeric;break;
            case 'alpha':sChrs = alpha;break;
        }
        var sRnd = '';
        var x;
        for(x = 0; x < length; x++){
            var i = Math.floor(Math.random() * sChrs.length);
            sRnd += sChrs.charAt(i);
        }
        return sRnd;
    },

    getUniqueId: function(){
        var now = new Date();
        return(now.getTime());
    },

    currentPage: function(){
        var page = location.href.split("/");
        return page[page.length - 1].split("?")[0];
    },

    getFileExtension: function(filename){
        if( filename.length === 0 )
        {
            return "";
        }
        var dot = filename.lastIndexOf(".");

        if( dot == -1 )
        {
            return "";
        }
        return filename.substr(dot + 1, filename.length);
    }
};

var utils=
{
    getId:function(elem)
    {
         var ids=elem.attr("id").split("-");

         return ids[ids.length-1];
    }
};

var menuSearch={

  selectedOption: null,

  iniciarMenu:function()
  {
    $('.down-list').width($('.dropdown-menu').width()-2);
    $('.dropdown-menu').hover(
      function () {
        $('.menu-first', this).addClass('slide-down');
        $('.down-list', this).slideDown(100);
      },
      function () {
        obj = this;
        $('.down-list', this).slideUp(100, function(){$('.menu-first', obj).removeClass('slide-down');});
      }
    );
  },

  selectType:function(elem,type)
  {
    $('#search_form_type').attr('value',type) ;

    if (this.selectedOption !== null)
    {
    	$(this.selectedOption).removeClass('selected-option');
    }

    $(elem).addClass('selected-option');
    this.selectedOption = elem;

    return false;
  }
};

/*Funcionalidad usada para el modulo de la libreta*/
var libreta=
{
    iniciarCoverflow:function(elemento)
    {
        $('ul.elem_libreta_'+elemento).jcoverflip({

            beforeCss: function( el, container, offset ){
                return [
                  $.jcoverflip.animationElement( el, {left: ( container.width( )/2 - 150 - 110*offset + 20*offset )+'px', top: '10px'}, { } ),
                  $.jcoverflip.animationElement( el.find( 'img' ), {width: Math.max(10,90-20*offset*offset) + 'px'}, {} )
                ];
              },
            afterCss: function( el, container, offset ){
                return [
                  $.jcoverflip.animationElement( el, {left: ( container.width( )/2 + 60 + 110*offset )+'px', top: '10px'}, { } ),
                  $.jcoverflip.animationElement( el.find( 'img' ), {width: Math.max(10,90-20*offset*offset) + 'px'}, {} )
                ];
              },
              currentCss: function( el, container ){
                return [
                  $.jcoverflip.animationElement( el, {left: ( container.width( )/2 -50 )+'px', bottom: 0}, { } ),
                  $.jcoverflip.animationElement( el.find( 'img' ), {width: '100px'}, { } )
                ];
              },
              current:2 //Carga el segundo primero
            });

         $('#libreta_right_'+elemento).click(function(){
               $('ul.elem_libreta_'+elemento).jcoverflip('next');
         });

          $('#libreta_left_'+elemento).click(function(){
            $('ul.elem_libreta_'+elemento).jcoverflip('previous');
         });

    }
};

var searchUsers=
{
    listId:'user-search-list',
    optionSearchByCity:1,
    initializedAutoCompleted:false,
    searchNow:'',
    loadingMsg:'Loading',

    init:function()
    {
        var inputSearch=$('#search_search');
        var inputTypeSearch=$('#search_type_search');
        var inputSearchId=$('#search_search_id');

        inputSearch.keyup(function(){
           searchUsers.checkSearchInput(inputSearch,inputTypeSearch);
        });

        //Campo de ciudades
        searchUsers.checkCityAutocomplete(inputSearch,inputTypeSearch);

        inputTypeSearch.ufd({skin:'globalselector'});
        inputTypeSearch.change(function(){
             var valorAnterior=inputSearch.val();

               inputSearch.val("");
               inputSearchId.val("");
               searchUsers.changePage(1);

               if(valorAnterior!=="")
               {
                    searchUsers.submitForm();
               }

               searchUsers.checkCityAutocomplete(inputSearch,inputTypeSearch);
        });
    },


    checkSearchInput:function(inputSearch,inputTypeSearch)
    {
       if(inputTypeSearch.val()!=searchUsers.optionSearchByCity)
       {
           var inputVal=inputSearch.val();

           if(inputVal==='' || inputVal.length>=2)
           {
               searchUsers.searchNow=inputVal;
               setTimeout(function(){
                if(searchUsers.searchNow==inputVal)
                {
                    searchUsers.changePage(1);
                    searchUsers.submitForm();
                }},350);
           }
       }
    },

    checkCityAutocomplete:function(inputSearch,inputTypeSearch)
    {
        if(!searchUsers.initializedAutoCompleted)
        {
            searchUsers.initializedAutoCompleted=true;
            geolocation.appendTo='#search-form-filter-div';
            geolocation.searchCityAutocomplete('#search_search', '#search_search_id',false,'searchUsers.submitForm()');
        }

        if(inputTypeSearch.val()==searchUsers.optionSearchByCity)
        {
          inputSearch.autocomplete('enable');
        }
        else
        {
            inputSearch.autocomplete('disable');
        }
    },

    submitForm:function()
    {
        $('#'+searchUsers.listId).html('<div class="loading">'+searchUsers.loadingMsg+'</div>');
        var form=$('#search-form-filter');
        //Realiza la llamada a la accion que devuelve el listado de amigos
        $.ajax({
            url: form.attr('action'),
            type: 'post',
            data: form.serialize(),
            success:function(data)
            {
                $('#'+searchUsers.listId).html(data);
            }
        });
    },

    changePage:function(pag)
    {
        var inputPag=$('#search-form-pag');
        if(inputPag.val()!=pag)
        {
             inputPag.val(pag);
             searchUsers.submitForm();
        }

        return false;
    }
};

var gapi = {
    urlRegions:null,

    //POST
    addPost: function(frm){  //JSON ?
        $.ajax({
            type: "POST",
            url: frm.attr('action'),    //"/core/controller/process/posts.php",
            data: {
                'post[text]': frm.find("#post_text").val(),
                'post[from_user_id]': frm.find("#post_from_user_id").val(),
                'post[to_user_id]': frm.find("#post_to_user_id").val()
            },
            dataType: "html",
            beforeSend: function(){
                $('#post_loader').show();
            },
            success: function(result){
                $('#post_loader').hide();
                frm.find("#post_text").val('');
                $('#new_post').prepend(result);
            }
        });
    },
    getFriendRequests: function(obj){
        var url = $(obj).attr('href');
        var uid = url.split("/");
        uid = uid.pop();
        $.ajax({
            type: "POST",
            url: url,
            beforeSend: function(){},
            success: function(result){
                $(obj).parent().html(result);
            }
        });
    },
    //LANGUAGE
    menuLanguageInit:function()
    {
      $('#dropdown-list-lang').width($('#dropdown-menu-lang').width());
      $('#dropdown-menu-lang').hover(
        function () {
          $('#dropdown-title-lang', this).addClass('slide-down-language');
          $('#dropdown-list-lang', this).slideDown(100);
        },
        function () {
          obj = this;
          $('#dropdown-list-lang', this).slideUp(100, function(){$('#dropdown-title-lang', obj).removeClass('slide-down-language');});
        }
      );
    },

    menuUserInit:function()
    {
      $('#dropdown-list-user').width($('#dropdown-menu-user').width());

      $('#dropdown-menu-user')
        .mouseenter(function(){$('#dropdown-list-user').slideDown(150);})
        .mouseleave(function(){$('#dropdown-list-user').slideUp(150);});
    },


    flashLinkShare: function(){
        location.href = 'javascript:' + $('#share-link').attr('onclick').replace('return false;', '');
        self.location = '#share-link';
    },

    selectListPhotosFromAlbum: function(obj){
        if (obj.selectedIndex === 0)
        {
            gapi.listPhotos(60, 0);
        }
        else
        {
            gapi.listPhotosFromAlbum(obj[obj.selectedIndex].value, 60);
        }
    },

    //para manejar las acciones del usuario
    setBlurb: function(){  //JSON ?
        var $frm = $('#blurb').parent('form');
        $.ajax({
            type: "POST",
            url: $frm.attr('action'),
            data: "blurb=" + $frm.find('#blurb').val(),
            dataType: "html",
            beforeSend: function(){
            },
            success: function(result){
                $('#blurb').hide();
                $('#a_blurb').html(result);
                $('#a_blurb').show();
            }
        });
    },

    //limpiar los avisos,recordatorios
    cleanMsg:function(){
        $('.suggest').fadeOut('slow');
        $('.flash').fadeOut('slow');
    },

    showLoadingPopup:function(gMD)
    {
        var element;

        if(gMD===null || gMD===undefined)
        {
            element=$('#main_dialog');
        }
        else
        {
            element=gMD;
        }
        element.html("<img id=\"dialog_loader\" style=\"margin: auto; \" alt=\"\" src=\"/images/global/loader.gif\"/>");
    },

    goTo:function(url,confirmTxt)
    {
        if(confirmTxt===undefined || confirm(confirmTxt))
        {
            window.location.href=url;
        }
        return false;
    }
};

var album = {
    //retorna el nuevo album
    loadAlbumNew:function(urlAjax,container){
        $(container).load(urlAjax,function(){
            $(this).removeClass('loading');
            $(this).find(':first').removeAttr('id');
        });
    }
};


var gui= {
    gIC:null,
    videoUpBox:null,
    imageUpBox:null,
    gMD:null,
    listenerDialogCloseBtn:function(btn,dialog){
        btn.click(function(){
            dialog.dialog('close');
            dialog.dialog('destroy');
            return false;
        });
    },
    listenerDialogSubmitBtn:function(btn,callback){
        btn.click(function()
        {
            if(callback!==undefined)
            {
                eval(callback);
            }
        return false;
        });
    },
    listenerCloseBtn:function(btn,contentToClose,contentToShow,accio){
        btn.click(function(){
            if(accio===undefined)
            {
                contentToClose.hide();
            }
            else
            {
                contentToClose.remove();
            }

            if(contentToShow!==undefined)
            {
                contentToShow.fadeIn('fast');
            }
            return false;
        });
    },
    show:function(attr){
        if(attr!==null)
        {
            attr.fadeIn('fast');
        }
    },

    load:function(btn, uri,perParam, contentToHide){
        var txt = btn.html();
        this.gIC.addClass('loading');
        btn.load(uri,function(){
            gui.gIC.removeClass('loading');
            gui.gIC.prepend(btn.html());
            btn.html(txt);
            var container = gui.gIC.find('div:first');
            eval(perParam+" = container");

            if(contentToHide!==undefined)
            {
                contentToHide.hide();
            }
            gui.listenerCloseBtn(container.find('form a.cancel'), container,contentToHide);
        });
    },

    submitSerializeAjax:function(containerIn,form,functionname)
    {
        var frm=$(form);
        var container=$(containerIn);
        $.ajax({
            type: "POST",
            url: frm.attr('action'),
            data: frm.serialize(),
            beforeSend: function()
            {
                gapi.showLoadingPopup(container);
            },
            success: function(result)
            {
                container.html(result);
                if(functionname!==undefined && functionname!==null)
                {
                    eval(functionname);
                }

                var formulario=container.find("form");

                if(formulario.length!==0)
                {
                    container.submit(function(){return gui.submitSerializeAjax(container, formulario, functionname);});
                }

                gui.cancelButton(container);
            }
        });

        return false;
    },

    formatTitleDialog:function(container)
    {
        var dialog=$(container);
        var h1=dialog.find('h1');
        var title = h1.html();
        $(".ui-dialog-title").html(title).show();
        h1.remove();
    },

    cancelButton:function(container)
    {
      var dialog=$(container);
      dialog.find('a.cancel').click(function()
      {
          dialog.dialog('close');
          return false;
      });
    },

    loadModal:function(id,uri,width,callback,dialogClass)
    {
        var gMD = $('#'+id);

        gMD.dialog({
          'width':width,
          'modal':true,
          'resizable':false,
          'zIndex': 3000,
          'dialogClass':dialogClass===undefined?'w-modal':dialogClass
        });

        gMD.dialog('open');

        gapi.showLoadingPopup(gMD);

        gMD.load(uri,function()
        {
          if(callback!==undefined)
          {
              callback();
          }

          gui.formatTitleDialog(gMD);
          gui.cancelButton(gMD);//Añade el evento de cerrar al boton

          var form=gMD.find('form');
          if(form.length!==0)
          {
            form.submit(function(){return gui.submitSerializeAjax(gMD, form);});
          }
        });
    }
};

var windowGmd=
{
    showModal:function(id,width)
    {
        var gMD = $('#'+id);

         gMD.dialog({
          'width':width,
          'modal':true,
          'resizable':false
        });

        gMD.dialog('open');

        gui.formatTitleDialog(gMD);
    },

    loadModal:function(id,href,width)
    {
        this.showModal(id, width);

        var gMD = $('#'+id);

        gMD.load(href,function()
        {
          gui.formatTitleDialog($("#"+id));

          //Añade el evento de cerrar al boton
          gMD.find('a.cancel').click(function()
          {
              $('#'+id).dialog('close');
              return false;
          });

        });
    }
};

var file=
{
    jsuploadcgi:"/cgi-bin/jsupload.cgi.pl",


    initJsUpload:function(containerId,sourceFileId,sendMsg,validExtensions,maxFiles)
    {
        return new jsu.Upload({
            type: "incubator",
            containerId: containerId,
            action: file.jsuploadcgi,
            sendMsg: sendMsg,
            multiple: true,
            maxFiles: maxFiles,
            validExtensions: validExtensions,
            onCancel:function()
            {
                $('table.GWTUpld').show();
            },
            onFinish: function(upl_data)
            {
                if (upl_data && upl_data.url)
                {
                    if(upl_data.status == "SUCCESS")
                    {
                        var ext = util.getFileExtension(upl_data.basename);
                        var filename = (ext.length !== 0)?upl_data.name+'.'+ext :  upl_data.name;
                        $('#'+sourceFileId).val(filename);

                    }
                }
            }
        });
    }
};


var video = {

    upload:null,
    validExtensions: "mov, flv, m4v, avi, wmv, mp4, mkv",

    openEditVideoDialog:function(url){
        gui.gMD.dialog('destroy');
        gui.gMD.addClass('loading');
        gui.gMD.dialog({
            width: 400,
            modal: true
        });
        gui.gMD.dialog('open');
        gui.gMD.load(url,function(){
            gui.gMD.dialog( "option", "title", $(this).find('h1:first').html());
            gui.gMD.find('h1:first').remove();
            gui.gMD.find('div.header:first').remove();
            gui.gMD.removeClass('loading');
            gui.listenerCloseBtn(gui.gMD.find('form.file a.cancel'), gui.gMD);
        });
    },

    initJsUpload:function(containerId,sourceFileId,sendMsg)
    {
        video.upload=file.initJsUpload(containerId, sourceFileId, sendMsg, video.validExtensions,1);

        $('input.gwt-FileUpload').attr('size','21');
    }


};

var image=
{
    validExtensions: "jpg, png, gif, jpeg",

    upload:null,

    maxFilesUpload: 1,

    initJsUpload:function(containerId,sourceFileId,sendMsg)
    {
        image.upload=file.initJsUpload(containerId, sourceFileId, sendMsg, image.validExtensions,image.maxFilesUpload);
    }
};

var user = {
    resendConfirmationEmail: function()
    {
    	var resendConfirmationHtml = $('#resend_confirmation').html();

    	$('#resend_confirmation').html('Sending confirmation ...');

        $.ajax({
            type: "GET",
            url: '/resend_confirmation_email',
            success: function(result)
            {
	    		if (result == 1)
                {
	                $('#resend_confirmation').html('Confirmation mail sent successfully. Be sure to check your spam folder.');
	    		}
                else
                {
	                $('#resend_confirmation').html('Error sending confirmation email');
	        		setTimeout(function(){$('#resend_confirmation').html(resendConfirmationHtml);}, 5000);
	    		}
            }
        });
    },
    sendInvite: function(frm,container){
        $.ajax({
            type: "POST",
            url: $(frm).attr('action'),
            data: $(frm).serialize(),
            beforeSend: function(){
                $("#main_dialog").dialog('destroy');
            },
            success: function(result){

                $(container).html(result);
                $(container).removeClass('loading');
            }
        });
    },
    sendMessage: function(frm,container){
        $.ajax({
            type: "POST",
            url: $(frm).attr('action'),
            data: $(frm).serialize(),
            beforeSend: function(){

            },
            success: function(result){
                gui.gMD.dialog('close');
                $(container).html(result);
                $(container).show();
            }
        });
    },
    //FRIEND obj=form
    changeFriendRequest: function(obj){

        var form=$(obj);

        form.find('input').attr('disabled', 'disabled');

        var state=form.find('input.fr_state').val();

        $.ajax({
            async: false,
            type: "POST",
            url: form.attr('action'),
            data: "user_id=" + form.find('input.fr_user_id').val() + "&state=" + state,
            success: function(result)
            {
              if(state==1)
              {
                form.parent().find(".actions").show();
                form.remove();
                searchUsers.submitForm();
              }
              else
              {
                form.parents('.item').remove();
              }

              user.updateRequestCount();
            }
        });

        form.find('input').removeAttr('disabled');
    },
    //RIDER obj=form
    changeTeamRiderRequest: function(obj){
        var form=$(obj);
        form.find('input').attr('disabled', 'disabled');

        $.ajax({
            async: false,
            type: "POST",
            url: form.attr('action'),
            data: "team_id=" + $(obj).find('input.rr_team_id').val() + "&state=" + $(obj).find('input.rr_is_activated').val(),
            success: function(result){

                if(result)
                {
                  form.parents('.item').remove();
                }
                user.updateRequestCount();
            }
        });

        form.find('input').removeAttr('disabled');
    },
    //RIDER obj=form
    changeBrandShopRequest: function(frm){
        var form=(frm);

        $.ajax({
            async: false,
            type: "POST",
            url: form.attr('action'),
            data: form.serialize(),
            success: function(result){
                if(result)
                {
                    if(form.find('#friend_request_state').val()!=1)
                    {
                      form.parents('.item').remove();
                      form.remove();
                    }
                    else
                    {
                        form.parents('.item').find(".actions").show();
                    }
                    user.updateRequestCount();
                }
            }
        });
    },

    updateRequestCount:function()
    {
      var requestCount=$('#friend_requests_count');
      var count=requestCount.html();
      if(count==1)
      {
        requestCount.remove();//Se elimina
      }
      else
      {
        requestCount.html(parseInt(count)-1);
      }
    },

    hideRequest:function(id)
    {
        $("#item-request-"+id).hide();
        return false;
    },

    openLocationDialog:function(url){
        var gMD = $('#main_dialog');
        gMD.dialog('destroy');
        gMD.addClass('loading');
        gMD.dialog({
            width: 550,
            modal: true
        });
        $.getScript("/js/glib.js");
        gMD.dialog('open');
        gMD.load(url,function(){
            gMD.dialog( "option", "title", $(this).find('h1:first').html());
            $('#main_dialog h1').remove();
            $('#main_dialog div.header').remove();
            gMD.removeClass('loading');

            gmap_init();
            $('form.location input.g_address').keyup(function(key){
                var patt; //validar la direccion de g_address
                patt=/.*,.*,/;
                if(patt.test($(this).val()))
                {
                    codeAddress();
                }
            });

            $('form.location a.cancel').click(function(){
                gMD.dialog('destroy');
                gMD.dialog('close');
                return false;
            });
        });
    },
    openSearchFriendDialog:function(url){
        var gMD = $('#main_dialog');
        gMD.dialog('destroy');
        gMD.addClass('loading');
        gMD.dialog({
            width: 400,
            modal: true
        });
        gMD.dialog('open');
        gMD.load(url,function(){
            gMD.dialog( "option", "title", $(this).find('h1:first').html());
            $('#main_dialog h1').remove();
            $('#main_dialog div.header').remove();
            gMD.removeClass('loading');

            gMD.find("form.SFLogin input[type='submit']").click(function(){
                //lanzar la peticion.
                user.doSearchFriends($(this).parents('form'),gMD);
                return false;
            });
        });
    },

    urlAjaxInfo:null,
    loadingMsgUsersInfo:null,
    initializeUsersInfo:function()
    {
        $(".user_info_area").qtip({
            events: {
              show: function(event, api)
              {
                  var idUser=(api.elements.target.attr("id-user"));
                  var url=user.urlAjaxInfo+"?id="+idUser;
                  api.elements.content.load(url);
              }
            },
            hide: {fixed: true,delay: 150},
            style: {classes: 'ui-tooltip-global'},
            show:{solo: true},
            content:user.loadingMsgUsersInfo
        });
    },
    initalizeUserInfo:function(elem)
    {
        $(elem).find(".user_info_area").simpletip({
            onShow:function()
            {
                var url=user.urlAjaxInfo+"?id="+this.getParent().attr("id-user");

                this.getParent().find(".tooltip").load(url);
            },
            content:user.loadingMsgUsersInfo
        });
    }
};

var friends=
{
    suggestionPageUrl:null,
    urlMoreSuggestion:null,

    addFriend:function(elem)
    {
        gapi.cleanMsg();

        gui.loadModal('main_dialog', $(elem).attr('href'), 350,'friends.reloadSuggestionPage()');

        $(elem).parent().hide('slow');

        return false;
    },

    reloadSuggestionPage:function()
    {
      if(friends.suggestionPageUrl!==null)
      {
        $('#PAGE-suggestions').load(friends.suggestionPageUrl);

        return true;
      }

      return false;
    },
    addFriendBox:function(elem)
    {
        friends.addFriend(elem);

        elem=$(elem);

        var cad=elem.attr('id').replace("add-friend-","").split("-");
        var pos=cad[0];
        var type=cad[1];

        var capaLoad=$('#friendSuggestions .number-'+pos);

        capaLoad.html("<div class=\"loading\">&nbsp;</div>");

        $.ajax(
        {
            url:this.urlMoreSuggestion,
            type: 'POST',
            data: 'pos='+pos+'&type='+type,
            success: function(html)
            {
                if(html.indexOf("NO_RESULTS")>=0)//Si no hay mas sugerencias se elimina la capa
                {
                    capaLoad.remove();
                }
                else
                {
                    capaLoad.html(html);
                    user.initalizeUserInfo(capaLoad);
                }
            }
        });
        return false;
    },

    inviteFriends:function(elem)
    {
        var uri=$(elem).attr('href');

        gui.loadModal('main_dialog', uri, 400);
        return false;
    }
};

var signup=
{
  type:'user',
  urlValidateEmail:null,

  reglasValidacion:function()
  {
     $('#'+this.type+'_email').rules('add',{
      "remote":this.urlValidateEmail
    });
  }
};

var messages=
{
  changeAll:function(elem)
  {
    var value=$(elem).attr('checked');
    $('.check_message').attr('checked',value);
  },

  deleteMessages:function(messageConfirm)
  {
    if(confirm(messageConfirm))
    {
      $('form').submit();
      return true;
    }
    return false;
  },


  sendMessage: function(elem){
        gapi.cleanMsg();
        var gMD = $('#main_dialog');

        gMD.dialog({
          'width':350,
          'modal':true,
          'resizable':false
        });

        gMD.dialog('open');
        var uri =  $(elem).attr('href');

        gapi.showLoadingPopup();
        gMD.load(uri,function(){
          var uri=gMD.find('form').attr('action');
          messages.iniciarVentana(uri,gMD);
        });

        return false;
    },

    iniciarVentana:function(uri,gMD)
    {
      //Coge el titulo y lo pone como cabecera del popup
      var title = $('#main_dialog h1').html();
      $('#ui-dialog-title-main_dialog').html(title).show();
      $('#main_dialog h1').remove();


      //Añade el evento de cerrar al boton
      gMD.find('a.cancel').click(function()
      {
          $('#main_dialog').dialog('close');
          return false;
      });

      gMD.find('form').submit(function(){
        var formParams=$(this).serialize();
        gapi.showLoadingPopup();
          $.ajax({
            url:uri,
            type: "POST",
            data: formParams,
            success: function(html)
            {
              var gMD = $('#main_dialog');
              gMD.html(html);
              var uri=gMD.find('form').attr('action');
              messages.iniciarVentana(uri,gMD);
            }
          });
          return false;
        });
    },

    addDestinatary:function(id)
    {
      this.changeNumTo(1);

      var fila=$('#tr_'+id);
      fila.after(fila.clone());

      this.updateDestinataries();

      return false;
    },

    removeDestinatary:function(id)
    {
      this.changeNumTo(-1);

      $('#tr_'+id).remove();

      this.updateDestinataries();

      return false;
    },

    updateDestinataries:function()
    {
      $('.destinatary').each(function(index){
        $(this).attr('id','tr_to_user_id'+index);
        $('#tr_to_user_id'+index+' select').attr('name','mail[to_user_id'+index+']');

      });
    },

    changeNumTo:function(num)
    {
      var contador=$('#mail_numTo');
      contador.attr('value',parseInt(contador.attr('value'))+num);
    }
};

var geolocation=
{
    urlSearchCity:'/search_city',
    appendTo:'body',

    searchCityAutocomplete:function(inputElement, idElement,border,callBackFunc)
    {
      $(inputElement).autocomplete({
        appendTo:geolocation.appendTo,
        source: function( request, response ) {
          if (!geolocation.searching)
          {
            geolocation.searching = true;
            $(inputElement).after('<img id="ui-autocomplete-loading-icon" src="/images/global/loader2.gif" />');
          }
          $.ajax({
            url: geolocation.urlSearchCity,
            data: {name: request.term},
            success: function( dataIn ) {
              var data=jQuery.parseJSON(dataIn);
              if (data)
              {
                response( $.map( data, function( item ) {
                  return {
                    label: item.city_name + (item.region ? ", " + item.region : "") + ", " + item.country,
                    value: item.city_id
                  };
                }));
              }
              $('#ui-autocomplete-loading-icon').remove();
              geolocation.searching = false;
            }
          });
        },
        delay: 1000,
        minLength: 1,
        focus: function (event, ui)
        {
          $(this).val(ui.item.label);
          return false;
        },
        select: function( event, ui ) {
          if (ui.item)
          {
            $(inputElement).val(ui.item.label);
            $(idElement).val(ui.item.value);

            if(callBackFunc!==undefined)
            {
                eval(callBackFunc);
            }
          }
          return false;
        },
      open: function()
      {
          if(border===undefined || border)
          {
            $( this ).removeClass( "ui-corner-all" ).addClass( "ui-corner-top" );
          }
        },
      close: function()
      {
        if(border===undefined || border)
        {
            $( this ).removeClass( "ui-corner-top" ).addClass( "ui-corner-all" );
        }
      }
      });
    }
};


var commentUrl = null;

var embed={
    title: null,
    html: null,
    description: null,
    keywords: null,
    data: null,
    duration: null,
    thumbnail_url: null,
    source_provider: null,
    source_id: null,
    type: null,

    proxy:function(url)
    {
      var embedMedia = $.ajax({
        async: false,
        type: "get",
        url: '/embed-proxy',
        data: {'url': url, 'format': 'json'}
      }).responseText;

      if (embedMedia)
      {
        embedMedia = $.parseJSON(embedMedia);
        this.title = embedMedia.title;
        var htmlEmbed = embedMedia.html.replace(/width="\d+" height="\d+"/gi, 'width="240" height="180"');
        this.html = '<div id="video_source_sample">'+htmlEmbed+'</div>';
        this.description = embedMedia.description;
        this.keywords = embedMedia.keywords;
        this.data = embedMedia.data;
        this.duration = embedMedia.duration;
        this.thumbnail_url = embedMedia.thumbnail_url;
        this.source_provider = embedMedia.source_provider;
        this.source_id = embedMedia.source_id;
        this.type = embedMedia.type;

        return this;
      }
      else
      {
        return false;
      }
    },

    renderPreview:function(htmlObject)
    {
      htmlObject.after('<div id="comment_attach_loader"><img src="/images/global/loader.gif" /></div>');
      $.ajax({
        type: "get",
        url: '/embed-preview',
        data: {'url': commentUrl},
        success: function(result)
        {
          $('#comment_attach_loader').remove();
          if (result)
          {
            htmlObject.after(result);
            $('#comment_attach_remove a').click(function(){
              $('#comment_attach_preview').fadeOut('slow', function(){$(this).remove();});
              $(htmlObject).val('');
              commentUrl = null;
              return false;
            });
          }
        }
      });
      return false;
    }
};

var comment={
    post:function(commentForm, target,position)
    {
      var commentElement = commentForm.find('textarea');
      var comment = commentElement.val();

      if (comment === '' )
      {
        return false;
      }

      var serialize=commentForm.serialize();

      commentElement.val("Please wait ...");
      commentElement.attr('disabled', 'disabled');

      $.ajax({
          async: false,
          type: "post",
          url: commentForm.attr('action'),
          data: serialize,
          success: function(result){
            if (result !== '')
            {
              if (position == 'top')
              {
                $(target).before(result);
              }
              else if (position == 'bottom')
              {
                $(target).after(result);
              }

              if ($('#comment_attach_preview'))
              {
                $('#comment_attach_preview').remove();
              }

              commentElement.val('');

              commentUrl = null;
            }else{
              alert('Error posting comment, please try again.');
              commentElement.val(comment);
            }
          }
      });

      commentElement.removeAttr('disabled');
      return false;
    },

    deleteElement:function(url, id)
    {
      if (confirm('Do you really want to delete this comment?'))
      {
        $.ajax({
          type: "get",
          url: url,
          success: function(result){
            if (result == 1){
              $('#comment-'+id).fadeOut('slow');
            }else{
              alert('Error deleting comment, please try again.');
            }
          }
        });
      }

      return false;
    },

    load:function(relatedObjectClass, relatedObjectId, behavior)
    {
      $.ajax({
        type: "get",
        url: '/'+constants.culture+'/comment/load/'+relatedObjectClass+'/'+relatedObjectId+'/'+behavior,
        success: function(result)
        {
          if (result)
          {
            $('#comment_form-'+relatedObjectId).replaceWith(result);
          }
        }
      });
      return false;
    },

    showTextarea:function(id)
    {
      $('.comment_textarea').hide();
      $('.comment_placeholder').show();
      $('#comment_placeholder-'+id).hide();
      $('#comment_textarea-'+id).show();
      $('#comment_textarea-'+id+' textarea').focus();
    },

    parse:function(textarea)
    {
      var textareaValue = textarea.val();
      if (!commentUrl)
      {
        var urlMatch = textareaValue.match(/((http[s]?|ftp):\/)?\/?([^:\/\s]+)(:([^\/]*))?((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(\?([^#]*))?(#(.*))?/);
        if (urlMatch){
          commentUrl = urlMatch[0];
          var embedMedia = embed.renderPreview(textarea, this);
        }
      }
    }
};

var activity={

     urlMoreNoValidates:"",

    comment:function(linkElementId)
    {
      var linkElementIdArray = linkElementId.split('-');
      var commentTextareaId = linkElementIdArray[linkElementIdArray.length-1];
      comment.showTextarea(commentTextareaId);
    },

    deleteElement:function(url)
    {
      var urlPath = url.split('/');
      var activityId = urlPath[urlPath.length-1];

      if (confirm('Do you really want to delete this post?'))
      {
        $.ajax({
          type: "get",
          url: url,
          success: function(result){
            if (result == 1){
              $('#activity_stream_element-'+activityId).fadeOut('slow');
            }else{
              alert('Error deleting activity, please try again.');
            }
          }
        });
      }
    },

    load:function(id, cursor)
    {
      $.ajax({
        type: "get",
        url: '/'+constants.culture+'/activity/load/'+id+'/'+cursor,
        success: function(result)
        {
          if (result)
          {
            $('.activity_stream_pager:last').hide();
            $('.activity_stream_pager:last').after(result);
          }
        }
      });
      return false;
    },

    loadElement:function(id)
    {
        $.ajax({
            type: "get",
            url: '/frontend_dev.php/activity/get/element/'+id,
            success: function(result)
            {
                if(result)
                {
                    $('.activity_stream').prepend(result);
                }
            }
        });
    },

    publishNoValidate: function(element,url)
    {
        activity.transitionEffect(element);

        $.ajax({
            type: "get",
            url: url,
            success: function(result)
            {
                if(result)
                {
                    activity.loadElement(result);//Carga el elemento validado
                    activity.loadOtherElementNoValidate(element);//Carga otro elemento no validado
                }
            }
        });
    },

    deleteNoValidate: function(element,url)
    {
        activity.transitionEffect(element);

         $.ajax({
            type: "get",
            url: url,
            success: function()
            {
                activity.loadOtherElementNoValidate(element);
            }
        });
    },

    transitionEffect:function(element)
    {
        var container=activity.getContainerByElement(element);

        container.find('a').click(function(e){e.preventDefault();return false;});

        container.animate({opacity:0.6},1000);
    },

    getContainerByElement:function(element)
    {
        var params=element.id.split("-");

        return $("#activity_stream_element-"+params[params.length-1]);
    },

    loadOtherElementNoValidate: function(element)
    {
        $.ajax({
            type: "get",
            url:activity.urlMoreNoValidates,
            success: function(content)
            {
                var container=activity.getContainerByElement(element);

                if(content=='NO-RESULTS')
                {
                    container.remove();
                }
                else
                {
                    container.replaceWith(content);
                }
            }
        });
    }
};


var spots=
{
    urlUserActivities:null,
    imagePlaySlideshow:null,
    imagePauseSlideshow:null,
    culture:'en',
    urlRenderGallery:null,
    data:[],
    urlNearSpots:null,
    map:null,
    urlFeaturesSpots:null,
    firstLoadFeatures:true,

    viewBigMap:function(element)
    {
        gui.loadModal('main_dialog', $(element).attr('href'), 850);
        return false;
    },

    addPlace:function(elementIn)
    {
        var element=$(elementIn);

        var url=element.attr('href');

        var div=$('.spot-activities .user_activities');

        var checked=element.hasClass('checked');

        if(checked)
        {
            element.removeClass("checked");
        }
        else
        {
            element.addClass("checked");
        }

        spots.cambiarValorContador(element, checked?(-1):(+1));

        $.ajax({
            url: url,
            data: {"checked":checked?'true':'false'},
            success: function()
            {
                div.load(spots.urlUserActivities);
            }
        });

        return false;
    },

    cambiarValorContador:function(element,cambio)
    {
        var count=element.parent().find('.views a b');

        count.html(parseInt(count.html())+cambio);
    },

    viewNearest:function(element)
    {
        gui.loadModal('main_dialog',$(element).attr('href'),500);
        return false;
    },

    viewSpotsByTag: function(element)
    {
        gui.loadModal('main_dialog',$(element).attr('href'),500);
        return false;
    },

    uploadFile:function(element)
    {
        gui.loadModal('main_dialog',$(element).attr('href'),400);
        return false;
    },

    viewUsersBySpotActivity:function(element)
    {
        gui.loadModal('main_dialog',$(element).attr('href'),500);
        return false;
    },

    initGallery:function(element)
    {
        $(element).adGallery({
        effect:'fade',
        slideshow:
        {
            autostart: false,
            loader:false,
            speed: 3000,
            start_label: '<img id="gallery_play" height="17" src="'+spots.imagePlaySlideshow+'"/>',
            stop_label: '<img id="gallery_pause" height="17" src="'+spots.imagePauseSlideshow+'"/>'
        },
        callbacks:
        {
            init: function()
            {
              //Se cargan las dos primeras imagenes
              this.preloadImage(0);
              this.preloadImage(1);
            },
            afterImageVisible: function()
            {
              var context = this;

              var image=this.images[this.current_index];

              var type=image.id.split("-")[0];

              if(type=='video')//Si es un video se tiene que cargar el player
              {
                var id=image.id.split("-")[1];

                $(this.current_image).css("cursor","pointer");

                //Evento para cuando se hace click en la imagen
                $(this.current_image).click(function()
                {
                    var currentImage=$(this);

                    var embed_type=image.id.split("-")[2];

                    if(embed_type==="" || embed_type==="url")//Si no es embedida, o es embebida de tipo url
                    {
                        currentImage.flash({
                            swf:'/library/player/trunk/as3/player.swf',
                            width:'526',
                            height:'320',
                            flashvars: {
                                config: "/config/"+spots.culture+"/video_player/get/"+id,
                                autostart: true
                            }
                        });
                    }
                    else //Si es embebida de tipo objeto
                    {
                        currentImage.load("/videos/get/embed/"+id);
                    }

                    currentImage.width(526);
                    currentImage.height(320);
                    currentImage.css("left",'25px');
                    currentImage.css("top",0);
                    currentImage.css("z-index",101);

                    currentImage.unbind("click");
                });

              }

              //Precarga de la siguiente imagen
              this.loading(true);
              this.preloadImage(this.current_index + 1,function(){context.loading(false);});
            }
        }
    });
    },

    reloadGallery:function()
    {
        if(spots.urlRenderGallery!==null)
        {
            $("#spot-gallery").load(spots.urlRenderGallery);
        }
    },

    init:function(step)
    {
        $("div."+step+" form").submit(function(){

            var elem=$(this);

            var divMain=$("div."+step);

            divMain.html("<div class=\"loading\"></div>");

            $.ajax({
                type: 'post',
                url: elem.attr("action"),
                data: elem.serialize(),
                dataType: "html",
                success:function(html)
                {
                    divMain.html(html);
                }
            });

            return false;
        });

        $("div."+step+" input")
            .focus(function(){
                spots.showInfo(this);
            })
            .blur(function(){
                spots.hideInfo(this);
            });

        if(step=='new')
        {
            spots.map.functionSelectHook=[];
            spots.map.functionSelectHook[0]=spots;
            spots.map.functionSelectHook[1]=function(mouseEvent)
            {
                $("#nearSpots").html('');
                $.ajax({
                    type: 'post',
                    url: this.urlNearSpots,
                    data: {
                        latitude:mouseEvent.latLng.lat(),
                        longitude:mouseEvent.latLng.lng()
                    },
                    dataType: "html",
                    success:function(html)
                    {
                        $("#nearSpots").html(html);
                    }
                });
            };
        }
    },

    showInfo:function(element)
    {
        $(element).siblings("div.info-box").show('blind',500);
    },

    hideInfo:function(element)
    {
        $(element).siblings("div.info-box").hide('blind',500);
    },

    loadNextStep:function(div,url)
    {
        if($("div."+div).html()==='')
        {
            spots.loadStep(div, url);
        }
    },

    loadStep:function(div,url)
    {
        $.ajax({
            type: 'get',
            url: url,
            success:function(html)
            {
                $("div."+div).html(html);
            }
        });
    },

    selectTag:function(tag)
    {
       var elem=$(tag);

       if(elem.hasClass('selected'))//Si esta seleccionado, se desmarca
       {
        elem.removeClass('selected');
       }
       else //Si no lo esta, se marca
       {
        elem.addClass('selected');
       }
    },


    updateRadios:function(busqueda)
    {
        $(busqueda).each( function(index,value)
        {
            var elemParent=$(value).parent();
            var checked=elemParent.find("input").attr('checked');
            elemParent.addClass(checked?"on":"off");
            elemParent.removeClass(checked?"off":"on");

            if(checked)
            {
                var tags_list=$('#spots_tags_list');
                if(!tags_list.is(":visible"))
                {
                    tags_list.show('blind');
                }

            }
        });
    },

    skip:function(elementIn,step)
    {
        $.ajax({
            type: 'get',
            url: $(elementIn).attr("href"),
            data: 'skip=true',
            success:function(html)
            {
                $("div."+step).html(html);
            }
        });

        return false;
    },

    save:function(elementIn,step)
    {
        $('div.'+step+" form").submit();
        return false;
    },

    edit:function(elementIn,step)
    {
        spots.loadStep(step, $(elementIn).attr("href"));
        return false;
    },

    deleteFileSpot:function(elementIn,url)
    {
        $.ajax({
           url: url,
           success:function()
           {
            $(elementIn).parent().remove();
           }
        });

    },
    cancel:function(step)
    {
        var url=$('div.'+step+" form").attr("action")+"?skip=true";
        this.loadStep(step, url);
    },

    initIndex:function(gmap)
    {
         //Radios con estilo
        spots.updateRadios("#type_id ul.checkbox_list input");
        $("#type_id ul.checkbox_list li").click(function()
        {
            spots.updateRadios("#type_id ul.checkbox_list label");
        });

        $("#spots_tags_list label").click(function(){
            spots.selectTag($(this).parent());
        });

        $("#spots_tags_list li").click(function()
        {
            spots.selectTag(this);
        });

        //Se resetean los spots cuando se marca alguna opcion
        $('.radio_list input').change(function(){
           gmap.resetSpots();
        });

        $('.checkbox_list input').change(function(){
            gmap.resetSpots();
        });


        //if(gmap.getBounds()==undefined)//Si no hay nada marcado en el mapa, se carga el pais seleccionado segun ip
//        {
            gmap.codeAddress($("#spot_filters_country_id :selected").text());
            gmap.changeZoom(4);
//        }

        $("#spot_filters_country_id").change(function()
        {
            gmap.codeAddress($("#spot_filters_country_id :selected").text());
            gmap.changeZoom(4);
        });

        spots.searchCityAndSpotsAutocomplete("#spot_filters_search",gmap);
    },

    searchCityAndSpotsAutocomplete:function(inputElement,gmap)
    {
        $(inputElement).autocomplete(
        {
            source: function( request, response )
            {
                response([]); //Lo inicializa

                var dataObjects=[];

                var region=$('#spot_filters_country_id :selected').text();

                gmap.getAddressResults(region,request.term,function()
                {
                    var objects=this;
                    $.map(objects,function(item)
                    {
                        var direccion=[];
                        for(var i=0,k=item.address_components.length-1;i<k;i++)
                        {
                            direccion[i]=item.address_components[i].long_name;
                        }

                        var direccionFormateada=direccion.join(',');

                        var object={
                            label:direccionFormateada,
                            value:direccionFormateada,
                            type:'geocodeResult',
                            types: item.types,
                            location: item.geometry.location
                        };

                        dataObjects.push(object);
                    });
                    response(dataObjects);

                });

                $.ajax({
                    url: "/search_city_spots",
                    dataType: "json",
                    data: {
                        search: request.term,
                        country_id: $('#spot_filters_country_id').val()
                    },
                    success: function( data )
                    {
                        if (data)
                        {
                            $.map( data, function( item )
                            {
                                var object={
                                    label: item.title+" (Spot)",
                                    value: item.id,
                                    id: item.id,
                                    type: 'spot',
                                    latitude: item.latitude,
                                    longitude: item.longitude
                                };
                                dataObjects.push(object);
                            }
                            );
                        }
                        response(dataObjects);
                    }
                });
            },
            minLength: 3,
            delay: 350,
            focus: function (event, ui)
            {
                $(this).val(ui.item.label);
                return false;
            },
            select: function( event, ui )
            {
                if (ui.item)
                {
                    var item=ui.item;

                    if(item.type=="spot")
                    {
                        gmap.select(item.id,item.latitude,item.longitude);
                        gmap.changeZoom(15);
                    }
                    else if(item.type=="geocodeResult")
                    {
                        gmap.select(null,item.location.lat(),item.location.lng());
                        gmap.setZoomByTypes(item.types);
                    }
                }
                return false;
            }
        });
    },

    loadFeaturesSpots:function(data)
    {
        if(spots.firstLoadFeatures)
        {
            spots.firstLoadFeatures=false;
        }
        else
        {
            var datas=$.extend(data,$('#formSpotIndex').serializeObject());

            var spotsResults=$('#spotsResults');
            var loadingSpots=$('#loadingSpots');
            var lastSpots=$('#lastSpots');

            loadingSpots.show();
            lastSpots.hide();
            spotsResults.hide();

            $.ajax({
                url: spots.urlFeaturesSpots,
                data: datas,
                dataType:'html',
                type: 'post',
                success:function(result)
                {
                    spotsResults.html(result);
                    loadingSpots.hide();
                    spotsResults.show();
                }
            });
        }

    }
};

var abuse={

    reportAbuse:function(element)
    {
        gui.loadModal('main_dialog',$(element).attr('href'),300);
    }
};

var configuration=
{
    initialize:function()
    {
        $('#form-configuration .helpButton').click(function(){
            var elem=$(this);

            var id=utils.getId(elem);

            if(elem.next().attr('id')!='help-'+id)
            {
                $('#row-'+id).after($('#help-'+id));
            }

            $('#help-'+id).toggle('blind',500,function(){
                $('#form-configuration .ui-effects-wrapper').remove();
            });
        });

    }
};

var fbAdvertising=
{
    initialize:function()
    {
        windowGmd.showModal('infoSignup', 400);

        $('.ui-widget-overlay').attr("id","white-overlay");
        $('.ui-dialog').attr("id","fbDialog");
    }
};


var home=
{
    initSlideshow:function()
    {
        $('#slideshow-videos').adGallery({
            effect:'fade',
            slideshow:
            {
                enable: true,
                autostart: true,
                speed: 5000
            }
        });
    }
};

var shopLocator=
{
    msgSearch:'',
    urlFeaturesShops:null,
    urlSearchShop:null,
    initCountryName:null,

    loadShops:function(data)
    {
        if(shopLocator.urlFeaturesShops!==null)
        {
            var results=$('#shops-result');
            var loading=$('#shop-result-loading');

            loading.show();
            results.hide();

            var datas=$.extend(data,$('#form-shop-locator').serializeObject());

            $.ajax({
                url: shopLocator.urlFeaturesShops,
                data: datas,
                dataType:'html',
                type: 'post',
                success:function(result)
                {
                    results.html(result);//Se carga el html

                    loading.hide();//Se oculta el cargando
                    results.show();//Se muestran los resultados
                }
            });
        }
    },

    initIndex:function(gmap)
    {

        var inputSearch=$("#shop_filters_search");

        inputSearch.val(shopLocator.msgSearch);

        inputSearch.focus(function(){
           inputSearch.val("");
        });

        inputSearch.blur(function(){
            if(inputSearch.val()==='')
            {
                inputSearch.val(shopLocator.msgSearch);
            }
        });

        if(shopLocator.initCountryName!==null)
        {
            gmap.codeAddress(shopLocator.initCountryName);
            gmap.changeZoom(4);
        }

        shopLocator.searchCityAndShopsAutocomplete(inputSearch,gmap);
    },


    searchCityAndShopsAutocomplete:function(inputElement,gmap)
    {
        $(inputElement).autocomplete(
        {
            source: function( request, response )
            {
                response([]); //Lo inicializa

                var dataObjects=[];

                gmap.getAddressResults(null,request.term,function()
                {
                    var objects=this;
                    $.map(objects,function(item)
                    {
                        var direccion=[];
                        for(var i=0,k=item.address_components.length-1;i<k;i++)
                        {
                            direccion[i]=item.address_components[i].long_name;
                        }

                        var direccionFormateada=direccion.join(',');

                        var object={
                            label:direccionFormateada,
                            value:direccionFormateada,
                            type:'geocodeResult',
                            types: item.types,
                            location: item.geometry.location
                        };

                        dataObjects.push(object);
                    });
                    response(dataObjects);

                });

                $.ajax({
                    url: "/search_country/",
                    dataType: "json",
                    data: {search: request.term},
                    success: function( data )
                    {
                        if (data)
                        {
                            $.map( data, function( item )
                            {
                                var object={
                                    label: item.name,
                                    value: item.id,
                                    id: item.id,
                                    name: item.name,
                                    type: 'country'
                                };
                                dataObjects.push(object);
                            }
                            );
                        }
                        response(dataObjects);
                    }
                });

                $.ajax({
                    url: shopLocator.urlSearchShop,
                    dataType: "json",
                    data: {search: request.term},
                    success: function( data )
                    {
                        if (data)
                        {
                            $.map( data, function( item )
                            {
                                var object={
                                    label: item.first_name+" (Shop)",
                                    value: item.id,
                                    id: item.id,
                                    type: 'shop',
                                    latitude: item.latitude,
                                    longitude: item.longitude
                                };
                                dataObjects.push(object);
                            }
                            );
                        }
                        response(dataObjects);
                    }
                });

            },
            minLength: 3,
            delay: 350,
            focus: function (event, ui)
            {
                $(this).val(ui.item.label);
                return false;
            },
            select: function( event, ui )
            {
                if (ui.item)
                {
                    var item=ui.item;

                    if(item.type=="shop")
                    {
                        gmap.select(item.id,item.latitude,item.longitude);
                        gmap.changeZoom(15);
                    }
                    else if(item.type=="country")
                    {
                        gmap.codeAddress(item.name);
                        gmap.changeZoom(4);
                    }
                    else if(item.type=="geocodeResult")
                    {
                        gmap.select(null,item.location.lat(),item.location.lng());
                        gmap.setZoomByTypes(item.types);
                    }
                }
                return false;
            }
        });
    }
};

var like=
{
    urlRender: '/ajax/like/render',
    urlSend: '/ajax/like/post',

    renderLike:function(elem,related_user_id,class_in,class_id)
    {
        $.ajax({
           url: like.urlRender,
           type: 'post',
           dataType:'html',
           data: {'r_u_id':related_user_id,'c':class_in,'c_id':class_id},
           success:function(data)
           {
               if(data.indexOf("FALSE")<0)
               {
                var element=$('#'+elem);
                element.append(data);
                element.show();
               }
           }
        });
    },

    sendLike: function(elem)
    {
        var element=$(elem);

        $.ajax({
            url: like.urlSend,
            type: 'post',
            data: {'r_u_id':element.attr("r_u_id"),'c':element.attr("c"),'c_id':element.attr("c_id")}
        });

        element.parent().hide();

        return false;
    }
};

var importVideos=
{
    loadingMsg:'',
    urlAcceptAllVideos:'',

    countImporteds:0,

    loadInput: function(url)
    {
        var divLoad=$('#import-videos');

        divLoad.load(url,function(){
            divLoad.slideDown(500);
        });
    },

    submitSearch:function(formIn)
    {
        var form=$(formIn);

        var divLoad=$('#import-videos');

        $("#import-videos-content").html('<div class="loading" id="loading-import-videos">'+importVideos.loadingMsg+'</div>');

        $.ajax({
            type:'post',
            dataType:'html',
            data: form.serialize(),
            url: form.attr('action'),
            success: function(data)
            {
                divLoad.html(data);
            }
        });
        return false;
    },

    accept:function(id)
    {
        var form=$('#form-'+id);

        var div=$('#video-importable-'+id);

        div.html('<div class="loading">'+importVideos.loadingMsg+'</div>');

        $.ajax({
            type:'post',
            dataType:'html',
            data: form.serialize(),
            url: form.attr('action'),
            success:function(data)
            {
                if(data=='1')
                {
                    importVideos.hideVideo(id);
                }
                else
                {
                    div.html(data);
                }
            }

        });

        return false;
    },

    acceptAll:function()
    {
        gui.loadModal('main_dialog',importVideos.urlAcceptAllVideos,300,null);
    },

    hideVideo:function(id)
    {
        $('#video-importable-'+id).slideUp(500);
    },

    cancel:function(id)
    {
        this.hideVideo(id);
        return false;
    },

    closeBox:function()
    {
        $('#import-videos-box').hide();
        return false;
    },

    importAll:function()
    {
        //Se cambia el deporte de todos los formularios
        $('.video-importable select').val($('#sport-videos').val());

        gui.loadModal('main_dialog',importVideos.urlAcceptAllVideos+"?importing=1",300,"importVideos.submitEachForm()");

        return false;
    },

    submitEachForm:function()
    {
        var forms=$('.video-importable form');

        $("#total-videos-imported").html(forms.length);

        importVideos.videosImporteds=0;

        forms.each(function(index,formIn){

            var form=$(formIn);
            var div=form.parent();

            $.ajax({
                type:'post',
                dataType:'html',
                data: form.serialize(),
                url: form.attr('action'),
                success:function(data)
                {
                    div.slideUp(500);
                    importVideos.videosImporteds++;

                    $("#count-videos-imported").html(importVideos.videosImporteds);

                    if(importVideos.videosImporteds==forms.length)
                    {
                        $('#main_dialog').dialog('close');//Se cierra

                        window.location.reload();
                    }
                }
            });
        });
    }
};

var brandShop=
{
    urlChangeState:'/action/brand/shop/activate.html',

    aceptInvitation:function(brand_id)
    {
        brandShop.changeStateInvitation(brand_id,1);
        return false;
    },

    cancelInvitation:function(brand_id)
    {
        brandShop.changeStateInvitation(brand_id,-1);
        return false;
    },

    changeStateInvitation:function(brand_id,state)
    {
        $.ajax({
           type:'post',
           url:brandShop.urlChangeState,
           data:"brand_id="+brand_id+"&state="+state,
           success:function()
           {
               $('#brand-shop-request-'+brand_id).hide();
           }
        });
    },

    addAsShop:function(elem)
    {
        var elemento=$(elem);

        gui.loadModal('main_dialog',elemento.attr("href"),300,null);
        return false;
    }
};

var team=
{
    urlChangeState:'/team/rider/activate.html',

    aceptInvitation:function(team_id,user_id)
    {
        team.changeStateInvitation(team_id,user_id,1);

        return false;
    },
    cancelInvitation:function(team_id,user_id)
    {
        team.changeStateInvitation(team_id,user_id,-1);

        return false;
    },

    changeStateInvitation:function(team_id,user_id,state)
    {
        $.ajax({
           type:'post',
           url:team.urlChangeState,
           data:'id='+user_id+"&team_id="+team_id+"&state="+state,
           success:function()
           {
               $('#rider-request-'+team_id+"-"+user_id).hide();
           }
        });
    },

    addAsRider:function(elem)
    {
        var elemento=$(elem);

        gui.loadModal('main_dialog',elemento.attr("href"),300,null);


        return false;
    }
};

var fileTag=
{
    initInputTag:function(elem,fileId)
    {
        var element=$(elem);

        element.before('<div class="file-tag" id="file-tag"></div>');

        $('#options-list-tags-'+fileId).hide();

        fileTag.loadUserToTag(element,fileId,'');

        element.focus(function(){
            fileTag.loadUserToTag(element,fileId,element.val());
        });

        element.keyup(function(){
            fileTag.loadUserToTag(element,fileId,element.val());
        });
    },

    loadUserToTag:function(element,fileId,name)
    {
        var sep=7;//Separacion entre el input y la capa

        var fileTagDiv=$('#file-tag');

         $.ajax({
            url:"/file/action/tag/users/"+fileId,
            dataType:"json",
            type:'POST',
            data:"name="+name,
            success:function(data)
            {
                fileTagDiv.html('');
                for(var i=0,k=data.length;i<k;i++)
                {
                    var user=data[i];
                    var thumbSrc="/thumbs/30x30x1/"+user.picture_url;

                    fileTagDiv.append('<div class="user-to-tag" id="utt-'+user.id+'-'+fileId+'"><img src="'+thumbSrc+'"/>'+user.first_name+' '+user.last_name+'</div>')
                }

                var elementPosition=element.position();
                fileTagDiv.css('left',elementPosition.left).css('top',elementPosition.top-fileTagDiv.height()-sep);//Se ajusta a la altura
                fileTagDiv.show();

                fileTagDiv.find('.user-to-tag').click(function(){
                    var params=this.id.split("-");
                    fileTag.saveTag(params[1],params[2]);
                    fileTagDiv.hide();
                    element.val('');
                });
            }
        });
    },

    editTags:function(fileId)
    {
        $.ajax({
            url:'/file/action/editable/tags/'+fileId,
            dataType:"json",
            type:'GET',
            success:function(data)
            {
                if(data)
                {
                    for(var i=0,k=data.length;i<k;i++)
                    {
                        var user=data[i];

                        var userTagged=$('#rbt-'+data[i].user_id+"-"+fileId);

                        if(userTagged.length>0)
                        {
                            userTagged.addClass("user-recent-tagged");
                            userTagged.append(" <b>X</b>");

                            userTagged.click(function(){
                                return fileTag.removeButtonTag(this);
                           });
                        }
                    }
                }
            }
        });

        return false;
    },

    getId:function(idElem)
    {
        var params=idElem.split('-');

        return params[params.length-1];
    },

    saveTag:function(userId,fileId)
    {
        $.ajax({
           url:'/file/action/save/tag/',
           type:'POST',
           data:{userId:userId,fileId: fileId},
           dataType:"json",
           success:function(user)
           {
               var id='rbt-'+user.id+'-'+fileId;

               //Añade el tag
               $('#users-tagged-'+fileId).append(' <a class="user-recent-tagged" href="#" id="'+id+'">'+user.first_name+' '+user.last_name+' <b>X</b></a>');

               $('#'+id).click(function(){
                   return fileTag.removeButtonTag(this);
               });
           }
        });
    },

    removeButtonTag:function(element)
    {
        var params=element.id.split("-");

        this.removeTag(params[2],params[1]);

        $(element).remove();

        return false;
    },

    removeTag:function(fileId,userId)
    {
        $.ajax({url:'/file/action/delete/tag/'+fileId+'/'+userId+'/'});
    },

    cancelTag:function(id)
    {
        $('#file-tag').remove();
    }
};

var images=
{
    cancelLabel:'cancel',
    saveLabel:'save',
    gallery:null,
    currentImage:null,
    idUser:null,
    urlPattern:".*/images/[a-z0-9A-Z_\+]+/[0-9]+.*",
    galleryStarted:false,
    inputTagTextDefault:'',
    finishUpload:false,
    filesIdUploads:[],

    initUploader:function(id)
    {
        var uploader= new qq.FileUploader({
            element: document.getElementById(id),
            action: '/images/action/upload',
            allowedExtensions: ['jpg','png','gif','jpeg'],
            onComplete: function(id, fileName, responseJSON){
                if(responseJSON.success)
                {
                    images.filesIdUploads.push(responseJSON.id);

                    if(uploader._filesInProgress==0 && !images.finishUpload)
                    {
                        images.finishUpload=true;

                        //Se carga la edicion de imagenes
                        $.ajax({
                            url:"/images/action/edit/uploads/?ids="+images.filesIdUploads.join(','),
                            success:function(html)
                            {
                                var imagesIndex=$('#images-index');

                                //ToDo mirar si habria alguna forma de cambiar esto
                                if(imagesIndex.length==0)
                                {
                                    $('#left_column').remove();
                                    $('#inner_column').css('width','650px').html(html);
                                }
                                else
                                {
                                    imagesIndex.hide();
                                    imagesIndex.before(html);
                                }
                            }
                        });

                        $('#dialog-add-images').dialog('close');
                    }
                }
            },
            template: '<div class="qq-uploader">' +
                '<div class="qq-upload-drop-area"><span>'+translations['drop_files']+'</span></div>' +
                '<div class="qq-upload-button">'+translations['upload_file']+'</div>' +
                '<ul class="qq-upload-list"></ul>' +
             '</div>'
        });
    },

    initGallery:function(id,imageId)
    {
        var start_at_index=0;
        var regex=new RegExp(images.urlPattern);

        $('.hash_fake').remove();//Borra los anteriores

        if((imageId===null || imageId===undefined) && regex.test(window.location.hash))
        {
            imageId=window.location.hash.replace("#","");
        }

        if(imageId!==null && imageId!==undefined)
        {
            start_at_index=$('ul.ad-thumb-list img').index(document.getElementById(imageId));
        }

        images.galleryStarted=true;

        $(id).adGallery({
            effect:'fade',
            width:950,
            height:520,
            start_at_index:start_at_index,
            slideshow:
            {
                autostart: false,
                enable:false
            },
            callbacks:
            {
                init:function()
                {
                  images.galleryStarted=true;
                  images.gallery=this;
                  $('#ad-slideshow-controls').hide();
                },
                afterImageVisible: function()
                {
                    var currentImage=this.images[this.current_index];

                    if(images.currentImage===null || currentImage.id!=images.currentImage.id )
                    {
                        images.currentImage=currentImage;

                        $('.hash_fake').remove();//Borra los anteriores
                        $('body').prepend('<div id="'+currentImage.id+'" class="hash_fake"></div>');//Crea una capa falsa

                        window.location.hash=currentImage.id;

                        images.loadInfoImage(images.getCurrentImageId());//Carga la informacion de la imagen
                    }

                    this.preloadImage(this.current_index + 1);// se carga la siguiente
                 }
             }
        });
    },

    addPhotos:function()
    {
        gui.loadModal('dialog-add-images','/images/add/',550,function(){
            images.initUploader("file-uploader");
            $('.cancel-btn').click(function(){
               $('#dialog-add-images').dialog('close');
            });
        },'dialog-add-images');

        return false;
    },

    getCurrentImageId:function()
    {
        return images.getImageId(images.currentImage.id);
    },

    getImageId:function(id)
    {
        var idsSplit=id.split('/');
        return idsSplit[idsSplit.length-1];
    },

    loadInfoImage:function(idImage)
    {
        //ToDo refactorizar codigo hay mucho codigo en esta funcion

        $('#gallery-images-bottom').html('<div class="loading"></div>');//Cargando

        images.idUser=null;

         var image=$('.ad-image img');

         $.ajax({
            dataType:'html',
            type:'POST',
            data: {
                height:image.css('height'),
                width:image.css('width')
            },
            url:'/image/ajax/info/'+idImage+'/',
            success:function(data)
            {
               $('#gallery-images-bottom').html(data);

                $('div.ad-image').click(function(){
                    images.gallery.showImage(images.gallery.current_index + 1);
                });

               var editTags=$('#edit-tags-'+idImage);
               var imageTag=$('#image-tag');
               var imageTagCancel=$('#image-tag-cancel');


               //Boton editar tags
               editTags.click(function(){
                   editTags.hide();
                   var finishEditTags=$("#finish-edit-tags-"+idImage);
                   fileTag.editTags(idImage);

                   finishEditTags.show();//Muestra el boton de terminar
                   finishEditTags.click(function(){
                       images.reloadInfo();
                       return false;
                   });
                   return false;
               });

                //Boton etiquetar la foto
               imageTag.click(function(){
                   $(this).hide();
                   imageTagCancel.parent('li').show();
                   fileTag.initInputTag(document.getElementById("input-tag-"+idImage),idImage);
                   $('#li-input-tag').show();
                   $('#users-tagged-'+idImage).show();
                   return false;
               });

               //Boton cancelar etiquetado
               imageTagCancel.click(function(){
                   imageTagCancel.parent('li').hide();
                   imageTag.show();
                   $('#li-input-tag').hide();
                   fileTag.cancelTag(idImage);
                   images.reloadInfo();
                   return false;
               });

               //Boton eliminar tag
               $('#image-delete-tag').click(function(){
                  $.get(this.href,function(){
                    images.reloadInfo();
                  });
                  return false;
               });
            }
        });
    },

    reloadInfo:function()
    {
        images.loadInfoImage(images.getCurrentImageId());
    },

    initEditUploads:function()
    {
        //Etiquetado
        $('.options-tag').each(function(index,element){
            var optionTag=$(element);
            var tagButton=optionTag.find('.tag');
            var untagButton=optionTag.find('.untag');

            //boton de etiquetado
            tagButton.click(function(){
               optionTag.find('.tag-users').show();
               untagButton.show();
               tagButton.hide();
               fileTag.initInputTag(optionTag.find('.input-tag'),images.getIdImage(tagButton.attr('id')));
            });

            //boton de terminar etiquetado
            untagButton.click(function(){
               optionTag.find('.tag-users').hide();
               optionTag.find('.users-taggeds').show();
               untagButton.hide();
               tagButton.show();

               fileTag.cancelTag(optionTag.find('.input-tag'));
            });
        });


        //Salvar
        $('.options .save').click(function()
        {
            var idImage=images.getIdImage(this.id);
            var form=$('#image-uploaded-'+idImage+" form");
            $.ajax({
                url:form.attr('action'),
                data:form.serialize(),
                type:'POST',
                success:function(data)
                {
                    $('#image-uploaded-'+idImage).remove();
                    images.checkIfRedirectGallery();
                }
            });
        });

        //Eliminar
        $('.options .delete').click(function()
        {
            var idImage=images.getIdImage(this.id);

            $.ajax({
                url: '/images/action/delete/'+idImage+'?noreturn=true',
                success:function()
                {
                    $('#image-uploaded-'+idImage).remove();
                    images.checkIfRedirectGallery();
                }
            });
        });
    },

    checkIfRedirectGallery:function()
    {
        if($('.image-entry').length==0)
        {
            window.location.reload();
        }
    },

    getIdImage:function(cadena)
    {
        var idsParams=cadena.split('-');
        return idsParams[idsParams.length-1];
    },

    loadImageInGalleryByHash:function(hash)
    {
        if(hash===null || hash===undefined)
        {
            hash=window.location.hash.replace("#","");
        }
        //busqueda de la imagen por su identificador
        for(var i=0;i<images.gallery.images.length;i++)
        {
            if(images.gallery.images[i].id==hash)
            {
                images.gallery.showImage(i);
                break;
            }
        }
    },

    initImages:function()
    {
        $('a.user-image').live('click',function(e)
        {
            images.modalFullscreen(this.href.split("#")[1]);
            return false;
        });

        images.checkUrl();

        //Deteccion del cambio del hash
        if (("onhashchange" in window) && !($.browser.msie))
        {
             window.onhashchange = function ()
             {
                 images.checkUrl();
             };
        }
        else
        {
            var prevHash = window.location.hash;
            window.setInterval(function ()
            {
               if (window.location.hash != prevHash)
               {
                   images.checkUrl();

               }
            }, 150);
        }

        $(document).keyup(function(e)
        {
            if(images.galleryStarted &&e.keyCode == 27)
            {
                images.closeModalFullscreen();
            }
        });
    },

    checkUrl:function()
    {
        var regexp=new RegExp(images.urlPattern);

        if(regexp.test(window.location.href.split("#")[0]))
        {

        }
        else if(regexp.test(window.location.hash))//Si del hash coincide
        {
            if(!images.galleryStarted)
            {
                images.modalFullscreen(window.location.href.split("#")[1]);
            }

            images.loadImageInGalleryByHash();
        }
        else//Si no coincide, se cierra la ventana modal
        {
            images.closeModalFullscreen();
        }
    },

    modalFullscreen:function(hash)
    {
        $('body').append('<div id="modal_overlay"></div>');
        $('body').append('<div id="modal_fullscreen"></div>');

        var mF= $('#modal_fullscreen');
        var mO= $('#modal_overlay');

        mO.css('opacity',0.85);
        mO.css('background-color','#000000');
        mO.css('position','absolute');
        mO.css('top',0);
        mO.css('left',0);
        mO.css('width',$(window).width());
        mO.css('height',$('#principal').height());

        mF.html('<div class="loading"></div>');

        $('#top-bar').hide();
        $('#searchForm').hide();

        mF.css('position','absolute');
        mF.css('top',0);
        mF.css('left',0);
        mF.css('width',$(window).width());
        mF.css('height',$('#principal').height());

        var url=hash+"/ajax/";

        if(hash.indexOf('?')>=0)
        {
            url=hash.split('?')[0]+"/ajax/?"+ hash.split('?')[1];
        }
        mF.load(url);

        //Si hace un click fuera del area
        mF.click(function(e)
        {
            if(e.target.id==mF.attr("id"))
            {
                images.closeModalFullscreen();
            }
        });

        return mF;
    },

    closeModalFullscreen:function()
    {
        $('#modal_overlay').remove();
        $('#modal_fullscreen').remove();

        $('#top-bar').show();
        $('#searchForm').show();

        if(window.location.hash!=='')
        {
            window.location.hash="";
        }

        images.currentImage=null;
        images.galleryStarted=false;

        return false;
    }
};


var promotion={

    userAuthenticated:false,

    initSearchColumn:function(id,url)
    {
        var div=$('#'+id);

        div.load(url,function(){
            var input=div.find('.search-input');

            input.change(function(){

               var form=div.find('form');
               var action=form.attr('action');

                $.ajax({
                    url:action,
                    type:'POST',
                    data:form.serialize(),
                    success:function(data){
                        div.find('.results').html(data);
                    }
                });
            });
        });
    },

    initSearch:function(idLoad,idForm)
    {
        var div=$('#'+idLoad);
        var form =$('#'+idForm);

        var comboInput=form.find('.search-input');

        comboInput.change(function(){
             $.ajax({
                    url:form.attr('action'),
                    type:'POST',
                    data:form.serialize(),
                    success:function(data){
                        div.html(data);
                    }
                });
        });
    },


    init:function(elemMenu)
    {
        var menu=$('#promotion-menu');

        menu.find('li').click(function(){
           window.location.href=$(this).find('a').attr('href');
        });

        if(elemMenu!==null && elemMenu!=='')
        {
            $('#pm-'+elemMenu).addClass('checked');
        }
    },

    vote:function(resourceId)
    {

        $.ajax({
           url: "/promotion/vote/promotion/resource/"+resourceId,
           dataType:'json',
           success:function(data)
           {
            if(data!==null)
            {
                var info=$('#resource-content-left').find('.info');
                info.show();
                info.html(data.msg);

                info.delay(3000).slideUp('slow');

                if(data.success !== undefined )
                {
                    $('#promotion-resource-votes').html(data.votes);
                    $('#promotion-resource-position').html(data.position);
                }
            }
           }
        });

        return false;
    },

    addFriend:function(elem)
    {
        gui.loadModal('main_dialog', elem.href, 350);

        $('#friend-counter').hide();

        return false;
    },

    showMustBeLogged:function(slug)
    {
        gui.loadModal('main_dialog', "/index.php/promotion/"+slug+"/must/be/logged", 350);

        return false;
    }
};

var constants=
{
   culture:'es'
};

/*relocate flash*/
$(document).ready(function(){
    images.initImages();
    $('.inner_column').prepend($('.flash'));
    gui.gMD = $('#main_dialog');

    //Inicia el menu
    gapi.menuLanguageInit();
    gapi.menuUserInit();
});
