// 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.MMJS_onWindowResize *****************
// jQuery元素集扩展 jQuery.fn.MMJS_onWindowResize( 注册的函数 )
// 功能:注册window.onresize事件。主要是为了解决mozilla和opera不支持onresize事件的问题。
// 说明:
// 需求:jQuery
// LastModify:2010-08-26
*********************************************************** */ 
jQuery.fn.MMJS_onWindowResize = function( func ) {
    if ( this.length > 0 ){
        return this.each( function(){
            jQuery.MMJS_onWindowResize_funclist = jQuery.MMJS_onWindowResize_funclist || [];
            jQuery.MMJS_onWindowResize_funclist.push({ 'func':func,'obj':jQuery(this) });
        } );
    }else{
        jQuery.MMJS_onWindowResize_funclist = jQuery.MMJS_onWindowResize_funclist || [];
        jQuery.MMJS_onWindowResize_funclist.push({ 'func':func,'obj':this });
        return this;
    }
}

jQuery.MMJS_onWindowResize_call = function(){
    if ( jQuery.MMJS_onWindowResize_funclist ){
        jQuery.MMJS_onWindowResize_w = jQuery.MMJS_onWindowResize_$window.width();
        jQuery.MMJS_onWindowResize_h = jQuery.MMJS_onWindowResize_$window.height();
        jQuery.MMJS_onWindowResize_last_w = jQuery.MMJS_onWindowResize_last_w || 0;
        jQuery.MMJS_onWindowResize_last_h = jQuery.MMJS_onWindowResize_last_h || 0;
        if ( jQuery.MMJS_onWindowResize_w!=jQuery.MMJS_onWindowResize_last_w || jQuery.MMJS_onWindowResize_h!=jQuery.MMJS_onWindowResize_last_h ){
            jQuery.MMJS_onWindowResize_last_w = jQuery.MMJS_onWindowResize_w;
            jQuery.MMJS_onWindowResize_last_h = jQuery.MMJS_onWindowResize_h;
            for( i in jQuery.MMJS_onWindowResize_funclist ){
                if ( typeof jQuery.MMJS_onWindowResize_funclist[i]['func'] == 'function' ){
                    jQuery.MMJS_onWindowResize_funclist[i]['func'].apply( jQuery.MMJS_onWindowResize_funclist[i]['obj'] );
                }else{
                    jQuery.MMJS_onWindowResize_funclist.splice(i,1);
                }
            }
        }
    }
}

jQuery( function(){
    jQuery.MMJS_onWindowResize_$window=jQuery(window);
    if( jQuery.browser.mozilla || jQuery.browser.opera ){
        window.setInterval( jQuery.MMJS_onWindowResize_call,100 );
    }else{
        window.onresize = jQuery.MMJS_onWindowResize_call;
    }
});
/* *********************************************************** */



