/**
 * Copyright (c) 2009 AIC Shenzhen.
 * Technical Support Taiji Software CO.,LTD Shenzhen.
 * All rights reserved.
 * 
 * 各种基于jQuery的插件方法。
 * @version 1.0
 * @author Huang Jianhu.
 */

/**
 * 将一个XML的Object对象转换为字符串。
 * @param {Object} xmlObject XML Object.
 */
jQuery.convertXMLToString = function(xmlObject){
    var browserName = navigator.appName;
    var str;
    if (browserName == 'Microsoft Internet Explorer') {
        str = xmlObject.xml;
    }
    else {
        str = (new XMLSerializer()).serializeToString(xmlObject);
    }
    return str;
};

/**
 * Convert string object has XML format to XML OBject.
 * @param {Object} xmlString xml string.
 */
jQuery.convertStringToXML = function(xmlString){
    var browserName = navigator.appName;
    var doc;
    if (browserName == 'Microsoft Internet Explorer') {
        doc = new ActiveXObject('Microsoft.XMLDOM');
        doc.async = 'false'
        doc.loadXML(xmlString);
    }
    else {
        doc = (new DOMParser()).parseFromString(xmlString, 'text/xml');
    }
    return doc;
};

var DOM_ELEMENT_NODE = 1;   
var DOM_ATTRIBUTE_NODE = 2;   
var DOM_TEXT_NODE = 3;   
var DOM_CDATA_SECTION_NODE = 4;   
var DOM_ENTITY_REFERENCE_NODE = 5;   
var DOM_ENTITY_NODE = 6;   
var DOM_PROCESSING_INSTRUCTION_NODE = 7;   
var DOM_COMMENT_NODE = 8;   
var DOM_DOCUMENT_NODE = 9;   
var DOM_DOCUMENT_TYPE_NODE = 10;   
var DOM_DOCUMENT_FRAGMENT_NODE = 11;   
var DOM_NOTATION_NODE = 12; 
/**
 * 使用xpath在xml树中查询。
 * http://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript
 * @param   {Object}    xml Document or xml DOM Node
 * @param   {String}    xpath query string
 * @param   {Boolean}   if set true, only return first result node
 * @return  {Mixed}     return array include all nodes or first node
 */
jQuery.xpathSelectNodes = function(/* Document|Element */root, /* String */ query, /* Boolean */ returnFirst){
    if (window.ActiveXObject) {
        return returnFirst ? root.selectSingleNode(query) : root.selectNodes(query);
    }
    else 
        if (document.evaluate) {
            /**  
	         * DOMParser的return type有ordered和unordered两种
	         * ordered会按照树中间的顺序排列结果，unordered不一定
	         * 另外还有一种snapshots的，这种结果是树节点的一个clone
	         * 也就是说，如果操作结果节点，原来的节点不会有改变
	         * 这里使用非clone方式
	         */
            var returnType = returnFirst ? XPathResult.FIRST_ORDERED_NODE_TYPE : XPathResult.ORDERED_NODE_ITERATOR_TYPE;
            var doc = (root.nodeType == DOM_DOCUMENT_NODE) ? root : root.ownerDocument;
            var root = (root.nodeType == DOM_DOCUMENT_NODE) ? root.documentElement : root;
            var result = doc.evaluate(query, root, null, returnType, null);
            
            if (returnFirst) {
                var nodes = result.singleNodeValue;
            }
            else {
                var nextNode = result.iterateNext();
                var nodes = [];
                while (nextNode) {
                    nodes.push(nextNode);
                    nextNode = result.iterateNext();
                }
            }
        }
    return nodes;
};

/**
 * Reset values in the specified form.
 * @param {Object} formID The target form's ID.
 */
jQuery.resetFormValues = function(formID) {
	var formObject = jQuery("#" + formID);
	var textInputs = formObject.find("input[@type=text]").each(function(){this.value = "";});
	var pwdInputs = formObject.find("input[@type=password]").each(function() {this.value = "";});
	var selects = formObject.find("select").each(function(){this.value = "";});
};

/**
 * 日期格式化函数，根据传入的字符串格式化描述表达式来格式化日期数据。
 * @author Huang Ping
 * @param {String} format 格式化描述表达式。
 */
jQuery.dateFormat = function(format){
    var o = {
        "M+": this.getMonth() + 1, //month  
        "d+": this.getDate(), //day  
        "h+": this.getHours(), //hour  
        "m+": this.getMinutes(), //minute  
        "s+": this.getSeconds(), // cond  
        "q+": Math.floor((this.getMonth() + 3) / 3), //quarter  
        "S": this.getMilliseconds() //millisecond  
    }
    if (/(y+)/.test(format)) 
        format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o) 
        if (new RegExp("(" + k + ")").test(format)) 
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
    return format;
};

/**
 * 日期格式化函数，根据传入的字符串格式化描述表达式来格式化日期数据。
 * @author Huang Ping
 * @param {String} date 需格式化的时间对象。
 * @param {String} format 格式化描述表达式。
 */
