//版权信息及浏览器判断
var fw = {};
fw.copyright = { author:"编程浪子", version:"FrameWork 2.1 测试版", date:"2008-05-01" };
fw.isIE = /msie/i.test(navigator.userAgent);
fw.isFF = /firefox/i.test(navigator.userAgent);
fw.isOP = /opera/i.test(navigator.userAgent);

//基础类
fw.ajax = {};
fw.array = {};
fw.code = {};
fw.conv = {};
fw.date = {};
fw.dom = {};
fw.event = {};
fw.image = {};
fw.json = {};
fw.lang = {};
fw.math = {};
fw.object = {};
fw.string = {};
fw.ui = {};
fw.util = {};
fw.xml = {};

//com组件类
fw.com = {};
fw.com.ui = {};
fw.com.code = {};
fw.com.media = {};
fw.com.util = {};
fw.com.lottery = {};



//IE与FF的兼容代码
if (fw.isIE) {
	//event对象
	fw.event.getEvent = function (){
		var e = window.event;
		if (!e.target){
			e.target = e.srcElement;
		}
		return e;
	}
	//xmlHttp对象
	fw.ajax.xmlHttp = function (){
		var a = ["Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
		for (var i=0,l=a.length;i<l;i++){
			try{
				return new ActiveXObject(a[i]);
			}catch(e){};
		}
		return false;
	}
	//xmlDom对象
	fw.xml.xmlDom = function (){
		var a = ["MSXML2.DOMDocument", "Microsoft.XMLDOM", "MSXML.DOMDocument", "MSXML3.DOMDocument"];
		for (var i=0,l=a.length;i<l;i++){
			try{
				return new ActiveXObject(a[i]);
			}catch(e){};
		}
		return false;
	}
	//字符转换为XML文档
	fw.conv.str2xmlDoc = function (str){
		var xmlDom = fw.xml.xmlDom(); 
		xmlDom.async = false;
		xmlDom.loadXML(str);
		return xmlDom.documentElement;
	}
	fw.dom.getAll = function (v){
		return document.all(v);
	}
	fw.dom.getOuterHTML = function (obj){
		return obj.outerHTML;
	}
	fw.dom.setOuterHTML = function (obj,html){
		obj.outerHTML = html;
	}
	fw.dom.getInnerText = function (obj){
		return obj.innerText;
	}
	fw.dom.setInnerText = function(obj,text){
		obj.innerText = text;
	}
	fw.dom.addEvent = function(obj,evt,handle){
		obj.attachEvent("on"+evt,handle);
	}
	fw.dom.fireEvent = function (obj,evt){
		obj.fireEvent("on"+evt);
	}
	fw.dom.setOpacity = function(obj,num){
		obj.style.filter += "alpha(opacity="+(num*100)+")";
	}
	fw.xml.getXml = function(node){
		return node.xml;
	}
	fw.xml.getText = function (node){
		return node.text;
	}
	fw.xml.selectSingleNode = function (node,xPath){
		return node.selectSingleNode(xPath);
	}
	fw.xml.selectNodes = function (node,sExpr){
		return node.selectNodes(sExpr);
	}
	fw.event.capture = {
		start : function (obj){
			obj.setCapture();
		},
		end : function (obj){
			obj.releaseCapture();
		}
	}
}else{
	fw.event.getEvent = function (){
		var e,f=arguments.callee;
		while (f=f.caller) {
			if ((e=f.arguments[0])&&/Event/.test(e.constructor.toString())) {
				return e;
			}
		}
	}
	fw.ajax.xmlHttp = function (){
		return new XMLHttpRequest();	
	}
	fw.xml.xmlDom = function (){
		return document.implementation.createDocument("","doc",null);
	}
	fw.conv.str2xmlDoc = function (str){
		return new DOMParser().parseFromString(str,"application/xml").documentElement;
	}
	fw.dom.getAll = function (v){
		return typeof(v)=="string" ? (fw.getId(v)?fw.getId(v):(fw.getName(v)?fw.getName(v)[0]:false)) : v;
	}
	fw.dom.getOuterHTML = function (obj){
		return document.createElement("div").appendChild(obj.cloneNode(true)).parentNode.innerHTML;	
	}
	fw.dom.setOuterHTML = function (obj,html){
		var tmpObj = document.createElement("div");
		tmpObj.innerHTML = html;
		obj.parentNode.replaceChild(tmpObj,obj);
	}
	fw.dom.getInnerText = function (obj){
		return obj.textContent;
	}
	fw.dom.setInnerText = function(obj,text){
		obj.textContent = text;	
	}
	fw.dom.addEvent = function(obj,evt,handle){
		obj.addEventListener(evt,handle,false);
	}
	fw.dom.fireEvent = function (obj,evt){
		var e = document.createEvent('MouseEvent');
		e.initEvent(evt,false,false);
		obj.dispatchEvent(e);
	}
	fw.dom.setOpacity = function(obj,num){
		obj.style.opacity = num;
	}
	fw.xml.getXml = function(node){
		return new XMLSerializer().serializeToString(node);
	}
	fw.xml.getText = function(node){
		return node.textContent;
	}
	fw.xml.selectSingleNode = function (node,xPath){
		var r = node.nodeType == 9;
		var doc = r ? node : node.ownerDocument;
		var nsRes = doc.createNSResolver(r ? node.documentElement : node);
		var xpRes = doc.evaluate(xPath, node, nsRes, 9, null);
		return xpRes.singleNodeValue;
	}
	fw.xml.selectNodes = function (node,sExpr){
		var r = node.nodeType == 9;
		var doc = r ? node : node.ownerDocument;
		var nsRes = doc.createNSResolver(r ? node.documentElement : node);
		var xpRes = doc.evaluate(sExpr, node, nsRes, 5, null);
		var res = [];
		var item;
		while (item = xpRes.iterateNext())	{
			res[res.length] = item;
		}
		return res;
	}
	fw.event.capture = {
		start : function(obj){
			window.captureEvents(Event.MouseMove|Event.MouseUp);
		},
		end : function(obj){
			window.releaseEvents(Event.MouseMove|Event.MouseUp);
		}
	}
}


//载入文件
fw.ajax.callFile = function (url,callBack){
	var xmlHTTP = fw.ajax.xmlHttp();
	var async = !!callBack;
	xmlHTTP.open ("get",url,async);
	if (fw.isFF){
		xmlHTTP.overrideMimeType("text/html;charset=utf-8");
	}
	if (async){
		xmlHTTP.onreadystatechange = fw.ajax.state(xmlHTTP,callBack);
		xmlHTTP.send(null);
	}else{
		xmlHTTP.send(null);
		return fw.ajax.result(xmlHTTP);
	}
}

//载入文件2
fw.ajax.callFile2 = function (url,callBack){
	var xmlHTTP = fw.ajax.xmlHttp();
	var async = !!callBack;
	xmlHTTP.open ("get",url,async);
	if (fw.isFF){
		xmlHTTP.overrideMimeType("text/html;charset=utf-8");
	}
	if (async){
		try {		
			xmlHTTP.onreadystatechange = fw.ajax.state(xmlHTTP,callBack);
			xmlHTTP.send(null);
		}catch(e){
			callBack(false);
		}
	}else{
		try {
			xmlHTTP.send(null);
			return fw.ajax.result(xmlHTTP);
		}catch(e){
			return false;
		}
	}
}

//执行远程JS
fw.ajax.callJs = function (url,callBack){
	var id = "RemoteJsId";
	var dom = fw.getId(id) || fw.create(fw.head,"script",{id:id,type:"text/javascript"});
	dom.src = url;
	callBack = callBack || new Function();
	if(fw.isIE){
		dom.onreadystatechange = function(){
			if (/loaded|complete/i.test(this.readyState)){
				callBack();
			}
		};
	}else{
		dom.onload = callBack;
	}
}

//获取远程文件
fw.ajax.callRemoteFile = function (url,callBack){
	return fw.ajax.callFile(fw.actFile+"?url="+escape(url),callBack);
}

//AJAX类,默认post异步
fw.ajax.request = function (form){
	this.method = "post";
	this.async = true;	
	this.url = "";
	this.arg = "";
	this.callBack = function(){};
	this.addArg = function (a,v){
		v = /\.asp$/.test(this.url) ? escape(v) : v;
		this.arg += (this.arg!=""?"&":"")+a+"="+v;
	}
	if (form){
		for(i=0;i<form.elements.length;i++) {
			if(form.elements[i].name!="") {
				this.addArg(form.elements[i].name, form.elements[i].value);
			}
      	}
	}
	this.run = function(){
		var xmlHTTP = fw.ajax.xmlHttp();
		if (!xmlHTTP) {
			return this.IframePost();
		}		
		this.method = this.method.toLowerCase();	
		xmlHTTP.open (this.method, this.url, this.async);
		var isPost = this.method=="post";
		if (isPost)	{
			if (fw.isFF){
				xmlHTTP.setRequestHeader("Content-Length",this.arg.length);
			}
			xmlHTTP.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		}
		if (fw.isFF){
			xmlHTTP.overrideMimeType("text/html;charset=utf-8");
		}
		xmlHTTP.onreadystatechange = fw.ajax.state(xmlHTTP,this.callBack);
		xmlHTTP.send(isPost?this.arg:null);
	}
	
	this.IframePost = function (){
		var objIframe = fw.create(document.body,"iframe",{src:this.url,style:{display:"none"}});
		//fw.addEvent(objIframe,"readystatechange",function(){});		
		fw.dom.addEvent(objIframe,"load",function(){
			this.callBack(objIframe.contentWindow.document.body.innerHTML);
			objIframe.removeNode();
		});
	}
}

//返回结果时
fw.ajax.result = function(xmlHTTP){
	var result = false; 
	if (xmlHTTP.status==0||xmlHTTP.status==200){ 
		result = fw.isIE ? fw.lang.bin2ascii(xmlHTTP.responseBody) : xmlHTTP.responseText;
	}
	return result;
}

//状态改变时
fw.ajax.state = function (xmlHTTP,callBack){
	return function(){
		if (xmlHTTP.readyState==4){
			callBack(fw.ajax.result(xmlHTTP));
		}
	}
}

//克隆数组（包括arguments转换）
fw.array.clone = function (arr_old){
	var arr_new = [];
	fw.array.each(arr_old,function(val){
		arr_new.push(val);
	});
	return arr_new;
}

//历遍数组get
fw.array.getEach = fw.array.each = function(arr,callBack){
	for (var i=0,l=arr.length;i<l;i++){
		callBack(arr[i]);
	}
}

//历遍数组set
fw.array.setEach = function(arr,callBack){
	for (var i=0,l=arr.length;i<l;i++){
		arr[i] = callBack(arr[i]);
	}
	return arr;
}

//历遍2维数组
fw.array.getEach2 = function(arr,callBack){
	for (var r=0,rows=arr.length;r<rows;r++){
		for(var c=0,cols=arr[r].length;c<cols;c++){
			callBack(arr[r][c]);
		}
	}
}

//获取指定范围的随机数
fw.array.random = function(arr,num){
	var arr_tmp = fw.array.clone(arr);
	var count = arr.length;
	var ret = [];
	fw.math.each(num,function(){
		ret.push(arr_tmp.splice(fw.math.random(0,--count),1));
	});
	return ret;
}

//获取某属性值的索引号
fw.array.getIdx = function(a,p,exp){
	var isMatch = function(v){ return typeof(exp)=="string"?v==exp:exp.test(v) };
	for (var i=0,l=a.length;i<l;i++) if(isMatch(a[i][p])) return i;
	return false;
}

//取最大值
fw.array.max = function (a){
	return Math.max.apply(null,a);
}
//取最小值
fw.array.min = function (a){
	return Math.min.apply(null,a);
}

//插入数组
fw.array.insert = function (a,arr,idx){
	a.splice.apply(a,[idx,0].concat(arr));
}

//判断数组数据是否重复
fw.array.repeat = function (a){
	var b = {};
	for (var i=0,l=a.length;i<l;i++){
		if (b[a[i]]){
			return true;
		}else{
			b[a[i]] = true;
		}
	}
	return false;	
}

//删除其中一项
fw.array.remove = function (arr,idx){
	var v = arr[idx];
	arr.splice(idx,1);
	return v;
}

//数字排序
fw.array.sortNumber = function (arr){
	arr.sort(function(a,b){return a-b});
	return arr;
}

//选择其中几项
fw.array.select = function (){
	var old = arguments[0];
	var a = [];
	for (var i=1,l=arguments.length;i<l;i++) {
		a[i-1] = old[arguments[i]];
	}
	return a;
}

//元素交换
fw.array.swap = function(arr,i,j){
	var temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}

//字符转换为数字
fw.array.str2num = function (arr_string){
	var arr_number;
	fw.array.each(arr_string,function(val){
		arr_number.push( Number(val) );
	});
	return arr_number;
}

//取补集
fw.array.supplement = function (glob,child){
	var hash = {};
	for (var i=0,l=child.length;i<l;i++){
		hash[child[i]] = true;
	}
	var newArr = [];
	for (var i=0,l=glob.length;i<l;i++){
		if (!hash[glob[i]]) {
			newArr.push(glob[i]);
		}
	}
	return newArr;
}

//返回一个不重复的数组
fw.array.uniquity = function(a){
	for (var o={},r=[],i=0,l=a.length;i<l;i++){
		if (!o[a[i]]){
			r.push(a[i]);
			o[a[i]] = true;
		}
	}
	return r;
}

//显示表单所有的值
fw.code.alertForm = function (Form){
	var a = [];
	var ele = Form.elements;
	for(var i=0;i<ele.length;i++){
		if (ele[i].name) a[a.length] = ele[i].name + " = " + ele[i].value;
	}
	alert(a.join("\n"));
}

//弹出对象的各个属性
fw.code.alertObj = function (obj){
	var a = [];
	for (var i in obj)	{
		a.push(i+" = "+obj[i]);
	}
	alert(a.join("\n"));
}

//获取函数的注释文本
fw.code.getFunText = function (f){
	if (fw.isFF){
		return false;
	}
	return fw.trim(f.toString().replace(/^function\s*\w*\s*\(\)\{\/\*([\s\S]*)\*\/\}$/,"$1"));
}

//运行代码
fw.code.run = function (html){
	var doc = window.open('','_blank').document;
	doc.write(html);
	doc.close();
}

//保存代码
fw.code.save = function (str,fileName){
	if (fw.isFF){
		return false;
	}
	var o = fw.create(document.body,"iframe");
	var d = o.contentWindow.document;
	d.charset = "gb2312";
	d.write(str);
	d.execCommand("saveAs",false,fileName);
	d = null;
	o.removeNode(true);
	o = null;
	return true;
}

//获取中文日期格式
fw.conv.d2cd = function (){
	return new Date().toLocaleDateString()+" 星期"+"日一二三四五六".charAt( new Date().getDay() ); 
}

//字节数格式化
fw.conv.formatByte = function (num){
    return num<1<<10 ? num+" B" : (num<1<<20 ? (num/(1<<10)).toFixed(2)+" KB" : (num/(1<<20)).toFixed(2)+" MB");
}

//位数不满自动补零
fw.conv.formatNo = function (m,n){
	var len = String(m).length;
	return len<n ? new Array(n-len+1).join("0")+m : m;
}

//数字格式化
fw.conv.formatNum = function (m,n){
	m = Number(m);
	var s = m.toLocaleString();
    return isNaN(n) ? s : ( n==0 ? m.toFixed(0) : s.split(".")[0]+"."+m.toFixed(n).split(".")[1] );	
}

//数字格式化
fw.conv.formatRMB = function (m,n){
	m = Number(m)
	m = m.toLocaleString().split(".")[0]+(n==0?"":"." + m.toFixed(n||2).split(".")[1]);
    return "￥" + m.replace(/^\./, '0.');
}

//毫秒转换为秒
fw.conv.ms2s = function (num){
	return (num/60000+":"+num/1000%60).replace(/\.\d+/g,"").replace(/(^|:)(\d)(?!\d)/g,"$10$2");
}

//数字转化为繁体中文
fw.conv.num2big = function (i){
	return "零壹贰叁肆伍陆柒捌玖拾".split("")[i];
}

//阿拉伯数字转化为中文数字
fw.conv.num2gb = function (i){
	return "零一二三四五六七八九".split("")[i];
}

//人民币反格式化
fw.conv.rmb2number = function(rmb){
	return Number(rmb.replace(/[^\d\.]+/g,""));
}

//秒转换为毫秒
fw.conv.s2ms = function (str){
	var t = str.split(":");
	return t[0] * 60000 + t[1] * 1000;
}

// @name :未知变量转换成数字
// @parameters: s 字符串, d 返回值, x保留几位小数
fw.conv.toNum = fw.toNum = function (s, d, x){
	return parseFloat((s=parseFloat(s),isNaN(s))?(d||0):s.toFixed((x||0)));
}

//把XML所有子节点的值转换为Json的形式
fw.conv.xml2json = function (pNode,blm){
	var nodes = fw.childNodes(pNode);
	var Result = {};
	for (var i=0;i<nodes.length;i++){
		var node = nodes[i];
		name = node.nodeName;
		if ( fw.childNodes(node) ){
			value = node;
		}else{
			value = fw.trim( fw.xml.getText(node) );
			if (!blm){
				if (/^\d+$/.test(value)){
					value = Number(value);
				}else if(/^true$/i.test(value)){
					value = true;
				}else if(/^false$/i.test(value)){
					value = false;
				}
			}
		}
		Result[name] = value;
	}
	return Result;
}

//格式化时间
fw.date.format = function(dateStr){
	return new Date(dateStr.replace(/[\-\u4e00-\u9fa5]/g, "/"));
}

//获取节点集合
fw.dom.childNodes = function (node){
	var oo = node.childNodes;
	var tmp = [];
	for (var i=0,l=oo.length;i<l;i++){
		if (oo[i].nodeType==1){
			tmp.push(oo[i]);
		}
	}
	tmp.firstChild = tmp[0];
	return tmp.length>0 ? tmp : false;
}

//创建Dom对象
fw.dom.create = function(parentObj,tag,args){
	var obj = document.createElement(tag);
	if (args){
		for (var item in args){
			if (item=="style") {
				fw.dom.setStyle(obj,args[item]);
			}else if (item=="range"){
				obj.style.position = "absolute";
				fw.dom.setRange(obj,args[item]);
			}else if (item=="html"){
				obj.innerHTML = args.html;
			}else if (item=="className"){
				obj.className = args[item];	
			}else{
				obj.setAttribute(item,args[item]);
			}
		}
	}
	parentObj.appendChild(obj);
	return obj;
}

//创建CSS
fw.dom.createCSS = function(css){
	return fw.create(fw.head,"link",{type:"text/css",rel:"stylesheet",href:css});
}

//创建JS
fw.dom.createJS = function(js){
	return fw.create(fw.head,"script",{type:"text/javascript",src:js});
}

//返回ID对象,参数为id或object
fw.dom.get = function (v){
	return typeof(v)=="string" ? fw.getId(v) : v;
}

//获取属性集合
fw.dom.getAttribute = function (attName,attValue){
	return fw.dom.getObjAttribute(document.body,attName,attValue);
}

//获取class
fw.dom.getClass = function (name){
	fw.dom.getObjClass(document.body,name);
}

//返回页面上所有的ID对象
fw.dom.getDocumentId = function (){
	for (var oo={},a=fw.getTag("*"),l=a.length,i=0;i<l;i++){
		var o = a[i];
		if (o.id){
			oo[o.id] = o;
		}
	}
	return oo;	
}

//获取表单所有的值
fw.dom.getForm = function (form) {
    var o = {};
    for (i = 0; i < form.elements.length; i++) {
        if (form.elements[i].name != "") {
            o[form.elements[i].name] = form.elements[i].value;
        }
    }
    return o;
}

//getHeight
fw.dom.getHeight = function(o){
	return parseInt(o.style.height) || 0;
}

//document.getElementById的简写
fw.dom.getId = function (id){
	return document.getElementById(id);
}

//返回整个页面的所有图片
fw.dom.getImg = function (){
	return document.images;
}

//getLeft
fw.dom.getLeft = function(o){
	return parseInt(o.style.left) || 0;
}

//document.getElementsByName的简写
fw.dom.getName = function (name){
	return document.getElementsByName(name);
}

//获取属性集合
fw.dom.getObjAttribute = function (obj,attName,attValue){
	var isMatch = function(attValue){
		return typeof(attValue)=="string"?attName==attValue:attValue.test(attName);
	};
	var o = fw.getObjTag(obj,"*");
	var a = [];	
	for (var i=0,l=o.length;i<l;i++){
		if (isMatch(o[i].getAttribute(attName))) a.push(o[i]);
	}
	return a;
}

//获取objclass
fw.dom.getObjClass = function (obj, name){
	return fw.dom.getAttribue(obj, "className", name);
}

//返回某节点下的所有图片
fw.dom.getObjImg = function (obj){
	return fw.get(obj).getElementsByTagName("img");
}

//获取节点下的tag
fw.dom.getObjTag = function (obj,tagName){
	return fw.get(obj).getElementsByTagName(tagName);
}

//获取不同DTD的主体
fw.dom.getOwner = function (){
	return document.compatMode&&document.compatMode!="BackCompat" ? document.documentElement : document.body;
}

//获取窗口尺寸
fw.dom.getOwnerSize = function (){
	var d = fw.dom.getOwner();
	return { width : d.clientWidth, height : d.clientHeight };
}

//getRange
fw.dom.getRange = function(o){
	return { x:fw.dom.getLeft(o), y:fw.dom.getTop(o), w:fw.dom.getWidth(o), h:fw.dom.getHeight(o) };
}

//getSize
fw.dom.getSize = function(o){
	return { w:fw.dom.getWidth(o), h:fw.dom.getHeight(o) };
}

//获取tag
fw.dom.getTag = function (tagName){
	return document.getElementsByTagName(tagName);
}

//返回array对象集合,参数为id或object
fw.dom.getToArray = function (){
	for (var a=[],l=arguments.length,i=0;i<l;i++){
		a[i] = fw.get(arguments[i]);
	}
	return a;
}

//返回object对象集合,参数为id
fw.dom.getToObject = function (){
	for (var oo={},l=arguments.length,i=0;i<l;i++){
		oo[arguments[i]] = fw.getId(arguments[i]);
	}
	return oo;
}

//getTop
fw.dom.getTop = function(o){
	return parseInt(o.style.top) || 0;
}

//获取图像绝对尺寸
fw.dom.getUtterSize = function (img){
	var h = /Rotation\s*=\s*[02]/i.test(img.style.filter) ? img.width : img.height;
	var v = /Rotation\s*=\s*[13]/i.test(img.style.filter) ? img.width : img.height;
	return { h:h, v:v };
}

//getWidth
fw.dom.getWidth = function(o){
	return parseInt(o.style.width) || 0;
}

//getXy
fw.dom.getXy = function(o){
	return { x:fw.dom.getLeft(o), y:fw.dom.getTop(o) };
}

//获取节点集合
fw.dom.selectChild = function (){
	var args = fw.array.from(arguments);
	var arr = fw.childNodes(args.shift());
	args.unshift(arr);
	return fw.array.select.apply(null,args);
}

//setHeight
fw.dom.setHeight = function(o,px){
	o.style.height = px + "px";
}

//setLeft
fw.dom.setLeft = function(o,px){
	o.style.left = px + "px";
}

//setRange
fw.dom.setRange = function(o,r){
	fw.dom.setXy(o,r[0],r[1]);	
	fw.dom.setSize(o,r[2],r[3]);
}

//setSize
fw.dom.setSize = function(o,w,h){
	fw.dom.setWidth(o,w);
	fw.dom.setHeight(o,h);
}

//设置样式
fw.dom.setStyle = function(obj,st){
	for (var i in st){
		obj.style[i] = st[i];
	}	
}

//setTop
fw.dom.setTop = function(o,px){
	o.style.top = px + "px";
}

//setWidth
fw.dom.setWidth = function(o,px){
	o.style.width = px + "px";
}

//setXy
fw.dom.setXy = function(o,x,y){
	fw.dom.setLeft(o,x);
	fw.dom.setTop(o,y);
}

//检查图片位置是否超出指定的范围
fw.image.chkRange = function (img,Range){
	var x1 = Range.x1;
	var x2 = Range.x2;
	var y1 = Range.y1;
	var y2 = Range.y2;
	//var r  = img.filters["DXImageTransform.Microsoft.BasicImage"].Rotation % 2;
	var r  = 0//img.filters[0].Rotation % 2;
	var w  = r ? y2-y1 : x2 - x1;
	var h  = r ? x2-x1 : y2 - y1;
	
	if (img.width>w){
		img.height = Math.round(w/img.width*img.height);
		img.width = w;
	}
	if (img.height>h){
		img.width  = Math.round(h/img.height*img.width);
		img.height = h;
	}

	var size = fw.dom.getUtterSize(img);
	
	if (fw.dom.getLeft(img)<x1)	{
		fw.dom.setLeft(img,x1);
	}else if(fw.dom.getLeft(img)>x2-size.h){
		fw.dom.setLeft(img,x2-size.h);
	}
	
	if (fw.dom.getTop(img)<y1){
		fw.dom.setTop(img,y1);
	}else if (fw.dom.getTop(img)>y2-size.v){
		fw.dom.setTop(img,y2-size.v);
	}
}

//预载图片回调函数
fw.image.callImage = function (url,callBack){
	callBack = callBack || new Function();
	url = url.split(",");
	for (var i=0,l=url.length;i<l;i++){
		var o = new Image();
		o.onload = function(){
			callBack(o);
			o.onload = null;
		}
		o.onerror = function(){
			callBack(false);
		}
		o.src = url[i];
	}
}

//获取比例宽高
fw.image.getScale = function (w1,h1,w2,h2){
	if (w1>w2){
		h1 = Math.round(w2/w1*h1);
		w1 = w2;
	}
	if (h1>h2){
		w1 = Math.round(h2/h1*w1);
		h1 = h2;
	}
	return {w:w1,h:h1};
}

//图片预加载类
fw.image.preLoad = function (){
	var me = this;
	var a = [];		//图片数组
	this.idx = 0;	//已经被加载的图片个数
	this.num = 0;	//图片总数

	//下载图片
	this.loadImages = function(s){
		a = s.split(",");
		this.num = a.length;
		downImg();
	}

	function downImg() {
		var img = new Image();
		var isLoad = false;
		img.onload = function(){
			if (!isLoad){
				isLoad = true;
				me.Idx++;
				if (me.loadIng){
					me.loadIng();
				}
				if (me.idx<me.num){
					downImg();
				}else if (me.callBack){
					me.callBack(a);
				}
			}
		}
		img.src = a[me.idx];
	}
}

//按照一定的比例显示图片
fw.image.showScale = function (img,w,h){
	if (img.width>w){
		img.height = Math.round(w/img.width*img.height);
		img.width = w;
	}
	if (img.height>h){
		img.width = Math.round(h/img.height*img.width);
		img.height = h;
	}
}

//按照一定的比例缩放图片
fw.image.zoomScale = function (img,w,h){
	img.height = Math.round(w/img.width*img.height);
	img.width = w;
	if (img.height>h){
		img.width = Math.round(h/img.height*img.width);
		img.height = h;
	}
}

//转义字符替换函数
fw.json._replaceFunc = function(character) {
	var a = {
    	'\b': '\\b',
    	'\t': '\\t',
    	'\n': '\\n',
    	'\f': '\\f',
    	'\r': '\\r',
    	'"' : '\\"',
		'\\': '\\\\'
	};
	if (a[character]) {
		return a[character];
	}
	var n = character.charCodeAt();
	return '\\u00' + Math.floor(n/16).toString(16) + (n%16).toString(16);
}

//数组转换为JSON字符串
fw.json.array2string = function (arr) {
	var a = [];
	for (var i=0,l=arr.length; i<l; i++) {
		a[i] = fw.json.tostring(arr[i]);
	}
	return "["+a.join(",")+"]";
}

//布尔值转换为JSON字符串
fw.json.boolean2string = function (bln) {
	return String(bln);
}

//日期转换为JSON字符串
fw.json.date2string = function (dt) {
	return fw.date.format(dt, '"yyyy-mm-dd hh:mm:ss"');
}

//数字转换为JSON字符串
fw.json.number2string = function (num) {
	return isFinite(num) ? String(num) : "null";
}

//JS对象转换为JSON字符串
fw.json.object2string = function (obj) {
	var a = [];
	for (var k in obj) {
		if (obj.hasOwnProperty(k)) {
			//a.push( fw.json.tostring(k) + ":" + fw.json.tostring(obj[k]) );
			a.push( k + ":" + fw.json.tostring(obj[k]) );
		}	
	}
	return "{" + a.join(",") + "}";
}

//解析JSON对象
fw.json.parse = function(jsonString) {
	var result = false;
	try {
		result = eval('(' + jsonString + ')');
	}catch (e) {};
	return result;
}

//字符对象转换为JSON字符串
fw.json.tostring2string = function (str) {
    if (/["\\\x00-\x1f]/.test(str)) {
		str = str.replace(/[\x00-\x1f\\"]/g, fw.json._replaceFunc);
    }
    return '"' + str + '"';
}

//转换为JSON字符串
fw.json.tostring = function (variant) {
	switch (typeof variant) {
		case 'object':	
			if (variant) {
				if (typeof variant.string === 'function'){
					return (variant.string());
				}
				var clz = variant.constructor;
				if (clz == Array){
					return fw.json.array2string(variant);
				}else if (clz == Date){
					return fw.json.date2string(variant);
				}else if (clz == Object){
					return fw.json.object2string(variant);
				}
			} else {
				return 'null';
			}
		case 'string':
			return fw.json.tostring2string(variant);
		case 'number':
			return fw.json.number2string(variant);
		case 'boolean':
			return fw.json.boolean2string(variant);
		case "function":
			return variant.toString();
	}
}

//二进制转为ASCII码
fw.lang.bin2ascii = function (bstr){
	if (fw.isFF){
		return false;	
	}	
	var rec = new ActiveXObject("ADODB.RecordSet");
	var s = false;
	if (rec){
		rec.Fields.Append("DDD",201,1); 
		rec.open(); 
		rec.addNew(); 
		rec(0).appendChunk(bstr); 
		rec.update(); 
		var s = rec(0).value;
		rec.close(); 
		rec = null;	
	}else{
		var vbs = fw.code.getFunText(function(){/*
		For i = 1 To LenB(bstr)
			ThisCharCode = AscB(MidB(bstr,i,1))
			If ThisCharCode < &H80 Then
				s = s & Chr(ThisCharCode)
			Else
				NextCharCode = AscB(MidB(bstr,i+1,1))
				s = s & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
				i = i + 1
			End If
		Next
		*/});
		s = window.execScript(vbs,"vbscript");
	}
	return s;	
}

//绑定
fw.lang.bind = function() {
	var args = fw.array.clone(arguments);
	var obj = args.shift();
	var method = args.shift();
	//method.prototype;
	// assert method != null;
	if (typeof method != "function"){
		throw "Invalid method: " + method;
	}
	return function() {
		var iargs = [];
		for (var i = 0; i < arguments.length; i++){
			iargs.push(arguments[i]);
		}
		return method.apply(obj, args.concat(iargs));
	}
}

//冒泡排序
fw.math.bubbleSort = function(arr){
	for (var i=arr.length-1;i>0;i--){
		for (var j=0;j<i;j++){
			if (arr[j]>arr[j+1]){
				fw.array.swap(arr,j,j+1);
			}
		}
	}
}

//循环
fw.math.each = function(len,callBack){
	for (var i=0;i<len;i++){
		callBack(i);
	}
}

//2D循环
fw.math.each2 = function(rows,cols,callBack){
	for (var r=0;r<rows;r++){
		for(var c=0;c<cols;c++){
			callBack(r,c);
		}
	}	
}

//计算阶乘
fw.math.factorial = function (n){
	return n<1 ? 1 : n*arguments.callee(n-1);
}

//大数相乘
fw.math.factorialLarge = function (n){
	var a = [1];
	for (var i=1;i<=n;++i){
		for (var j=0,c=0;j<a.length||c!=0;++j){
			var m = j<a.length ? (i*a[j]+ c) : c;
			a[j] = m % 10;
			c = (m-a[j]) / 10;
		}
	}
	return a.reverse().join("");
}

//获取指定范围的随机数
fw.math.random = function (startNum,endNum){
	return Math.floor(Math.random()*(endNum+1-startNum)) + startNum;
}

//获取指定范围的随机数
fw.math.randomNums = function (startNum,endNum,count,repeat){
	var ret = [];
	if (repeat){
		for (var i=0;i<count;i++){
			ret[i] = fw.math.random(startNum,endNum);
		}
	}else{
		var tmp = [];
		var i = 0;
		for (var s=startNum;s<=endNum;s++){
			tmp[i++] = s;
		}
		var l = tmp.length;
		for (i=0;i<count;i++){
			ret[i] = fw.array.remove(tmp,fw.math.random(0,--l));
		}
	}
	return ret;
}

fw.math.combine = {};

//组合类
fw.math.combine.Combine = function (arr,num){
	this.arr = arr;
	this.num = num
}

//返回组合结果
fw.math.combine.Combine.prototype.getData = function (){
	return fw.math.combine.getData(this.arr,this.num,[]);
}

//返回组合个数
fw.math.combine.Combine.prototype.getCount = function (){
	return fw.math.combine.getCount(this.arr.length,this.num);	
}

//组合算法
fw.math.combine.getData = function (arr,num,tmp){
	if (num==0) {
		return [tmp];
	}
	for(var result=[],idx=0;idx<=arr.length-num;idx++){
		result = result.concat(arguments.callee(arr.slice(idx+1),num-1,tmp.concat(arr[idx])));
	}
	return result;
}

//组合公式
fw.math.combine.getCount = function (N,R){
	return fw.math.permute.getCount(N,R)/fw.math.factorial(R);
}

fw.math.permute = {};

//排列类
fw.math.permute.Permute = function (arr,num){
	this.arr = arr;
	this.num = num
}

//返回排列结果
fw.math.permute.Permute.prototype.getData = function (){
	return fw.math.permute.getData(this.arr,this.num);	
}

//返回排列个数
fw.math.permute.Permute.prototype.getCount = function (){
	return fw.math.permute.getCount(this.arr.length,this.num);	
}

//排列算法
fw.math.permute.getData = function (arr,n){
	var aa = new fw.math.combine.Combine(arr,n).getData();
	var ret = [];
	for (var i=0,l=aa.length;i<l;i++){
		ret = ret.concat(fw.math.permute.each(aa[i]));
	}
	return ret;
}

//全排列算法
fw.math.permute.each = function (a){
	var t = new Array(a.length);
	var ret = [];
	(function(k){
		if(k==a.length){
			ret.push(t.slice());
		}else{
			for(var i=k;i<a.length;i++) {
				t[k]=a[i];
				if(k<i) {
					a[i]=a[k];
					a[k]=t[k];
				}
				arguments.callee(k+1);
				if(k<i) {
					a[k]=a[i];
					a[i]=t[k];
				}			
			}
		}
	})(0);
	return ret;
}

//排列公式
fw.math.permute.getCount = function (N,R){
	return fw.math.factorial(N)/fw.math.factorial(N-R);
}

//克隆对象
fw.object.copy = function (o){
	var r = {};
	for(var i in o){
		r[i] = o[i];
	}
	return r;
}

//深度克隆对象
fw.object.clone = function(o){
	var r;
	if (o.constructor==Object) {
		r = {};
		for(var i in o){
			r[i] = fw.clone(o[i]);			
		}
	}else if (o.constructor==Array){
		r = [];
		for(var i=0;i<o.length;i++){
			r[i] = fw.clone(o[i]);			
		}
	}else{
		return o;	
	}
	return r;
}

//合并对象
fw.object.merge = function (o1, o2) {
    for (var i in o2) {
        o1[i] = o2[i];
    }
    return o1;
}

//获取字符真实长度
fw.string.len = function (s){
	return s.replace(/[^\x00-\xff]/g,"aa").length;
}

//字符串反转
fw.string.reverse = function(s){
    return s.split("").reverse().join("");
}

//删除字符串前后多余的空格
fw.string.trim = function (s,m){
	return s.replace(new RegExp("^[\\s\\u3000]+|[\\s\\u3000]+$",m?"mg":"g"),"");
}

//获取URL参数
fw.string.urlget = function (url,p){
	var o = fw.string.urlparse(url);
	return o[p];
}

//分析URL参数
fw.string.urlparse = function (url){
	var o = {};
	url = url.split("?");
	if (url.length>1){
		var a = url[1].split("&");
		for (var i=0;i<a.length;i++){
			var s = a[i].split("=");
			o[s[0]] = s[1];
		}
		return o;
	}
	return {};
}

//设置URL参数
fw.string.urlset =function (url,p,v){
	var o = fw.string.urlparse(url);
	o[p] = v;
	var a = [];
	for (var i in o){
		a.push(i+"="+o[i]);
	}
	return url.replace(/\?.+$/,"") + "?" + a.join("&");
}

//判断是否为空
fw.empty = function (p)
{
	if (typeof(p) == "undefined" || typeof(p) == "unknown" || p == null) return true;

	if (p.length <= 0) return true;

	return false;
}

//绑定子节点列表事件
fw.ui.addListEvent = function (parent,callBack,e){
	var o = fw.childNodes( fw.get(parent) );
	for(var i=0,l=o.length;i<l;i++) {
		o[i]["on"+(e||"click")] = (function(n){return function(){callBack(n)};})(i);
	}
}

//创建动态文本框
fw.ui.createFileBox = function(obj,filebox){
	if (!filebox) {
		filebox = fw.create(document.body,"span",{html:'<input type="file" />'});
		fw.dom.setOpacity(filebox,0);
	}
	var r = fw.dom.getRange(obj);
	fw.dom.setRange(filebox,[r.x,r.y,r.w,r.h]);
	filebox.scrollLeft = fw.childNodes(filebox)[0].offsetWidth - r.w;
}

//拖动
fw.ui.drag = function (obj){
	obj = fw.get(obj);
	obj.style.position = "absolute";

	var isMoveAble = false;
	var xy;
	obj.onmousedown = function (){
		fw.event.capture.start(obj);
		isMoveAble = true;
		var evt = fw.event.getEvent();
		xy = fw.dom.getXy(obj);
		xy = {
			x : evt.clientX  - xy.x,
			y :	evt.clientY  - xy.y
		}
	}
	obj.onmousemove = function (){
		if (isMoveAble){
			var evt = fw.event.getEvent();
			fw.dom.setXy(obj, evt.clientX-xy.x, evt.clientY-xy.y);
		}
	}
	obj.onmouseup  = function (){
		fw.event.capture.end(obj);
		isMoveAble = false;
	}
}

//Flash生成类
fw.ui.flash = function (u,w,h){
    var html = [];
    this.AddParam = function(name,value){
        html.push('<param name="'+name+'" value="'+value+'">');
    }
    this.AddParam("movie",u);
    this.AddParam("quality","high");
    this.getHTML = function(){
		var id = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
		var cb = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0";
        var html = '<object classid="../../core/ui/'+id+'" width="'+w+'" height="'+h+'" codebase="../../core/ui/'+cb+'">'+html.join('')+'</object>';
		return html;
    }
} 
if (fw.isFF){
fw.ui.flash = function (u,w,h){
    var html = [];
    this.AddParam = function(name,value){
        html.push(' '+name+'="'+value+'"');
    }
    this.AddParam("src",u);
    this.AddParam("quality","high");
    this.getHTML = function(){
        return '<embed type="application/x-shockwave-flash"'+html.join('')+' width="'+w+'" height="'+h+'"></embed>';
    }
}
}

//Iframe高度自适应
fw.ui.iframeAutoFit = function (){
    var a = fw.getTag("iframe");
    for (var i=0;i<a.length;i++){
        try{
            var d = a[i].contentWindow.document;
            var h = Math.min(d.documentElement.scrollHeight,d.body.scrollHeight);
            fw.dom.setHeight(a[i],h);
        }catch(e){};
    }
}

//创建播放器
fw.ui.player = function(url,w,h){
	var html = '<object data="'+url+'" width="'+w+'" height="'+h+'" '+
						'mediawrapchecked="true" type="video/quicktime" loop="true" autoplay="true" align="bottom" border="0">'+
			   '</object>';
	return html;
}

//清空文件选择框并保留事件
fw.ui.resetFile = function (obj){
	var name = obj.name;
	var form = obj.form;
	var ChangeEvent = obj.onchange;
	fw.dom.setOuterHTML(obj,fw.dom.getOuterHTML(obj));
	form[name].onchange = ChangeEvent;
}

//对象定位
fw.ui.setPos = function (o,x,y){
	o = fw.get(o);
	var w = document.body.scrollWidth;
	var h = document.body.scrollHeight;
	var w2 = o.offsetWidth;
	var h2 = o.offsetHeight;
	switch (x){
		case "l": x = 0; break;
		case "r": x = w - w2; break;
		case "c": x = Math.round(w/2-w2/2); break;
	}
	switch (y){
		case "t": y = 0; break;
		case "b": y = h - h2; break;		
		case "m": y = Math.round(h/2-h2/2) + fw.dom.getOwner().scrollTop;
	}
	fw.dom.setXy(o,x,y);
}

//把对象定位在网页正中间
fw.ui.setCenter = function (o,blm){
	o = fw.get(o);
	if (o.style.position!="absolute"){
		o.style.position = "absolute";
	}
	fw.ui.setPos(o,"c","m");
	if (blm){
		var d = fw.dom.getOwner();
		fw.dom.setTop(o,Math.round(d.clientHeight/2-o.offsetHeight/2+d.scrollTop));
	}
}

//上传回调
fw.ui.uploadFile = function (form,callBack){
	window.callBack = callBack;
	var target = "uploadFileWindow";
	var ifr = fw.getName(target);
	if (ifr&&ifr.length>0){
		ifr = ifr[0];
	}else{
		ifr = fw.create(document.body,"iframe",{style:{display:"none"}});	
		ifr.contentWindow.name = target;
	}
	form.target = target;
	return true;
}

//窗口类
fw.ui.window = function(oo){
	var win = fw.create(document.body,"div",{style:{
		position:"absolute",backgroundColor:"#ffffff",display:"none",padding:"10px"
	}});
	fw.dom.setRange(win,[100,100,oo.size[0],oo.size[1]]);
	var sh = new fw.ui.showHide(win);
	this.show = function(){
		sh.stepShow();
	};
	this.hide = function(){
		sh.stepHide();
	};	
	var tmp = fw.create(win,"div");
	fw.create(tmp,"span",{html:oo.title});
	fw.create(tmp,"span",{html:"X"}).onclick = fw.bind(this,this.hide);
	this.panel = fw.create(win,"div");
	this.setHTML = function(html){
		this.panel.innerHTML = html;
	}
}


//最大化窗口
fw.ui.windowMax = function (){
	window.moveTo(0,0);
	window.resizeTo(window.screen.availWidth,window.screen.availHeight);
}

//数字变红
fw.util.chgNumRed = function (v){
	return String(v).replace(/[\d\.]+/g,"$&".fontcolor("#ff0000"));
}

fw.util.chkDate = function (str){
	if (/^(\d{4})\-(\d{1,2})\-(\d{1,2})$/.test(str)){
		var y = Number(RegExp.$1);
		var m = Number(RegExp.$2);
		var d = Number(RegExp.$3);
		var n = m==2?(y%4||!(y%100)&&y%400?28:29):(/4|6|9|11/.test(m)?30:31);
		if (m<=12&&d<=n){
			return true;
		}
	}
	return false;
}

//去掉以空格相隔的字符串中的任何一个关键字
fw.util.clearKeyWord = function (str,w){
	return str.replace(new RegExp("^"+w+"\\s","i"),"").replace(new RegExp("\\s"+w+"(\\s)","i"),"$1").replace(new RegExp("\\s"+w+"$","i"),"");
}

//返回日期差距
fw.util.diffDate = function (d1,d2){
	d1 = typeof(d1)=="string" ? new Date(d1.replace(/\-/g,"/")) : d1;
	d2 = typeof(d2)=="string" ? new Date(d2.replace(/\-/g,"/")) : d2;
	if (d1>d2) d1=[d2,d2=d1][0];

	//相差年数
	this.diffYears = function(){
		return d2.getFullYear() - d1.getFullYear();
	}
	
	//相差天数
	this.diffDays = function(){
		return Math.floor((d2.getTime()-d1.getTime())/86400000);
	}

	//相差详细时间
	this.diffTime = function(){
		var o = this.diffData();
		return o.year+"年"+o.month+"个月"+o.day+"天"+o.hour+"小时"+o.minute+"分"+o.second+"秒";
	}

	//相差的数据
	this.diffData = function(){
		var years = 0;
		var y = d1.getFullYear();
		while(d1<=d2){
			d1.setFullYear(++years+y);
		}
		d1.setFullYear(--years+y);
		var months = 0;
		var m = d1.getMonth();
		while(d1<=d2){
			d1.setFullYear(years+y,++months+m);
		}
		d1.setFullYear(years+y,--months+m);
		
		var t = d2.getTime() - d1.getTime();
		var d = Math.floor(t/86400000);
		t -= 86400000 * d;
		var h = Math.floor(t/3600000);
		t -= 3600000 * h;
		var m = Math.floor(t/60000);
		t -= 60000 * m;
		var s = Math.floor(t/1000);
		return { year:years, month:months, day:d, hour:h, minute:m, second:s};
	}
}

//返回某年某月的天数
fw.util.getDays = function (y,m){
	return m==2?(y%4||!(y%100)&&y%400?28:29):(/4|6|9|11/.test(m)?30:31);
}

//定时
fw.util.timer = function (){
	var t = 0;
	this.reset = function(){
		t = new Date();
	}
	this.getTime = function(){
		return new Date() - t;
	}
	this.reset();
}

//获取远程XML
fw.xml.callRemoteXml = function (url,callBack){
	return fw.callXml(fw.actFile+"?url="+url,callBack);
}

//载入XML文件
fw.xml.callXml = function (url,callBack,isDom){
	var xmlDom = fw.xml.xmlDom();
	xmlDom.async = !!callBack;
	if (xmlDom.async){
		if (fw.isIE){
			xmlDom.onreadystatechange = function(){
				if (xmlDom.readyState==4){
					callBack(isDom?xmlDom:xmlDom.documentElement);
				}
			}
		}else{
			xmlDom.onload = function(){
				callBack(isDom?xmlDom:xmlDom.documentElement);
			}
		}
		xmlDom.load(url);
	}else{
		xmlDom.load(url);
		return isDom?xmlDom:xmlDom.documentElement;
	}
}

//childNodes
fw.xml.childNodes = fw.dom.childNodes;

//简写
fw.bind = fw.lang.bind;
fw.callFile = fw.ajax.callFile;
fw.callImage = fw.image.callImage;
fw.callXml = fw.xml.callXml;
fw.childNodes  = fw.dom.childNodes;
fw.create = fw.dom.create;
fw.get = fw.dom.get;
fw.getId = fw.dom.getId;
fw.trim = fw.string.trim;

//常用正则表达式
fw.re = {
	gb : /[\u4e00-\u9fa5]+/,							//中文
	number : /\-?\d+(?:\.\d+)?/,						//数字
	uid : /[a-z_]\w*/i,									//账号，只能输入字母、数字、下划线，且必须以字母或下划线开头
	name : /[\u4e00-\u9fa5\w\-]+/,						//中文名，只能输入中文、字母、数字、下划线、横框
	post : /\d{6}/,										//邮件编码
	mobile : /1(?:3\d|5\d)-?\d{8}/,						//手机号码
	phone : /\d{3,4}-?\d{7,8}/,							//固话小灵通号码
	email : /[\w\-]+@[\w\-]+\.(?:com|cn|org|net|cc|tv|info|com\.cn|net\.cn|org\.cn|gov\.cn)/i,			//email地址
	url : /http:\/\/.+\.(?:com|cn|org|net|cc|tv|info|com\.cn|net\.cn|org\.cn|gov\.cn)[\/\.\w]*/ig		//网址
}
fw.re.tel = new RegExp(fw.re.mobile.source + "|" + fw.re.phone.source);		//电话号码
for (var i in fw.object.copy(fw.re)){
	fw.re["_"+i+"_"] = new RegExp("^"+fw.re[i].source+"$");
	var ext = i.slice(0,1).toUpperCase()+i.slice(1);
	eval("fw.re.is"+ext+" = function (str) {return fw.re._"+i+"_.test(str);}");
}


/*---------------加载机制部分-----------------*/

//检查加载状态
fw.chkLoadState = function(){
	var allReady = true;
	for (var i in fw.file.obj){
		if (!(/complete|loaded/.test(fw.file.obj[i].readyState))){
			allReady = false;
			break;
		}
	}
	if (allReady){
		fw.callBack();
	}else{
		window.setTimeout(arguments.callee,50);
	}
}
//加载com或human模块
fw.load = function (module){
	fw.loadJs(fw.path + module.replace(/fw\.(\w+)\./,"$1/") +  ".js");
}
//加载CSS文件
fw.loadCSS = function (file){
	if (!fw.file.item[file]){
		fw.file.obj[file] = fw.dom.createCSS(file);
		fw.file.item[file] = true;
	}
}
//加载JS文件
fw.loadJs = function (file){	
	if (!fw.file.item[file]){
		fw.file.obj[file] = fw.dom.createJS(file);
		fw.file.item[file] = true;
	}
}
//onready事件
fw.onReady = function (callBack){
	if(fw.isIE){
		document.attachEvent("onreadystatechange",function(){
			if (document.readyState=="loaded"||document.readyState=="complete") {
				fw.callBack = callBack;
				fw.chkLoadState();
			}
		});
	}else{
		window.addEventListener("load",callBack,false);
	}
}
fw.file = {};
fw.file.item = {};
fw.file.obj = {}
fw.head = fw.dom.getTag("head")[0];
fw.tmp = fw.dom.getTag("script")[fw.dom.getTag("script").length-1];
fw.path = fw.tmp.src.match(/(.*)boot\.js/)[1];
if (fw.isIE && !(/^((?:http:\/)?\/.*)boot\.js/i.test(fw.tmp.src))){
	fw.path = document.URL.replace(/[^\/\\]+$/,"") + fw.path;
	while(/([\/\\]\w+[\/\\]\.\.)/.test(fw.path)){
		fw.path = fw.path.replace(RegExp.$1,"");
	}
}
fw.actFile = fw.path + "com/images/remote.asp";
fw.img = function(img){
	return fw.path + "com/images/"+img;	
}
if (/loaded=([^&]+)/i.test(fw.tmp.src)){
	fw.load(RegExp.$1);
}
if (fw.tmp.innerHTML!="") {
	fw.tmp.innerHTML.replace(/import\s+([^;\s]+)/ig,function(str,md){
		fw.load(md);								   
	});
	fw.tmp.innerHTML.replace(/importJs\s+([^;\s]+)/ig,function(str,md){
		fw.loadJs(md);								   
	});
	fw.tmp.innerHTML.replace(/importCss\s+([^;\s]+)/ig,function(str,md){
		fw.loadCss(md);								   
	});	
}
fw.tmp = null;


//fw 新加函数
fw.getStyle = fw.dom.getStyle = function(o, s){
	o = fw.get(o);
	if(o.currentStyle){
		return o.currentStyle[s];
	}else{
		return document.defaultView.getComputedStyle(o, null)[s];
	}
}
fw.getPos = function(o){
	var left = 0, top = 0, bLeft = 0, bTop = 0;
	while(o){
		bLeft = parseInt(this.getStyle(o, 'borderLeftWidth'));
		bTop = parseInt(this.getStyle(o, 'borderTopWidth'));
		left += o.offsetLeft + (isNaN(bLeft) ? 0 : bLeft);
		top  += o.offsetTop + (isNaN(bTop) ? 0 : bTop);
		o = o.offsetParent;
	}
	return {x:left,y:top};
}
/*
	fw Cookie操作类,
	方法:
		set	(n,v,t)
		get	(n)
		del	(n)
	参数说明:
		n cookie名称
		v cookie值
		t cookie保存时间(小时)
*/
fw.cookie = {};
fw.cookie.set = function(n, v, t){
    var exp  = new Date();
    exp.setTime(exp.getTime() + (t||24)*60*60*1000);
    document.cookie = n + "="+ escape(v) + ";expires=" + exp.toGMTString();
}
//取cookies函数
fw.cookie.get = function(n){
	var arr = document.cookie.match(new RegExp("(^| )"+ n +"=([^;]*)(;|$)"));
	if(arr != null) return unescape(arr[2]);
	return null;
}
//删除cookie
fw.cookie.del = function(n){
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    if(this.get(n)) document.cookie = n + "="+this.get(n)+";expires="+exp.toGMTString();
}
//TAB切换
function tab(o, s, cb){
	var $ = function(o){return document.getElementById(o)};
	var css = o.split((s||'_'));
	if(css.length!=4)return;
	o = $(o);
	if(o){
		o.id = css[0];
		var item = o.getElementsByTagName(css[1]);
		o['cur'] = item[0];
		for(var i=0;i<item.length;i++){
			if(item[i].className == css[2] || item[i].className == css[3]){
				item[i].callBack = cb||function(){};
				item[i]['css'] = css;
				item[i]['link'] = o;
				item[i]['Index'] = i+1;
				item[i].onclick = function(){
					this['link']['cur'].className = this['css'][3];
					this.className = this['css'][2];
					try{
						$(this['link']['id']+'_'+this['link']['cur']['Index']).style.display = 'none';
						$(this['link']['id']+'_'+this['Index']).style.display = '';
					}catch(e){}
					this['link']['cur'] = this;
					this.callBack.call(this);
				}
			}
		}
	}
}
function chkLogin(callBack){
	var chkLogin = function (result){
		result = fw.json.parse(result)
		if(result){
			callBack(result);
		}else{
			alert("您还没有登录,请登录后再提交！");
			top.frmUserLongin.document.getElementById("u").focus();
		}
	}
	fw.callFile("/pages/trade/main/chkLogin.php?"+fw.math.random(10000,100000), chkLogin);
}
//产生彩种
function $(o){return document.getElementById(o)}
function luck(){
    this.classnames=["q_cy_tab2","q_cy_tab1"];
    this.defaults="luck1";
    this.code = [];
		/*
		type 号码组成格式 [分隔格式,是否有胆]

		分隔格式
		0     代表　,
		1     代表　|

		是否有胆
		0	无胆
		1	有胆
		*/
		this.Vote = {
			plw:{
				name:"排列五",
				id:10001,
				type:[1,0],
				sort:0
			},
			ssq:{
				name:"双色球",
				id:3,
				type:[0,1],
				sort:1
			},
			slxq:{
				name:"36选7",
				id:26,
				type:[0,0],
				sort:1
			},
			sd:{
				name:"福彩3D",
				id:7,
				type:[1,0],
				sort:0
			},
			qlc:{
				name:"七乐彩",
				id:11,
				type:[0,0],
				sort:0
			},
			ejxq:{
				name:"29选7",
				id:20,
				type:[0,0],
				sort:1
			},
			eexw:{
				name:"22选5",
				id:8,
				type:[0,0],
				sort:1
			},
			qxc:{
				name:"七星彩",
				id:4,
				type:[1,0],
				sort:0
			},
			pls:{
				name:"排列三",
				id:5,
				type:[1,0],
				sort:0
			}
		};
		this.curCode = '';
    this.SetTag=function(s){//切换样式
        if(this.defaults==s)return;
        $(this.defaults).className=this.classnames[0];
        $(this.defaults+'w').style.display="none";
        $(s).className=this.classnames[1];
        $(s+'w').style.display="";
        this.defaults=s;	   
    }
		this.buy = $('buy');
		if(this.buy){
			this.buy.style.cursor = 'pointer';
			getExpect(this.Vote[this.buy.getAttribute('type')].id, (this.Vote[this.buy.getAttribute('type')].id==10001?'23':1));
			this.buy.onclick=function(){
				if(homeluck.curCode==''){
					alert('请先获取幸运号码!');
					return;
				}
				if(window.confirm("请确认您的投注信息!\n彩种:"+homeluck.Vote[homeluck.buy.getAttribute('type')].name+"\n期号:"+expect+"期\n总金额:２元\n投注的号码为:"+homeluck.curCode)){
					var xmlhttp = new fw.ajax.request;
					xmlhttp.method = 'GET';
					xmlhttp.url = "/pages/trade/ajax/suc/project_fqsuc_fs.php?buymode=25&lotid="+homeluck.Vote[homeluck.buy.getAttribute('type')].id+"&playid="+(homeluck.Vote[homeluck.buy.getAttribute('type')].id==10001?'23':1)+"&expect="+expect+"&zhushu=1&totalmoney=2&beishu=1&codes="+homeluck.curCode+"&ishm=0&ischase=0&isupload=0&allnum=1&buynum=1&title=代购&content=代购&"+Math.random();
					xmlhttp.callBack = function(s){
						var result = eval('(' + s + ')');
						if(result){
							alert(result.msg);
						}else{
							alert(s+'_');
						}
					}
					xmlhttp.run();
				}
			}
		}
    this.GetCodes=function(){
        if(this.defaults=="luck3"){
            if( $("luck_year").value.replace(/^\s|\s$|[^\d]*/g,'').length<5){
                alert("请填写正确的QQ号码！");
                $("luck_year").focus();
                return;
            }
        }
        if(this.defaults=="luck4"){
            if( $("luck_xming").value.replace(/^\s|\s$/g,'').length<1){
                alert("请填写您的姓名！");
                $("luck_xming").focus();
                return;
            }
        }
        var code;
        if(this.code[this.defaults+this.gettitle(this.defaults)]){
            code = this.code[this.defaults+this.gettitle(this.defaults)];
        }else{
            code = getRndNumber();
            this.code[this.defaults+this.gettitle(this.defaults)] = code;
        }
        var lcode = $("cluckcodes");
        if(lcode){
            lcode.innerHTML= '<li>'+code.join('</li><li>')+'</li>';
						var t = this.Vote[this.buy.getAttribute('type')].type;
						if(t[0]==0){
							this.curCode = code.join(',');
						}else{
							this.curCode = code.join('|');
						}
						if(t[1]==1){
							this.curCode = this.curCode.replace(/,(\d+)$/g, '|$1');
						}
						if(this.Vote[this.buy.getAttribute('type')].sort){
							if(t[0]){
								var pt = this.curCode.split('|');
								var da = pt.pop();
								this.curCode = pt.sort().join('|')+'|'+da;
							}else{
								this.curCode = this.curCode.split('|')[0].split(t[0]?'|':',').sort()+(t[1]==0?'':'|'+this.curCode.split('|')[1]);
							}
						}
            lcode = null;
        }
    }
    this.gettitle=function(s){
        return ({"luck1":$("luck_xzuo").value,"luck2":$("luck_sxiao").value,"luck3":$("luck_year").value,"luck4":$("luck_xming").value})[s];
    }
}
function getExpect(a,b){
		var xmlhttp = new fw.ajax.request;
		xmlhttp.method = 'GET';
		xmlhttp.url = "/pages/trade/ajax/data/current_expect.php?lotid="+a+"&playid="+b+'&'+Math.random();
		xmlhttp.callBack = function(s){
			expect = s;
		}
		xmlhttp.run();
}
function create(tag, j){
	try{
		var node = document.createElement(tag);
		if(typeof(j) == 'object'){
			var attribute, i, k;
			for(i in j){
				if(typeof(j[i]) == 'object'){
					attribute = j[i];
					for(k in attribute){
						node[i][k] =  attribute[k];
					}
				}else{
					node[i] = j[i];
				}
			}
		}
		node.append = node.appendChild;
		node.appendChild = function(o){
			return this.append(o).parentNode;
		};
		return node;
	}finally{
		node = null;
	}
}
function changeLink(exp){
	var link = fw.get('link');
	if(link){
		var la = link.getElementsByTagName('a');
		var ll = la.length;
		var tl = null;
		for(var i=0;i<ll;i++){
			tl = la[i].getAttribute('addLink');
			if(tl != undefined){
				la[i].href = la[i].href.split('?')[0]+'?'+tl+(tl==''?'':'=')+(exp||curExpect);
			}
		}
	}
}
