if (typeof anselljs == "undefined") {var anselljs = {};}
if (typeof console == "undefined"){console = {log : alert}}

anselljs.localize = {
    en_MAILINVALID: "invalid email",
	nl_MAILINVALID: "invalid email",
	fr_MAILINVALID: "invalid email",
    
    en_FILEINVALID: "invalid file format",
	nl_FILEINVALID: "invalid file format",
	fr_FILEINVALID: "invalid file format",

    en_FILEINFO: "Accepted formats:",
	nl_FILEINFO: "Accepted formats:",
	fr_FILEINFO: "Accepted formats:",

    en_FILESIZE: "(max 2MB)",
	nl_FILESIZE: "(max 2MB)",
	fr_FILESIZE: "(max 2MB)",
		
    en_FILEDELETE: "File selected:",
	nl_FILEDELETE: "File selected:",
	fr_FILEDELETE: "File selected:"	
}

anselljs.settings = {
    legalFileTypes: "doc,txt,rtf,pdf,ppt",
	animation: true
}

anselljs.response = {OK: 0, INVALID: -1, FALLTHROUGH: 2};

anselljs.languageswitch = {
	/**
	 * 
	 */
	css : {nav : "langNav", toggleTrigger : "change", content : "switch", closeTrigger : "close" },
	elm : {nav: false, toggleTrigger: false, content : false},
	
	/**
	 * 
	 */
	init : function(){
		var css = anselljs.languageswitch.css;
		var elm = anselljs.languageswitch.elm;
		
		elm.nav = $("." + css.nav);
		elm.toggleTrigger = elm.nav.children().filter("." + css.toggleTrigger);
		elm.content = elm.nav.children().filter("." + css.content);
		elm.closeTrigger = elm.content.children().filter("." + css.closeTrigger);
		
		if(typeof elm.nav != "undefined"){
			elm.content.css("left", "auto" );
			elm.content.css("top", "auto" );
			elm.content.css("display", "none");
			
			elm.toggleTrigger.bind("click", anselljs.languageswitch.toggle);
			elm.closeTrigger.bind("click", anselljs.languageswitch.toggle);
		}
	},
	/**
	 * 
	 */
	toggle : function(e){
		var elm = anselljs.languageswitch.elm;	
		if(elm.content.css("display") == "block"){
			elm.content.css("display", "none");
			$(document).unbind("click", anselljs.languageswitch.clickHandler);
		} else {
			elm.content.css("display", "block");
			$(document).bind("click", anselljs.languageswitch.clickHandler);
		}	
	},
	/**
	 * 
	 */
	clickHandler : function(e){
		var css = anselljs.languageswitch.css;
		var t = e.target;
	
		while(!$(t).hasClass(css.nav) && t.nodeName != 'HTML'){
			t=t.parentNode;
		}
		if(!$(t).hasClass(css.nav)){
			$(document).unbind("click", anselljs.languageswitch.toggle);
			anselljs.languageswitch.toggle();							
		}
	}
};

anselljs.didYouKnow = {
	css : {elm : "facts", footer: "foot", nextTrigger : "more" },
	elm : {nav: false, nextTrigger: false, items: false},
    index : 0,
    init : function(){
        var elm = anselljs.didYouKnow.elm;
        var css = anselljs.didYouKnow.css;
        var c = $("." + css["elm"]);
        if (c.length > 0){
            elm.items = c.children("p");
            c.children("p:first").css("display", "block");
            c.children("p:gt(0)").css("display", "none");
            elm.nextTrigger = c.find("." + css["nextTrigger"]).click(anselljs.didYouKnow.clickHandler);
        }
    },
    displayNext : function(){
        var elm = anselljs.didYouKnow.elm;
        var c = $("." + anselljs.didYouKnow.css["elm"]);
        
        if (c.length > 0){
            elm.items = c.children("p");
            var i = (anselljs.didYouKnow.index < elm.items.length - 1) ? ++anselljs.didYouKnow.index : 0;
            for(var j = 0, l = elm.items.length; j < l; j++ ){
                $(elm.items.get(j)).css("display", (j == i) ? "block" : "none" );
            }
            anselljs.didYouKnow.index = i;
        }
    },
	clickHandler : function(e){
        anselljs.didYouKnow.displayNext();
        return false;
    }
};

