﻿	
	//=================================基础类（公共函数类）=================================
	/**
	 * 定义基础类

	 */      
    function KBase(){}
    
    /**
	 * 定义前类继承后类
	 */  
    var KBase_inherit = function(childClass,parnetClass)
    {
        var i;
        for (i in parnetClass)
        {
            childClass[i] = parnetClass[i];
        }
    }   
    
    
    
    /* ---------------------跟HTML控件相关的方法-------------------------- */
    
	/**
	 * 检测对角是否为HTML控件,
	 * 返回值：是为true,不是为false
	 */  
    var KEvent_isHtmlControl = function(source)
    {
        return (source.tagName || source == window || source == document);
    }
    
    /**
	 * 获取HMTL控件的样式

	 */  
    var KBase_getStyle = function(source)
    {
        return source.style;
    }
    
    /**
	 * 获取事件相对容器的位置

	 */    
    var KBase_getEventPosition = function(x, container)
    {
        if (typeof x.offsetX != "undefined")
        {
            var xContainer = x.target || x.srcElement;
            var position = [0, 0];           
            while (xContainer && xContainer != container)
            {
                if (xContainer.tagName!="A")//过滤到超级链接

                { 
					position[0] += parseInt(xContainer.offsetLeft);
					position[1] += parseInt(xContainer.offsetTop);
                }
              // if(xContainer.offsetParent!=null) 
					xContainer = xContainer.offsetParent;   
                
            }
            return[x.offsetX + position[0], x.offsetY + position[1]];
        }
        else if (typeof x.pageX != "undefined")
        {
            var position = KBase.getPageOffset(container);            
            return[x.pageX - position[0], x.pageY - position[1]];
        }
        else
        {
            return[0, 0];
        }
    }
    
    /**
	 * 获取鼠标按钮的键位

	 * 返回值：1 表示 左键，2 表示 右键
	 */   
    var KBase_getEventButton = function(x)
    {
        var Gt = 1;        
        if (KBase.getBrowserType()=="IE")
        {
            Gt = x.button;
        }
        else//FireFox左键默认为0,右键默认为2
        {
            if (x.button == 0)	Gt=x.button+1;
            else Gt = x.button;
        }
        return Gt;
    }   
    
    /**
     * 创建无素
     */
    var KBase_createElement = function(elementName)
    {
        return document.createElement(elementName);
    }
    
    /**
     * 创建图层
     */
    var KBase_createDiv = function(positionType, position, zindex)
    {
        var div = KBase.createElement("div");
        if (positionType > 0)
        {
            KBase.getStyle(div)["position"] = (positionType == 2) ? "relative" : "absolute";
        }
        if (position)
        {
            KBase.setPosition(div, position);
        }
        if (zindex)
        {
            KBase.setZIndex(div, zindex);
        }
        return div;
    }    
    
    
    /**
     * 获取容器在页面的位置--可能解释有点问题
     */
    var KBase_getPageOffset = function(container)
    {
        var position = [0, 0];
        var containerTemp = container;
        while (containerTemp)
        {
            position[0] += containerTemp.offsetLeft;
            position[1] += containerTemp.offsetTop;
            containerTemp = containerTemp.offsetParent;
        }
        return position;
    }
    
    /**
     * 设置控件位置
     */
    var KBase_setPosition = function(htmlControl,position)
    {
        KBase.getStyle(htmlControl)["left"] = KBase.getUserInput(position[0]);
        KBase.getStyle(htmlControl)["top"] = KBase.getUserInput(position[1]);
    }
    
    /**
     * 设置控件大小
     */
    var KBase_setSize = function(htmlControl, size)
    {
        KBase.getStyle(htmlControl)["width"] = KBase.getUserInput(size[0]);
        KBase.getStyle(htmlControl)["height"] = KBase.getUserInput(size[1]);
    }
    
    /**
     * 设置控件的层数（即第几层）

     */
    var KBase_setZIndex = function(htmlControl, index)
    {
        KBase.getStyle(htmlControl)["zIndex"] = index;
    }
    
    /**
     * 设置控件的鼠标样式

     */
    var KBase_setCursorStyle = function(htmlControl,curName)
    {
        var curUrl="";
        if (curName.indexOf(".cur")<1)
        {
			KBase.getStyle(htmlControl)["cursor"] = curName;
			return;
        }
        if (curName && KConfig.CurPath)
        {
            curUrl = "url('" + KConfig.CurPath + curName + "')";
        }
        try
        {     
			KBase.getStyle(htmlControl)["cursor"] = curUrl;
		}
		catch (ex)
		{
			KBase.getStyle(htmlControl)["cursor"] = "hand";
		}			
    }
    
    /**
     * 设置控件不能选择
     */
    var KBase_setUnSelectable = function(htmlControl)
    {
        if (KBase.getBrowserType()=="IE")
        {
            htmlControl.unselectable = "on";
            htmlControl.onselectstart = KBase.falseFunction;
        }
        else
        {
            KBase.getStyle(htmlControl)["MozUserSelect"] = "none";
        }
    }
    
    /**
     * 设置控件透明度

     */
    var KBase_setOpacity = function(htmlControl, OpacityRate)
    {
        KBase.getStyle(htmlControl)["filter"] = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + parseInt(OpacityRate * 100) + ")";
        KBase.getStyle(htmlControl)["MozOpacity"] = OpacityRate;
    }
    
    
    /* ---------------------跟字符转换相关的方法-------------------------- */
    
    /**
     * 对用户设置的参数进行转换成标准格式

     */
	var KBase_getUserInput = function(value)
    {
        if (typeof value == "number")
        {
            return value + "px";
        }
        else if (typeof value == "string")
        {
			var numPx=new RegExp("^\\d+(px|%)+$","i");
			var numStr=new RegExp("^\\d+$");
			value=value.replace(new RegExp("\\s","g"),"");
            if (numPx.exec(value))
            {
                return value;
            }
            else if (numStr.exec(value))
            {
                return value + "px";
            }
            else
            {
                return "0px";
            }
        }
    }    
	
	/**
     * 将字符串转换成Xml格式
     */
	var KBase_convertToXml=function(text)
	{
		var iLength = text.length;
		var sRtn = "";
		for(var i=0; i<iLength; i++)
		{
			var iCharCodeAti = text.charCodeAt(i);
			switch(iCharCodeAti)
			{
				case 10:  //\n - 10
					sRtn += "&#10;";
					break;
				case 34:  //34 - "
					sRtn += "&#34;";
					break;
				case 38:  //38 - &
					sRtn += "&#38;";
					break;
				case 39:  //39 - '
					sRtn += "&#39;";
					break;
				case 60:  //60 - <
					sRtn += "&#60;";
					break;
				case 62:  //62 - >
					sRtn += "&#62;";
					break;
				default:
					sRtn += this.charAt(i)
			}
		}
		return sRtn;
	}
	
	/*
	 * 创建发送信息的XML格式
	 */
	var KBase_createSendXml=function(userId,cmd,parameter,isGisCmd)
	{
		var parameterTemp;
		try 
		{
			parameterTemp = KBase.convertToXml(parameter);
		} 
		catch (exception)
		{
			parameterTemp = parameter;
		}    
		var isGisCmdTemp=isGisCmd==null?true:isGisCmd;
		var sXML  = "<postData><uid>" + userId + "</uid><cmd isGisCmd=\"" + isGisCmdTemp + "\">" + cmd + "</cmd>";
		sXML += "<para>" + parameterTemp + "</para></postData>";
		return sXML;
	}
	
	/**
     * 将JSON信息转化成message对象
     */
	var KBase_getMessage =function(jsonText)
    {
		var message;
		try
		{
			message=eval('(' + jsonText + ')');	
			message.text=message.text.split(";");		
		}
		catch (exception)
		{
			message=null;
		}	
		return message;
	}		
    
    /* ---------------------跟浏览器相关的方法-------------------------- */
    
    /**
     * 检测浏览器类型
     */
    var KBase_getBrowserType = function()
    {
        var browserType = navigator.appName;        
        if (browserType.indexOf("Microsoft Internet Explorer") != -1 && document.all)
        {
			return "IE";
        }        
        else
        {
            return "";
        }
    }
    
    /**
     * 浏览器检测（为了解决IE5.0一些高级方法没有的问题）

     */
    var KBase_browserCheck = function()
    {
		if (KBase.getBrowserType()!="IE") return;
        
		
		if (!Array.prototype.push)
		{
			Array.prototype.push = function()
			{
				var startLength = this.length;
				for (var i=0;i<arguments.length;i++)	this[startLength + i] = arguments[i];
				return this.length;
			}
		}
		
		if (!Function.prototype.apply)
		{
			Function.prototype.apply = function(object, parameters)
			{
				var parameterStrings = new Array();
				if (!object) object = window;
				if (!parameters) parameters = new Array();
				for (var i = 0; i < parameters.length; i++)	parameterStrings[i] = 'parameters[' + i + ']';
				object.__apply__ = this;
				var result = eval("object.__apply__(" + parameterStrings.join(',') + ")");
				object.__apply__ = null;
				return result;
			} 
		}
		
		if (!Function.prototype.call)
		{
			Function.prototype.call= function(object)
			{
				if(object instanceof Object == false)
				{
					return;
				}
				object.constructor.prototype.___base = this;
				if(arguments.length == 1)
				{
					object.___base();
				 }
				 else
				 {
					var aoEval = new Array();
					for(var i=1; i<arguments.length; i++)
					{
						aoEval[aoEval.length] = "arguments["+i+"]"
					}
					aoEval = "object.___base(" + aoEval.join(",") + ")";       
					eval(aoEval);
				}
			}
		}
		
		
		if (!Array.splice && !Array.prototype.splice)
		{
			Array.prototype.splice = function(s, d)
			{
				var max = Math.max,	min = Math.min,a = [],e;
				var i = max(arguments.length - 2, 0);
				var k = 0,l = this.length,n,v,x;
				s = s || 0;
				if (s < 0) s += l;				
				s = max(min(s, l), 0);
				d = max(min(typeof d == 'number' ? d : l, l - s), 0);
				v = i - d;
				n = l + v;
				while (k < d)
				{
					e = this[s + k];
					if (!e) a[k] = e;
					k += 1;
				}
				x = l - s - d;
				if (v < 0)
				{
					k = s + i;
					while (x)
					{
						this[k] = this[k - v];
						k += 1;
						x -= 1;
					}
					this.length = n;
				}
				else if (v > 0)
				{
					k = 1;
					while (x)
					{
						this[n - k] = this[l - k];
						k += 1;
						x -= 1;
					}
				}
				for (k = 0; k < i; ++k) {this[s + k] = arguments[k + 2];}
				return a;
			}
		}
	}
    
    
    
    /* ---------------------跟类型相关的方法-------------------------- */
    
    /**
     * 指元素从数组中删除

     */
    var KBase_deleteFromArray = function(array,item)
    {
        var p = array.length;
        for (i = 0;i < array.length;i++)
        {
            if (array[i] == item)
            {
                array.splice(i, 1);
            }
        }
    }   
    
	/**
     * 返回一个错误的方法
     */
    var KBase_falseFunction = function()
    {
        return false;
    }   
   
   /**
   *深度删除HTML节点的所有子节点。
   */
    var KBase_removeDeepChildren = function(htmlControl){
		
		for(var i=htmlControl.children.length -1; i>=0 ; i--)
		{
			var oChild = htmlControl.children.item(i);
			
			//消除光标属性
			try{
				oChild.removeAttribute("cursor");
			}
			catch(e)
			{}
			
			if(oChild.children.length>0)
			{
				KBase.removeDeepChildren(oChild);
			}
			
			htmlControl.removeChild(oChild);
		}
		return;
    }
    

	KConfig.defineClass("KBase", KBase);
	
	KConfig.defineStaticFunction(KBase, "inherit", KBase_inherit);
		
	KConfig.defineStaticFunction(KBase, "isHtmlControl", KEvent_isHtmlControl);    
    KConfig.defineStaticFunction(KBase, "getPageOffset", KBase_getPageOffset);
    KConfig.defineStaticFunction(KBase, "createDiv", KBase_createDiv);
    KConfig.defineStaticFunction(KBase, "setPosition", KBase_setPosition);
    KConfig.defineStaticFunction(KBase, "setSize", KBase_setSize);
    KConfig.defineStaticFunction(KBase, "setZIndex", KBase_setZIndex);
    KConfig.defineStaticFunction(KBase, "getEventPosition", KBase_getEventPosition);    
    KConfig.defineStaticFunction(KBase, "setCursorStyle", KBase_setCursorStyle);    
    KConfig.defineStaticFunction(KBase, "setUnSelectable", KBase_setUnSelectable);
    KConfig.defineStaticFunction(KBase, "setOpacity", KBase_setOpacity);
    KConfig.defineStaticFunction(KBase, "getEventButton", KBase_getEventButton);
    KConfig.defineStaticFunction(KBase, "getStyle", KBase_getStyle);    
    
    KConfig.defineStaticFunction(KBase, "createElement", KBase_createElement);
    KConfig.defineStaticFunction(KBase, "getUserInput", KBase_getUserInput); 
    KConfig.defineStaticFunction(KBase, "getMessage", KBase_getMessage);
    KConfig.defineStaticFunction(KBase, "convertToXml", KBase_convertToXml);
    KConfig.defineStaticFunction(KBase, "createSendXml", KBase_createSendXml);
    
    KConfig.defineStaticFunction(KBase, "getBrowserType", KBase_getBrowserType);
    KConfig.defineStaticFunction(KBase, "browserCheck", KBase_browserCheck);
    
    KConfig.defineStaticFunction(KBase, "deleteFromArray", KBase_deleteFromArray);
    KConfig.defineStaticFunction(KBase, "falseFunction", KBase_falseFunction);    
    KConfig.defineStaticFunction(KBase, "removeDeepChildren", KBase_removeDeepChildren);    
    
    KBase.browserCheck();
    
    //==============================基础类（公共函数类）[END]=================================