var massif = {};

massif.error = function(error_msg)
{
  alert(error_msg);
};

massif.search = function(params)
{
  this.url = params.url;
  this.searchParams = params.searchParams;
  this.searchOptions = params.searchOptions;
  this.searchRaw = (params.searchRaw ? params.searchRaw : {});
//  this.debugging = true; 
  this.ajax_enabled = params.ajax_enabled;
  this.ajax_target = params.ajax_target;
  this.change_callback = params.change_callback;
  this.on_reload = params.on_reload;

  //Parse for meta cases.
  for(f in this.searchParams)
  {
    if(f == 'meta')
    {
        for(var mf in this.searchParams[f])
            this.searchParams['meta_'+mf] = this.searchParams[f][mf];
        delete this.searchParams[f];
    }
  }
};

massif.search.prototype.clearParams = function()
{
  this.searchParams = {};
  this.searchOptions = {};
  
  $('.checkbox').not('.standalone').each(function() {
    $(this).removeClass('checked');
  });
}

massif.search.prototype.onClick = function(elem)
{
  elem = $(elem);
  var overrides = {'searchParams':{},'searchOptions':{'sort':'title','sortOrder':'DESC'}};
  var json_str = elem.attr('rel');
  alert(json_str);
  
  try {
    overrides = JSON.parse(json_str);
  } catch (e) { alert(e); }
  
  var key;
  for (key in overrides.searchOptions) this.setOption(key, overrides.searchOptions[key]);
  for (key in overrides.searchParams) this.setParam(key, overrides.searchParams[key]);
  elem.toggleClass('active');
  this.reload();
};

massif.search.prototype.appendParam = function(key, value, reload)
{
  if(this.debugging) console.log('appendParam('+key+', '+value+')');

  if (this.searchParams[key]) {
    //We need to append.
    var oldval = this.searchParams[key];
    var splitval = oldval;
    
    if (!(oldval instanceof Array))
    {
      splitval = oldval.split('|');
    }
    
    for (var i=0; i < splitval.length; i++) if (splitval[i] == value) break;
    
    if (i < splitval.length) splitval.splice(i, 1);
    else splitval.push(value);
    
    if (splitval.length <= 0) delete this.searchParams[key];
    else if (splitval.length == 1) this.searchParams[key] = splitval[0];
    else this.searchParams[key] = splitval;
  }
  else {
    this.searchParams[key] = value;
  }
  
  if(this.change_callback != null) this.change_callback(this, key);
  
  if (reload) this.reload();
};

massif.search.prototype.toggleParam = function(key, value, reload)
{
  if(this.debugging) console.log('toggleParam('+key+', '+value+')');

  if (this.searchParams[key]) delete this.searchParams[key];
  else this.searchParams[key] = value;
  
  if(this.change_callback != null) this.change_callback(this, key);
  
  if (reload) this.reload();
};

massif.search.prototype.unsetParam = function(key, reload)
{
  if(this.debugging) console.log('unsetParam('+key+')');
  delete this.searchParams[key];
  if(reload) this.reload();
};

massif.search.prototype.setParam = function(key, value, reload)
{
  if(this.debugging) console.log('setParam('+key+', '+value+')');
  if (value == null) delete this.searchParams[key];
  else this.searchParams[key] = value;
  
  if(this.change_callback != null) this.change_callback(this, key);
  
  if (reload) this.reload();
};

massif.search.prototype.setOption = function(key, value, reload)
{
  if(this.debugging) console.log('setOption('+key+', '+value+')');
  this.searchOptions[key] = value;
  if (reload) this.reload();
};

massif.search.prototype.setRawParam = function(key, value, reload)
{
  if(this.debugging) console.log('setRawParam('+key+', '+value+')');
  this.searchRaw[key] = value;
  if (reload) this.reload();
};

massif.search.prototype.getParameters = function(mode)
{
  if(!mode) mode = 'GET';
  
  if(mode == 'GET')
  {
    var get_params = 'ajax=' + (this.ajax_enabled ? 1 : 0);
    for (key in this.searchParams)
    {
      var val = this.searchParams[key];
      if (val instanceof Array) val = val.join("|");
      var param = '&sp_' + key + '=' + val;
      get_params += param;
    }
    for (key in this.searchOptions)
    {
      var val = this.searchOptions[key];
      if (val instanceof Array) val = val.join("|");
      var param = '&so_' + key + '=' + val;
      get_params += param;
    }
    for (key in this.searchRaw)
    {
      var param = '&' + key + '=' + this.searchRaw[key];
      get_params += param;
    }
    return get_params;
  }
  else
  {
    var post_params = { ajax : (this.ajax_enabled ? 1 : 0)};
    for (key in this.searchParams)
    {
      var val = this.searchParams[key];
      if (val instanceof Array) val = val.join("|");
      post_params['sp_' + key] = val;
    }
    for (key in this.searchOptions)
    {
      var val = this.searchOptions[key];
      if (val instanceof Array) val = val.join("|");
      post_params['so_' + key] = val;
    }
    for (key in this.searchRaw)
    {
      post_params[key] = this.searchRaw[key];
    }
    return post_params;
  }
}

