var DEFAULTS_CLASSNAME = "v-defaults";
var DEFAULTS_ATTRIBUTE = "title";

var Validator = Class.create();

Validator.types = ["string", "email", "select-notempty"];

Validator.form_validate = function(form) {
	var success = true;

	var id = form.id;

	$(form).getElements().each(function (el) {
		var el_success = Validator.field_validate(el);

		if (!el_success) {
			$(el).addClassName(Validator.failure_class);
		} else {
			$(el).removeClassName(Validator.failure_class);
		}

		success &= el_success;
	});

	if (Validator.callbacks[id]) {
		$(Validator.callbacks[id]).each(function (func) {
			success &= func();
		});
	}

	if (!success) {
		Validator.failure_callback(form);
	}

	return success;
}

Validator.field_validate = function(field) {
	var success = true;

	var is_required = false;
	$(Validator.types).each(function (type) {
		var className = "validate-" + type;
		if ($(field).hasClassName(className)) {
			is_required = true;
			success &= Validator.checker[type](field);
		}
	});

	if (is_required && success) {
		if ($(field).hasClassName(DEFAULTS_CLASSNAME) && $F(field) == $(field).getAttribute(DEFAULTS_ATTRIBUTE)) {
			success = false;
		}
	}

	return success;
}

Validator.checker = new Object();
Validator.checker["string"] = function(element) {
	return $F(element).length > 0;
}
Validator.checker["email"] = function(element) {
	var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return regex.test($F(element));
}
Validator.checker["select-notempty"] = function(element) {
	var regex = /^.+$/;
	return regex.test($F(element));
}

Validator.callbacks = new Object();
Validator.add_callback = function(formID, func) {
	if (!Validator.callbacks[formID]) {
		Validator.callbacks[formID] = new Array();
	}

	Validator.callbacks[formID].push(func);
}

Validator.initialize = function(failure_class, failure_callback) {
	Validator.failure_class = failure_class;
	Validator.failure_callback = failure_callback;
}


DefaultManager = Class.create();

DefaultManager.initialize = function() {
	var es = $$(".v-defaults");
	es.each(function (e) {
		e.value = e.getAttribute(DEFAULTS_ATTRIBUTE);
		Event.observe(e, "focus", function(event) {
			var elmt = Event.element(event);
			if ($F(elmt) == elmt.getAttribute(DEFAULTS_ATTRIBUTE)) {
				elmt.value = "";
			}
		});
		Event.observe(e, "blur", function(event) {
			var elmt = Event.element(event);
			if ($F(elmt) == "") {
				elmt.value = elmt.getAttribute(DEFAULTS_ATTRIBUTE);
			}
		});
	});
	var t = $$('#toolbar-nav a');
	t.each(function(item) {
		Event.observe(item, 'click', function(event) {
			var targetRel = (event.target) ? event.target.rel : event.srcElement.getAttribute("rel");
			
			if(targetRel == 'jump-to-contact') {
				var s = getSession();
				writeFormInfo(s);
				writeImg(s);
			}
		} );
	} );
};

var failure_callback = function(form) {
	// Do nothing
};

var getSession = function() {
	base = "abcdef1234567890".split("");
	result = "";
	for (var n = 0; n < 32; n++) {
		result += base[Math.round(Math.random() * (base.length - 1))];
	}
	return result;
};

function writeImg(s) {
	$('cimg').innerHTML = '<img src="/?cmd=imc&se=' + s + '"/>';
}

function writeFormInfo(s) {
	$('cpes').value = s;
}

function sendForm() {
	var f = $('contact-form-allgemein');
	if (! (f.hasClassName("validate") && !Validator.form_validate(f)) ) {

		$('contact-form-allgemein').request( {
			method:'post',
			onSuccess:function( transport ) {
				var response = transport.responseText;
				$('panel-allgemein').innerHTML = response;
				//Omniture Tracking
				if (typeof TrackContact == 'function' && response.indexOf("Vielen Dank") != -1) { 
					TrackContact('General');
				}
			}
		} );
	}
}

function load_accordions() {
	var topAccordion = new accordion('accordion', {
		classNames : {
			toggle : 'accordion_toggle',
			toggleActive : 'accordion_toggle_active',
			content : 'accordion_content'
		},
		direction : 'vertical',
		onEvent: "click"
	});

	var verticalAccordions = $$('.accordion_toggle');
	verticalAccordions.each(function(accordion) {
	    $(accordion.next(0)).setStyle({
	        height: '0px'
	    });
	});
}

function thisMovie() {
	 if( navigator.appName.indexOf("Microsoft") != -1 ) {
	 	return window.scienceexpress;
	 } else {
	    return document['scienceexpress'];
	 }
}

Event.observe(window, "load", function() {
	DefaultManager.initialize();
	Validator.initialize("validation-error", failure_callback);

	if( $('accordion') ) {
		load_accordions();
	}
}, false );

/** Social Bookmarks **/

function socialBookmark(url) {
	window.open(url);
	return false;
}

/** Print page **/

function printPage() {
	window.print();
	return false;
}

