/*
==========================================
	[update: 08.11.07]
	
	This file is common script for Cafesta.
																					created by edo.
==========================================
*/

//prototype definition
String.prototype.camelize = function() {
	return this.replace( /-([a-z])/g,
	function( $0, $1 ) { return $1.toUpperCase() } );
}
String.prototype.deCamelize = function( ) {
	return this.replace( /[A-Z]/g,
	function( $0 ) { return "-" + $0.toLowerCase( ) } );
}


var $cafe = {};

//該当オブジェクトを取得
$cafe.d = function ( obj ) {
	if( !obj ) return false;
	var d;
	document.getElementById( obj ) ? d = document.getElementById( obj ) : d = obj;
	return d;
}

//デフォルト処理を停止
$cafe.preventDefault = function ( e ) {
	if ( e.preventDefault ) {		//DOM準拠ブラウザ
		e.preventDefault();
	} else if ( window.event ) {	//IE
		window.event.returnValue = false;
	}
}

//イベントリスナー登録
$cafe.addEvent = function ( node, evt, func ) {
	if( node.addEventListener ) {		//DOM準拠ブラウザ
		node.addEventListener( evt, func, false );
	} else if ( node.attachEvent ) {		//IE
		node.attachEvent( 'on' + evt, func );
	}
}

//イベントリスナー削除
$cafe.removeEvent = function ( node, evt, func ) {
	if( node.removeEventListener ) {		//DOM準拠ブラウザ
		node.removeEventListener( evt, func, false );
	} else if ( node.detachEvent ) {		//IE
		node.detachEvent( 'on' + evt, func );
	}
}

//イベント元を取得
$cafe.getTarget = function( e ) {
	if( e.target ) return e.target;
	else if ( e.srcElement ) return e.srcElement;
}

//バブリング停止
$cafe.stopBubbling = function(e) {
	if( e.stopPropagation ) {
		e.stopPropagation();
	} else if ( window.event ) {
		window.event.cancelBubble = true;
	}
}

//現在適用されているスタイルを取得する
$cafe.getStyle = function( ele, property, pseudo ) {
	if( !pseudo ) pseudo = '';
	if( ele.currentStyle ) { //IE or Opera
		if( property.indexOf( "-" ) != -1 ) property = property.camelize();
		return ele.currentStyle[ property ];
	} else if ( getComputedStyle ) { //Mozilla or Opera or Safari
		return document.defaultView.getComputedStyle( ele, pseudo ).getPropertyValue( property );
	}
}

