// --------------------------------------------
// Property Wizard Browser
// --------------------------------------------
var ProjectWizardBrowser = new Class({
	options: {
		show: 0,
		disableValidation: false,
		valid: true,
		validators: null,
		tabs:null,
		tabHeaderSelector: 'li',
		entrySelector: '.tab-entry',
		onBeforeShow:null,
		onValidate: function(index){
		    if (this.options.disableValidation)
		    {
		        this.valid = true;
		        return;
		    }
		    
		    if (this.options.validators != null)
		        this.valid = this.options.validators[index].validate();
		    else
		        this.valid = true;
		},
		onShow: function(container, index) {
			container.setStyle('display', '');
		},
		onHide: function(container, index) {
		    container.setStyle('display', 'none');
		},		
		getContent: null
    },
	initialize: function(el, tabsel, options) {
		this.setOptions(options);
		this.element = $(el);
		this.tabsElement = $(tabsel);
		this.selected = null;
		this.build();
	},
	build: function() {
	    this.tabs = [];
		this.entries = [];
		
		this.element.getElements(this.options.entrySelector).each(function(el) {
		    this.entries.push({container:el.setStyle('display', 'none')});
		}, this);

        var index=0;
        
		this.tabsElement.getElements(this.options.tabHeaderSelector).each(function(el) {
		    var sender = this;
		    el.index = index;
		    el.addEvent('click', function(e){
		        sender.select(el.index);
		    });
		    this.tabs.push({container:el});
		    index++;
		}, this);
		
		if (this.entries.length) 
		    this.select(this.options.show);
	},
	back: function() {
	    if (this.selected > 0)
	        this.select(this.selected - 1)	;
	    return this;
	},
	next: function() {
	    if (this.selected < this.entries.length - 1)
	        this.select(this.selected + 1);
	    return this;
	},
	select: function(index) {

		if (this.selected === index || !this.entries[index]) return this;
		var entry = this.entries[index];
		var tab = this.tabs[index];
		var params = [entry.container, index];
		
		if (this.selected !== null) {
		    this.fireEvent('onValidate', this.selected);
		    
		    if (!this.valid)
		        return;
		        
		    this.tabs[this.selected].container.removeClass('selected');
			var current = this.entries[this.selected];
			params.concat([current.container, this.selected]);
			this.fireEvent('onHide', [current.container, this.selected]);
		}
		tab.container.addClass('selected');
		
		this.fireEvent('onBeforeShow', params);
		this.fireEvent('onShow', params);

		this.selected = index;
		this.valid=true;
		return this;	
	}
});
ProjectWizardBrowser.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep1 = new Class({
	options: {
    },
	initialize: function(el, options) {
	},
	validate: function() {
	    var result = true;
	    if ($('ProjectTitleTextBox').value == "")
	    {
	        result = false;
	        $('titleRequired').setStyle('display','block');
	        $('firstStepAddition').setStyle('display','none');
	    }
	    else
	    {
	        $('titleRequired').setStyle('display','none');
	        $('firstStepAddition').setStyle('display','block');
	    }

	    return result;
	}
});
ProjectWizardStep1.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep2 = new Class({
	options: {
    },
	initialize: function(el, options) {
	},
	validate: function() {
	    var result = true;
	    if ($('Description').value == "")
	    {
	        result = false;
	        $('descriptionRequired').setStyle('display','block');
	    }
	    else
	        $('descriptionRequired').setStyle('display','none');
	        
	    if ($('locationInput').value.length == 0 || $('PostalCode').value.length == 0)
	    {
	        result = false;
	        $('locationRequired').setStyle('display','block');
	    }
	    else
	        $('locationRequired').setStyle('display','none');
	    
	    return result;
	}
});
ProjectWizardStep2.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep3 = new Class({
	options: {
    },
	initialize: function(el, options) {
	    this.element = $(el);
	},
	validate: function() {
	    var result = true;
	    
	    if ($('categoriesInput').value.length == 0)
	    {
	        result = false;
	        $('categoriesRequired').setStyle('display','block');
	    }
	    else
	        $('categoriesRequired').setStyle('display','none');
	        
	    /*
	    var categoriesCount = $('blockCategory').getElements('input').filter(function(item){return item.checked;}).length;
	    if (categoriesCount == 0){
	        result = false;
	        $('categoriesRequired').setStyle('display','block');
	        $('categoriesRequired2').setStyle('display','block');
	    }
	    else
	    {
	        $('categoriesRequired').setStyle('display','none');
	        $('categoriesRequired2').setStyle('display','none');
	    }
	    if (categoriesCount > 3){
	        result = false;
	        $('categoriesRegular').setStyle('display','block');
	        $('categoriesRegular2').setStyle('display','block');
	    }
	    else
	    {
	        $('categoriesRegular').setStyle('display','none');
	        $('categoriesRegular2').setStyle('display','none');
	    }	    
	    */
	    
	    return result;
	}
});
ProjectWizardStep3.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep4 = new Class({
	options: {
    },
	initialize: function(el, options) {
	},
	validate: function() {
	    var result = true;
	    
	    // Validate "Telephone" project specific values
	    if ($('TenderedBidding_2') != null && $('TenderedBidding_2').checked)
	    {
	        if ($('ContactPhone').value.clean() == "")
	        {
	            $('phoneRequired').setStyle('display','block');
	            $('phoneRegular').setStyle('display','none');
	            return false;
	        }
	        $('phoneRequired').setStyle('display','none');
	        
	        var phone = $('ContactPhone').value.clean().replace(/[\+\-\(\)\s]/g,"");
	        $('ContactPhone').value = $('ContactPhone').value.clean();
            var reg=/^[0-9]{8,14}$/;
            if (!reg.test(phone))
            {
                $('phoneRegular').setStyle('display','block');
                return false;
            }
            $('phoneRegular').setStyle('display','none');
	    }	    
	    return result;
	}
});
ProjectWizardStep4.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep5 = new Class({
	options: {
    },
	initialize: function(el, options) {
	},
	validate: function() {
	    var result = true;
	    
	    if ($('projectsPriceRange').selectedIndex == -1)
	    {
	        $('priceRangeRequired').setStyle('display','block');
	        return false;
	    }
	    else $('priceRangeRequired').setStyle('display','none');
	    
	    return result;
	}
});
ProjectWizardStep5.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep6 = new Class({
	options: {
    },
	initialize: function(el, options) {
	},
	validate: function() {
	    var result = true;
	    
	    return result;
	}
});
ProjectWizardStep6.implement(new Events, new Options);