massif.search.prototype.reload = function()
{
  if (this.ajax_enabled)
  {
    var params = this.getParameters('POST');
    that = this;
    $.ajax({
      dataType : 'html', 
      url : that.url, 
      data : params, 
      type: 'POST', 
      error : function(request, textStatus, errorThrown)
      {
        massif.error(heap.translate('err_ko'));
      }, 
      success : function(response)
      {
        $(that.ajax_target).html(response);
        if (that.on_reload) that.on_reload();
      }
    });
  }
  else
  {
    location.href = this.url + '?' + this.getParameters('GET');
  }
};

function isReady(){	return true;	};
massif.pistes = function(params)
{
  this.flash_area = $(params.embed_selector);
  this.flash_enabled = params.flash_enabled;
};

massif.pistes.prototype.initPage = function ()
{
  var that = this;
  $(".piste_selector").live('click', function() { return that.onClick($(this)); });
  
  $(".ajax_tabs a").live('click', function() {
    var tab = $(this).attr('href');
    tab = tab.substr(1);
    $(".ajax_tabs li").removeClass('selected');
    $(this).parents('li').addClass('selected');
    msearch.setRawParam('tab', tab, true);
    return false;
  });
  
  if (this.flash_enabled)
  {
    var flash_id = this.flash_area.attr('id');
    
    swfobject.embedSWF(
      heap.urlmap.static + '/swf/etatpistes.swf', 
      flash_id, 
      696, 
      348, 
      "10.0.0", //min flash version
      heap.urlmap.static + '/swf/expressInstall.swf',  //express install url
      {//Flash vars
        'lang' :  heap.config.current_language, 
        'media_url' : heap.urlmap.planifier_galeries + '?sp_text='
      }, 
      {
        'wmode' : 'transparent'  //flash params
      }
    );
    this.flash_object = document[flash_id];
  }
};

massif.pistes.prototype.onClick = function (jelem)
{
  var piste_id = jelem.attr('rel');
  var flash_id = this.flash_area.attr('id');
  this.flash_object = document[flash_id];
  this.selectPiste(piste_id);
  
  if (this.flash_enabled && this.flash_object && typeof(this.flash_object.selectPiste) == 'function')
  {
    this.flash_object.selectPiste(piste_id);
    var positions = $("#pistes-flash").position();
    $('html,body').animate({scrollTop: positions.top}, 250);
  }
  return false;
};

massif.pistes.prototype.selectPiste = function (id)
{
  $(".piste_selector").removeClass('active');
  var selected_elem = $("a.piste_selector[rel='" + id + "']");
  if (selected_elem.length > 0)
  {
    selected_elem.addClass('active');
  }
};

massif.pistes.prototype.onReload = function(searchObj)
{
  //Call flash to update filters
  
  var flash_id = this.flash_area.attr('id');
  this.flash_object = document[flash_id];
	
  if (this.flash_enabled && this.flash_object)
  {
  
    var tab = searchObj.searchRaw.tab;
    var filter = '';
    if (tab == 'secteur')
      filter = searchObj.searchParams.meta_secteur ? searchObj.searchParams.meta_secteur : 'all';
    else
      filter = searchObj.searchParams.meta_niveau ? searchObj.searchParams.meta_niveau : 'all';
    
    if (tab == 'secteur' && typeof(this.flash_object.selectSecteur) == 'function') {
      //filtre par secteur
      //envoyer "all" pôur tous les reafficher
      //this.flash_object.selectSecteur(sSecteur);//string
      this.flash_object.selectSecteur(filter);
    }
    else if (tab == 'niveau' && typeof(this.flash_object.selectNiveau) == 'function') {
      //filtre par niveau 
      //envoyer "all" pôur tous les reafficher
      //this.flash_object.selectNiveau(sNiveau);//string
      this.flash_object.selectNiveau(filter);
    }
  }
};


/* --------------------------------------------------------------------------
	Class: atomExpander
	Description: Allow expander class in punymce for atom pages
---------------------------------------------------------------------------- */

massif.atomExpander = function(params)
{
	this.params = params;
	this.selector = params.selector;
	this.trigger = params.trigger;
	this.activeClass = params.activeClass;
	this.lineheight = params.lineheight;
	this.init();
};

massif.atomExpander.prototype.init = function(){
	var that = this;
	$(that.selector).each(function(){	
		
		if($(this).find('.expand_intro').length > 0)
			var computedHeight = $(this).find('.expand_intro').height();
		else
			var computedHeight = that.lineheight * 2;
		
		$(this).css('line-height', that.lineheight+'px').data('infos', {maxheight: $(this).height(), minheight: computedHeight});
		$(this).height( computedHeight ).css('overflow','hidden');
	});
	$(that.trigger).bind('click', function(){ return that.toggle( $(this).parent() ) });
};
	
