//***************************************
// common_prototype
// create  2009/3/16
//***************************************
var common_prototype = {
	member : {
		bLoaded:false
	},
	init : function(){
		this.member.bLoaded = true;
	},	
//	HOST: location.protocol + "//carnegie.me/luna/ajax_host.php",
//	HOST: location.protocol + "//www.luna-rossa.asia/ajax_host.php",
	HOST: location.protocol + "//" + location.host + "/ajax_host.php",
	ajaxGetData : function(parameter, complete, failure, exeption, asynchronous) {
		parameter = parameter.escapeHTML();
		var option = {
			method: 'get',
			parameters: parameter,
			asynchronous: asynchronous,
			onComplete : complete,
			onFailure : failure,
			onException : exeption
		};
		new Ajax.Request(this.HOST, option);
	},
	ajaxPostData : function(data, complete, failure, exeption, asynchronous) {
		var option = {
			method: 'post',
			postBody : data,
			asynchronous: asynchronous,
			onComplete : complete,
			onFailure : failure,
			onException : exeption
		};
		return new Ajax.Request(this.HOST, option);
	},
	ajaxUpdate : function(method, data, element, complete, failure, exeption){
		var option = {
			method: method,
			onComplete : complete,
			onFailure : failure,
			onException : exeption
		};
		if(method.toUpperCase == "POST") {
			option.postBody = data;
		} else {
			option.parameters = data;
		}
		new Ajax.Updater({success:element}, this.HOST, option);
	},
	//=====================================================//
	// メソッド名： changeTxtEnabled
	// 引数：id - txtfieldのid
	//	   bool - Boolean
	// 戻り値：なし
	// 機能：テキストフィールドの使用／不使用の変更 
	//=====================================================//
	changeTxtEnabled : function(id,bool){
		$(id).disabled = !bool;	
		if($(id).disabled==true){
			$(id).style.backgroundColor = "#CCCCCC";
		}else{
			$(id).style.backgroundColor = "#FFFFFF";
			$(id).focus();
		}
	},
	//=====================================================//
	// メソッド名： getMyCookie
	// 引数：sKey - キー
	// 戻り値：値（該当無い場合-1）
	// 機能： クッキーから値を取得 
	//=====================================================//
	getMyCookie : function(sKey) {
	    var i, index, arr;
	    arr = document.cookie.split(";");
	    for(i = 0; i < arr.length; i++) {
	        index = arr[i].indexOf("=");
	        if(arr[i].substring(0, index) == sKey || arr[i].substring(0, index) == " " + sKey)
	            return arr[i].substring(index + 1);
	    }
	    return -1;
	},
	//=====================================================//
	// メソッド名： setMapArray
	// 引数：data - key=val,key=val,key=val...
	// 戻り値： 連想配列
	// 機能：
	//=====================================================//
	setMapArray : function(data){
		var aRet = new Array();
		var aRow = data.split(",");
		for(var i = 0;i < aRow.length;i++){
			aCol = aRow[i].split("=");
			aRet[aCol[0]]= aCol[1].replace("\n","");
		}
		return aRet;
	},
	//=====================================================//
	// メソッド名： trim
	// 引数：str - 文字列
	// 戻り値： 文字列
	// 機能：トリム
	//=====================================================//
	trim :function(str){
		return str.replace(/^[\s　]+|[\s　]+$/g, "");
	},
	//=====================================================//
	// メソッド名：setUnselectable
	// 引数：elem - Element
	// 戻り値： なし
	// 機能： 要素を選択不可に設定する
	//=====================================================//
	setUnselectable : function(elem){
		elem.unselectable = "on";
		elem.tabIndex = -1;
		Element.setStyle(elem, {
			"-moz-user-select": "none",
			"-khtml-user-select": "none",
			"user-select": "none"
		});
	},
	//=====================================================//
	// メソッド名：isValidDate
	// 引数：text 日付文字列 /区切り
	// 戻り値： boolean
	// 機能： カレンダーに存在する日付かチェックする
	//=====================================================//
	isValidDate : function(text) {
	    if (text.length == 0 || text== "") {
	        return false;
	    }
	    var arrDate = text.split("/");
	    if(arrDate.length == 3) {    
	        var date = new Date(Number(arrDate[0]) , Number(arrDate[1]) - 1 ,Number(arrDate[2]));
	        if(date.getFullYear() == arrDate[0] && 
	          (date.getMonth() == arrDate[1] - 1) && 
	           date.getDate() == arrDate[2]) {
	            return true;
	        }
	    }
	    return false;
	},
	//=====================================================//
	// メソッド名：chkZenHiragana
	// 引数：text ひらがな文字列
	// 戻り値： boolean
	// 機能： 全角ひらがな以外の文字列が使われていないかチェックする
	//=====================================================//
	chkZenHiragana : function(str) {
		if (str.match(/^[\u3040-\u309F]+$/)) {
		    return true;
		} else {
		    return false;
		}
	},
	//=====================================================//
	// BackScrollイベント処理
	//=====================================================//
	 doBackScroll : function() {
	    var pos = common_lib.getScrollPosition();
	    window.scrollTo(Math.max(Math.floor(pos.x / 2),0), Math.max(Math.floor(pos.y -(pos.y / 5)),0));
	    if (pos.x > 0 || pos.y > 0) {
	        window.setTimeout("common_lib.doBackScroll()", 5);
	        return false;
	    }
	},	
	//=====================================================//
	// スクロール量を取得し、オブジェクトとして返す
	//=====================================================//
	getScrollPosition : function() {
	    var obj = new Object();
	    obj.x = document.body.scrollLeft || document.documentElement.scrollLeft;
	    obj.y = document.body.scrollTop || document.documentElement.scrollTop;
	    return obj;
	},
	 //=====================================================//
	 // メソッド名：getDocumentOffset
	 // 引数：elem - element参照
	 // 戻り値：Array
	 // 機能：document上のオフセット取得
	 //=====================================================//
	 getDocumentOffset : function(elem) {
	     var oPos = new Array();
	     oPos.x = elem.offsetLeft;
	     oPos.y = elem.offsetTop;
	     while(elem.offsetParent) {
	        elem = elem.offsetParent;
	        oPos.x += elem.offsetLeft;
	        oPos.y += elem.offsetTop;
	     }
	     return oPos;
	 },
	 //=====================================================//
	 // メソッド名：getWindowOffset
	 // 引数：elem - element参照
	 // 戻り値：Array
	 // 機能：画面上のオフセット取得
	 //     （docオフセットからスクロールを差し引いたオフセット）
	 //=====================================================//
	 getWindowOffset : function(elem){
	  var oPos = common_lib.getDocumentOffset(elem);
	  var scrolllOffset = String(Position.realOffset(elem));
	  var aScroll = scrolllOffset.split(",");
	     oPos.x = oPos.x - aScroll[0];
	     oPos.y = oPos.y - aScroll[1];
	     return oPos;
	 },
	 //=====================================================//
	 // メソッド名：getOnMapOffset
	 // 引数：inst - VMapインスタンス参照
	 //       pointerX  -  Event.pointerX(e)
	 //       pointerY  -  Event.pointerY(e)
	 // 戻り値：Array
	 // 機能：地図上のオフセット取得
	 //=====================================================//
	 getOnMapOffset : function(inst,pointerX,pointerY){
	  var out_point = common_lib.getDocumentOffset(inst.elemOut);
	  var x = pointerX - out_point.x;
	  var y = pointerY - out_point.y;
	  return new Array(x,y);
	 },
	 //=====================================================//
	 // メソッド名：getOnElemOffset
	 // 引数：elem - element参照
	 //       pointerX  -  Event.pointerX(e)
	 //       pointerY  -  Event.pointerY(e)
	 // 戻り値：Array
	 // 機能：イベントが発生したエレメント上のオフセット取得
	 //=====================================================//
	 getOnElemOffset : function(elem,pointerX,pointerY){
	  var out_point = common_lib.getDocumentOffset(elem);
	  var x = pointerX - out_point.x;
	  var y = pointerY - out_point.y;
	  return new Array(x,y);    
	 },
	//=====================================================//
	// ウィンドウ座標
	//=====================================================//
	pagePosition : {
		x : null,
		y : null
	},
	pageDimensions : {
		height : null,
		width : null
	},
	overlay : {
		opacity : 0.7,
		image : '/img/lightwindow/black.png',
		presetImage : '/img/lightwindow/black-70.png',
		indicator : '/img/indicator.gif'
	},
	getScroll : function(){
      	if(typeof(window.pageYOffset) == 'number') {
        	this.pagePosition.x = window.pageXOffset;
        	this.pagePosition.y = window.pageYOffset;
      	} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
	       	this.pagePosition.x = document.body.scrollLeft;
        	this.pagePosition.y = document.body.scrollTop;
		} else if(document.documentElement) {
        	this.pagePosition.x = document.documentElement.scrollLeft;
        	this.pagePosition.y = document.documentElement.scrollTop;
      	}
	},
	getPageDimensions : function() {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ 
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { 
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}

		var windowWidth, windowHeight;
		if (self.innerHeight) {	
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { 
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { 
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	

		if(yScroll < windowHeight){
			this.pageDimensions.height = windowHeight;
		} else { 
			this.pageDimensions.height = yScroll;
		}

		if(xScroll < windowWidth){	
			this.pageDimensions.width = windowWidth;
		} else {
			this.pageDimensions.width = xScroll;
		}
	},
	//=====================================================//
	// モーダルレイヤー
	//=====================================================//
	initWaitOverlay : function() {
		this.getScroll();
		this.getPageDimensions();
		var overlay = Element.extend(document.createElement('div'));
		overlay.setAttribute('id', 'wait_overlay');		
		// FF Mac has a problem with putting Flash above a layer without a 100% opacity background, so we need to use a pre-made
		if (Prototype.Browser.Gecko) {
			overlay.setStyle({
				backgroundImage: 'url('+this.overlay.presetImage+')',
				backgroundRepeat: 'repeat',
				height: this.pageDimensions.height+'px',
				position : 'absolute',
				top : '0px',
				left : '0px'
			});			
		} else {
			overlay.setStyle({
				opacity: this.overlay.opacity,
				backgroundImage: 'url('+this.overlay.image+')',
				backgroundRepeat: 'repeat',
				height: this.pageDimensions.height+'px',
				position : 'absolute',
				top : '0px',
				left : '0px'				
			});
		}
		var indicator = Element.extend(document.createElement('img'));
		indicator.src = this.overlay.indicator;
		var mid = this.pageDimensions.height / 2;
		indicator.style.margin = mid + "px";
		overlay.appendChild(indicator);
		var body = document.getElementsByTagName('body')[0];
		body.appendChild(overlay);
		this.displayWaitOverlay("none");//"block" or "none"
		
				
	},
	displayWaitOverlay : function(display) {
		$('wait_overlay').style.display = display;	
	},
	checkAll : function(flag,frm){
		var i;
		var bChecked;
		if(!this.member.bLoaded){
			return false;
		}
		for ( i=0; i<frm.length-1; i++ ){
			if ( frm.elements[i].type == "checkbox" ) {
				frm.elements[i].checked = flag;
			}
		}
	},
	deleteChk : function(frm,url){
		if(confirm("削除　を行います、よろしいですか？")) {
			frm.action =url +'?mode=del'; 
			frm.method ='post'; 
			frm.submit(); 
		} else {
			return false;
		}
	}
}
Event.observe(window, 'load', function() {
	common_prototype.init();
}, false);
