/**
 * AjaxWhois - mootools 1.1 whois
 * @version		1.0.0
 * @MooTools version 1.1
 * @author		Constantin Boiangiu <info [at] constantinb.com>
 */

var AjaxWhois = new Class({
	initialize: function(options) {
		this.options = Object.extend({
			formId: null,
			domain: 'domain',
			defaultMessage: 'Domain Search: type in your domain and hit enter',
			labels: '.option',
			checkboxes: '.check',
			errors: 'responses',
			colors: {'error':'#FF0000','response':'#1e7f00'}
		}, options || {});
		
		this.checkAny = 0;
		this.start();		
	},
	
	start: function(){
		this.makeCheckBoxes();
		
		if ( !$(this.options.domain).value )
			$(this.options.domain).value = this.options.defaultMessage;
		$(this.options.domain).addEvent('click', function(){
			if( $(this.options.domain).value == this.options.defaultMessage )
				$(this.options.domain).value = '';
		}.bind(this));
		$(this.options.domain).addEvent('blur', function(){
			if( $(this.options.domain).value == '' )
				$(this.options.domain).value = this.options.defaultMessage;
		}.bind(this));
			
		this.errEffect = new Fx.Styles(this.options.errors, {duration: 1000, transition: Fx.Transitions.linear});
		$(this.options.formId).addEvent('submit', this.checkForm.bind(this));
		
		
	},	
	
	checkForm: function(event){
		new Event(event).stop();
		
		if( this.checkAny < 1 ){
			this.showErr('Please select at least one extension.', 'error');
			return false;
		}
		
		if( $(this.options.domain).value == this.options.defaultMessage || !$(this.options.domain).value ){
			this.showErr('Type in domain name.ie:(For <strong>example.com</strong>,use <strong>"example"</strong>)', 'error');
			return false;			
		}
		
		if ( $(this.options.domain).value.length <3 ){
			this.showErr('Please add a domain name of at least 3 characters.', 'error');
			return false;	
		}
		
		this.showErr('Checking domain availability. Please wait...', 'response');
		this.makeRequest();
	},
	
	makeRequest: function(){
		var formAction = $(this.options.formId).action;
		if( !$(this.options.formId).action.contains('ajax_submit') )
			$(this.options.formId).action += formAction.contains('?') ? '&ajax_submit=1' : '?ajax_submit=1';
		
		$(this.options.formId).send({
			onComplete: function(response){
				$(this.options.errors).setStyle('display','none').empty();
				
				var MySqueezeBox = {
   
				    loadModal: function(modalUrl,handler,x,y) {     
				       var options = $merge(options || {}, Json.evaluate("{handler: '" + handler + "', size: {x: " + x +", y: " + y + "}}"));     
				       this.setOptions(this.presets, options);
				       this.assignOptions();
				       this.setContent(handler,modalUrl);
				   },
				
				   extend: $extend
				   
				}
				
				MySqueezeBox.extend(SqueezeBox);
    			MySqueezeBox.initialize({});
    			MySqueezeBox.loadModal(response,'string', 600, 400);
				MySqueezeBox.btnClose.addEvent('click', function(event){
					new Event(event).stop();
					MySqueezeBox.close();
				})
    			
			}.bind(this)
		});
	},
	
	showErr: function(message, type){
		if(message) {
			$(this.options.errors).setStyle('display','block').setHTML(message);
		}
		
	//	var color = type=='error' ? this.options.colors.error : this.options.colors.response;
//		this.errEffect.start({
//			'background-color':[color,'#FFFFFF'],
//			'color':['#FFFFFF','#000000']
//		});
		
		
		
	},
	
	makeCheckBoxes: function(){
		
		this.lbls = $(this.options.formId).getElements(this.options.labels);
		this.lbls.fx = [];
		this.parseChecks();
		
		var allinputs = $( this.options.formId ).getElements( this.options.labels+' '+this.options.checkboxes );
		
		allinputs.each(function(chk){
			chk.inputElement = chk.getElement('input');
			chk.inputElement.setStyle('display', 'none');
		}.bind(this));
		
		allinputs.each(function(chk,i){
			if (chk.inputElement.checked==1){ 
				chk.index = i;
				this.selectBox(chk);
			}
		}.bind(this));	
		
	},
	
	parseChecks: function(){
		this.lbls.each(function(lbl, i){
			this.lbls.fx[i] = new Fx.Styles(lbl, {wait: false, duration: 300});

			var chk = lbl.getElement(this.options.checkboxes);
			chk.index = i;
			
			lbl.addEvent('click', function(){
				if (!chk.hasClass('selected')){
					this.selectBox(chk);
				}
				else if (lbl.hasClass('check')){ 
					this.deselectBox(chk);
				}
			}.bind(this));	
			
			lbl.addEvent('mouseover',function(el){
				lbl.setStyle('cursor','pointer');
			}.bind(this))
		}.bind(this));
	},
	
	selectBox: function(chk){		
		chk.inputElement.checked = 'checked';		
		this.lbls.fx[chk.index].start({ 'color': '#59AC00' });		
		chk.addClass('selected');
		this.checkAny+=1;
	},

	deselectBox: function(chk){
		chk.inputElement.checked = false;
		this.lbls.fx[chk.index].start({ 'color': '#000000' });
		chk.removeClass('selected');
		this.checkAny-=1;
	}
	
});