massif.atomExpander.prototype.toggle = function( item )
{	
	var that = this;
	var _to_expand = $(item).prevAll('.expand_content:eq(0)');
	
	if ( $(_to_expand).hasClass('atom_open') )
		$(_to_expand).animate({height: $(_to_expand).data('infos').minheight + 'px'}).removeClass('atom_open');
	else
		$(_to_expand).animate({height: $(_to_expand).data('infos').maxheight + 'px'}).addClass('atom_open');
	
	return false;
};

massif.atomTable = function(params)
{
	this.params = params;
	this.tableClass = params.tableClass;
	this.init();
}

massif.atomTable.prototype.init = function(item)
{
	var that = this;
	$(that.tableClass).each(function(i){
		/* Check if the table has .odd classes */
		if ( !$(this).find('.odd').length > 0 ) 
		{
			$(this).find('tr:odd').addClass('odd');
			$(this).find('tr:first').css('font-weight','bold');
		}
	});
}

massif.showLoginReminder = function()
{
    jQuery('#medias_login_pane').css('display','none');
    jQuery('#medias_reminder_pane').css('display','block');
}

massif.hideLoginReminder = function()
{
    jQuery('#medias_login_pane').css('display','block');
    jQuery('#medias_reminder_pane').css('display','none');
}

massif.processLogin = function()
{
    //XXX validate form
    //
		var loginMail = jQuery('#login-email').val();
		var loginPass = jQuery('#login-password').val();

		if ( loginMail != '' && loginPass != '' )
		{
			if ( loginMail.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/) == null )
			{
				if (! $('#medias_login .error.forinput').length > 0 )
					jQuery('#login-email').after('<label class="error forinput">'+heap.translate("login_invalid_email")+'</label>');
				
				$('#medias_login .error.emptyinput').remove();
				return false;
			}
		}
		else
		{
			if (! $('#medias_login .error.emptyinput').length > 0 )
				jQuery('#medias_login label:eq(0)').before('<label class="error emptyinput">'+heap.translate("login_empty_field")+'</label>');
			return false;
		}

    heap.api.users.login( massif.loginCallback, { 
        email: jQuery('#login-email').val(),
        password: jQuery('#login-password').val() });

    return false;
}

massif.processReminder = function()
{

		var loginMail = jQuery('#reminder-email').val();

		if ( loginMail != '' )
		{
			if ( loginMail.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/) == null )
			{
				if (! $('#reminder-email .error.forinput').length > 0 )
					jQuery('#reminder-email').after('<label class="error forinput">'+heap.translate("login_invalid_email")+'</label>');
					
				$('#medias_reminder .error.emptyinput').remove();
				return false;
			}
		}
		else
		{
			if (! $('#medias_reminder .error.emptyinput').length > 0 )
				jQuery('#medias_reminder label:eq(0)').before('<label class="error emptyinput">'+heap.translate("login_empty_field")+'</label>');
			return false;
		}
		
    massif.api.resetpassword( massif.reminderCallback, { email: jQuery('#reminder-email').val() });
    return false;
}

massif.reminderCallback = function(result)
{
    if(result.type == 1)
    {
    	jQuery('#medias_reminder').find('fieldset').remove();
			jQuery('#medias_reminder').append('<p class="confirm_label"><span>'+heap.translate("login_reset_confirmation")+'</span></p>');
			setTimeout(function(){ massif.hideLoginReminder() }, 5000);
    }
    else
    {
			if (! $('#medias_reminder .error.emptyinput').length > 0 )
    		jQuery('#medias_reminder label:eq(0)').before('<label class="error forinput">'+heap.translate("login_invalid_email")+'</label>');
    }
}

massif.api = {};
massif.api.resetpassword = function(callback, params)
{
      jQuery.ajax({
        url: '/jsapi/massapi/resetpassword',
        data: { parameters: JSON.stringify(params) },
        success: callback
      });
}

massif.processLogout = function()
{
    heap.api.users.logout( massif.logoutCallback );
}

massif.loginCallback = function(result)
{
    if(result.type == 1)
    {
       window.location = heap.urlmap.planifier_galeries;
    }
    else
    {
    	$('#medias_login .error.forinput, #medias_login .error.emptyinput').remove();
			$('#medias_login label:eq(0)').before('<label class="error loginerror">'+heap.translate("login_wrong_pass")+'</label>');
    }
}

massif.logoutCallback = function(result)
{
    if(result.type == 1)
    {
       window.location = heap.urlmap.planifier_galeries;
    }
}

// Read a page's GET URL variables and return them as an associative array.
massif.getUrlVars = function()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

