/*
---------------------------------------------------------
*
*	Module "Place"
*	Author: Alexander Zinchuk ( Ajaxy ) 
*	Contact e-mail: hey@ajaxy.ru
*
---------------------------------------------------------
*/

ls_Place = {
  placeId : 0,
  selectedTypes : Array(),
  selectedTypesMaxLength : 0,
  Rating_current : 0,
  Rating_countVote : 0,
  Rating_userIsVote : 0,
  GMapLat : 0.0,
  GMapLng : 0.0,
  catalogueCity : '',
  catalogueType : '',
  catalogueDiv : '',
  catalogueTitleLike : '',
  
  setField : function(fieldName, value) {
    $('place_'+ fieldName).value = value;
  },
  
  create_addType : function(checkbox) {
    if(this.selectedTypesMaxLength == 0) return true;
  
    var type = checkbox.id.substring(checkbox.id.lastIndexOf('_')+1);
    if(this.selectedTypes.contains(type)) {
      this.selectedTypes.erase(type);
    } else if(this.selectedTypes.length < this.selectedTypesMaxLength) {
      this.selectedTypes.push(type);
    }
    checkbox.parentNode.getElements('input[type=checkbox]').each(function(chbox) {
      chbox.disabled = chbox.checked ? false : this.selectedTypes.length >= this.selectedTypesMaxLength;
    }, this);
  },
  
  Rating_move : function(div, e) {
    e = e||window.event;
    if(!div.className) div = div.parentNode;
    div.firstChild.style.width = ((e.layerX||e.offsetX)/120*100) + '%';
    $('place_rating').innerHTML = parseInt((e.layerX||e.offsetX)*500/120);
  },

  Rating_out : function(e) {
    e = e||window.event;
    var target = e.target||e.srcElement;
    if((target.className && target.className == 'stars')) {
      return false;
    }
    $('place_rating').innerHTML = this.Rating_current;
    $('place_rating_stars').style.width = ( this.Rating_current/500*100 + '%' );
  },
  
  Rating_click : function(div, e) {
    e = e||window.event;
    if(!div.className) div = div.parentNode;
    var value = Math.round((e.layerX||e.offsetX)*500/120);
    this.Rating_userIsVote = value;
    return lsVote.vote(this.placeId, div, value, 'place');
  },

  Rating_voted : function(result) {
    this.Rating_current = Math.round(result.iRating);
    this.Rating_countVote = result.iCountVote;
    $('place_rating').innerHTML = this.Rating_current;
    $('place_rating_stars').style.width = ( this.Rating_current/500*100 + '%' );
    $('place_count_vote').innerHTML = result.iCountVote;
    this.Rating_userIsVote = true;
  },
  
  joinLeave : function(obj,idPlace) {   
	obj=$(obj);
	JsHttpRequest.query(
    	DIR_WEB_ROOT+'/include/ajax/place_joinLeave.php',                       
        { idPlace: idPlace },
        function(result, errors) {  
        	if (!result) {
            msgErrorBox.alert('Error','Please try again later');           
        	} else {
            if (result.bStateError) {
            	msgErrorBox.alert(result.sMsgTitle,result.sMsg);
            } else {            	
            	msgNoticeBox.alert(result.sMsgTitle,result.sMsg);
            	if (obj)  {          		
            		if (result.bState) {            			
            			$('place_join_true').style.display = 'none';
            			$('place_join_false').style.display = 'inline';
            		} else {            			
            			$('place_join_true').style.display = 'inline';
            			$('place_join_false').style.display = 'none';
            		}
            		var divCount=$('place_user_count_'+idPlace);
            		if (divCount) {
            			divCount.set('text',result.iCountUser);
            		}
            	}
            }
          }
        },
        true
    );
  },
  
  toggleEdit : function(n, item) {
    var divs = $('place_edit_form').getChildren('div');
    divs.each(function(div) {
      div.setStyle('display', 'none');
    });
    $('placeEdit_div'+n).setStyle('display', 'block');
    var menus = $('place_edit_menu').getChildren('li');
    menus.each(function(div) {
      div.toggleClass('active');
    });
    if(ls_Event && (n == 1 && !ls_Event.GMapsInited)) {
      ls_Event.GMapInit($('gmap_canvas'), this.GMapLat, this.GMapLng, true);
    }
  },
  
  /* Catalogue */
  
  selectCity : function(input) {
    setTimeout(function() {
      if(!input.focused) {
        if(input.value != ls_Place.catalogueCity) {
          ls_Place.catalogueCity = input.value;
          if(!input.value || input.value == '*' || input.value == ls_Place.lang_cities_all) {
            input.value = ls_Place.lang_cities_all;
            ls_Place.catalogueCity = '*';
          }
          ls_Place.loadCatalogue();
        }
        input.removeClass('focused');
      }
    }, 100)
  },
  
  selectType : function(type) {
    types = type.split(',').map(function(v) { return v.trim(); });
    var links = $('place_types').getElements('a');
    links.each(function(link) {
      if(types.contains(link.get('text'))||types.contains(link.get('nativetext'))) {
        link.addClass('active');
      } else {
        link.removeClass('active');
      }
    });
    this.catalogueType = type == this.lang_types_all ? '*' : type;
    this.loadCatalogue();
  },
  
  loadCatalogue : function(filters, catalogueDiv) {
    catalogueDiv = $(catalogueDiv||this.catalogueDiv);
    filters = filters||{},
    filters.city = ls_Place.catalogueCity||'*';
    filters.type = ls_Place.catalogueType||'*';
    filters.sortby = ls_Place.catalogueSortBy;
    filters.titlelike = ls_Place.catalogueTitleLike;
    
    var hash = new Hash(filters);
    location.hash = hash.filter(function(v, k){ return v != '*'; }).toQueryString();
    
    catalogueDiv.getChildren()[1].setStyle('display','none');        	
    catalogueDiv.getChildren()[0].setStyle('display','block');        	
    JsHttpRequest.query(
      DIR_WEB_ROOT+'/include/ajax/place_loadCatalogue.php',                       
      filters,
      function(result, errors) {  
        if (!result) {
          msgErrorBox.alert('Error','Please try again later');           
        } else {
          if (result.bStateError) {
            msgErrorBox.alert(result.sMsgTitle,result.sMsg);
          } else {  
            catalogueDiv.getChildren()[0].setStyle('display','none');        	
            catalogueDiv.getChildren()[1].set('html', result.sText);
            catalogueDiv.getChildren()[1].setStyle('display', 'block');
          }
        }
      },
      true
    );
  },
  
  profile_EventsFilter : function(filter) {
    var menus = $('place_events_filter').getChildren('li');
    menus.each(function(div) {
      div.removeClass('active');
    });
    var active = $('place_events_filter').getFirst('li.'+filter)||$('place_events_filter').getFirst('li.all');
    active.addClass('active');
    var dates = ls_Event.getDatesFromWord(filter).split('-');
    var date = dates.map(function(date){ return ls_Event._convertDate(date, true); }).join('~');
    ls_Event.loadBill({place_id:this.placeId, date:date});
  }
 
}