
	var j = jQuery.noConflict(true);
	
	j(document).ready(function () {
		j = j.noConflict(true);

		j.each(j('.default-value'), function (k, input) {
			input = j(input);
			input.defaultValue = input.attr('value');
			input.focus(createMethodReference(input, function () {
				if (this.attr('value') == this.defaultValue)
					this.attr('value', '');
			}));
			input.blur(createMethodReference(input, function () {
				if (this.attr('value') == '')
					this.attr('value', this.defaultValue);
			}));
		});

		if (j('.smartmenu').length > 0)
			Smartmenu.init();

		ExtendedSelect.replace();

		j('.hint').mouseenter(function (e) {
			var el = j(this);
			var sp = el.find('span');

			el.attr('title', '');

			if (sp.length > 0) {
				sp.css('position', 'absolute');
				sp.css('display', 'block');
				sp.css('width', 'auto');
				sp.css('left', e.pageX + 'px');
				sp.css('top', (e.pageY + 15) + 'px');
				sp.show();
//				console.log(e.pageX + " " + j(window).width());
//				console.log(sp.width() + e.pageX);
//				console.log(j(window).width());

				if (sp.width() + 15 + e.pageX > j(window).width())
					sp.css('left', j(window).width() - sp.width() - 50);
			}
		});

		j('.hint').mouseleave(function (e) {
			var el = j(this);
			el.find('span').hide();
		});

		var multiline_keydown = function (e) {
			if (e.keyCode == 13) {
				e.preventDefault();

				var i = j(this).parent();

				if (i.next().hasClass('multiline')) {
					i.next().find('input').focus();
				} else {
					var n = i.clone().insertAfter(i);
					n.find('input').focus().keydown(multiline_keydown).val('');
					n.find('.multiline-add').click(multiline_add);
					n.find('.multiline-remove').click(multiline_remove);
				}

				multiline_update();
			} else if (e.keyCode == 8 && this.value === '') {
				var p = j(this).parent().prev();
				
				if (p.hasClass('multiline')) {
					createMethodReference(this, multiline_remove)(e);
				}
			}
		};

		var multiline_add = function () {
			var i = j(this).parent();

			if (i.hasClass('multiline')) {
				var n = i.clone().insertAfter(i);
				n.find('input').focus().keydown(multiline_keydown).val('');
				n.find('.multiline-add').click(multiline_add);
				n.find('.multiline-remove').click(multiline_remove);
				multiline_update();
			}
		};

		var multiline_remove = function () {
			var i = j(this).parent();
			var p = i.prev();

			if (i.hasClass('multiline')) {
				i.remove();

				if (p.hasClass('multiline')) {
					p.find('input').focus();
				}

				multiline_update();
			}
		};

		var multiline_update = function () {
			j('.multiline .multiline-add').hide();
			j('.multiline').last().find('.multiline-add').show();
			
			if (j('.multiline').length > 1) {
				j('.multiline .multiline-remove').show();
			} else {
				j('.multiline .multiline-remove').hide();
			}

			j.each(j('.multiline'), function (k, val) {
				var val = j(val);
				val.find('.multiline-num').text((k + 1) + '.');
			});
		};
		
		j('.multiline input').keydown(multiline_keydown);
		j('.multiline-add').click(multiline_add);
//		j('.multiline-remove').load(multiline_update);
		j('.multiline-remove').click(multiline_remove);

		multiline_update();
	});

	var ExtendedSelect = {
		replace: function () {
			j.each(j('select'), function (k, val) {
				val = j(val);
				val.hide();

				var extsel = j('<span class="' + (val.hasClass('small') ? 'select-small' : (val.hasClass('large') ? 'select-large' : 'select')) 
					+ ' "><span class="select-selected"></span><span class="select-options" style="display: none"></span></span>');

				extsel.insertAfter(val);

				extsel.click(function () {
					if (!j(this).find('.select-options').is(':visible')) {
						j(this).find('.select-options').css('border-width', '2px');
					} else {
						j(this).find('.select-options').css('border-width', '0');
					}

					j(this).find('.select-options').toggle();
				});

				extsel.mouseenter(createMethodReference(extsel, function () {
					this.mouseOn = true;
				}));

				extsel.mouseleave(createMethodReference(extsel, function () {
					this.mouseOn = false;
				}));

				j(document).click(createMethodReference(extsel, function () {
					if (!this.mouseOn && j(this).find('.select-options').is(':visible')) {
						j(this).find('.select-options').css('border-width', '0');
						this.find('.select-options').toggle();
					}
				}));

				var count = val.find('option').length;

				j.each(val.find('option'), createMethodReference(extsel, function (k, option) {
					var opt = j('<span class="select-option">' + j(option).html() + '</span>');
					this.find('.select-options').append(opt);
					
					opt.click(createMethodReference({'value' : j(option).attr('value'), 'caption': j(option).html()}, function () {
						val.attr('value', this.value);
						extsel.find('.select-selected').html(this.caption);
					}));
					
					if (j(option).attr('selected'))
						this.find('.select-selected').html(j(option).html());
				}));

				extsel.find('.select-options').height(Math.min(count, 5) * 20);
			});
		}
	};

	var Smartmenu = {
		lables: [],
		pages: [],
		active: 0,

		init: function () {
			this.labels = j('.smartmenu-labels li');
			this.pages = j('.smartmenu-pages li');

			for (var k = 0; k < this.labels.length; k ++) {
				if (j(this.labels[k]).hasClass('active'))
					this.active = k;

				j(this.labels[k]).click(createMethodReference({context: this, k: k}, function (e) {
					j(this.context.labels[this.context.active]).removeClass('active');
					j(this.context.pages[this.context.active]).hide();

					this.context.active = this.k;

					j(this.context.labels[this.k]).addClass('active');
					j(this.context.pages[this.k]).show();

					clearInterval(this.context.interval);
					e.preventDefault();

					return false;
				}));
			}

			this.interval = setInterval(createMethodReference(this, function () {
				j(this.labels[this.active]).removeClass('active');
				j(this.pages[this.active]).hide();

				this.active ++;
				if (this.active > this.labels.length-1)
					this.active = 0;

				j(this.labels[this.active]).addClass('active');
				j(this.pages[this.active]).show();
			}), 10000);
		}
	};

	function createMethodReference(object, method) {
		return function () {
			return method.apply(object, arguments);
		};
	}
	
	function $(id) {return document.getElementById(id);}


	function getElementsByClass(searchClass,node,tag) {
		if (node == null)
			node = document;

		if (document.getElementsByClassName)
			return node.getElementsByClassName(searchClass);

		var classElements = new Array();
		if ( tag == null )
			tag = '*';
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		//var pattern = new RegExp("(^|[ 	]*)"+searchClass+"([ 	]*|$)");
		for (i = 0, jk = 0; i < elsLen; i++) {
			//if ( pattern.test(els[i].className) ) {
			if (is_subclass_of(els[i], searchClass)) {
				classElements[jk] = els[i];
				jk++;
				jk++;
			}
		}
		return classElements;
	}

	function is_subclass_of(element, className) {
		if (!element || !element.className || !className) return;
		
		return (element.className == className || (new String(element.className)).indexOf(" "+className) !== -1 || (new String(element.className)).indexOf(className+" ") !== -1);
		className = new String(className);
		className = className.replace(/-/, '\\-');

		var pattern = new RegExp("(^|[ 	]+)"+className+"([ 	]+|$)");
		return pattern.test(element.className);

		return (new String(element.className)).match("/(^|[ 	]*)" + className + "([ 	]*|$)/");
	}

	var attachEvent = function (o, sEventName, oCallback) {
		if (typeof o.addEventListener != 'undefined') {
		  o.addEventListener(
			sEventName,
			oCallback,
			false
		  );
		} else if (typeof o.attachEvent != 'undefined') {
		  o.attachEvent(
			'on' + sEventName,
			oCallback
		  );
		}
	};

	function debug(v) {
		try {
			if (is_def(console))
				console.info(v);
		} catch (e) {
		}
	}

	function load_editor_for(f, css) {
		var _editor = {
			mode : "exact",
			theme : "advanced",
			language: "pl",
			elements : f,
			skin_variant : "black",
			plugins : "safari,style,layer,table,advhr,advimage,advlink,emotions,iespell,contextmenu,directionality,fullscreen",
			// Theme options
			theme_advanced_buttons1 : "bold,italic,underline,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,justifyfull,fontsizeselect,|,hr,|,bullist,numlist",
			theme_advanced_buttons2 : "outdent,indent,|,link,unlink,|,fullscreen,|,code,cleanup",
			theme_advanced_buttons3 : "",
			theme_advanced_buttons4 : "",
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			theme_advanced_statusbar_location : "bottom",
			theme_advanced_resizing : true,
			theme_advanced_path : false,
			content_css: JS_HOST + "view/style/style.css"
		};

		tinyMCE.init(_editor);
	}
