/**
 * formのタイトル要素へ記載された文字列をメモノートを設定するjsライブラリ
 * @charlie
 * use prototype.js
 * 
 * example)
Event.observe(window, 'load', function() {
	var s =  new formDefault(
		'updnWatermark','e'
	);
});
///==========================
<input type="text" id="f_address" class="updnWatermark" title="mail address" />
↓↓↓↓↓↓↓
<label for="f_address" class="e" style="position:absolute; left:5px; top:35px">mail address</label>
<input type="text" id="f_address" class="updnWatermark" title="mail address" />

 * 
 */

/**
 * formDefault class コンストラクタ
 * @param {string} className
 * @param {string} labelClassName
 * className 対象タグのクラス名
 * labelClassName ラベルへ付与するクラス
 */
function formDefault(className,labelClassName){
	this.targetObjects = [];
	this.targetElementClass = className;
	this.labelClassName = labelClassName;
	this.brName = this.getBrName();
	this.targetObjects = this.getElement();
	this.execute();
	
	Event.observe(window, 'resize',this.resizeAction.bindAsEventListener(this));
}
formDefault.prototype.resizeAction = function(e){
	for(var i=0; i<this.targetObjects.length; i++){
		var element = Element.extend(this.targetObjects[i]);
		var label_id = element.id + "__label";
		var label = $(label_id);
		this.setPosition(element , label);
	}
}
formDefault.prototype.execute = function(){
	var elements = this.targetObjects;
	for(var i=0; i<elements.length; i++){
		this.oneElementAction(elements[i])
	}
	
}
formDefault.prototype.oneElementAction = function(e){
	var element = Element.extend(e);
	var d = Element.getDimensions(e);
	var label = document.createElement("label");
	label.innerHTML = element.title;
	label.title = e.id;
	label.id = e.id + "__label";
	label.style.position = "absolute";
	label.className = this.labelClassName;
	label.style.width = d.width + "px";
	label.style.height = d.height + "px";
	this.setPosition(element,label);
	
	//textarea以外は有効
	var t  = e.tagName;
	if(t.match(/^INPUT$/i)){
		label.style.lineHeight = d.height + "px";
	}
	label.style.overflow = "hidden";
	if(e.value != ""){
		label.style.display = "none";
	}
	label.onclick = function(){
		$(label.title).focus();
	}
	Insertion.Before(e,label);
	e.onfocus = function(){
		var e_id = this.id + "__label";
		document.getElementById(e_id).style.display = "none";
	}
	e.onblur = function(){
		if(this.value == ""){
			var e_id = this.id + "__label";
			document.getElementById(e_id).style.display = "inline";
		}
	}
}

formDefault.prototype.setPosition = function(e , label){
	var pos = e.positionedOffset();
	label.style.left = pos[0] + "px";
	label.style.top = pos[1] + "px";
}

formDefault.prototype.getElement = function(){
	var ret = [];
	var e = document.getElementsByTagName("*");
	var ptn = new RegExp("(^|\\s)"+ this.targetElementClass +"(\\s|$)");
	for(var i=0; i<e.length; i++){
		if(e[i].className != ""){
			if(ptn.test(e[i].className)){
				if(e[i].title != "undefined" && e[i].title != ""){
					ret.push(e[i]);
				}
			}
		}
	}
	return ret;
}
formDefault.prototype.getBrName = function(){
	var strUA = "";
	strUA=navigator.userAgent.toLowerCase();
	if(strUA.indexOf("safari")!=-1){
		return "Safari";
	}else if(strUA.indexOf("firefox")!=-1){
		return "Firefox";
	}else if(strUA.indexOf("opera")!=-1){
		return "Opera";
	}else if(strUA.indexOf("netscape")!=-1){
		return "Netscape";
	}else if(strUA.indexOf("msie")!=-1){
		return "InternetExplorer";
	}else if(strUA.indexOf("mozilla/4")!=-1){
		return "InternetExplorer";
	}
}