// JavaScript Document

var MMJS = MMJS || {};


jQuery.fn.MMJS_opacity = function( opacity ){
	opacity = parseInt(opacity);
	opacity = ( opacity > 100 ) ? 100 : opacity;
	opacity = ( opacity < 0 ) ? 0 : opacity;
	return this.each( function(){
		if ( jQuery.support.opacity ){
			this.style.opacity = opacity/100;
		}else{
			this.style.filter = "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + opacity + ")";
		}
	} );
}


/* ************* jQuery Ext jQuery.fn.MMJS_png *****************
// jQuery元素集扩展 jQuery.fn.MMJS_png()
// 功能:解决png兼容性问题
// 说明:
// 需求:jQuery
// LastModify:2010-09-26
*********************************************************** */ 
jQuery.fn.MMJS_png = function( className ){
	return this.each( function(){
		//only IE 6 need to fix 24bit png
		if ( jQuery.browser.msie && jQuery.browser.version==6.0 ){
			if( this.tagName.toUpperCase()=='IMG' ){
				var $ts=jQuery(this);
				//var png_w=$ts.width();
				//var png_h=$ts.height();
				var png_w=this.width || $ts.width();
				var png_h=this.height || $ts.height();
				//alert( png_w + ' ' + png_h );
				var png_url=$ts.attr("src");
				var png_class=$ts.attr("class");
				var png_title=$ts.attr("title");
				var png_style=$ts.attr("style");
				var png_align=$ts.attr("align");
				var strHtml="<span";
				if ( png_class ) strHtml += ' class="' + png_class + '" ';
				if ( png_title ) strHtml += ' title="' + png_title + '" ';
				strHtml += ' style="display:block;';
				if ( png_align ) strHtml += 'float:' + png_align + ';';
				strHtml += 'filter:' + "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png_url + "', sizingMethod='scale')";
				if ( png_style ) strHtml += ';' + png_style;
				strHtml += '"></span>';
				var $span = jQuery(strHtml);
				$ts.replaceWith($span);
				$span.css( {'width':png_w} );
				$span.css( {'height':png_h} );
			}else{
				//处理png为背景的图片
				var png_url=jQuery(this).css("backgroundImage").slice( 5,-2 );
				if ( /\.png$/i.test(png_url) ){
					this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png_url + "', sizingMethod='scale')";
					this.style.backgroundImage = "url('#')";
				}
			}			
		}
	} );
}





/* ************* jQuery Ext jQuery.fn.fixed *****************
// jQuery元素集扩展 jQuery.fn.fixed()
// 功能:将元素设置为 position:fixed
// 说明:IE6不支持position:fixed，用JS实现。
// 需求:jQuery
// LastModify:2010-08-30
注意： 如果 top 和 left 一定要在元素中用style定义！！！否则在CSS中定义读取不到~
*********************************************************** */ 
jQuery.fn.MMJS_fixed = function( func ) {
	return this.each( function(){
		var $this = jQuery(this);
		var this_dom = $this.get()[0];
		
		if ( jQuery.browser.msie && jQuery.browser.version == '6.0' ){
			if ( !$this.data( 'fixed_hooked' ) ){
				$this.css( {'position':'absolute'} );
				
				//如果top是百分比的话，要转换一下。由于算法不同，所以生成一个函数的句柄。只支持百分比或者像素。
				var pos_top = this_dom.style.top;
				
				// 如果是百分比
				if( /^[\d]+%$/.test(pos_top) ){
					var get_tar_top = function( scrollTop ){
						return parseInt( jQuery(window).height() * parseInt(pos_top.slice(0,-1)) / 100 + scrollTop );
					}
				}else{// 如果是像素
					var get_tar_top = function( scrollTop ){
						return parseInt( parseInt(pos_top) + scrollTop );
					}
				}
				//如果left是百分比的话，要转换一下。由于算法不同，所以生成一个函数的句柄。只支持百分比或者像素。
				var pos_left= this_dom.style.left;
				
				// 如果是百分比
				if( /^[\d]+%$/.test(pos_left) ){
					var get_tar_left = function( scrollLeft ){
						return parseInt( jQuery(window).width() * parseInt(pos_left.slice(0,-1)) / 100 + scrollLeft );
					}
				}else{// 如果是像素
					var get_tar_left = function( scrollLeft ){
						return parseInt( parseInt(pos_left) + scrollLeft );
					}
				}
				
				//执行一次
				$this.css( {'top':get_tar_top(jQuery('html').scrollTop()),'left':get_tar_left(jQuery('html').scrollLeft()) } );
				
				//注册滚动条事件
				var $window = jQuery(window);
				$window.scroll( function(){
					$this.css( {'top':get_tar_top(jQuery('html').scrollTop()),'left':get_tar_left(jQuery('html').scrollLeft()) } );
				} );

				//注册resize事件
				$window.resize( function(){
					$this.css( {'top':get_tar_top(jQuery('html').scrollTop()),'left':get_tar_left(jQuery('html').scrollLeft()) } );
				} );
				$this.data( 'fixed_hooked',true );
			}
		}else{
			$this.css( {'position':'fixed'} );
		}
	} );
}
/* *********************************************************** */