jQuery.format = function(date,format) {  
   var o = {  
     "M+" : date.getMonth()+1, //month  
     "d+" : date.getDate(),    //day  
     "h+" : date.getHours(),   //hour  
     "m+" : date.getMinutes(), //minute  
     "s+" : date.getSeconds(), // second  
     "q+" : Math.floor((date.getMonth()+3)/3), //quarter  
     "S" : date.getMilliseconds() //millisecond  
   }  
   if(/(y+)/.test(format)) 
   		format=format.replace(RegExp.$1,(date.getFullYear()+"").substr(4 - RegExp.$1.length));  
   for(var k in o)
   		if(new RegExp("("+ k +")").test(format))  
     		format = format.replace(RegExp.$1,  RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));  
   return format;  
}  
/**
 * <P>根据需要修改的对象填充表单中的值。</P>
 * <P>
 * 使用方法：例如在DWR分页列表中点击修改按钮时，我们可以利用添加时所用的form表单进行修改操作，
 * 而直接弹出添加表单时，其中是没有值的，那么将分页列表某行对应的数据对象以及需要填充值的form的ID传给该函数，
 * 那么在添加表单中就会自动填充入对应的数据。
 * </P>
 * @param {Object} modObj 需要修改的对象
 * @param {Object} parentFormID 需要进行填充的form的ID。
 */
jQuery.fillEditForm = function(modObj, parentFormID) {
	var inputTextElms = jQuery("#" + parentFormID).find("input[type='text']");
	var hiddenElms = jQuery("#" + parentFormID).find("input[type='hidden']");
	var textAreaElms = jQuery("#" + parentFormID).find("textarea");
	var radioElms = jQuery("#" + parentFormID).find("input[type='radio']");
	var selectElms = jQuery("#" + parentFormID).find("select");
	
	for (var i in modObj) {
		jQuery.each(inputTextElms, function (index, ele){
			if (ele.id == i) { jQuery(ele).val(modObj[i]); }
		});
		jQuery.each(hiddenElms, function (index, ele){
			if (ele.id == i) { jQuery(ele).val(modObj[i]); }
		});
		jQuery.each(textAreaElms, function (index, ele){
			if (ele.id == i) { jQuery(ele).val(modObj[i]); }
		});
		jQuery.each(radioElms, function (index, ele){
			if (ele.id == i) { jQuery(ele).val(modObj[i]); }
		});
		jQuery.each(selectElms, function (index, ele){
			if (ele.id == i) { jQuery(ele).val(modObj[i]); }
		});
	}
};

/**
 * 显示日期组件。
 * @param {Element} target 日期组件显示的目标文档元素。
 * @param {String} format 日期格式，默认的为'yy-mm-dd'，注意此处日期格式与Java中有些不同。
 */
jQuery.showDate = function(target, format) {
    jQuery.datepicker.setDefaults({showMonthAfterYear: true}, jQuery.extend(jQuery.datepicker.regional['zh-CN']));
    if (format == null || format == '') {
        // 默认的日期格式为'yy-mm-dd'
        jQuery(target).datepicker({dateFormat : 'yy-mm-dd'});
    } else {
        jQuery(target).datepicker({dateFormat : format});
    }
};

/**
 * 通过按钮触发显示日期组件。
 * @param {Element} img 触发日期事件的按钮。
 * @param {String} format 日期格式，默认的为'yy-mm-dd'，注意此处日期格式与Java中有些不同。
 */
jQuery.showDateViaBTN = function(img, format) {
    var target = jQuery(img).prev();
    jQuery.showDate(target, format);
    jQuery(target).focus();
};

//判读是否只有数字或字母
function isAlphaDigit(str){
	var reg = /^[a-zA-Z0-9]+$/g;
	return reg.test(str);
}

function isMoney(str){
	var reg = /^\d+\.{0,}\d{0,}$/;
	return reg.test(str); 
}

function imgCheck(obj){
	document.getElementById(obj.id+"_img").src = obj.value;
	valPic(obj);
}

function imgFomatCheck(img){
	var id = img.id.split("_")[0];
	var obj = document.getElementById(id);
	if(obj.value != ""){
		alert("图片格式不正确！");
		//把file中的文本框置空
		var objTemp = obj.cloneNode(false);
		//objTemp.onchange= who.onchange;// events are not cloned 
		obj.parentNode.replaceChild(objTemp,obj);
		//document.body.removeChild(document.getElementById("img"));
	}
}

function imgSizeCheck(img){
	if(img.readyState == "complete" && img.fileSize > 200*1024) { 
		alert("图片大于200k！");
		var id = img.id.split("_")[0];
		var obj = document.getElementById(id);
		//把file中的文本框置空
		var objTemp = obj.cloneNode(false);
		//objTemp.onchange= who.onchange;// events are not cloned 
		obj.parentNode.replaceChild(objTemp,obj);
		//document.body.removeChild(document.getElementById("img"));
	} 
}