var ProviderRating = Class.create();
ProviderRating.prototype = {
	initialize: function(){
		$$(".toggle_newcomment").each(function(toggler){
				toggler.onclick = function(){
						new Effect.toggle("global_grading", "blind");
						new Effect.toggle("newcomment", "blind");
						
						if(/cancel/.test(this.className)){
							$("newcomment_form").reset();
							new Effect.toggle("global_grading", "blind");
							new Effect.toggle("newcomment", "blind");
						}
			
				};
		});

		$$("#newcomment .right *").invoke("cleanWhitespace");
		$$("#newcomment ul a").each(function(star){
			var parent = this;
			var ul = star.parentNode.parentNode;
			
			if(this.getInputValue(star) == /(\d)/.exec(star.className)[0]){
				star.className = star.className+"_active";
				ul.className = "rated";
			}else{
				if(ul.className != "rated") ul.className = "not_rated";
			}
			
			star.onclick = function(){
				parent.resetStars(this);
				this.parentNode.parentNode.className = "rated";
				this.className = this.className+"_active";
				this.parentNode.parentNode.nextSibling.value = this.innerHTML;
			}
			
			star.onmouseover = function(){
				parent.resetStars(this);
				ul.className = "not_rated";
			}
			
			star.onmouseout = function(){
				parent.setLast(this);
			}
			
		}.bind(this));
	},
	resetStars: function(element){
		$A(element.parentNode.parentNode.getElementsByTagName("a")).each(function(star_to_reset){
			star_to_reset.className = star_to_reset.className.substring(0, 12);
		});
	},
	setLast: function(element){
		var def = element.parentNode.parentNode.nextSibling.value;
		$A(element.parentNode.parentNode.getElementsByTagName("a")).each(function(star_for_default){
			if(def == star_for_default.className.substring(11, 13)){
				star_for_default.parentNode.parentNode.className = "rated";
				star_for_default.className = star_for_default.className+"_active";
			}
		});
	},
	getInputValue: function(element){
		return $F(element.parentNode.parentNode.nextSibling);
	}
}


var Slider = Class.create();
Slider.prototype = {
	initialize: function(){
		$$(".sliderbox *, .sliderbox").invoke("cleanWhitespace");
		
		this.Slider = [];
		
		$$(".slider").each(function(slider){
			this.formO = slider.up("form");
			
			slider.id = "slider_"+arguments[1];			
			var range = /max_range_(\d)/.exec(slider.className) || [0, 0];
			var default_value = /default_(\d)/.exec(slider.className) || false;
			var object_name = /object_(\w+)/.exec(slider.className)[1];
			var object = this[object_name];
			
			var handler = document.createElement("div");
			new Element.addClassName(handler, "handler");		
			handler.id = "slider_handler_"+arguments[1];
			
			var span_right = document.createElement("span");
			new Element.addClassName(span_right, "right");
			
			var span_entity = document.createElement("span");
			new Element.addClassName(span_entity, "entity");
			
			slider.appendChild(handler);
			slider.appendChild(span_right);
			slider.appendChild(span_entity);
			
			this.Slider.push(new Control.Slider(handler.id, slider.id, {
				values:$R(1, range[1]),
				range:$R(1, range[1]),
				sliderValue: default_value[1] || 0,
				onSlide: function(value, sliderO){
					sliderO.track.nextSibling.innerHTML = object[value].text;
				},
				onChange: function(value, sliderO){
					sliderO.track.nextSibling.innerHTML = object[value].text;
					sliderO.track.nextSibling.nextSibling.value = object[value].value;					
					this.sendRequest();
				}.bind(this)
			}));

			if(default_value) slider.nextSibling.innerHTML = object[default_value[1]].text;
			
			if(/opera/i.test(navigator.userAgent)){				
				handler.style.top = "-4px";
				if(default_value[1] > 1) this.Slider.last().setValue(default_value[1]);
			}
			
		}.bind(this));
		this.searchSelect();
	},
	
	disableSlider: function(){
		this.Slider.each(function(slider){
			slider.setDisabled();
		});
	},
	
	einableSlider: function(){
		this.Slider.each(function(slider){
			slider.setEnabled();
		});
	},
	
	searchSelect: function(){
		$A(this.formO.getElementsByTagName("select")).each(function(select){
		  if(select.id == "countrylist") return;
			select.onchange = this.sendRequest.bindAsEventListener(this);
//			select.onkeyup = this.sendRequest.bindAsEventListener(this);
		}.bind(this));
		
	},
	sendRequest: function(){
		new Ajax.Request(this.formO.action, {
			asynchronous:true, 
			evalScripts:true, 
			parameters: Form.serialize(this.formO),
			onLoading: function(){
				this.disableSlider();
				new Effect.Appear("table_indicator", {duration:0.1, to:1});
			}.bind(this),
			onComplete: function(){
				this.einableSlider();
				new Effect.Appear("table_indicator", {duration:0.6, to:0, afterFinish: function(effect){effect.element.hide()}});
			}.bind(this)
		});
	}
};

var PasswordForget = Class.create();
PasswordForget.prototype = {
	initialize: function(){
		this.loginFieldset = $("login-fields");
		this.forgotPassword = $("forgot-password");
		this.conditionToggle = $$(".condition-toggle");
		
		
		this.conditionToggle_func = function(){
			var options = {queue: 'end', duration: 0.2}
			
			if(this.loginFieldset.style.display == ""){
				new Effect.toggle(this.loginFieldset, "appear", options);
				new Effect.toggle(this.forgotPassword, "appear", options);			
			}else{
				new Effect.toggle(this.forgotPassword, "appear", options);
				new Effect.toggle(this.loginFieldset, "appear", options);
			}
			this.conditionToggle.each(function(elm){
				new Effect.toggle(elm, "appear", options);
			})
		};		

		this.conditionToggle.each(function(elm){
			elm.getElementsByTagName("a")[0].onclick = this.conditionToggle_func.bindAsEventListener(this);
		}.bind(this));

	}
};

var ChartTabs = function(wrapper){
  var _this = this;
  this.wrapper = wrapper;
  
  $$("#charts .left li").each(function(element, index){
    element.observe("click", function(){      
      $$("#charts .right li").invoke("hide");
      $(element.getElementsByTagName("input")[0].value).show();
    });
  });

};

ChartTabs.prototype = {
  current: "download"
}

var TableIndicator = {
	show:function(){
		new Effect.Appear("table_indicator", {duration:0.1, to:1});
	},
	hide: function(){
		new Effect.Appear("table_indicator", {duration:0.6, to:0, afterFinish: function(effect){effect.element.hide()}});
	}
}