/* ************* jQuery Ext jQuery.fn.radius *****************
// jQuery元素集扩展 jQuery.fn.radius( radius_px )
// 功能:为box设置弧形边框（不支持IE）
// 说明:
// 需求:jQuery
// LastModify:2010-08-30
*********************************************************** */ 
jQuery.fn.MMJS_radius = function( radius_px ) {
	return this.each( function(){
		var $this = jQuery(this);
		$this.css({ '-moz-border-radius':radius_px,'-webkit-border-radius':radius_px,'border-radius':radius_px });
	} );
}
/* *********************************************************** */



//jQuery Ext  jQuery.fn.MMJS_inArea
jQuery.fn.MMJS_inArea = function( offset,padding,inner_offset ){
	var this_obj = this;
	var result = false;
	padding = padding || 0;
	this.each( function(){
		if( !result ){
			this_obj.$this_item = jQuery(this);
			this_obj.o = this_obj.$this_item.offset();
			this_obj.w = this_obj.$this_item.width();
			this_obj.h = this_obj.$this_item.height();
			result = ( offset.left > (this_obj.o.left - padding)
			&& offset.left < (this_obj.o.left+this_obj.w+padding) 
			&& offset.top > (this_obj.o.top - padding)
			&& offset.top < (this_obj.o.top+this_obj.h+padding) );
			if ( typeof inner_offset == 'object' ){
				inner_offset.left = offset.left - this_obj.o.left;
				inner_offset.top = offset.top - this_obj.o.top;
			}
		}
	} );
	return result;	
}

//jQuery Ext  jQuery.fn.MMJS_inAreaClick
jQuery.fn.MMJS_inAreaClick = function( callback,padding ){
	var this_obj = this;
	var inner_offset = {};
	padding = padding || 0;
	jQuery('html').click( function(evt){
		if ( this_obj.MMJS_inArea( {'left':evt.pageX,'top':evt.pageY},padding,inner_offset ) ){
			return callback.apply( this_obj,[evt,inner_offset] );
		}
	} );
	return this;
}

//jQuery Ext  jQuery.fn.MMJS_inAreaMove
jQuery.fn.MMJS_inAreaMove = function( callback,padding ){
	var this_obj = this;
	var inner_offset = {};
	padding = padding || 0;
	jQuery('html').mousemove( function(evt){
		if ( this_obj.MMJS_inArea( {'left':evt.pageX,'top':evt.pageY},padding,inner_offset ) ){
			return callback.apply( this_obj,[evt,inner_offset] );
		}
	} );
	return this;
}


//jQuery Ext  jQuery.fn.MMJS_inAreaMove
jQuery.fn.MMJS_inAreaHover = function( callbackOver,callbackOut,padding ){
	var this_obj = this;
	this.MMJS_inAreaHover_ishover = false;
	padding = padding || 0;
	jQuery('html').mousemove( function(evt){
		if ( this_obj.MMJS_inArea( {'left':evt.pageX,'top':evt.pageY},padding ) ){
			if ( this_obj.MMJS_inAreaHover_ishover == false ){
				this_obj.MMJS_inAreaHover_ishover = true;
				return callbackOver.apply( this_obj,[evt] );
			}
		}else{
			if ( this_obj.MMJS_inAreaHover_ishover == true ){
				this_obj.MMJS_inAreaHover_ishover = false;
				return callbackOut.apply( this_obj,[evt] );
			}
		}
	} );
	return this;
}