// ----------------------------------------
var ProjectWizardStep7 = new Class({
	options: 
	{
    },
	initialize: function(el, options) {
	},

	validateUsernamePending: function(){
	    var sender = this;
	    Ajax.RequestPool = [];
	    WorkBidder.ValidateUsername($('Username').value, function(response)
	    {
	        if (response != '' && response != null){
	            $('usernameRegular2').setStyle('display','block');
	            $('usernameRegular2').setText(response);
	        }
	        else
	        {
	            $('usernameRegular2').setStyle('display','none');
	            sender.validateEmailPending();
	        }
	    });
	},
	
	validateEmailPending: function(){
	    Ajax.RequestPool = [];
	    WorkBidder.ValidateEmail($('Email').value, function(response)
	    {
	        if (response != '' && response != null){
	            $('emailRegular2').setStyle('display','block');
	            $('emailRegular2').setText(response);
	        }
	        else
	        {
	            $('emailRegular2').setStyle('display','none');
	            
	            var cnt = wiz1.options.validators.length-1;
	            for (var i = 0; i < cnt; i ++)
	                if (!wiz1.options.validators[i].validate())
	                {
	                    wiz1.select(i);
	                    return;
	                }
	            validated = true;
	            $('ProjectDetails').submit();
	        }
	    });
	},
	
	validate: function() {
	    var result = true;
	    
	    $('usernameRegular2').setStyle('display','none');
	    $('emailRegular2').setStyle('display','none');

	    // First Name Required
	    if ($('FirstName').value == "") {
	        $('firstNameRequired').setStyle('display', 'block');
	        return false;
	    }
	    else $('firstNameRequired').setStyle('display', 'none');
	    
	    // Username Required
	    if ($('Username').value == "")
	    {
	        $('usernameRequired').setStyle('display','block');
	        return false;
	    }
	    else $('usernameRequired').setStyle('display','none');
	    
	    // Username Regular
	    var reg=/^[a-zA-Z0-9_-]+$/;
	    if (!reg.test($('Username').value))
	    {
	        $('usernameRegular').setStyle('display','block');
	        return false;
	    }
	    else $('usernameRegular').setStyle('display','none');
	    
	    // Password Required
	    if ($('Password1').value == "")
	    {
	        $('passwordRequired').setStyle('display','block');
	        return false;
	    }
	    else $('passwordRequired').setStyle('display','none');	    
	    
	    // Password Match
	    if ($('Password1').value != $('Password2').value)
	    {
	        $('passwordRequired2').setStyle('display','block');
	        return false;
	    }
	    else $('passwordRequired2').setStyle('display','none');	    
	    
	    // Email Required
	    if ($('Email').value == "")
	    {
	        $('emailRequired').setStyle('display','block');
	        return false;
	    }
	    else $('emailRequired').setStyle('display','none');
	    
	    
	    // Email Match
	    if ($('Email').value != $('Email2').value)
	    {
	        $('emailRequired2').setStyle('display','block');
	        return false;
	    }
	    else $('emailRequired2').setStyle('display','none');
	    
	    
	    // Agreement
	    if (!$('terms').checked || !$('privacy').checked)
	    {
	        $('agreementRequired').setStyle('display','block');
	        return false;
	    }
	    else $('agreementRequired').setStyle('display','none');
	    	    
	    return result;
	}
});
ProjectWizardStep7.implement(new Events, new Options);
