(function() {
    
    var W = this, D = this.document;
    
    box.ui('generic').create({
        id: 'pagemask'
    }).set({
        html: '<div id="pageMask"></div>'
    });
    
    box.ui('generic').create({
        id: 'popinloader'
    }).set({
        html: '<div id="popinLoader">' + l10n.loading + '</div>'
    });
    
    box.ui('generic').create({
        id: 'popin'
    });
    

    var openPopin = function() {
        box.ui('generic.popinloader').removeFromDOM();
        box.ui('generic.popin')
            .visible(false)
            .addToDOM({target: 'form'})
            .applyStyles({visibility: 'visible', top: 'before', left: 'middle', 'min-left': 0}, 'viewport')
            .animate({top: 'viewport:middle', 'min-top': 0}, 500, 'open');
    };
    
    var closePopin = function() {
        box.ui('generic.popin').animate({top: 'viewport:before'}, 500, 'close');
    };
    /*ker.closePopin = closePopin;*/
    
    var openMask = function() {
        box.ui('generic.pagemask')
            .addToDOM({target: 'form'})
            .applyStyles({opacity:0, top: 0, left: 0, width: 'viewport', height: 'document'})
            .animate({opacity: 0.75}, 180, 'open');
    };
    
    var closeMask = function() {
        box.ui('generic.pagemask').animate({opacity: 0}, 180, 'close');
    };
    
    var openLoader = function() {
        box.ui('generic.popinloader')
            .visible(false)
            .addToDOM({target: 'form'})
            .applyStyles({visibility: 'visible', opacity: 0, top: 'middle', left: 'middle'}, 'viewport')
            .animate({opacity: 0.999}, 300, 'open');
    };
    
    var closeLoader = function() {
        box.ui('generic.popinloader').animate({opacity: 0}, 300, 'close');
    };
    
    box.bind({
        'contentloaded.generic.popin': function() {
            if(!box.ui('generic.pagemask').isBusy() && !box.ui('generic.popinloader').isBusy()) {
                closeLoader();
            }
			
		},
		
		
			
        'open.generic.pagemask': function(e) {
            if(box.ui('generic.popin').isContentLoaded()) {
                openPopin();
            } else {
                openLoader();
            }
        },'open.generic.popinloader': function(e) {
            if(box.ui('generic.popin').isContentLoaded()) {
                closeLoader();
            }
        },'close.generic.popinloader': function(e) {
            openPopin();
        },'close.generic.popin': function(e) {
            box.ui('generic.popin').removeFromDOM();
            closeMask();
        },'close.generic.pagemask': function(e) {
            box.ui('generic.pagemask').removeFromDOM();
        },'open.generic.popin': function(e) {
            box.ui('escape').create('popin');
        },'closefromkey.escape.popin': function(e) {
            closePopin();
        },'close.generic.popin.popinRegister': function(e) {
			box.ui('form').destroy('registerForm');
		}
    });
    
    box.addClick({
        id: 'openPopin',
        deepness: 3,
        test: function(e, element) {
            return (element.nodeName.toLowerCase() == 'a' && element.className.indexOf('openPopin') > -1);
        },
        action: function(e, element) {
            e.preventDefault();
            openMask();
            var id = $(element).getBoxDatas('id'), url = l10n.url.async[id] || element.href;
            if(id == 'productFinder') {
                url += '?async=true';
            }
            box.ui('generic.popin').setNamespace(id).set({url: url, cache: id != 'pressScan'});
        }
    });
    
    box.addClick({
        id: 'closePopin',
        deepness: 2,
        test: function(e, element) {
            return (element.nodeName.toLowerCase() == 'a' && element.className.indexOf('closePopin') > -1);
        },
        action: function(e, element) {
            e.preventDefault();
            var ns = box.dom(element).getBoxDatas('id');
            if(ns == box.ui('generic.popin').getNamespace()) {
                closePopin();
            }
        }
    });
	box.addClick({
        id: 'pagemask',
        deepness: 1,
        test: function(e, element) {
			return element.id == 'pageMask';
        },
        action: function(e, element) {
            if(box.ui('generic.popin').isInDOM()) {
                closePopin();
            }
        }
    });
	
    
    box.dom(document).ready(function() {
        var directAccess = box.getURLHash('popin');
        if(directAccess && l10n.url.async.popins && l10n.url.async.popins[directAccess]) {
            openMask();
            box.ui('generic.popin')
                .setNamespace(directAccess)
                .set({url: l10n.url.async.popins[directAccess]});
        }
        
        var html;
      
        
        if(D.getElementById('contact')) {
            box.ui('generic.popin').setNamespace('contact').set({element: box.dom('#contact').remove()});
        }
        
        if(D.getElementById('password')) {
            box.ui('generic.popin').setNamespace('password').set({element: box.dom('#password').remove()});
        }
    });
    
})();
	
	box.bind({'open.generic.popin.popinRegister': function(e) {
			 
		 box.ui('form').create({
                element: '#registerForm'
            }).addReplacement().mustValidate(function(form) {
                form.field('title_list').mustValidate(function(field) {
                    if(!field.isChecked()) {
                        return l10n.errors.required.civility;
                    }
                });
		
        
        form.field('lastName').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.fname;
            }
        });
        
       form.field('firstName').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.lname;
            }
        });
		
		 form.field('address').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.address;
            }
        });
		  form.field('zipCode').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.zipcode;
            }
        });
		  
		   form.field('city').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.city;
            }
        });
		  
		   form.field('phone').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.phone;
            }
        });
        
        form.field('email').mustValidate(function(field) {
            if(field.isEmpty()) {
                return l10n.errors.required.email;
            } else if(!field.isMatching('email')) {
                return l10n.errors.invalid.email;
            }
        });

   		form.field('city_choice').mustValidate(function(field) {
			
			if(field.getValue() != '-----') {
				$('#noSelectCity').css('display', 'none');
				$('#confirmNextSession').css('display', 'block');
			}
			if(field.getValue() == '-----') {
				$('#noSelectCity').css('display', 'block');
				$('#confirmNextSession').css('display', 'none');
			}											
			if(!form.field('noSelect').isChecked() && field.getValue() == '-----')  {
                return l10n.errors.required.cityChoice;
            }											
          
        });
       
        return l10n.errors.form; 
	
				});
		}
});