/* ************* LabelInput *****************
jQuery.fn.LabelInput
*********************************************************** */ 
jQuery.fn.MMJS_LabelInput = function( input_sel,label_sel ){
	var $this = jQuery(this);
	var input_sel = input_sel || 'input.js_lai,textarea.js_lai';
	var label_sel = label_sel || 'label.js_lai';
	var $input = $this.find(input_sel);
	var $label = $this.find(label_sel);
	if ( $input && $label ){
		var check = function(){
			$input.val(jQuery.trim($input.val()));
			if ( $input.val() == '' ){
				$label.show();
			}else{
				$label.hide();
			}
		}
		//
		check();
		//
		$input.focusin(function(){
			$label.hide();
		})
		.focusout(function(){
			check();
		});
	}
}


/* *********************************************************** */



/* ************* MMJS.get_next_highest_zindex *****************
MMJS.get_next_highest_zindex
*********************************************************** */ 
MMJS.get_next_highest_zindex = function(){
	var max_zindex = 0;
	jQuery('*').each(function(){
		var cur_zindex = parseInt( jQuery(this).css('z-index') );
		if( cur_zindex > max_zindex ){
			max_zindex = cur_zindex;
		}
	});
	return max_zindex + 1;
}
/* *********************************************************** */



/* ************* MMJS.is_ie6 *****************
MMJS.is_ie6
*********************************************************** */ 
MMJS.is_ie6 = function(){
	var $body = jQuery('body');
	var data_is_ie6 = $body.data( 'MMJS_is_ie6' );
	if ( typeof data_is_ie6 == 'undefined' ){
		if ( jQuery.browser.msie && jQuery.browser.version == '6.0' ){
			data_is_ie6 = true;
		}else{
			data_is_ie6 = false;
		}
		$body.data( 'MMJS_is_ie6',data_is_ie6 );
	}
	return data_is_ie6;
}
/* *********************************************************** */


/* ************* MMJS.post_obj *****************
MMJS.post_obj
*********************************************************** */ 
MMJS.post_obj = function( obj,action ){

	action = action || '';

	var post_o = [];
	for( var k in obj ){
		if ( obj[k] instanceof Array ){
			for( var i=0,l=obj[k].length;i<l;i++ ){
				if ( typeof obj[k][i] == 'string' || typeof obj[k][i] == 'number' ){
					post_o.push( { 'key':k,'value':obj[k][i] } );
				}
			}
		}else if(typeof obj[k] == 'object'){
			for( var i in obj[k] ){
				if ( typeof obj[k][i] == 'string' || typeof obj[k][i] == 'number' ){
					post_o.push( { 'key':k,'value':obj[k][i] } );
				}
			}
		}else if( typeof obj[k][i] == 'string' || typeof obj[k][i] == 'number' ){
			post_o.push( { 'key':k,'value':obj[k][i] } );
		}
	}
	
	var $form = jQuery('<form method="post" action="' + action + '"></form>').hide();
	
	for( var i=0,l=post_o.length;i<l;i++ ){
		$form.append( '<input type="hidden" name="' + post_o[i]['key'] + '" value="' + post_o[i]['value'] + '" />' );
	}
	
	$form.appendTo('body').submit();
	
}
/* *********************************************************** */

/* ************* jQuery.fn.MMJS_get_inner_form_data *****************
jQuery.fn.MMJS_get_inner_form_data
*********************************************************** */ 
jQuery.fn.MMJS_get_inner_form_data = function(){
	var $this = jQuery(this);
	$form_objects = $this.find( 'input,select,textarea,button' );
	$named_form_objects = $form_objects.filter('[name!=""]');
	
	var post_o = {};
	$named_form_objects.each(function(){
		var $this = jQuery(this);
		var cur_name = $this.attr('name');
		var cur_value = $this.val();
		
		if( post_o[cur_name] instanceof Array ){
			post_o[cur_name].push(cur_value);
		}else if( typeof post_o[cur_name] == 'undefined' ){
			post_o[cur_name] = cur_value;
		}else{
			post_o[cur_name] = [ post_o[cur_name] ];
			post_o[cur_name].push(cur_value);
		}
		
	});
	
	return post_o;
}

/* ************* MMJS.object_length *****************
MMJS.object_length
*********************************************************** */ 
MMJS.object_length = function( obj ){
	var length = 0;
	for( var i in obj ){
		length ++ ;
	}
	return length;
}


