var ratenkredit = {
	input_amount: null,
	
	slider_amounts_container: null,
	slider_amounts_areas: ['kleiner Kredit', 'mittlerer Kredit', 'hoher Kredit'],
	slider_amounts: null,

	amount: 0,

	former: {
		amount: 0
	},
	
	sort: {
		row: 'zinsen',
		direction: 'asc'
	},
	
	amount_range: [],
	amount_range_fmt: [],

	waiting_timer: null,
	
	init_ready: false,

	results: [],

	init: function() {
	  ratenkredit.input_amount = new Element('input',{type:'text',name:'ratenkredit_amount','class':'textfield euro'});
	  ratenkredit.slider_amounts_container = new Element('div');

		$('ratenkredit_container').update().insert(
			new Element('table',{border:0,cellpadding:0,cellspacing:0,width:'100%'}).insert(
        new Element('tbody').insert(
          new Element('tr').insert(
            new Element('td').insert(ratenkredit.input_amount)
					).insert(
            new Element('td',{width:'90%',style:'padding-left: 8px;'}).insert(ratenkredit.slider_amounts_container)
					)
				)
			)
		);
		
		for (var i=500;i<=50000;i+=500) {
		  ratenkredit.amount_range.push(i);
		}
		
		ratenkredit.amount_range.each(function(amount){
      ratenkredit.amount_range_fmt.push(ratenkredit.fmt.amount(amount));
		});
		
		
		var table = new Element('table',{border:0,cellpadding:0,cellspacing:0,width:'100%',id:'slider_amounts'}).insert(
			new Element('tbody').insert(
				new Element('tr')
			).insert(
        new Element('tr').insert(
					new Element('td',{colspan:ratenkredit.slider_amounts_areas.length}).insert(
						new Element('div',{'class':'slider_container'}).insert(
              new Element('div',{'class':'slider'})
						).insert(
              new Element('div',{'class':'slider_bar'}).insert(
                new Element('div',{'class':'slider_bar-rgt'})
							)
						)
					)
				)
			)
		);
		var tr = table.down('tr');
		var width = Math.round(1/ratenkredit.slider_amounts_areas.length*100);
		ratenkredit.slider_amounts_areas.each(function(area){
      tr.insert(new Element('td',{'class':'slider_desc',style:'width: '+width+'%'}).update(area));
		});
		ratenkredit.slider_amounts_container.insert(table);
		ratenkredit.slider_amounts = new Control.Slider(table.down('.slider'),table.down('.slider_bar'),{onChange:function(value){ ratenkredit.setAmount(value,'slide')},onSlide:function(value){ratenkredit.setAmount(value,'slide')}});
		
		ratenkredit.input_amount.observe('focus',function(){
			var input = $(this);
			input.setStyle({textAlign:'left'});
			input.value = input.value.gsub(/[^0-9]/,'');
			input.activate();
		}).observe('blur',function(){
			var input = $(this);
			input.setStyle({textAlign:'right'});
			ratenkredit.setAmount(input.value);
		}).observe('keyup',function(e){
			if (e.keyCode==13)
			  this.blur();
			var input = $(this);
			input.value = input.value.gsub(/[^0-9]/,'');
		});

		ratenkredit.setAmount(ratenkredit_init_values.amount);

		
		var tbl =  new Element('tbody');
		$('ratenkredit_container').insert('Bei den dargestellten Zinsen handelt es sich um den effektiven Jahreszins bezogen auf eine Laufzeit von 36 Monaten.<br /><br />').insert(
			new Element('div',{style:'position:relative'}).insert(
			  new Element('div',{'class':'customer_table'}).insert(
					new Element('table',{border:0,cellpadding:0,cellspacing:0,width:'100%'}).insert(tbl)
				)
			).insert(
				new Element('div',{'class':'customer_overlay',style:'display:none'})
			)
		);
		
		tbl.insert(
			new Element('tr',{id:'customer_table_header'}).insert(
				new Element('th').insert(
					new Element('a',{'class':'sort-order',title:'Nach Name der Bank sortieren',id:'sort_bank'}).update('Bank&nbsp;&nbsp;').observe('click',ratenkredit.setSort.bindAsEventListener(ratenkredit,'bank')).insert(new Element('span',ratenkredit.sort.row=='bank' ? {'class':ratenkredit.sort.direction} : {}).update('&nbsp;&nbsp;&nbsp;'))
				)
			).insert(
				new Element('th',{colspan:2}).insert(
					new Element('a',{'class':'sort-order',title:'Nach Höhe der Zinsen sortieren',id:'sort_zinsen'}).update('Zinsen&nbsp;&nbsp;').observe('click',ratenkredit.setSort.bindAsEventListener(ratenkredit,'zinsen')).insert(new Element('span',ratenkredit.sort.row=='zinsen' ? {'class':ratenkredit.sort.direction} : {}).update('&nbsp;&nbsp;&nbsp;'))
				)
			).insert(new Element('th',{colspan:5}))
		).insert(
			new Element('tr',{id:'customer_table_off'}).insert(
				new Element('td',{colspan:6,style:'font-size: 2px; line-height: 4px'}).update('&nbsp;')
			)
		);
		
    for (var slug in ratenkredit_init_values.customer) {
      var tr = new Element('tr',{id:'customer_'+slug}).insert(
				new Element('td',{id:'customer_'+slug+'_name','class':'customers_name'}).update(ratenkredit_init_values.customer[slug].name)
			).insert(
				new Element('td',{'class':'customers_bar'}).insert(
					new Element('div',{id:'customer_'+slug+'_bar','class':'bar-small-lft'})
				).insert(
					new Element('div',{'class':'bar-small-rgt'})
				).insert(
          new Element('div',{id:'customer_'+slug+'_info',style:'display:none'})
				)
			).insert(
				new Element('td',{id:'customer_'+slug+'_rate','class':'customers_rate'})
			).insert(
				new Element('td',{'class':'customers_button'}).insert(
				  ratenkredit_init_values.customer[slug].type == 'PP' ? new Element('div',{style:'background-image:url(/_site/images/tool_staffel.gif);',title:'Zinsstaffel'}).observe('click',function(e){self.location.href='/leistungsvergleich/ratenkredit/'+this}.bindAsEventListener(slug)) : ''
				)
			).insert(
				new Element('td',{'class':'customers_button'}).insert(
					new Element('div',{style:'background-image:url(/_site/images/tool_info.gif);',title:'Portrait'}).observe('click',function(e){self.location.href='/ratenkredit/'+this}.bindAsEventListener((ratenkredit_init_values.customer[slug].type!='PP'?'weitere-anbieter/':'')+slug))
				)
			).insert(
				new Element('td').addClassName('customers_button').insert(
					ratenkredit_init_values.customer[slug].open ? new Element('div',{style:'background-image:url(/_site/images/tool_go.png);',title:'Weitere Informationen und Ratenkreditrechner des jeweiligen Anbieters'}).observe('click',function(e){window.open(this)}.bindAsEventListener(ratenkredit_init_values.customer[slug].open)) : ''
				)
			);
			tbl.insert(tr);
			
			var tds = tr.select('td');
			for (var i=0,ln=tds.length;i<ln;i++) {
			  tds[i].observe('mouseover',function(e){
					this.up('tr').writeAttribute('class','highlight')
				}).observe('mouseout',function(e){
					this.up('tr').removeClassName('highlight')
				});
			}
		}
		
		ratenkredit.update(ratenkredit_init_values.results);
		
		window.setTimeout(function(){ratenkredit.init_ready = true}, 1000);
	},

	setAmountNextTime: true,
  setAmount: function(amount, src) {
    if (amount > 50000)
      amount = 50000;
    switch(src) {
			case 'slide':
			  if (ratenkredit.setAmountNextTime) {
				  amount = ratenkredit.amount_range[Math.round(amount*100)];
				  ratenkredit.input_amount.value = ratenkredit.fmt.amount(amount);
				  ratenkredit.amount = amount;
				} else ratenkredit.setAmountNextTime = true;
			  break;
			default:
			  ratenkredit.input_amount.value = ratenkredit.fmt.amount(amount);
				var tmp = ratenkredit.amount_range.sortBy(function(a){return a<amount?amount-a:a-amount;});
				ratenkredit.setAmountNextTime = false;
				ratenkredit.slider_amounts.setValue(ratenkredit.amount_range.indexOf(tmp[0])/100);
				ratenkredit.amount = amount;
		}

		tmp = tmp ? tmp : ratenkredit.amount_range.sortBy(function(a){return a<amount?amount-a:a-amount;});
		var td_index = ratenkredit.amount_range.indexOf(tmp[0]);
		td_index = td_index >= 66 ? 2 : (td_index >= 33 ? 1 : 0);
		
  	var tr = $('slider_amounts').down('tr');
		if (tr.down('td.slider_highlight'))
			tr.down('td.slider_highlight').removeClassName('slider_highlight');
		tr.down('td', td_index).addClassName('slider_highlight');
		
		window.clearTimeout(ratenkredit.waiting_timer);
		ratenkredit.waiting_timer = window.setTimeout(ratenkredit.startRequest, 300);
	},

	fmt: {
		amount: function(iAmount) {
			var sAmount = iAmount.toString();
			var sAmountLen = sAmount.length;
			var iAmountMod = sAmountLen%3;
			var transits = Math.floor(sAmountLen/3);
			var result = sAmount.substr(0,iAmountMod);

			for (var i=0;i<transits;i++) {
		  	result += (i>0||iAmountMod>0?'.':'')+sAmount.substr(iAmountMod+(i*3),3);
			}
			return result+' €';
		}
	},

	overlay: {
		hide: function() {
			$('ratenkredit_container').down('.customer_overlay').hide();
		},
		show: function() {
		  var dim = $('ratenkredit_container').down('.customer_table').getDimensions();
      $('ratenkredit_container').down('.customer_overlay').setStyle({width:dim.width+'px',height:dim.height+'px'}).show();
		}
	},
	
	startRequest: function() {
	  if (ratenkredit.init_ready) {
	    if (ratenkredit.amount != ratenkredit.former.amount) {
		    ratenkredit.overlay.show();
		    hlp.xhr('tool_zinsen_ratenkredit_pre:renderJson',{amount:ratenkredit.amount},{onSuccess:function(t){ratenkredit.update(t.responseText.evalJSON())}});
		    ratenkredit.former.amount = ratenkredit.amount;
			}
		}
	},
	
	update: function(o) {
	  if (o) {
		  ratenkredit.results = [];
			for (var slug in o) {
				$('customer_'+slug+'_rate').update(o[slug].rate>0?o[slug].rateHtml:'');
				$('customer_'+slug+'_bar').morph('width:'+o[slug].bar+'px');
				ratenkredit.results.push({slug:slug,rate:o[slug].rate});
			}
			ratenkredit.setSort();
		}
		ratenkredit.overlay.hide();
	},
	
	setSort: function(e, row) {
	  if (row) {
		  if (row == ratenkredit.sort.row) {
				if (ratenkredit.sort.direction == 'asc') {
	        ratenkredit.sort.direction = 'desc';
	        $('sort_'+row).down('span').writeAttribute('class','desc');
				} else {
	        ratenkredit.sort.direction = 'asc';
					$('sort_'+row).down('span').writeAttribute('class','asc');
				}
			} else {
	      $('sort_'+ratenkredit.sort.row).down('span').writeAttribute('class','');
	      ratenkredit.sort.row = row;
	      ratenkredit.sort.direction = 'asc';
	      $('sort_'+row).down('span').writeAttribute('class','asc');
			}
		}

		if (ratenkredit.sort.row == 'bank') {
		  var order = ratenkredit.results.sortBy(function(o){return o.slug});
		  if (ratenkredit.sort.direction == 'asc')
		    order.reverse();
		} else if (ratenkredit.sort.row == 'zinsen') {
		  var order = ratenkredit.results.sortBy(function(o){return parseFloat(o.rate)});
		  if (ratenkredit.sort.direction == 'asc')
		    order.reverse();
		}

		var th = $('customer_table_header');
		var off = [];
  	for (var i=0,ln=order.length;i<ln;i++) {
  	  if (order[i].rate!=0)
				th.insert({after:$('customer_'+order[i].slug)});
			else off.push(order[i])
  	}

  	if (off.length > 0) {
			off = off.sortBy(function(o){return o.slug}).reverse();
      th = $('customer_table_off');
      for (var i=0,ln=off.length;i<ln;i++)
      	th.insert({after:$('customer_'+off[i].slug)});
		}
	}
};

FastInit.addOnLoad(ratenkredit.init);
//Event.observe(window,'load',ratenkredit.init);

var hlp = {
	xhr: function(mm, params, options) {
	  var m = mm.split(':');
		return new Ajax.Request('/ajax.php?module='+m[0]+'&method='+m[1]+'&id=&params=', Object.extend({
			method: 'post',
			parameters: params
		},options||{}));
	}
};