if (typeof  cfeu_finance == 'undefined' || !cfeu_finance  ){ var cfeu_finance = {}; };
if(typeof console == 'undefined'){ console = { log : function(){} } };

(function($) {
	jQuery.fn.extend({
				isChildOf : function(filter_string) {
					var parents = jQuery(this).parents().get();
					for (j = 0; j < parents.length; j++) {
						if (jQuery(parents[j]).is(filter_string)) {
							return true;
						}
					}
					return false;
				}
			});
})(jQuery);

$(document).ready(function(){
	cfeu_finance.initialize(cfeu_finance.Region, "#frm-shopFilter");
});

cfeu_finance.merge = function(){
	var o=arguments[0], a = arguments,p;
	for(var i=1, l=a.length; i<l; i++){
		for(p in a[i]){
			o[p] = a[i][p];
		}
	}
	return o;
};

cfeu_finance.initialize = function(o, selector, options){
	var elm = $(selector);
	if(elm.length != 0){ elm.get(0)[o.controllerName] = new o( elm, options );}
};

;cfeu_finance.floatContainer = function(options){ 
	this.options = {
		left:0,
		top:0,
		iframe:false
	};
	jQuery.extend(this.options, options);
	this.create();
}

cfeu_finance.floatContainer.prototype = {
	create:function(){
		this.box = jQuery('<div />').addClass('cf_container');
		this.body = jQuery('<div />').addClass('cf_container_body');
		this.box.append(this.body);
	},
	add: function(content) {
		this.body.append(content);
	},
	display: function() {
		if(!this.box) return;
		
		this.box.attr('style', 'visibility: hidden');
		jQuery(document.body).append(this.box);
		
		var x = this.options.left;
		var y = this.options.top - jQuery(this.box).outerHeight();
		
		if(jQuery.browser.msie) {
			this.box.attr('style', 'visibility: visible');
			this.box.css('position','absolute');
			this.box.css('left', x +'px');
			this.box.css('top', y + 'px');
			this.box.css('z-index', '1000');
		} else {
			this.box.attr('style','position:absolute;left:'+x+'px;top:'+y+'px;z-index:1000'); //Use setProperty for Opera
		}

		if (jQuery.browser.msie && (jQuery.browser.version == 6) || this.options.iframe) {
			
			var p = this.box.position();
			var h = this.box.height() + 'px';
			var l = p.left + 'px';
			var w = this.box.width() + 'px';
			var t = y + 'px'; // x ???
			this.iframe = jQuery('<iframe />').css( {height: h, left: l, position: 'absolute', top: t, width: w, zIndex: 998, border:'none'} );
			if(jQuery.browser.msie) {
				this.iframe.css( {filter : 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)' });
			}
			jQuery(document.body).append(this.iframe);
		}
		
		jQuery(document).bind("mousedown", this ,this._remove );
	},
	
	_remove: function(event) {
		var target = jQuery(event.target);
		var clickOutsideContainer = target.closest(".cf_container").length == 0;
		if(typeof arguments[0].data == "object" && clickOutsideContainer ){
			var container = arguments[0].data;
			container.remove(container);
		}
	},
	
	remove: function(container) {
		if(typeof container.box == "object") {
			container.box.css('display','none'); // for Opera
			container.box.remove();
 			if(container.iframe){ container.iframe.remove(); }
			jQuery(document).unbind('mousedown', container._remove);
		}
	}
};

;cfeu_finance.fieldHelp = function(elm){
	this.obj = $(elm);
}

cfeu_finance.fieldHelp.prototype = {
	options : {
		closeText : "close"
	},
	initialize: function(options) {
		jQuery.extend(this.options, options);
		this.obj.parent().get(0).fieldHelp = this;
		this.obj.click( this._clickHandler );
	},
	_clickHandler: function(event) {
		//
		event.preventDefault();
		//
		var target = $(event.target);
		var obj = target.parent();
		var fieldHelp = obj.get(0).fieldHelp;
		//
		var box = $('<div />').addClass('block help');
		var header = $('<h3 />').addClass('title'); 
		var body = $('<div />').addClass('content');
		var elmId = obj.attr('id');
		
		if(document.getElementById(elmId+"-body") == null || document.getElementById( elmId +"-head") == null){ return; }
		
		box.append(header);
		box.append(body);
		//
		var closeButton = $('<span />').addClass('close');
		var closeButtonText = $('<span />').text( fieldHelp.options.closeText );
		closeButton.append(closeButtonText);
		closeButton.get(0).fieldHelp = fieldHelp;
		header.append(closeButton);
		closeButton.click( fieldHelp.close );
		// HEAD
		var htmlHead = document.getElementById( elmId +"-head").innerHTML;
		if(htmlHead) {
			header.append( $('<span />').append(htmlHead) );
		}
		// BODY
 		var htmlBody = document.getElementById(elmId+"-body").innerHTML;
		if(htmlBody) {
			body.append( $('<p />').append(htmlBody) );
			body.find("a.anchor").remove();
		}
		//
		var height = $(this).height();
		var top = $(this).offset().top - height * 0.5;
		if (jQuery(target).isChildOf(".context")) {
			var left = $(this).offset().left - 235;			
		} else {
			var left = $(this).offset().left ;	
			
		}
		var options = { left: left, top :top  };
		//
		fieldHelp.container = new cfeu_finance.floatContainer(options);
 		fieldHelp.container.add(box);
 		fieldHelp.container.display();
	},

	close: function(event) {
		event.preventDefault();
		var fieldHelp = $(event.target).get(0).fieldHelp;
		if(fieldHelp.container){
			fieldHelp.container.remove(fieldHelp.container);
		};
	}
};

cfeu_finance.fieldHelpManager = {
	initPage : function(options){
		$(".fieldHelp").each(
			function(){
				new cfeu_finance.fieldHelp(this).initialize(options);
			}
		)
	}
};

jQuery(document).ready(function(){ 
	cfeu_finance.fieldHelpManager.initPage();
});
cfeu_finance.Region = function(elm, options){
	this.controllerName = "_region";
	this.options = cfeu_finance.merge(options || {}, { ignoreValue : "none" , jsonUrlStores : "js/testStoresJSON.js" , jsonUrlStoreDetail : "js/testStoreDetailJSON.js"});
	this.init();
}

cfeu_finance.Region.prototype = {
	init : function(){
		this.province = $("#province");
		this.shop = $("#shop");
		this.shopDisplay = $(".shopResult");
		this.shopDefaultOptions = this.shop.options;
		this.province.bind("change", this, this.provinceSelectHandler);
		this.shop.bind("change", this, this.shopSelectHandler);
	},
	shopSelectHandler : function(e,o){
		var ctrl = e.data;
		var opt = $(e.target).get(0);
		var optVal = opt.options[opt.selectedIndex].value;
		if( optVal != ctrl.options.ignoreValue){
			// JSON callback
			var f = function(){
				ctrl.shopDisplay.html(arguments[0].content);
			};
			// JSON call
			$.getJSON(ctrl.options.jsonUrlStoreDetail, { "id": optVal, "lang": document.documentElement.lang}, f );
			
		} else {
			ctrl.shopDisplay.html("");
		}
	},
	provinceSelectHandler : function(e,o){
		var ctrl = e.data;
		var opt = $(e.target).get(0);
		var optVal = opt.options[opt.selectedIndex].value;
		if( optVal != ctrl.options.ignoreValue){
			ctrl.shop.get(0).disabled = false;
			// JSON callback
			var f = function(){
				var json = arguments[0];
				var result = [];
				result.push( '<option value="none">Kies een winkel</option>' );
				for(p in json){
					if( p == "id"){
						// check current #shop selection id
					} else {
						result.push( '<optgroup label="' + p + '">');
						for(var s in json[p]){
							result.push( '<option value="' + json[p][s].id + '">' + json[p][s].name + "</option>");
						}
						result.push('</optgroup>');
					}
				}
				ctrl.shop.html(result.join(""));
				ctrl.shopDisplay.html("");
			};
			// JSON call
			$.getJSON(ctrl.options.jsonUrlStores, { "id": optVal, "lang": document.documentElement.lang}, f );
		} else {
			// clear shop list
			ctrl.shop.options = this.shopDefaultOptions;
			ctrl.shop.get(0).disabled = true;
			ctrl.shop.get(0).selectedIndex = 0;
			ctrl.shopDisplay.html("");
		}
	}
}