/* ************* jQuery.fn.MMJS_group_hover *****************
jQuery.fn.MMJS_group_hover
*********************************************************** */ 
jQuery.fn.MMJS_group_hover = function( fn_in,fn_out ){
	var _this = this;
	var $items = jQuery(this);
	var $body = jQuery('body');
	(function(){
		var last_status = 'out';
		$body.mousemove(function(evt){
			var $target = jQuery( evt.target );
			var meet_myself = false;
			$items.each(function(){
				var __this = this;
				var $this = jQuery(this);
				if ( __this == evt.target ){
					meet_myself = true;
				}else{
					$target.parents().each(function(){
						if ( this == __this ){
							meet_myself = true;
							return false;
						}
					});
				}
			});
			if( meet_myself && last_status=='out' ){
				fn_in.apply( _this );
			}else if( !meet_myself && last_status=='in' ){
				fn_out.apply( _this );
			}
			last_status = meet_myself ? 'in' : 'out';
		});
	})();
	return this;
}


/* ************* jQuery.fn.MMJS_get_class_config *****************
jQuery.fn.MMJS_get_class_config
*********************************************************** */ 
jQuery.fn.MMJS_get_class_config = function( prefix ){
	var config_da = {}
	this.each(function(){
		var $this = jQuery(this);
		var class_name_da = $this.attr('class').split(/\s/);
		
		var test_reg = new RegExp( '^' + prefix + '(.+)' );
		for ( var i=0,l=class_name_da.length;i<l;i++ ){
			var m = test_reg.exec(class_name_da[i]);
			//console.log(m);
			if ( m ){
				var m_da = m[1].split('_');
				var m_da2 = [];
				for( var mi = 0,ml = m_da.length;mi<ml;mi++ ){
					if ( m_da[mi] ){
						m_da2.push(m_da[mi]);
					}
				}
				if ( m_da2.length == 1 ){
					config_da[m_da2[0]]=m_da2[0];
				}else if( m_da2.length == 2 ){
					config_da[m_da2[0]]=m_da2[1];
				}else if( m_da2.length > 2 ){
					config_da[m_da2[0]] = [];
					for( var m2i=1,m2l=m_da2.length;m2i<m2l;m2i++ ){
						config_da[m_da2[0]].push( m_da2[m2i] );
					}
				}
				//console.log( config_da );
			}
		}
		
	});
	
	return config_da;
	
}



/* ************* jQuery.fn.MMJS_validation *****************
jQuery.fn.MMJS_validation
表单验证：
验空 .jsv_required
验邮箱 .jsv_email
验相等 .jsv_equal_*
验证手机 .jsv_cellphone
验证纯数字 .jsv_digit
验证数字(允许数字和点) .jsv_number
*********************************************************** */ 
jQuery.fn.MMJS_validation = function(){
	return this.each(function(){
		var $form = jQuery(this);
		var fe_list = [];
		
		
		var fe_validation_list = [];
		$form.find('input,textarea,select').each(function(){
			var $fe = jQuery(this);
			var class_name_da = $fe.attr('class').split(/\s/);
			
			var validation_list = [];
			
			for ( var i=0,l=class_name_da.length;i<l;i++ ){
				if ( class_name_da[i]=='jsv_lazy' ){
					validation_list.push( {'rule':'lazy'} );
				}
				if ( class_name_da[i]=='jsv_required' ){
					validation_list.push( {'rule':'required'} );
				}
				if ( class_name_da[i]=='jsv_email' ){
					validation_list.push( {'rule':'email'} );
				}
				if ( class_name_da[i]=='jsv_cellphone' ){
					validation_list.push( {'rule':'cellphone'} );
				}
				if ( class_name_da[i]=='jsv_digit' ){
					validation_list.push( {'rule':'digit'} );
				}
				if ( class_name_da[i]=='jsv_number' ){
					validation_list.push( {'rule':'number'} );
				}
				var m =/jsv_equal_([\w]+)/.exec(class_name_da[i]) 
				if ( m && m.length ){
					validation_list.push( {'rule':'equal','meta':m[1]} );
				}
				var m =/jsv_minlength_([\d]+)/.exec(class_name_da[i]) 
				if ( m && m.length ){
					validation_list.push( {'rule':'minlength','meta':m[1]} );
				}
			}
			
			if ( validation_list.length ){
				var error_info = $fe.attr('title');
				fe_list.push($fe);
				$fe.data( 'mmjs_validation_error_info',error_info );
				$fe.data( 'mmjs_validation_rules',validation_list );
			}

		});
		
		for( var i=0,l=fe_list.length;i<l;i++ ){
			fe_list[i].attr('title','');
		}
		
	});
}