anselljs.email = {
	css : {valid : "", invalid : "error", mailElm : "email"},
	/**
	 * 
	 */
	init : function(){
		$(".inputElement").filter(".email").children(".inputControl").find("input").blur(anselljs.email.validationHandler);
	},
	validate: function(email){
		var r = anselljs.response;
		if(email.length == 0) return r.FALLTHROUGH;
		var val = (/^[-!#$%&\'*+\\.\/0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\.\/0-9=?A-Z^_`a-z{|}~]+$/).test(email);
		return (val) ? r.OK : r.INVALID;
	},
	validationHandler : function(e){
		var f = $(this).parents(".inputElement").find(".inputFeedback");
		if (f.length == 0) {return -1}
		//
		var r = anselljs.response;
		var v = anselljs.email.validate(this.value);
		if(v == r.OK){
			$('.formrow').css('zoom', ""); // fix IE not updating
			f.empty();
		} else if (v == r.INVALID){
			$('.formrow').css('zoom', 1); // fix IE not updating
			f.empty();
            var msg =  anselljs.localize[document.documentElement.lang + "_MAILINVALID"] || anselljs.localize["en_MAILINVALID"];
			f.append('<p class="error">' + msg  + '</p>');
		} else {
			$('.formrow').css('zoom', ""); // fix IE not updating
			f.empty();
		}
	}
};

anselljs.fileUpload = {
	css : {fileElm : "file"},
	_getHintMsg : function(){return (anselljs.localize[document.documentElement.lang + "_FILEINFO"]) + " " + anselljs.settings.legalFileTypes + " " + (anselljs.localize[document.documentElement.lang + "_FILESIZE"]);},
	_getHintDeleteMsg : function(filename){return (anselljs.localize[document.documentElement.lang + "_FILEDELETE"])  + " " +  filename;},
    //
	init : function(){
        var css = anselljs.fileUpload.css;
        var elm = $(".inputElement").filter("." + css["fileElm"]);
        elm.children(".inputControl").each(function(){
        	var elm_i = $(this).find("input");
        	elm_i.change(anselljs.fileUpload.validationHandler);
        	
        	var elm_h = $(this).find(".controlHint");
        	var elm_f = $(this).find(".inputFeedback");
        	elm_h.text(anselljs.fileUpload._getHintMsg());
        	elm_i.get(0).fileUpload = {inputElement : this, controlHint: elm_h, inputFeedback: elm_f };
        } );		
	},
    validate: function(filename){
		var r = anselljs.response;
        filename = filename.replace(/^\s|\s$/g, ""); //trims string
		if(filename.length == 0) return r.FALLTHROUGH;
		
        var extensions = "(" + anselljs.settings.legalFileTypes.replace(/,/g,"|") + ")";
        var rx = new RegExp("[^\.]\." + extensions + "$", "i");
		return (rx.test(filename)) ? r.OK : r.INVALID;
    },
    validationHandler : function(e){
    	var fileUpload =$(e.target).get(0).fileUpload;

		var f = $(fileUpload.inputFeedback);
		if (f.length == 0) {return -1}
        
		var r = anselljs.response;
		var v = anselljs.fileUpload.validate(this.value);
		if(v == r.OK){
			f.empty();
			//
			$(fileUpload.controlHint).text(anselljs.fileUpload._getHintDeleteMsg(this.value));
			// add delete link
			var del = $('<a href="#">(delete)</a>');
			del.get(0).deleteElement = this;
			del.click(anselljs.fileUpload.clearHandler);
			
			$(fileUpload.controlHint).append("&nbsp;");
			$(fileUpload.controlHint).append(del);
		} else if (v == r.INVALID){
			f.empty();
            var msg =  anselljs.localize[document.documentElement.lang + "_FILEINVALID"] || anselljs.localize["en_FILEINVALID"];
			f.append('<div class="error">' + msg  + '</div>');
			$(fileUpload.controlHint).text(anselljs.fileUpload._getHintMsg());
		} else {
			f.empty();
		}
    },
    clearHandler : function(e){
    	try{
	    	deleteElement = $(e.target).get(0).deleteElement;
	    	if(typeof deleteElement == "undefined"){
	    		return false;
	    	}
			// this will clear upload in FF
			deleteElement.value = "";
			// only way to clear upload in IE is clone and remove orginal
			clone= deleteElement.cloneNode(false);
			clone.value = "";
			clone.fileUpload = deleteElement.fileUpload;
			clone.onchange = deleteElement.onchange;
			$(clone).change(anselljs.fileUpload.validationHandler);
			deleteElement.parentNode.replaceChild(clone, deleteElement);
			clone.fileUpload.controlHint.text(anselljs.fileUpload._getHintMsg());
    	}catch(e){}
    	return false;
    }
}

anselljs.jumpmenu = {
	_hideItems : function(){ return $(this).siblings(".box").css("display", "none");  },
	_setClickHandler : function(){ return $(this).click(anselljs.jumpmenu.clickHandler);	},
	init : function(){
		var j = anselljs.jumpmenu;
		j.items = $(".menu  .handler");
		j.items.each( j._setClickHandler);
	},
	clickHandler : function(e){
		if(e.target.nodeName == "A") return; // item selected inside menu
		var elm =$(e.target).siblings(".box");
		if(elm.length != 0){ // length > 0 is menu trigger selected else outside of trigger	
			if(elm.css("display") == "block"){
				elm.css("display", "none");
			} else {
				anselljs.jumpmenu.items.each( anselljs.jumpmenu._hideItems );
				elm.css("display", "block");
				$(document).bind("click", anselljs.jumpmenu.clickHandler);
			}	
		} else {
			anselljs.jumpmenu.items.each( anselljs.jumpmenu._hideItems );
			$(document).unbind("click", anselljs.jumpmenu.clickHandler);
		}
		return false;
	}
};

anselljs.viewChartOptions = {
	init : function(){
		var f = $("#filter-form");
		f.find("div .extra").eq(0).css("display", 'none');
		/*var e = f.find("div .expand .more");e.toggleClass('expand');e.toggleClass('collapse');*/
		f.find("div .expand").eq(0).click(anselljs.viewChartOptions.clickHandler);
	},
	clickHandler : function(e){		
		var elm = $(e.target).parent().siblings(".extra");
		if (elm.length > 0){ 
			elm.css("display" , (elm.css("display") == 'block') ? 'none' : 'block');
			$(e.target).toggleClass('expand');
			$(e.target).toggleClass('collapse');
		}
		return false;
	}
};

anselljs.jobFormEc = {
	init : function(){
		if($('body.careers.job').length == 0) return false;
		$('.jobDetail + .formbox').each(
			function(){
				var trigger = $(this).prev('.jobDetail').find('a.more');
				if(trigger.hasClass("collapse")){
					trigger.removeClass("collapse");
					trigger.addClass("expand");
				}
				trigger.get(0).ec = {content : this }; // quick access in clickHandler
				$(this).css("display", 'none');
				trigger.click( anselljs.jobFormEc.clickHandler );
			}
		)
	},
	clickHandler : function(e){		
		var elm = $(e.target).get(0);
		if(typeof elm.ec == 'undefined') { return false;} 
		var c = $(elm.ec.content);
		if(c.css("display") == 'block'){
			(anselljs.settings.animation) ? c.slideUp(200) : c.css("display" ,'none' );
		} else {
			(anselljs.settings.animation) ? c.slideDown(400) : c.css("display" ,'block' );
		}
		var t = $(e.target);
		t.toggleClass('expand');
		t.toggleClass('collapse');
		
		return false;
	}
};

anselljs.careersFilterEc = {
	init : function(){
		if($('body.careers.main').length == 0) return false;
		var ctrl = $('#release-filter>.formcontent>fieldset');
		var trigger = ctrl.children(".level1");
		trigger.addClass("expand");
		ctrl.children("div.fields").css("display", 'none');
		trigger.click( anselljs.careersFilterEc.clickHandler );
	},
	clickHandler : function(e){	
		var elm = $(e.target);
		var c = elm.parent().children('div.fields');
		if(c.css("display") == 'block'){
			(anselljs.settings.animation) ?  c.fadeOut(200) : c.css("display" ,'none' );
		} else {
			(anselljs.settings.animation) ?  c.fadeIn(800) : c.css("display" ,'block' );
		}
		elm.toggleClass('expand');
		elm.toggleClass('collapse');		

		return false;
	}
};

$(document).ready(function(){
	anselljs.didYouKnow.init();
	anselljs.jumpmenu.init();
	anselljs.languageswitch.init();
	anselljs.email.init();
    anselljs.fileUpload.init();
    anselljs.viewChartOptions.init();
	anselljs.jobFormEc.init();
	anselljs.careersFilterEc.init();
});

