/*
 * Check Parameters 	(javascript 参数检测)
 *
 * Copyright (c) 2008 hehuihai	(ocean)
 *
 *version 0.5
 *
 * Date: 2008-03-07 8:20:27
 */

/*
//调用===================
showInDiv(参数,'#info','#info'.left,'#info'.top);
*/

//判断变量类型
function checkParaMode(Para){
	var reVal='';
	switch(typeof Para){
		case 'string':
			reVal='string';
			break;
		case 'number':
			reVal='number';
			break;
		case 'boolean':
			reVal='boolean';
			break;
		case 'undefined':
			reVal='undefined';
			break;
		case 'function':
			reVal='function';
			break;
		case 'object':
			if(Para==null){
				reVal='null-Object';
			}else if(Para.jquery){
				reVal='jQuery-Object';
			}else if(Para!=null && typeof(Para.tagName)!='undefined'){
				reVal='html-Object';
			}else if(typeof Para.body =='object'){
				reVal='document-Object';
			}else if(typeof Para.location =='object' && typeof Para.screen =='object' && typeof Para.history =='object' && typeof Para.navigator =='object'){
				reVal='window-Object';
			}else if(Para!=null && typeof(Para.tagName)=='undefined' && typeof(Para.constructor)=='function' && Para.constructor!=Array && Para.constructor!=Object){
				reVal='javascirpt-Object';
			}else{
				switch(Para.constructor){
					case Date:
						reVal='Date';
						break;
					case Array:
						reVal='Array';
						break;
					case Object:
						reVal='Object';
						break;
					default:
						reVal='unKnow-Object';
				}
				break;
			}	
			break;
		default:
			reVal='unKnow-Type';
	}
	return reVal;
}

//----------------------------
//打印对象信息:html-Object
function showObjectInfo(objType,Para){
	var reVal='';
	if(objType=='html-Object'){
		reVal+="<ul style='list-style:none;'><strong>html-Object</strong>{";
		reVal+="	<ul style='list-style:none;'>";
		reVal+="		<li style='list-style:none;'>tagName='"+Para.tagName+"'</li>";
		reVal+="		<li style='list-style:none;'>id='"+Para.id+"'</li>";
		reVal+="	</ul>";
		reVal+="}</ul>";
	}
	return reVal;
}

//----------------------------
//设置显示的"Array","Object"
function getObjTitle(val){
	var reVal='';
	switch(checkParaMode(val)){
		case 'Array':
			reVal='Array';
			break;
		case 'Object':
			reVal='Object';
			break;
	}
	return reVal;
}

//设置显示的"Array","Object"包含的括号"[]","{}"
function getObjSymbol(val,orderType){
	var reVal='';
	switch(checkParaMode(val)){
		case 'Array':
			reVal=orderType=='first'?'[':']';
			break;
		case 'Object':
			reVal=orderType=='first'?'{':'}';
			break;
	}
	return reVal;
}

//设置变量显示的方式,如字符类型,在两边加上"''"
function twoSideSymbol(val){
	var reVal='';
	switch(checkParaMode(val)){
		case 'string':
			reVal="'"+val+"'";
			break;
		default:
			reVal=val;
	}
	return reVal;
}

//获取数组明细信息
function getObject(){
	var html="";
	this.around=function(obj,iDeep){
		html+="<ul style='list-style:none; "+(iDeep>0?'position:relative; left:0px; top:0px;':'')+"'><strong>"+getObjTitle(obj)+"</strong>"+getObjSymbol(obj,"first");
		html+="<ul style='list-style:none;'>";
		for(key in obj){
			var val=obj[key];
			if(checkParaMode(val)=="Array" || checkParaMode(val)=="Object"){
				iDeep++;
				html+="<li style='list-style:none;'>"+key+"=>";
				this.around(val,iDeep);
				html+="</li>";
			}else{
				html+="<li style='list-style:none;'>"+key+"=>"+twoSideSymbol(val)+"</li>";
			}
		}
		html+="</ul>";
		html+=getObjSymbol(obj,"last")+"</ul>";
	}
	this.show=function(obj,iDeep){
		this.around(obj,iDeep);
		return html;
	}
}

