var updateFunctions = [];
var $_ = document.documentElement;
getClientWidth = function(){
	return $_.clientWidth;
};

Element.addMethods({
	content: function(elm, content){
		if (elm.tagName.toLowerCase() == 'input') {
			elm.value = content;
		} else {
			elm.innerHTML = content;
		}
	},
	belongs_to: function(elm, obj){
		if (elm.parentNode == obj) 
			return true;
		else if (elm.parentNode == null) 
			return false;
		else 
			return Element.belongs_to(elm.parentNode, obj);
	}
});

getClientHeight = function(){
	return $_.clientHeight;
};

function _page(target, uri, query){
	new Ajax.Updater(target, uri, {
		parameters: query,
		method: "get"
	});
}

elementPosition = function(elm){
	dim = Element.getDimensions(elm);
	off = Element.positionedOffset(elm);
	return [[off[0], off[1]], [off[0] + dim.width, off[1] + dim.height]];
}

function now_loading(elm){
	$(elm).innerHTML = '<div class="center"><img src="./img/package/ico_loading.gif" alt="now loading..." /></div>';
}

function def(val, def){
	return (val === undefined) ? def : val;
}

function evalJSON(res){
	return eval('(' + res.responseText + ')');
}

var ImageChanger = Class.create();

ImageChanger.prototype = {
	initialize: function(){
		this.set_chimg();
	},
	
	set_chimg: function(elm){
		elm = def(elm, document);
		var changer = elm.getElementsByClassName('chimg');
		
		$A(changer).each((function(e, i){
			Event.observe(e, 'mouseover', this.changeImage.bindAsEventListener(this), false);
			Event.observe(e, 'mouseout', this.returnImage.bindAsEventListener(this), false);
		}).bindAsEventListener(this));
	},
	
	changeImage: function(e){
		var src = Event.element(e);
		var chimg = src.getAttribute("chimg");
		if (chimg == null) {
			var target = src;
		} else {
			var target = $(chimg);
		}
		var img = target.getAttribute("src");
		var ftype = img.substring(img.lastIndexOf('.'), img.length);
		var hsrc = img.replace(ftype, '_o' + ftype);
		target.setAttribute("src", hsrc);
		return;
	},
	
	returnImage: function(e){
		var src = Event.element(e);
		
		var chimg = src.getAttribute("chimg");
		if (chimg == null) {
			var target = src;
		} else {
			var target = $(chimg);
		}
		var img = target.getAttribute("src");
		var ftype = img.substring(img.lastIndexOf('.'), img.length);
		var hsrc = img.replace('_o' + ftype, ftype);
		target.setAttribute("src", hsrc);
		return;
	}
};

function openDiv(name){
	$(name + "Open").style.display = "block";
	$(name + "Close").style.display = "none";
}

function closeDiv(name){
	$(name + "Open").style.display = "none";
	$(name + "Close").style.display = "block";
}

var tagCloudSelectable = Class.create();

tagCloudSelectable.prototype = {
	initialize: function(){
		this.tc = document.getElementsByClassName("tagCloudSelectable");
		
		for (i = 0; i < this.tc.length; i++) {
			var targetId = this.tc[i].getAttribute("tagInputId");
			this.tc[i].a = this.tc[i].getElementsByTagName("a");
			for (j = 0; j < this.tc[i].a.length; j++) {
				this.tc[i].a[j].setAttribute("taginputid", targetId);
				Event.observe(this.tc[i].a[j], 'click', this.setInput.bindAsEventListener(this), true);
			}
		}
	},
	
	setInput: function(e){
		var src = Event.element(e);
		var str = src.getAttribute("tagstr");
		var target = $(src.getAttribute("taginputid"));
		if (target.value != "") {
			var val = target.value.split(" ");
			
			for (i = 0; i < val.length; i++) {
				if (val[i] == str) {
					return;
				}
			}
			val.push(str);
			target.value = val.join(" ");
		} else {
			target.value = str;
		}
		return;
	}
};

if (Lightbox) {
	Lightbox.prototype.set_images = function(elm){
		elm = def(elm, document);
		var anchors = elm.getElementsByTagName('a');
		
		for (var i = 0; i < anchors.length; i++) {
			var anchor = anchors[i];
			var relAttribute = String(anchor.getAttribute('rel'));
			
			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))) {
				anchor.onclick = function(){
					this.start(this);
					return false;
				}
			}
		}
	};
}
var TextAreaResizable = Class.create();

