/**
 * @author gerrit
 */

/*
 * ajaxManager
 */

ajaxManager = function() {
	this.ajaxClass 		= "ajax";
	this.nameSpace		= "data";
	this.inactiveClass	= "inactive";
	this.rootNode		= $("body");
	this.globalSearchId	= $("#search_form");
	
};

ajaxManager.prototype.getAjaxNodes = function(node){
	this.searchNode = node;
	this.ajaxNodes = this.searchNode.find("." + this.ajaxClass);
};

ajaxManager.prototype.bindFunctions = function(){
	var self = this;
	this.ajaxNodes.each(function(i){
	    var ajaxNode = $(this);
		ajaxNode.css("cursor", "pointer");
	    var event 	= ajaxNode.attr(self.nameSpace + ":event");
	    var func 	= ajaxNode.attr(self.nameSpace + ":function");
	    var param 	= ajaxNode.attr(self.nameSpace + ":param");
		if (event == "none") {
			self[func](ajaxNode, param);
		} else {
			ajaxNode.bind(event,ajaxNode, function(ev){
				if (!(ajaxNode.hasClass(self.inactiveClass))) {
					self[func](ev.data, param);
				}
				return false;
			});
		}
	});
};


ajaxManager.prototype.ajaxPaging = function(domElement, param){
	
	var requires = "/includes/javascript/jquery.json-2.2.js";
	
	var func = function(domElement, param) {
		var paramObj = $.evalJSON(param);
		$.get(paramObj.ajaxurl + "/", function(data){
			$(paramObj.target).replaceWith($(paramObj.target, data)[paramObj.effect](paramObj.effectduration));
			AM.getAjaxNodes($(paramObj.target));
			AM.bindFunctions();
		});
	};
	
	tool.checkScript(func, requires, domElement, param);
	
};

ajaxManager.prototype.selectBox = function(domElement, param){
	var paramObj = $.evalJSON(param);
	$(paramObj.target).hide()[paramObj.effect](paramObj.effectduration);
    $("div#center").bind("click", function(){
		$(paramObj.target).hide();
	});	
};

ajaxManager.prototype.itemSelected = function(domElement, param){
	var paramObj = $.evalJSON(param);
	$(paramObj.target).attr("value",paramObj.label).parents("form").attr("action", paramObj.value);	
	domElement.parents("ul").hide();
};

ajaxManager.prototype.googleSearchSubmit = function(domElement, param){
	if ( domElement.val() ) domElement.parents("form").submit();
}

ajaxManager.prototype.init = function(){
	this.getAjaxNodes(this.rootNode);
	AM.bindFunctions();
};

// wird nur für das bootundfun-Formular und aehnliche benoetigt
ajaxManager.prototype.calculatePrices = function(domElement, param){
	var inputs = domElement.find("input");
	inputs.bind("click", function(){
		var sum = 0;
		inputs.each(function(i){
			var test = $(this).is(':checked') ? true : false;
			if ( test ) { sum = sum +  parseFloat($(this).val());}
		});
		if  ( $("#discount:checked").length > 0 ) {
			var discountPercent = parseFloat($("#earlybirddiscount").val()); 
			sum = sum - discountPercent; // weil es in der each-Schleife oben mit addiert wird
			var discount = (sum / 100) * discountPercent;
			sum = sum - discount;
		}
		sum = sum.toString(10).split(".");
		if ( sum[1] ) {
			sum[1] = sum[1].length = 1 ? sum[1] +  "0 €" : sum[1] + " €"
			sum = sum[0] + "," + sum[1];
		} else {
			sum = sum[0] + ",00 €"
		}
		$("#buf-sum").val(sum);
	})
}

/* lightbox
 * 
 */


ajaxManager.prototype.initLayer = function() {
    var self = this;
    this.layer      = $("<div id='layer' />");
    this.blurDiv    = $("<div class='blur' />").css("height", $("body").height());
    this.wrapperDiv = $("<div class='contentwrapper' />");
	this.medias = $("body").find("object");
    this.layer.appendTo("body").click(function() {
        self.layer.remove();
		self.medias.show();
    });
}

ajaxManager.prototype.lightBox = function(domElement, param) {
	var self= this;
    $.get(param, function(data){
		self.initLayer();
		self.medias.hide();
		self.blurDiv.appendTo(self.layer); 
        self.layer.show("fast", function(){
	        self.wrapperDiv.html(data).appendTo(self.layer).css(
			  { left: $("body").width() /2 - 320 +"px",
			    top:  $(window).scrollTop() + 100  +"px"
		      });			
		});
    }); 
}

ajaxManager.prototype.checkFormField = function(domElement) {
	var self = this;
	var inputs = domElement.find("input");
	inputs.bind("blur", function(){
		self.check($(this));
	});
	inputs.bind("focus", function(){ $(this).siblings("span.error").hide(); });
}


ajaxManager.prototype.check = function(input) {
	var self = this;
    var inputCheckMethod = input.attr(self.nameSpace + ":param"); 
	$.post("/ajax/",
	  { value: input.attr("value"), 
		name: inputCheckMethod, 
		classname: input.attr("class"), 
		type: "field"
	  }, 
	  function(data){
		if ( data.errors ) {
			var msgText = data.errors[inputCheckMethod].toString();
			input.siblings("span.error").text(msgText).fadeIn("500").parent("div.input-wrapper").addClass("errored");
		} 
	  },
	  "json"
	);
}

ajaxManager.prototype.getAds = function(domElement, param) {
	var requires = "/includes/javascript/ads.js";
	var func = function() {
		adsM = new adsManager;
		adsM.init();
	};
	tool.checkScript(func, requires, domElement, param);
}

ajaxManager.prototype.classifieds = function(domElement, param) {
	var requires = "/includes/javascript/classifiedads.js";
	var func = function() {
		CA = new classifiedAds;
		CA.init();
	};
	tool.checkScript(func, requires, domElement, param);
}

ajaxManager.prototype.checkForm = function(domElement) {
	var self = this;
	var form = domElement.parents("form")
	tool.shout(form.serialize());
}



// Toolbox - required always and everywhere

toolBox = function() {
  this.debug = true;
  this.scripts = {}; 
};


toolBox.prototype.swapClass = function(domElm, oldClass, newClass){
	$(domElm).removeClass(oldClass).addClass(newClass);
};

toolBox.prototype.loadScript = function(script){
  var self = this;
  this.scripts[script] = {};
  this.scripts[script].name = script;
  $.getScript(script, function(){
	self.scripts[script].success = true;
  });
};

toolBox.prototype.checkScript = function (func, requires, domElement, param) {

	var self = this;
	var call = function() {
		if ( !domElement && !param ) func()
		else func(domElement, param);
	};	
	
	this.scripts[requires] = this.scripts[requires] || {};
	if ( this.scripts[requires].success ) {
		call()
	} else {
		$.getScript(requires, function(){
			self.scripts[requires].success = true;
			call()
		});		
	}
}

toolBox.prototype.shout = function(msg){
	if (this.debug) {
		if (window.console && window.console.firebug) {
			console.log(msg);
		}
		if ($.browser.opera) {
			opera.postError(msg);
		}
	}
};


/*
 * START
 */

var tool = new toolBox(); // needed everywhere
tool.loadScript("/includes/javascript/jquery.json-2.2.js");

var AM = new ajaxManager();
AM.init();