//ポップアップメニューを表示
$cafe.popMenu = function ( e ) {
		$cafe.preventDefault( e );
		
		//メニューの種別
		var mType = $cafe.getTarget(e).className;
		
		//IDの取得
		var id = $cafe.getParam( 'hpid', $cafe.getTarget(e).href );
		
		//メニュー配列
		var menuArr = new Array();
		if( mType.indexOf( 'toMyHP' ) != -1 ) {
			menuArr[0] = { menuName: 'MyHP', url: 'http://hp1.cafesta.com/hp/home.do?hpid=' + id };
			menuArr[1] = { menuName: 'メッセージを送る', url: 'http://message.cafesta.com/message/send_form.do?receiver_ids=' + id };
			menuArr[2] = { menuName: 'カフェ友申し込み', url: 'http://www.cafesta.com/top/relation/relation_add_from_hp.do?mode=fri&srcid=' + id, popup: true };
			menuArr[3] = { menuName: '拒否リストに登録', url: 'http://www.cafesta.com/top/relation/relation_add_from_hp.do?mode=blo&srcid=' + id, popup: true };
			menuArr[4] = { menuName: '通報窓口', url: 'http://www.cafesta.com/customer/customer_badman.jsp?baduserid=' + id, popup: true };
		} else if( mType.indexOf( 'fromMyHP' ) != -1 ) {
			menuArr[0] = { menuName: 'MyHP', url: 'http://hp1.cafesta.com/hp/home.do?hpid=' + id };
			menuArr[1] = { menuName: 'メッセージを送る', url: 'http://message.cafesta.com/message/send_form.do?receiver_ids=' + id };
		}
		
		//DOMの生成
		var dammy = document.createElement( 'div' );
		with( dammy.style ) {
			display = 'inline';
			position = 'relative';
			zIndex = 100;
		}
		var menuBody = document.createElement( 'div' );
			menuBody.className = 'popMenu';
		var menuList = document.createElement( 'ul' );
			menuList.className = 'popMenuList';
		
		var menuEles = new Array();
		var menuTextEles = new Array();
		var aEles = new Array();
		
		for( i=0; i<menuArr.length; i++ ) {
			aEles[i] = document.createElement( 'a' );
			aEles[i].href = menuArr[i].url;
			if( menuArr[i].popup ) $cafe.addEvent( aEles[i], 'click', $cafe.popup );
			menuTextEles[i] = document.createTextNode( menuArr[i].menuName );
			aEles[i].appendChild( menuTextEles[i] );
			menuEles[i] = document.createElement( 'li' );
			i == menuArr.length - 1 ? menuEles[i].className = 'popMenuItem lastChild' : menuEles[i].className = 'popMenuItem';
			menuEles[i].appendChild( aEles[i] );
			
			//ul要素に挿入
			menuList.appendChild( menuEles[i] );
		}
		
		menuBody.appendChild( menuList );
		with( menuBody.style ) {
			border = 'solid 1px #000000';
			backgroundColor = '#ffffff';
			display = 'none';
			position = 'absolute';
			top = '3px';
			left = '3px';
			zIndex = 1000;
		}
		
		var stopDel = function(e) {
			if( typeof m != 'undefined' ) clearTimeout( m );
		}
		
		var delMenu = function(e) {
			var tar;
			
			if( $cafe.getTarget(e).nodeName == 'A' ) tar = $cafe.getTarget(e).parentNode.parentNode.parentNode.parentNode;
			else if( $cafe.getTarget(e).nodeName == 'LI' ) tar = $cafe.getTarget(e).parentNode.parentNode.parentNode;
			else if( $cafe.getTarget(e).nodeName == 'UL' ) tar = $cafe.getTarget(e).parentNode.parentNode;
			else if( $cafe.getTarget(e).nodeName == 'DIV' ) tar = $cafe.getTarget(e).parentNode;
			
			m = setTimeout( function(){
				$(tar).Fade();
				m2 = setTimeout( function(){ tar.parentNode.removeChild(tar); }, 1000 );
			}, 100 );
		}

		$(menuBody).hover( stopDel, delMenu );
		dammy.appendChild( menuBody );
		$cafe.getTarget(e).parentNode.insertBefore( dammy, $cafe.getTarget(e) );
		$(menuBody).Appear();
}

$cafe.addLink = function(e) {
	var a = document.getElementsByTagName('a');
	for( i=0; i<a.length; i++ ){
		if( a[i].className.indexOf( 'toMyHP' ) != -1 || a[i].className.indexOf( 'fromMyHP' ) != -1 ) {
			$cafe.addEvent( a[i], 'click', $cafe.popMenu );
		}
	}
}

//ユーザ名リンクにポップアップを設定
$cafe.addEvent( window, 'load', $cafe.addLink );

//URLから該当のパラメータのvalueを取得
$cafe.getParam = function( name, url ) {
	if(!name) return false;
	if(!url) url = location.href;
	var param = url.split('?')[1];
	var params = param.split('&');
	for( i=0; i<params.length; i++ ){
		if( params[i].split('=')[0] == name ) return params[i].split('=')[1];
	}
}

//動的script追加
$cafe.loadJS = function( file ) {
	if( !file ) return false;
	var js = document.createElement('script');
	js.type = 'text/javascript';
	js.charset = 'utf-8';
	js.src = file;
	
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild( js );
}

//動的css追加
$cafe.loadCSS = function( file ) {
	if( !file ) return false;
	var css = document.createElement( 'link' );
	css.type = 'text/css';
	css.rel = 'stylesheet';
	css.media = 'all';
	css.href = file;
	
	var head = document.getElementsByTagName( 'head' ).item(0);
	head.appendChild( css );
}

//フォームの禁則文字チェック
$cafe.isNgWord = function ( str ) {
	if( !str ) return false;
	var reg = new RegExp( '[\'\"\$<>\|\^%]' );
	return reg.test( str );
}

//ポップアップウィンドウ
$cafe.popup = function( e ) {
	$cafe.preventDefault( e );
	window.open( $cafe.getTarget( e ).href, '', 'width=500, height=300, scrollbars=no, menubar=no, toolbar=no' );
}

//文字数チェック
$cafe.chkChar = function ( obj, maxlen ) {
	//デフォルトの文字数制限
	if( !maxlen ) maxlen = 500;
	var curlen = obj.value.length;
	if( maxlen < curlen ) {
		alert( '入力可能文字数は' + maxlen + '文字までです。' );
		obj.value = obj.value.substring( 0, maxlen );
		return false;
	}
}