FrontAppView.prototype = new PastelBaseView();
FrontAppView.prototype.constructor = FrontAppView;
 
/**
 * @constructor
 * @base PastelBaseView
 */
function FrontAppView() {
	
	// accessors ==================================================================================
	/** @type jQuery */
	this.mHome = function() {
		return this._getset("a#mhome", arguments);
	};
	
	/** @type jQuery */
	this.mUpgrades = function() {
		return this._getset("a#mupgrades", arguments);
	};
	
	/** @type jQuery */
	this.mFeatures = function() {
		return this._getset("a#mfeatures", arguments);
	};
	
	/** @type jQuery */
	this.mPrices= function() {
		return this._getset("a#mprices", arguments);
	};
	
	/** @type jQuery */
	this.mContact = function() {
		return this._getset("a#mcontact", arguments);
	};
	
	/** @type jQuery */
	this.mFaq = function() {
		return this._getset("a#mfaq", arguments);
	};
	
	/** @type jQuery */
	this.mTerms = function() {
		return this._getset("a#mfterms", arguments);
	};
	
	this.rememberLogin = function() {
		return this._getset("a.id_remember_login", arguments);
	};
	
	this.loginForm = function() {
		return this._getset("form.id_login_form", arguments);
	};
	
	this.loginEmail = function() {
		return this._getset("input[name='email']", arguments);
	};
	
	this.loginPassword = function() {
		return this._getset("input[name='password']", arguments);
	};
	
	this.regContainer = function() {
		return this._getset("div.registration", arguments);
	};
	
	this.regStatusBar = function() {
		return this._getset("div.reg_status_bar", arguments);
	};
	
	this.regUserName = function() {
		return this._getset("input.id_reg_user_name", arguments);
	};
	
	this.regEmail = function() {
		return this._getset("input.id_reg_email", arguments);
	};	

	this.regSubdomain = function() {
		return this._getset("input.id_reg_subdomain", arguments);
	};
	
	this.regCompanyName = function() {
		return this._getset("input.id_reg_company_name", arguments);
	};
	
	this.regMol = function() {
		return this._getset("input.id_reg_mol", arguments);
	};	
	
	this.regSearchArea = function() {
		return this._getset("input.id_reg_search_area", arguments); 
	};
	
	this.regPostcode = function() {
		return this._getset("input.id_reg_postcode", arguments);
	};
	
	this.regStreet = function() {
		return this._getset("input.id_reg_street", arguments);
	};
	
	this.regEikNo = function() {
		return this._getset("input.id_reg_eik_no", arguments);
	};
	
	this.vatSlider = function() {
		return this._getset("a.id_vat_slider", arguments);
	};
	
	this.regVatNo = function() {
		return this._getset("input.id_reg_vat_no", arguments);
	};
	
	this.regCaptcha = function() {
		var $cont = this.regContainer();
		return this._getset("input.id_reg_ahctpac", arguments, $cont);
	};	
	
	this.termsTick = function() {
		return this._getset("a.id_terms_tick", arguments);
	};
	
	this.regLoader = function() {
		return this._getset("div.reg_loader", arguments);
	};
	
	this.prevStep = function() {
		return this._getset("a.prev_step", arguments);
	};
	
	this.nextStep = function() {
		return this._getset("a.next_step", arguments);
	};
	
	// methods ====================================================================================
	this.initMenus = function() {
		// init main menu items
		var $mainMenuCont = $("div.id_main_menu");
		var $menuItems = $("a[rel='menu']", $mainMenuCont);
		$menuItems.each(function() {
			var $menuItem = $(this);
			
			$menuItem.attr("rel", "history");
			var id = $menuItem.attr("id");
			id = id.substring(1);
			$menuItem.attr("href", "#" + id);
			
			var menuClass = $menuItem.attr("class");
			if(menuClass.indexOf("_active") != -1) {
				menuClass = menuClass.replace("_active", "");
				$menuItem.attr("class", menuClass);
			}
		});
		// init main menu items
		var $footerMenuCont = $("div.footer_right");
		$menuItems = $("a", $footerMenuCont);
		$menuItems.each(function() {
			var $menuItem = $(this);
			
			$menuItem.attr("rel", "history");
			var id = $menuItem.attr("id");
			id = id.substring(2);
			$menuItem.attr("href", "#" + id);
		});
	};
	
	this.toggleRememberLogin = function() {
		var $button = this.rememberLogin();
		
		var $rememberMeInput = $("input[name='rememberMe']");
		if($button.hasClass("remember_me")) {
			$button.removeClass("remember_me");
			$button.addClass("remember_me_active");
			$rememberMeInput.val(1);
		} else {
			$button.removeClass("remember_me_active");
			$button.addClass("remember_me");
			$rememberMeInput.val(0);
		}
	};
	
	this.isVatSlider = function($element) {
		return $element.hasClass("id_vat_slider");
	};
	
	this.isPrevStepBtn = function($element) {
		return $element.hasClass("prev_step");
	};	
	
	this.isNextStepBtn = function($element) {
		return $element.hasClass("next_step");
	};
	
	this.isReloadCaptchaBtn = function($element) {
		return $element.hasClass("id_reload_reg_ahctpac");
	};
	
	this.isTermsTick = function($element) {
		return $element.hasClass("id_terms_tick");
	};
	
	this.isTermsTickActive = function() {
		$tick = this.termsTick();
		return $tick.hasClass("tick_button_active");
	};
	
	this.toggleVatSlider = function() {
		var $slider = this.vatSlider();
		var $vatCont = $("div.id_vat_field_cont"); 
		if($slider.hasClass("slide_on")) {
			$slider.removeClass("slide_on");
			$slider.addClass("slide_off");
			$vatCont.css("display", "none");
			this.regVatNo("set", "");
			this.regVatNo("attr", "disabled", "disabled");
		} else {
			$slider.removeClass("slide_off");
			$slider.addClass("slide_on");
			this.regVatNo().removeAttr("disabled");
			var defaultValue = this.regVatNo("data", "defaultValue");
			this.regVatNo("set", defaultValue);
			$vatCont.css("display", "block");
		}
	};
	
	this.changeCaptchaImg = function() {
		var $cont = this.regContainer();
		var $captchaImg = $("img.id_reg_ahctpac_img", $cont);
		var rand = Math.round(Math.random() * 100);
		var src = "/" + _APP.lang + "/index/ahctpac/context/registration/r/" + rand;
		$captchaImg.attr("src", src);
	};
	
	this.toggleTermsTick = function() {
		var $tick = this.termsTick();
		if($tick.hasClass("tick_button")) {
			$tick.removeClass("tick_button");
			$tick.addClass("tick_button_active");
		} else {
			$tick.removeClass("tick_button_active");
			$tick.addClass("tick_button");			
		}
	};
	
	this.setAreaName = function($element) {
		var type = $element.attr("rel");
		var areaName = type + " " + $element.text();
		this.regSearchArea("set", areaName);
	};	
	
	this.isFirstStep = function() {
		return this._isStep(1); 
	};
	
	this.isSecondStep = function() {
		return this._isStep(2); 
	};
	
	this._isStep = function(number) {
		var selector = "div.id_reg_step_" + number;
		var $cont = $(selector);
		return $cont.is(":visible");		
	};
	
	this.goToFirstStep = function(fromStep) {
		this._goToStep(1, fromStep, 15);
		this.prevStep("css", "display", "none");
	};
	
	this.goToSecondStep = function(fromStep) {
		this._goToStep(2, fromStep, 80);
		this.prevStep("css", "display", "block");
	};
	
	this.goToThirdStep = function(fromStep) {
		this._goToStep(3, fromStep, 100);
		this.prevStep("css", "display", "none");
		this.nextStep("css", "display", "none");
	};	
	
	this._goToStep = function(number, fromStep, statusBarWidth) {
		$cont = $("div.registration");
		
		var oldContSelector = "div.id_reg_step_" + fromStep; 
		var newContSelector = "div.id_reg_step_" + number;
		
		var oldTtlAddClass = "reg_step" + fromStep;
		var oldTtlRemoveClass = oldTtlAddClass + "_active";
		var oldTtlSelector = "p." + oldTtlRemoveClass;
		
		var newTtlRemoveClass = "reg_step" + number;
		var newTtlAddClass = newTtlRemoveClass + "_active";
		var newTtlSelector = "p." + newTtlRemoveClass;
		
		$(oldContSelector, $cont).css("display", "none");
		$(newContSelector, $cont).css("display", "block");
		
		$oldTtl = $(oldTtlSelector, $cont);
		$oldTtl.removeClass(oldTtlRemoveClass);
		$oldTtl.addClass(oldTtlAddClass);
		$newTtl = $(newTtlSelector, $cont);
		$newTtl.removeClass(newTtlRemoveClass);
		$newTtl.addClass(newTtlAddClass);
		
		this.regStatusBar("css", "width", statusBarWidth + "%");		
	};
	
	this.getData = function() {
		var data = {
			name: this.regUserName("get"),
			email: this.regEmail("get"),
			subdomain: this.regSubdomain("get"),
			companyName: this.regCompanyName("get"),
			companyMol: this.regMol("get"),
			city: this.regSearchArea("get"),
			postcode: this.regPostcode("get"),
			street: this.regStreet("get"),
			companyEikNo: this.regEikNo("get"),
			securityCode: this.regCaptcha("get")
		};
		var vatNo = this.regVatNo("get");
		
		if(vatNo != "") {
			data.companyVatNo = vatNo;
		}
		
		return data;
	};
	
	// constructor ================================================================================ 
	this.initHook = function() {
		
		// validation
		// init validator
		this.initValidator("div.page");
		
		// login form
		this.loginEmail("validator", {
			required: {value: true},
			regex: {
				value: /^[A-Za-z0-9_\-@.]+$/,
				message: translate('Valid_email_required')
			},						
			email: {value: true},
			maxlen: {value: 128}
		}, "login");
		
		this.loginPassword("validator", {
			required: {value: true},
			regex: {
				value: /^[A-Za-z0-9_\-]+$/,
				message: translate('Allowed_symbols')
			},
			rangelen: {value: [6, 16]}
		}, "login");
		
		// registration form
		this.regUserName("validator", {
			required: {value: true},
			maxlen: {value: 128}
		}, "regStep1");
		
		this.regEmail("validator", {
			required: {value: true},
			regex: {
				value: /^[A-Za-z0-9_\-@.]+$/,
				message: translate('Valid_email_required')
			},			
			email: {value: true},
			maxlen: {value: 128}
		}, "regStep1");
		
		this.regSubdomain("validator", {
			required: {value: true},
			regex: {
				value: /^[A-Za-z0-9_\-]+$/,
				message: translate('Allowed_symbols')
			},
			maxlen: {value: 32}
		}, "regStep1");
		
		this.regCompanyName("validator", {
			required: {value: true},
			maxlen: {value: 128}
		}, "regStep2");
		
		this.regMol("validator", {
			required: {value: true},
			maxlen: {value: 128}
		}, "regStep2");
		
		this.regSearchArea("validator", {
			required: {value: true},
			maxlen: {value: 64}
		}, "regStep2");
		
		this.regPostcode("validator", {
			required: {value: true},
			maxlen: {value: 12}
		}, "regStep2");
		
		this.regStreet("validator", {
			required: {value: true},
			maxlen: {value: 128}
		}, "regStep2");
		
		this.regEikNo("validator", {
			required: {value: true},
			maxlen: {value: 24}
		}, "regStep2");
		
		this.regVatNo("validator", {
			maxlen: {value: 24}
		}, "regStep2");
		
		this.regCaptcha("validator", {
			required: {value: true},
			exactlen: {value: 4}
		}, "regStep2");
		
		// toggle default
		// login form
		this.addToggleDefault(this.loginEmail());
		this.addToggleDefault(this.loginPassword());
		// reg form
		this.addToggleDefault(this.regUserName());
		this.addToggleDefault(this.regEmail());
		this.addToggleDefault(this.regSubdomain());
		this.addToggleDefault(this.regCompanyName());
		this.addToggleDefault(this.regMol());
		this.addToggleDefault(this.regPostcode());
		this.addToggleDefault(this.regStreet());
		this.addToggleDefault(this.regEikNo());
		this.addToggleDefault(this.regVatNo());
		this.addToggleDefault(this.regCaptcha());
	};
}