/* ************* jQuery Ext jQuery.fn.fixed *****************
// jQuery元素集扩展 jQuery.fn.fixed()
// 功能:将元素设置为 position:fixed
// 说明:IE6不支持position:fixed，用JS实现。
// 需求:jQuery
// LastModify:2010-08-30
*********************************************************** */ 
jQuery.fn.MMJS_fixed = function( func ) {
	return this.each( function(){
		var $this = jQuery(this);
		if ( jQuery.browser.msie && jQuery.browser.version == '6.0' ){
			if ( !$this.data( 'fixed_hooked' ) ){
				$this.css( {'position':'absolute'} );
			
				//如果top是百分比的话，要转换一下。由于算法不同，所以生成一个函数的句柄。只支持百分比或者像素。
				var pos_top = $this.css('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.css('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()) } );
				
				//注册滚动条事件
				jQuery(window).scroll( function(){
					$this.css( {'top':get_tar_top(jQuery('html').scrollTop()),'left':get_tar_left(jQuery('html').scrollLeft()) } );
				} );

				//注册resize事件
				$this.MMJS_onWindowResize( 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;
}




//jQuery Ext  jQuery.fn.MMJS_addMask
jQuery.fn.MMJS_addMask = function( args ){
	
	var this_obj = this;
	
	// if added return this;
	var $wrap = this.data( 'MMJS_addMask_$wrap');
	if ( $wrap ) return this;

	//init args
	var args = args || {};

	var args_default = {
		'bgcolor':'#000',
		'opc':'50',
		'animate':false,//false, // options:  false|'fade'|'show'
		'speed':'fast', // options number|'fast'|'normal'|'slow'
		'callback':null,
		'callback_remove_start':null,
		'callback_remove_end':null
	};
	
	args = jQuery.extend( args_default,args );
	
	var $con = this;
	var w = $con.width();
	var h = $con.height();

	/* structure
	wrap
	|-opc_bg
	|-iframe (optional)
	|-event_layer
	*/
	//create wrap
	var pos = $con.css('position');

	if( $con.attr('tagName')=='BODY' ){
		var $window = jQuery(window);
		w = $window.width();
		h = $window.height();
		var $wrap = jQuery( '<div></div>' ).width(w).height(h).css({
			'position':'absolute',
			'top':'50%',
			'left':'50%',
			'margin-left':-(w/2),
			'margin-top':-(h/2),
			'overflow':'hidden'
		}).MMJS_fixed().hide().MMJS_onWindowResize(function(){
			w = $window.width();
			h = $window.height();
			this.width($window.width()).height($window.height()).css({
				'margin-left':-(w/2),
				'margin-top':-(h/2)
			});
		}).appendTo( $con );
	}else{
		// if the container is not position-absolute then set is to position-relative , need tested
		if ( pos != 'absolute' && pos != 'fixed' ){
			$con.css('position','relative');
			pos = 'relative';
		}
		var $wrap = jQuery( '<div></div>' ).width(w).height(h).css({
			'position':'absolute',
			'top':0,
			'left':0
		}).hide().appendTo( $con );
	}
	//create opc_bg	
	var $bg = jQuery( '<div></div>' ).css({
		'width':'100%',
		'height':'100%',
		'position':'absolute',
		'top':0,
		'left':0,
		'background-color':args.bgcolor
	}).MMJS_opacity( args.opc ).appendTo( $wrap );
	//create iframe
	if ( jQuery.browser.msie && jQuery.browser.version==6.0 ){
		var $iframe = jQuery( '<iframe scrolling="no" frameborder="0" src="about:blank"></iframe>' ).css({
			'width':'100%',
			'height':'100%',
			'position':'absolute',
			'top':0,
			'left':0
		}).MMJS_opacity( 0 ).appendTo( $wrap );		
	}
	//create event_layer
	var $event_layer = jQuery( '<div></div>' ).css({
		'width':'100%',
		'height':'100%',
		'position':'absolute',
		'top':0,
		'left':0
	}).appendTo( $wrap );
	//event regist
	$event_layer.click(function(){
		this_obj.MMJS_removeMask({
			'callback':args.callback_remove_end					 
		});
		if ( typeof args.callback_remove_start == 'function' ){
			args.callback_remove_start.apply(this_obj);	
		}
	});
	//show
	if ( args.animate ){
		switch( args.animate.toLowerCase() ){
			case 'fade':
			case 'fadein':	
				this_obj.data( 'MMJS_addMask_enable_remove',false );
				$wrap.fadeIn( args.speed,function(){
					this_obj.data( 'MMJS_addMask_enable_remove',true );
					if ( typeof callback == 'function' ){ 
						callback.apply( $wrap );
					}
				});
				break;
			case 'show':
				this_obj.data( 'MMJS_addMask_enable_remove',false );
				$wrap.show( args.speed,function(){
					this_obj.data( 'MMJS_addMask_enable_remove',true );
					if ( typeof callback == 'function' ){ 
						callback.apply( $wrap );
					}
				});
				break;
		}
	}else{
		$wrap.show();
		this_obj.data( 'MMJS_addMask_enable_remove',true );
		if ( typeof callback == 'function' ){ 
			callback.apply( $wrap );
		}
	}
	
	this.data( 'MMJS_addMask_$wrap',$wrap );
	return this;
}

//jQuery Ext  jQuery.fn.MMJS_removeMask
jQuery.fn.MMJS_removeMask = function( args ){

	var this_obj = this;
	
	// if not enable_remove then do not remove this wrap
	var enable_remove = this.data( 'MMJS_addMask_enable_remove' );
	if ( !enable_remove ) return this;

	//init args
	var args = args || {};

	var args_default = {
		'animate':false, // options:  false|'fade'|'hide'
		'speed':0, // options number|'fast'|'normal'|'slow'
		'callback':null
	}

	args = jQuery.extend( args_default,args );

	var $wrap = this.data( 'MMJS_addMask_$wrap' );
	
	var kill_warp = function(){
		$wrap.remove();
		this_obj.data( 'MMJS_addMask_$wrap',null );
	}

	if ( $wrap ){
		//remove
		if ( args.animate ){
			switch( args.animate.toLowerCase() ){
				case 'fade':
				case 'fadeout':	
					$wrap.fadeOut( args.speed,function(){
						if ( typeof callback == 'function' ){ 
							callback.apply( $wrap );
						}
						kill_warp();
					} );
					break;
				case 'hide':
					$wrap.hide( args.speed,function(){
						if ( typeof callback == 'function' ){ 
							callback.apply( $wrap );
						}
						kill_warp();
					} );
					break;
			}
		}else{
			$wrap.hide();
			if ( typeof callback == 'function' ){ 
				callback.apply( $wrap );
			}
			kill_warp();
		}
	}
	return this;
}



/* ************* MMJS.LabelInput *****************
// MMJS 对象函数 MMJS.LabelInput( input_sel,label_sel )
// 功能:显示和隐藏浮在input上的label
// 说明:
// 需求:jQuery
// LastModify:2010-11-15
*********************************************************** */ 
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();
		});
	}
}


/* *********************************************************** */






