// ============================================================
// ToggleClsName クラス
// ■トリガーの先祖のターゲット要素のクラス名をトグル（追記で）する
// %version / 1.01
// %update / 09.06.09
//
// %prop / CLASS_NAME:String / クラス名
// %prop / CLASS_VERSION:Number / クラスバージョン
// %prop / toggleClsName:String / トグルさせるクラス名
// %prop / targetClsName:String / ターゲット要素のクラス名（トリガーの先祖要素）
// %prop / trigger_jq:Object / トリガー要素（jQueryオブジェ）
// %prop / target_jq:Object / ターゲット要素（jQueryオブジェ）
// ------
// %method / getClassName() / ■クラス名を取得
// %method / getClassVersion() / ■クラスバージョンを取得
// %method / toggleCls() / ■先祖のターゲット要素のクラス名をトグル（追記で）する
// ------------------
// 【履歴】
// ------------------
// ・1.0  09.05.20  new
// ・1.01  09.06.09  構造見直し
// ============================================================

// %use / jquery1.3.2～

// ■コンストラクタ
// %param / toggleClsName:String / トグルさせるクラス名
// %param / targetClsName:String / ターゲット要素のクラス名（トリガーの先祖要素）
// %param / trigger_jq:Object / トリガー要素（jQueryオブジェ）
function ToggleClsName(toggleClsName, targetClsName, trigger_jq){
	this.toggleClsName = ( (toggleClsName != null) && ( typeof(toggleClsName) == 'string' ) )? toggleClsName : '';  // トグルさせるクラス名
	this.targetClsName = ( (targetClsName != null) && ( typeof(targetClsName) == 'string' ) )? targetClsName : '';  // ターゲット要素のクラス名（トリガーの先祖要素）
	this.trigger_jq = ( (trigger_jq != null) && ( typeof(trigger_jq) == 'object' ) )? trigger_jq : null;  // トリガー要素（jQueryオブジェ）
	this.target_jq = null;  // ターゲット要素（jQueryオブジェ）
}

ToggleClsName.prototype.CLASS_NAME = "ToggleClsName";  // クラス名
ToggleClsName.prototype.CLASS_VERSION = 1.01;  // クラスバージョン


// ------------------
// 【メソッド】
// ------------------

// getter,setter

// ■クラス名を取得
// %param / なし
// ------
// %return / :String / クラス名
ToggleClsName.prototype.getClassName = function(){
	return this.CLASS_NAME;
};
	
// ■クラスバージョンを取得
// %param / なし
// ------
// %return / :Number / クラスバージョン
ToggleClsName.prototype.getClassVersion = function(){
	return this.CLASS_VERSION;
};

// ------

// ■先祖のターゲット要素のクラス名をトグル（追記で）する
// %param / elm_jq:Object / jQueryオブジェ
// ------
// %return / なし
ToggleClsName.prototype.toggleCls = function(elm_jq){
	if( ( ( elm_jq == null ) || ( elm_jq.size(0) == 0 ) ) ||
			( this.toggleClsName == '' ) ||
			( this.targetClsName == '' ) ){
		//alert('toggleCls() => return!');  // DBUG
		return;
	}

	var par_jq = elm_jq.parent();
	var ptn = new RegExp( '(^|\\s+)' + this.targetClsName + '(\\s+|$)' );

	while( (par_jq.get(0) != document.body) && (! par_jq.get(0).className.match(ptn) ) ){
		par_jq = par_jq.parent();
	}

	//par_jq.css('border', '1px solid #f00');  // DBUG
	//alert( par_jq.get(0).nodeName );  // DBUG

	this.target_jq = par_jq;
	this.target_jq.toggleClass(this.toggleClsName);
};
