window.addEvent('domready', function(){
	transifyme();
});

function refresh_page( o ) {
	var method = o.method ? o.method : 'post';
	
	var pars = '';
	if(o.form)   pars = $(o.form).toQueryString();
	if(o.pars)   pars += o.pars;
	if(o.jdata)  pars += '&jdata=' + Json.toString(o.jdata);
	
	if(o.loader) show_loader();
	
	if(!o.url) {
		alert('url: URL needed');
		return false;
	} 

	if(o.debug) {
		console.log('url: %o \npars: %o', o.url, pars);
	}
	
	if(o.div) {
		if( o.onComplete ) {
			var ajax_object = new Ajax(o.url, {update: o.div, method: method, data: pars, onComplete: o.onComplete }).request();
		} else {
			var ajax_object = new Ajax(o.url, {update: o.div, method: method, data: pars }).request();
		}
	} else {
		var response = o.onComplete ? o.onComplete : json_response;
		var ajax_object = new Ajax(o.url, {method: method, data: pars, onComplete: response}).request();
	}
	
	return ajax_object;
}

function json_get_data( data ) {
	var response = Json.evaluate(data);
	if( response.data ) {
		return response.data;
	}
	return false;
}

function json_response( data ) {
	// AJAX view error -- show alert
	var regex = /^\s*\{\"/;
	if( ! regex.test(data) ) {
		return;
	}
	
	var response_data = Json.evaluate(data);
	
	if( response_data.debug ) {
		if($('debug'))	$('debug').innerHTML = data;	
		else alert(o.responseText);
	} 

	if( response_data.output ) {
		response_data.output.each( function(d){
			$(d.id).innerHTML = d.html;
		});
	}
	if( response_data.javascript ) { eval(response_data.javascript); }
	if( response_data.clearForm ) {	$(response_data.clearForm).reset(); }
}



/**
 * Dropdown class
 */
var Dropdown = new Class({
	initialize: function(element, dropdown) {
		var options = Object.extend({
	     	delta_x: 0,
	     	delta_y: 0,
	     	onComplete: function(val) {}
	    }, arguments[2] || {});
	    
		this.options = options;
		
		this.element  = $(element);
	    $(dropdown).moveToBottom();
	    this.dropdown = $(dropdown);
		
	    this.t = new Tooltip(element, dropdown, { position:'bl', onclick:true, delta_y:this.options.delta_y, delta_x:this.options.delta_x });
	    this.cur_item = '';
	    
	    this.items = this.dropdown.getFirst().getChildren();
	    
	    this.mouseClick   = this.itemTrigger.bindAsEventListener(this);
	    this.hideClick    = this.hideDropdown.bindAsEventListener(this);
	    
	    this.registerEvents();
	},
	
	registerEvents: function() {
		this.items.each( function(item) {
			if( item.className == 'hilite' ) this.cur_item = item.id;
	    	item.addEvent("mouseup", this.mouseClick);
	    }, this);
	},
	
	manualSelectItem: function(id) {
		this.selectItem(id);
		this.element.innerHTML = $(id).innerHTML;
	},
	
	selectItem: function(id) {
		this.items.each( function(item) {
			if( item.id == id ) {
				item.addClass('selected');
				this.cur_item  = id;
			} else {
				item.removeClass('selected');
			}
	    }, this);
	},
	
	itemTrigger: function(event) {	
		var e = new Event(event);
		var item = e.target;
		
		if( e.target.tagName == 'SPAN' ) {
			item = e.target.getParent();
		}
		e.stop();
		
		if( item.id == this.cur_item ) return false;
		
		this.selectItem(item.id);
		this.element.innerHTML = item.innerHTML;
		this.hideDropdown();
		this.options.onComplete(item.id);
	},
	
	hideDropdown: function() {
		this.t.wait = false;
		this.t.tooltipOff.delay(100, this.t);
	}
});


/**
 * Tooltip Class
 */ 
var Tooltip = new Class({
  initialize: function(element, tool_tip) {  	
	//element = the thing you rollover
	//tool_tip = tooltip div itself
	//new Tooltip('e','e2', { position:'tr', delta_y:100, mouseover:true })
    var options = Object.extend({
	  no_roll: false,
      default_css: false,
      position: false,  // tr, tl, br, bl
      delay: 0,			// delay before displaying
      onclick: false,   // have tooltip open onclick
      onfocus: false, 	// shows tooltip when onfocus
      mouseover: false, // can hover over tooltip, must be fixed in order for this to work
      width: 200,
      margin: "0px",
	  padding: "5px",
	  backgroundColor: "#cccccc",
	  min_distance_x: 5,
      min_distance_y: 5,
      delta_x: 0,
      delta_y: 0,
      zindex: 100000
    }, arguments[2] || {});

    if( tool_tip ) {
    	this.element = $(element);
    	this.no_listeners = false;
    } else {
    	this.no_listeners = true;
    }
    
	this.timer_on	  = false;
	this.timer_off	  = false;
    this.options      = options;
    this.wait		  = false;
    
	if(!this.options.hide_delay) this.options.hide_delay = this.options.delay;

    if($(tool_tip)) {
    	this.tool_tip = $(tool_tip);
    } else {
 		this.tool_tip = $(element);
    }

    // hide the tool-tip by default
    this.tool_tip.style.display = 'none';

    if( tool_tip && !this.options.no_roll ) { // no element to listen to
	    if( !this.options.onclick && !this.options.onfocus ) {
		    this.eventMouseOver  = this.showTooltip.bindAsEventListener(this);
		    this.eventMouseOut   = this.hideTooltip.bindAsEventListener(this);
		    this.eventMouseMove  = this.moveTooltip.bindAsEventListener(this);
	    } 
	    else if( this.options.onfocus ) {
	    	//this.eventFocus  = this.showTooltip.bindAsEventListener(this);
		    //this.eventBlur   = this.hideTooltip.bindAsEventListener(this);
	    }
	    else {
	    	this.eventMouseDown  = this.toggleTooltip.bindAsEventListener(this);
	    	this.eventTurnOff    = this.tooltipOff.bindAsEventListener(this);
	    	this.eventWait       = this.tooltipWait.bindAsEventListener(this);
	    }
	    this.registerEvents();
    }
    
    window.addEvent("resize", this.moveTooltip.bindAsEventListener(this));
  },

  destroy: function() {
  	if( !this.options.onclick && !this.options.onfocus ) {
	    this.element.removeEvent("mouseover", this.eventMouseOver);
	    this.element.removeEvent("mouseout", this.eventMouseOut);
	    this.element.removeEvent("mousemove", this.eventMouseMove);
	    
	    if( this.options.mouseover ) {
			this.tool_tip.removeEvent("mouseover", this.eventMouseOver);
			this.tool_tip.removeEvent("mouseout", this.eventMouseOut);
	    }
  	}
  	else if( this.options.onfocus ) {
  		//this.element.removeEvent("focus", this.eventFocus);
	   // this.element.removeEvent("blur",  this.eventBlur);
  	}
  	else {
  		this.element.removeEvent("mousedown", this.eventMouseDown);
  		this.element.removeEvent("blur", this.eventTurnOff);
  		this.element.removeEvent("mouseup", this.eventWait);
  		$(document.body).removeEvent("click", this.eventTurnOff);
  	}
  },

  registerEvents: function() {
  	if( !this.options.onclick && !this.options.onfocus ) { // use mouse overs
	    this.element.addEvent("mouseover", this.eventMouseOver);
	    this.element.addEvent("mouseout", this.eventMouseOut);
	    this.element.addEvent("mousemove", this.eventMouseMove);
	    
	    if( this.options.mouseover ) {
	    	this.tool_tip.addEvent("mouseover", this.eventMouseOver)
	    	this.tool_tip.addEvent("mouseout", this.eventMouseOut)
	    }
  	} 
	else if( this.options.onfocus ) {
		//this.element.addEvent("focus", this.eventFocus);
	    //this.element.addEvent("blur",  this.eventBlur);
	} 
  	else { // use clicking
  		this.element.addEvent("mousedown", this.eventMouseDown);
  		this.element.addEvent("mouseup", this.eventWait);
  		$(document.body).addEvent("click", this.eventTurnOff);
  	}
  },
  
  tooltipWait: function(event) {
  	this.wait = true;
  },

  moveTooltip: function(event){	
	if( !this.options.position && event ) { // If not fixed
		var e = new Event(event);

		var mouse_x = e.client.x;
		var mouse_y = e.client.y;

		pos_y = (e.page.y - mouse_y) + mouse_y;
		pos_x = (e.page.x - mouse_x) + mouse_x;

		var dimensions = this.tool_tip.getSize();
		var element_width = dimensions.size.x;
		var element_height = dimensions.size.y;
				
		if( mouse_y - element_height < this.options.min_distance_y ) { // hitting top
			pos_y = pos_y + this.options.min_distance_y;
		} else {
			pos_y = pos_y - element_height - this.options.min_distance_y;
		}
		
		if( (mouse_x + element_width + this.options.min_distance_x) >= (window.getWidth()) ) { // hitting right
			pos_x = pos_x - element_width - this.options.min_distance_x;
		} else {
			pos_x = pos_x + this.options.min_distance_x;
		}
	} else { // Fixed tooltip
		if(!this.element) return false;
		var coords  = this.element.getPosition();
		var size    = this.element.getSize().size;
		
		switch( this.options.position ) {
			case 'tr':
				pos_x = coords.x + size.x;
				pos_y = coords.y;
				break;
			
			case 'tl':
				pos_x = coords.x;
				pos_y = coords.y;
				break;
			
			case 'br':
				pos_x = coords.x + size.x;
				pos_y = coords.y + size.y;
				break;
			
			case 'bl':
				pos_x = coords.x;
				pos_y = coords.y + size.y;
				break;
		}
	}
	this.setStyles(pos_x, pos_y);
  },
	
  toggleTooltip: function(event) {
  	if(event) new Event(event).stop();
    this.moveTooltip(event);
    this.tooltipToggle();
  },
  
  showTooltip: function(event) {  	
    var e = new Event(event).stop();

    if( this.no_listeners ) {
  		this.tool_tip.innerHTML = e.target.title;
  	}
    
    this.moveTooltip(event);
    this.timer_on = this.tooltipOn.delay(this.options.delay,this);
    $clear(this.timer_off);
  },
  
  hideTooltip: function(event){
	this.timer_off = this.tooltipOff.delay(this.options.hide_delay,this);
  	$clear(this.timer_on);
  },
  
  tooltipToggle: function() {
  	if( this.tool_tip.style.display == 'none' ) 
  		this.tool_tip.style.display = '';
  	else 
  		this.tool_tip.style.display = 'none';
  },
  
  tooltipOn: function() {
  	this.tool_tip.style.display = '';
  },
  
  tooltipOff: function() {
  	if( !this.wait )
  		this.tool_tip.style.display = 'none';
  		
  	this.wait = false;
  },
  
  setStyles: function(x, y){
  	if( this.no_listeners ) { 
  		var real_width = this.tool_tip.getSize().size.x;
  		
  		if( real_width > this.options.width )
  			this.tool_tip.className = 'tooltip max-width';
  		else
  			this.tool_tip.className = 'tooltip';
  	}
  	
    // set the right styles to position the tool tip
	 this.tool_tip.setStyle('position','absolute');
	 this.tool_tip.setStyle('top',y + this.options.delta_y + "px");
	 this.tool_tip.setStyle('left',x + this.options.delta_x + "px");
	 this.tool_tip.setStyle('z-index',this.options.zindex);
	
	  // apply default theme if wanted
	  if (this.options.default_css){
	  	this.tool_tip.setStyle('margin',this.options.margin);
	  	this.tool_tip.setStyle('padding',this.options.padding);
	  	this.tool_tip.setStyle('backgroundColor',this.options.backgroundColor);
	  	this.tool_tip.setStyle('z-index',this.options.zindex);
	  }	
  }

});

function transify(img) {
	if(window.ie6) {
		img = $(img);
		var trans = new Element('div');
		trans.setProperty('id',img.getProperty('id'));
		trans.setProperty('class',img.getProperty('class') == 'transifyme' ? '' : img.getProperty('class'));
		trans.setStyle('width',img.getProperty('width'));
		trans.setStyle('height',img.getProperty('height'));
		trans.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + img.getAttribute('src') + "',sizingMethod='scale')";
		img.replaceWith(trans);
	}
}

function transifyme() {
	if(window.ie6) {
		var trans = $$('.transifyme');
		for(var i = 0; i < trans.length; i++) transify(trans[i]);
	}
}

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function deleteCookie(name) {
	setCookie(name,"",-1);
}