TextAreaResizable.prototype = {
	dragging: false,
	target: null,
	cursor: false,
	initialize: function(){
		Event.observe($_, 'mouseup', (function(e){
			this.dragging = false;
			this.target = false;
		}).bindAsEventListener(this));
		
		Event.observe($_, 'mousemove', (function(e){
			if (this.dragging && this.target) {
				this.resize(e);
			}
		}).bindAsEventListener(this));
		this.set_resizable();
	},
	
	set_resizable: function(elm){
		elm = def(elm, document);
		var ta = elm.getElementsByClassName('resizable');
		
		$A(ta).each((function(obj, i){
			Event.observe(obj, 'mousedown', (function(e){
				var m = this[0];
				var obj = this[1];
				if (m.handle(obj, e)) {
					m.target = obj;
					m.dragging = true;
				}
			}).bindAsEventListener([this, obj]));
			
			Event.observe(obj, 'mousemove', (function(e){
				var m = this[0];
				var obj = this[1];
				if (!m.cursor && m.handle(obj, e)) {
					obj.style.cursor = 'n-resize';
					m.cursor = true;
				} else if (m.cursor && !m.handle(obj, e)) {
					obj.style.cursor = 'default';
					m.cursor = false;
				}
			}).bindAsEventListener([this, obj]));
		}).bindAsEventListener(this));
	},
	
	handle: function(elm, e){
		var m = {
			x: Event.pointerX(e),
			y: Event.pointerY(e)
		};
		var pos = Element.positionedOffset(elm);
		var o = {
			x: pos[0] + elm.offsetWidth,
			y: pos[1] + elm.offsetHeight
		};
		if (o.x - 32 < m.x && m.x < o.x && o.y - 32 < m.y && m.y < o.y) {
			return true;
		}
	},
	
	resize: function(e){
		var elm = this.target;
		var m = Event.pointerY(e);
		var pos = Element.positionedOffset(elm);
		var h = Math.max(m - pos[1] + 16, 50);
		elm.style.height = h + 'px';
	}
}

/**
 *
 * global instance
 *
 */
var g_chimg = null;
var ta_resizable = null;

Event.observe(window, 'load', function(){
	new tagCloudSelectable();
	g_chimg = new ImageChanger();
	ta_resizable = new TextAreaResizable();
	updateFunctions = updateFunctions.concat([[g_chimg.set_chimg, g_chimg], [ta_resizable.set_resizable, ta_resizable]]);
	set_sidebar_height();
}, false);

function set_sidebar_height(){
	var height = [$('main').getHeight(), $('navi').getHeight(), $('left_navi').getHeight()].max() + 10;
	$('main').style.height = height + 'px';
	$('navi').style.height = height + 'px';
	$('left_navi').style.height = height + 'px';
}

Ajax.MyUpdater = Class.create(Ajax.Updater, {
	updateContent: function($super, responseText){
		$super(responseText);
		elm = $(this.container.success);
		updateFunctions.each(function(func){
			func[0].bindAsEventListener(func[1])(elm);
		});
	}
});

function popup2(locURL, click_id){
	var maxWid = 1024;
	var maxHei = 670;
	var scrWid = screen.availWidth;
	var scrHei = screen.availHeight;
	var winName = "newwin";
	
	var winHei, winWid;
	
	if (scrWid >= maxWid) {
		winWid = maxWid;
	} else {
		winWid = scrWid;
	}
	
	if (scrHei >= maxHei) {
		winHei = maxHei;
	} else {
		winHei = maxHei;
	}
	
	var wx = (screen.width - winWid) / 2;
	var wy = (screen.height - winHei) / 2;
	
	if (click_id != undefined && click_id > 0) {
		var uri = 'http://' + location.host + '/';
		var params = {
			'stage': 'click_link',
			'ad_item_id': click_id,
			'ignore': true
		};
		new Ajax.Request(uri, {
			method: 'get',
			parameters: $H(params).toQueryString(),
			onComplete: function(res){
				res.responseText;
			}
		});
	}
	
	window.open(locURL, winName, "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=auto,resizable=no,width=" + winWid + ",height=" + winHei + ",left=" + wx + ",top=20");
}