jQuery.fn.MMJS_validate = function( can_be_lazy ){
	var validated = true;
	var $form = jQuery(this);
	var $fe = $form.find('input,textarea,select');
	
	var can_be_lazy = can_be_lazy ? true : false;
	
	//console.log(can_be_lazy);
	
	var equal_first = {};
	
	
	$fe.each(function(){
		var $fe_item = jQuery(this);
		var $fe_item_parent = $fe_item.parents('.js_mmjs_validation_fe_wrap').first();
		var rule = $fe_item.data( 'mmjs_validation_rules' );
		
		var fe_event_registed = $fe.attr('mmjs_validation_fe_event_registed');
		if ( !fe_event_registed ){
			$fe.focusout(function(){
				$form.MMJS_validate( true );
			}).change(function(){
				$form.MMJS_validate( true );
			});
			$fe.attr('mmjs_validation_fe_event_registed',true);
		}
		
		if ( rule ){
			var error_info = $fe_item.data( 'mmjs_validation_error_info' );
			var error_info_da = error_info.split('|');
			
			var marked = false;
			var marked_info = '';

			var val = '';
			if ( $fe_item.is('[type=checkbox]') ){
				val = [];
				$form.find( '[name="' + $fe_item.attr('name') + '"]:checked' ).each(function(){
					val.push( jQuery(this).val() );
				});
			}else if( $fe_item.is('[type=radio]') ){
				val = $form.find( '[name="' + $fe_item.attr('name') + '"]:checked' ).val();
			}else{
				val = $fe_item.val();
			}
			val = jQuery.trim(val);
			
			for( var i_rule=0,l_rule=rule.length;i_rule<l_rule;i_rule++ ){
				if ( !marked ){
					var rule_method = rule[i_rule].rule;
					var rule_meta = rule[i_rule].meta;
					
					if( rule_method == 'lazy' && can_be_lazy ){
						break;
					}
					
					switch( rule_method ){
						case 'required':
							if( !val ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
						case 'email':
							var email_regexp = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
							if( val && !email_regexp.test(val) ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
						case 'cellphone':
							var email_regexp = /^1[\d]{10}$/;
							if( val && !email_regexp.test(val) ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
						case 'digit':
							var digit_regexp = /^[\d]+$/;
							if( val && !digit_regexp.test(val) ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
						case 'number':
							var number_regexp = /^[\d]+([\.][\d]+){0,1}$/;
							if( val && !number_regexp.test(val) ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
						case 'equal':
							if ( typeof equal_first[rule_meta] == 'undefined' ){
								equal_first[rule_meta] = val;
							}else if( val != equal_first[rule_meta] ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
						case 'minlength':
							var min_length = parseInt(rule_meta);
							if ( val.length < min_length ){
								marked = true;
								marked_info = error_info_da[i_rule];
							}
							break;
					}
				}


				var $mark_info = $fe_item_parent.find('.js_validation_marke_info').removeClass('info_notice').removeClass('info_success').addClass('info_error');
				
				if ( !$mark_info.length ){
					var $mark_info = jQuery( '<span class="info_error js_validation_marke_info"></span>' );
					$fe_item_parent.append( $mark_info );
				}
				
				
				if( marked ){
					
					
					
					validated = false;
					$mark_info.text( marked_info ).show();
					$fe_item.removeClass('info_notice').removeClass('info_success').addClass('info_error');
				}else{
					$mark_info.text( '' ).hide();
					$fe_item.removeClass('info_notice').removeClass('info_success').removeClass('info_error');
				}
			}
		}
	});
	
	return validated;
		
}


/* ************* MMJS.detect_content_box *****************
MMJS.detect_content_box
侦测内容高度
html_or_obj html字符串或者jquery对象
*********************************************************** */ 
MMJS.detect_content_box = function( html_or_obj ){
	if ( typeof html_or_obj == 'string' ){
		var $content = jQuery(html_or_obj);
	}else if( typeof html_or_obj == 'object' ){
		var $content = html_or_obj;
	}else{
		return false;
	}
	var $measure_box = jQuery('<div></div>').css({
		'position':'absolute',
		'top':'-99999px',
		'left':'-99999px'
	}).append($content.clone()).hide().appendTo('body');
	var return_obj = { 'width':$measure_box.width(),'height':$measure_box.height() };
	$measure_box.remove();
	return return_obj;
}


/* ************* Class MMJS.tooltip *****************
Class MMJS.tooltip
*********************************************************** */ 

jQuery(function(){
	var MMJS_tooltip = new MMJS.tooltip();
	jQuery('.js_tooltip').MMJS_tooltip();
})


MMJS.tooltip = function( args ){
	//init args
  args = args || {};
	
  var args_default = {
		'max_width':0//最大的限定宽度，0代表没有限制。
  }
  
  args = jQuery.extend( args_default,args );
  jQuery.extend( this,args );
	
	this.init();
	
}

//tooltip的具体内容会缓存到这个数组中，如果tootip是title型，则key就是title的值。如果tooltip是ajax型，则key为url。
MMJS.tooltip.prototype.data = {};

MMJS.tooltip.prototype.init = function(){
	var _tc = this;
	
	this.cur_key = '';
	this.in_ajax = false;
	
	//如果没有tooltip容器，则创建一个tooltip容器。
	if ( !this.$box ){
		this.$box = jQuery('<div class="mmjs_tooltip_box"><div class="js_tooltip_content"></div><div class="arrow_bl"></div></div>')
		.css({'position':'absolute'}).hide().appendTo('body');
	}

	//如果没有测量容器，则创建一个测量容器。
	if ( !this.$measure ){
		this.$measure = jQuery('<div></div>')
		.css({'position':'absolute','left':'-99999px','top':'-99999px'}).hide().appendTo('body');
	}


	//注册鼠标事件
	jQuery('body').mousemove(function(evt){
		var $target = jQuery(evt.target);
		//找到可以触发tooltip的标签
		var $tooltip_trigger = null;
		if ( $target.data('mmjs_tooltip') ){
			$tooltip_trigger = $target;
		}else{
			$target.parents().each(function(){
				var $this = jQuery(this);
				if( $this.data('mmjs_tooltip') ){
					$tooltip_trigger = $this;
					return false;
				}
			});
		}
		
		if ( $tooltip_trigger ){
			var rel = jQuery.trim($tooltip_trigger.attr('rel'));
			var title = $tooltip_trigger.attr('id');
			
			if ( rel ){
				var type = 'rel';
				var key = rel;
			}else if( title ){
				var type = 'title';
				var key = title;
			}

			if ( typeof _tc.data[key] == 'undefined' ){
				switch( type ){
					case 'rel':
						if ( !_tc.in_ajax ){
							_tc.in_ajax = true;
							jQuery.ajax(rel,{
								'dataType':'html',
								'async':true,
								'cache':true,
								'success':function( data ){
									_tc.data[key] = data;
									_tc.draw(key,data);
								},
								'complete':function(){
									_tc.in_ajax = false;
								},
								'error':function(){
									_tc.in_ajax = false;
								}
							});
						}
						break;
					case 'title':
						_tc.data[key] = '<div class="pd10 pt5 pb5">' + title + '</div>';
						_tc.draw(key,_tc.data[key]);
						break;
				}
			}else{
				_tc.draw(key,_tc.data[key]);
			}
			_tc.pos();
			_tc.$box.show();
		}else{
			_tc.$box.hide();
		}
	});	
	
}


MMJS.tooltip.prototype.draw = function( key,html ){
	if ( this.cur_key != key ){
		//console.log(key);
		this.$measure.html( html );
		var width = this.$measure.width();
		if( this.max_width > 0 && width > this.max_width ){
			width = this.max_width;
		}
		this.$box.css({'width':width,'z-index':MMJS.get_next_highest_zindex()}).find('.js_tooltip_content').html( html );
		this.cur_key = key;
	}
}


MMJS.tooltip.prototype.pos = function(){
	var width = this.$box.outerWidth();
	var height = this.$box.outerHeight();
	var tar_left = MMJS.mouse_left + 0;
	var tar_top = MMJS.mouse_top - height - 10;
	//console.log( MMJS.mouse_left , tar_top );
	this.$box.css( { 'left':tar_left,'top':tar_top } );
}


jQuery.fn.MMJS_tooltip = function(){
	var $this = jQuery(this);
	$this.data( 'mmjs_tooltip',true );	
	return this;
}





MMJS.Marquee =  function( args ){
  //init args
  args = args || {};

  var args_default = {
		'container_selector':'',
		'window_selector':'',
		'list_selector':'',
		'prev_acc_btn':'',
		'next_acc_btn':'',
		'interval':100,
		'move_step':1,
		'move_attr':'',
		'move_init':0,
		'start_delay':5000
  };
  
  args = jQuery.extend( args_default,args );
  jQuery.extend( this,args );

  this.init();

}


MMJS.Marquee.prototype.init = function(){
  var class_obj = this;	
	
	this.$window = jQuery(this.window_selector);
	this.$list = jQuery(this.list_selector);
	this.$prev_acc_btn = jQuery(this.prev_acc_btn);
	this.$next_acc_btn = jQuery(this.next_acc_btn);
	
	this.original_move_step = this.move_step;
	
	if ( this.move_attr == 'top' || this.move_attr == 'bottom' ){
		this.unit_attr = 'height';
	}else if( this.move_attr == 'left' || this.move_attr == 'right' ){
		this.unit_attr = 'width';
	}
	
	var window_length = parseInt(this.$window.css( this.unit_attr ));
	var list_length = parseInt(this.$list.css( this.unit_attr ));
	
	if ( list_length > window_length ){
		var $lis = this.$list.find('li');
		$lis.clone( true ).appendTo( this.$list );
		$lis.clone( true ).appendTo( this.$list );
	}
	
	var stop_flag = false;
	
	if ( class_obj.start_delay > 0 ){
		window.setTimeout(function(){
			window.setInterval(function(){
				if ( !stop_flag ){
					var cur_len = parseInt(class_obj.$list.css(class_obj.move_attr)) || class_obj.move_init;
					var next_len = cur_len + class_obj.move_step;
					var abs_next_len = Math.abs(next_len);
					var sign_factor = ( next_len < 0 ) ? -1 : 1;
					if ( ( abs_next_len - list_length ) > list_length ){
						//console.log( 'jump+' + abs_next_len + '  ' + list_length );
						next_len = sign_factor * ( abs_next_len - list_length );
					}else if ( abs_next_len < list_length ){
						//console.log( 'jump-' + abs_next_len + '  ' + list_length );
						next_len = sign_factor * ( abs_next_len + list_length );
					}
					class_obj.$list.css(class_obj.move_attr,next_len);
				}
			},class_obj.interval);
			
		},class_obj.start_delay);
	}
	

	
	this.$window.hover(function(){
		stop_flag = true;
	},function(){
		stop_flag = false;
	});

	this.$prev_acc_btn.hover(function(){
		stop_flag = true;
	},function(){
		stop_flag = false;
	});
	
	this.$next_acc_btn.hover(function(){
		stop_flag = true;
	},function(){
		stop_flag = false;
	});

	this.$prev_acc_btn.bind('mousedown',function(){
		stop_flag = false;
		class_obj.move_step = class_obj.original_move_step*-5;
	}).bind('mouseup',function(){
		stop_flag = true;
		class_obj.move_step = class_obj.original_move_step;
	});
	
	this.$next_acc_btn.bind('mousedown',function(){
		stop_flag = false;
		class_obj.move_step = class_obj.original_move_step*5;
	}).bind('mouseup',function(){
		stop_flag = true;
		class_obj.move_step = class_obj.original_move_step;
	});
	
}



/* ************* jQuery.fn.MMJS_fix_png *****************
jQuery.fn.MMJS_fix_png(selector)
以jQuery()选择的对象为父元素，按照selector所选定的元素，应用DD_belatedPNG插件。
*********************************************************** */ 
jQuery.fn.MMJS_fix_png = function(selector){
	if ( jQuery.browser.msie && jQuery.browser.version == 6.0 ){
		this.each(function(){
			var $this = jQuery(this);
			
			if ( selector ){
				$this.find( selector ).each(function(){
					DD_belatedPNG.fixPng(this);
				});
			}else{
				DD_belatedPNG.fixPng(this);
			}
		});
	}
	return this;
}