//version 0.4
//check is arguments object
function checkIsArgumentsObj(obj){
	var reVal={result:false,data:[]};
	if(typeof obj=='object'){
		if(obj.length>0){
			var reVal1=reVal2=0;
			for(i in obj){
				reVal1++;
			}
			for(var i=0;i<obj.length;i++){
				reVal2++;
				//eval("reVal.data._"+i+"='"+obj[i]+"'");
				reVal.data.push(obj[i]);
			}
			if(reVal1!=reVal2){
				reVal.result=true;
			}
		}
	}
	return reVal;
}

//综合----------------------------
function showParaInfo(Para){
	var reVal='';
	switch(checkParaMode(Para)){
		case 'Array':
		case 'Object':
			var o=new getObject();
			if(checkIsArgumentsObj(Para).result)Para=checkIsArgumentsObj(Para).data;
			reVal=o.show(Para,0)||'Object, No Parameters';
			break;
		//--------------
		case 'html-Object':
			//reVal='html-Object';
			reVal=showObjectInfo('html-Object',Para);
			break;
		case 'javascirpt-Object':
			reVal='javascirpt-Object';
			break;
		case 'jQuery-Object':
			reVal='jQuery-Object';
			break;
		case 'document-Object':
			reVal='document-Object';
			break;
		case 'window-Object':
			reVal='window-Object';
			break;
		case 'null-Object':
			reVal='null-Object';
			break;
		//--------------
		case 'Date':
			reVal='Date';
			break;
		case 'function':
			reVal=Para;
			break;
		//default:
		//	switch(checkParaMode(Para)){
		case 'string':
			reVal="'"+Para+"'";
			break;
		case 'number':
			reVal=''+Para+'';
			break;
		case 'boolean':
			reVal=Para?'true':'false';
			break;
		case 'undefined':
			reVal='undefined';
			break;
		default:
			reVal='unknow';
			
	}
	//}
	return reVal;
}

//显示在一个指定的div内
function showInDiv(val){
	//判断显示内容的div是否存在,如不存在,则创建一个div
	var IncludesId=arguments[1];
	if(IncludesId){
		var iLeft=arguments[2]?arguments[2]:0;
		var iTop=arguments[3]?arguments[3]:500;
		$(IncludesId).css('left',iLeft).css('top',iTop);
	}
	var str=IncludesId?$("<div></div>").css({border:'#0066CC solid 1px',margin:'0 0 20px 0'}).appendTo(IncludesId):$("<div></div>").css({border:'#0066CC solid 1px',margin:'0 0 20px 0'}).appendTo('body');
	switch(checkParaMode(val)){
		case 'function':
			str.text(showParaInfo(val));
			break;
		default:
			str.html(showParaInfo(val));
	}
}

function che(val){
	var str=$("<div></div>").css({border:'#0066CC solid 1px',margin:'0 0 20px 0'}).appendTo('body');
	switch(checkParaMode(val)){
		case 'function':
			str.text(showParaInfo(val));
			break;
		default:
			str.html(showParaInfo(val));
	}
}

function chePosition(val){
	var LT={
		left:0,
		top:0,
		width:300,
		height:400
	};
	var sWH={
		width:$(window).width(),
		height:$(window).height()
	};
	
	switch(arguments[1]||'rb'){
		case 'lt':
			LT.left=10;
			LT.top=10;
			break;
		case 'lb':
			LT.left=10;
			LT.top=sWH.height-LT.height-10;
			break;
		case 'rt':
			LT.left=sWH.width-LT.width-10;
			LT.top=10;
			break;
		case 'rb':
			LT.left=sWH.width-LT.width-10;
			LT.top=sWH.height-LT.height-10;
			break;
	}
	
	if($('#checkCheckBox').length<1){
		$('<div id="checkCheckBox"></div>').css({border:'#0066CC solid 1px',margin:'0 0 20px 0','width':LT.width,'height':LT.height,'position':'absolute','left':LT.left,'top':LT.top,'overflow':'auto'}).appendTo('body');
	}
	var str=$("<div></div>").css({border:'#0066CC solid 1px',margin:'0 0 20px 0'}).appendTo('#checkCheckBox');
	switch(checkParaMode(val)){
		case 'function':
			str.text(showParaInfo(val));
			break;
		default:
			str.html(showParaInfo(val));
	}
	var o=document.getElementById('checkCheckBox');
	o.scrollTop=o.scrollHeight;
}

function che1(val){
	chePosition(val,'rt');
}

function che2(val){
	chePosition(val,'rb');
}

function che3(val){
	chePosition(val,'lb');
}

function che4(val){
	chePosition(val,'lt');
}