// JavaScript Document
/**
	公用函数，判断指定的参数是否为无意义的空值
	@function
	@param data 需要判断其值的指定对象
	@return {Boolean} 判断参数是否为无意义的空值，它将空格、空字符串、0、false、null 这些无意义的值都解释为 Empty， 遇到这些值时返回 true
*/
function IsEmpty(data)
{
    if (typeof data=="undefined") return true;
    if (typeof data=="string") return (data); // 有问题....
    if (typeof data=="number") return (data==0);
    if (typeof data=="object") return (data==null);
    if (typeof data=="boolean") return !data;
}

/**
	取得对象当中的某个字段
	@param Obj 对象
	@param fieldname 对象的字段名，允许嵌套，例如 x.y.z
	@return {Object} 返回 null 或者对象(包括简单类型)
*/
function GetObjectField(Obj, fieldname)
{
	if (typeof Obj=="undefined")
		return null;
	if (IsEmpty(Obj))
		return null;
		
	if (fieldname.indexOf(".")>0)
	{
		ObjNames = fieldname.split(".");
		var lastObj = Obj;
		for (var i=0; i<ObjNames.length; i++)
		{
			var lastObj = GetObjectField(lastObj, ObjNames[i]);
		}
		return lastObj;
	}
	else
	{
		if (typeof Obj[fieldname]=="undefined")
			return null;
		return Obj[fieldname];
	}
}

function SetObjectField(Obj, fieldname, value)
{
	if (typeof Obj=="undefined")
		return false;
	if (IsEmpty(Obj))
		return false;
		
	if (fieldname.indexOf(".")>0)
	{
		var lastObjstr = fieldname.substring(0,fieldname.lastIndexOf("."));
		var lastObjField = fieldname.substring(fieldname.lastIndexOf(".")+1);
	    alert("Finished "+lastObjstr+" : "+lastObjField);
		var lastObj = GetObjectField(Obj, lastObjstr);
		
		SetObjectField(lastObj,lastObjField,value);
	}
	else
	{
		if (typeof Obj[fieldname]=="undefined")
			return false;
		else
		{
			Obj[fieldname] = value;
			return true;
		}
	}
}

function showDebuginfo(cFunctionName,cMsg, Container)
{
    if (typeof IsDebugMode=="boolean")
    {
        if (IsDebugMode)
        {
            var t = new Date();
            var data = "<div style='color:#f00; background-color:#000;'>【"+t.toLocaleTimeString()+"---"+t.getMilliseconds()+"】"+cFunctionName+" --->>> "+cMsg+"</div>";
	        if (typeof Container=="undefined")
		        $("body").append(data);
	        else
		        $(Container).append(data);
        }
    }
}


/*
从 JSON 的日期表示格式当中取得日期
*/
function GetDate(jsonDateStr)
{
	var nStart = jsonDateStr.indexOf("Date(");
	var nEnd = jsonDateStr.lastIndexOf(")");
	
	/*
	e.g.  {"name":"James","birthday":"\\\/Date(2534000000000)\\\/"};
	另一种形式： "update_date": "\/Date(1228233600000+0800)\/",
	*/
	
	//if (jsonDateStr.substring(0,7)=="\\\/Date(" && jsonDateStr.substring(nEnd)==")\\\/")
	if (nStart>=0 && nEnd>=5)
	{
		var t = null;
		try
		{
			var t = eval("("+"new Date("+jsonDateStr.substring(nStart+5,nEnd)+"))");
		}
		catch(exception)
		{			
			//alert("Exception");
		}
		//return t.toUTCString();
		return t;
	}
}
/*
	从 JSON 的日期表示格式当中取得日期的本地化表示字符串
*/
function GetDateLocaleString(jsonDateStr)
{
	var t = GetDate(jsonDateStr);
	if (t == null)
		return "";
	else
		return t.toLocaleString();
}
function GetDateUTCString(jsonDateStr)
{
	var t = GetDate(jsonDateStr);
	if (t == null)
		return "";
	else
		return t.toUTCString();
}
/*
	转换成以本地时间表示的短格式: 2008-2-4 13:25:20
	(注意:getMonth函数返回的月份是从0-11的)
*/
function GetDateTimeLocaleStandardString(jsonDateStr)
{
	var t = GetDate(jsonDateStr);
	if (t == null)
		return "";
	else
	{
		var sString = t.getFullYear()+"-"+(t.getMonth()+1)+"-"+t.getDate()+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds();
		return sString;
	}
}

/*
	转换成以本地时间表示日期格式: 2008-2-4
	(注意:getMonth函数返回的月份是从0-11的)
*/
function GetDateLocaleStandardString(jsonDateStr)
{
	var t = GetDate(jsonDateStr);
	if (t == null)
		return "";
	else
	{
		var sString = t.getFullYear()+"-"+(t.getMonth()+1)+"-"+t.getDate();
		return sString;
	}
}

/*
    取得客户端使用的GUID
*/
function getGUID()
{
    // 算法1：
    
	var guid ="";   
	for(var i=1;i <=32; i++)
	{   
		var n=Math.floor(Math.random()*16.0).toString(16);   
		guid+=n;
	}
	return guid;
    
	// 算法2：
	/*
	var guid = Guid(
      {
            chars: Guid.constants.alphanumerics ,  // or you could say "abc" if you only wanted those chars to appear
            epoch: "June 1, 2003",
            counterSequenceLength: 2, // a counter field appended to the end
            randomSequenceLength: 2 // a random field appended to the end
      });
	
	return guid.generate();
    */
    

}




/*
  Guid0   
*/
/*
function Guid(options) {
  this.options = options || {};
  this.chars = this.options.chars || Guid.constants.alphanumerics;
  this.epoch = this.options.epoch || Guid.constants.epoch1970;
  this.counterSequenceLength = this.options.counterSequenceLength || 1;
  this.randomSequenceLength = this.options.randomSequenceLength || 2;
}

Guid.prototype.generate = function() {
  var now = (new Date()).getTime() - this.epoch;
  var guid = this.baseN(now);

  this.counterSeq = (now==this.lastTimestampUsed ? this.counterSeq+1 : 1);
  guid += this.counterSeq;

  for (var i=0; i<this.randomSequenceLength; i++) {
    guid += this.chars.charAt(Math.floor(Math.random() * this.chars.length));
  }

  this.lastTimestampUsed = now;

  return guid;
}

Guid.prototype.baseN = function(val) {
  if (val==0) return "";
  var rightMost = val % this.chars.length;
  var rightMostChar = this.chars.charAt(rightMost);
  var remaining = Math.floor(val / this.chars.length);
  return this.baseN(remaining) + rightMostChar;
}

Guid.constants = {};
Guid.constants.numbers = "0123456789";
Guid.constants.alphas = "abcdefghijklmnopqrstuvwxyz";
Guid.constants.lowerAlphanumerics = "0123456789abcdefghijklmnopqrstuvwxyz";
Guid.constants.alphanumerics = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// http://tools.ietf.org/html/rfc1924 
Guid.constants.base85 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%&()*+-;<=>?@^_`{|}~";

Guid.constants.epoch1970 = (new Date(0));
Guid.constants.epoch = function(year) { return (new Date("Jan 1 " + year)).getTime(); }
*/


function IsNotEmptyString(data)
{
    if (typeof data=="string")
    {
        if (data=="")
            return false;
        else
            return true;
    }
    else
        return false;
}

function copyString(txt)
{
	if(window.clipboardData) 
	 {    
		 window.clipboardData.clearData();    
		 window.clipboardData.setData("Text", txt); 
	 } 
	 else if(navigator.userAgent.indexOf("Opera") != -1) 
	{    
		window.location = txt;    
	} 
	else if (window.netscape) 
	{    
		try 
		{    
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");    
		}
		catch (e) 
		{    
			alert("您的firefox安全限制 限制您进行剪贴板操作！\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");    
		}    
		var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);    
		if (!clip)    
			return;    
		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);    
		if (!trans)    
			return;    
		trans.addDataFlavor('text/unicode');    
		var str = new Object();    
		var len = new Object();    
		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);    
		var copytext = txt;    
		str.data = copytext;    
		trans.setTransferData("text/unicode",str,copytext.length*2);    
		var clipid = Components.interfaces.nsIClipboard;    
		if (!clip)    
			return false;    
		clip.setData(trans,null,clipid.kGlobalClipboard);    
    }
}

function loadCss(file){ 
    var cssTag = document.getElementById('loadCss'); 
    var head = document.getElementsByTagName('head').item(0); 
    if(cssTag) head.removeChild(cssTag); 
    css = document.createElement('link'); 
    css.href = file; 
    css.rel = 'stylesheet'; 
    css.type = 'text/css'; 
    css.id = 'loadCss'; 
    head.appendChild(css); 
}

function loadJs(file){ 
    var scriptTag = document.getElementById('loadScript'); 
    var head = document.getElementsByTagName('head').item(0); 
    if(scriptTag) head.removeChild(scriptTag); 
    script = document.createElement('script'); 
    script.src = "../js/mi_"+file+".js"; 
    script.type = 'text/javascript'; 
    script.id = 'loadScript'; 
    head.appendChild(script); 
} 

/// 获取浏览器地址当中的参数
/* 使用方法
var Request=new Object();
Request=GetRequest();
var 参数1,参数2,参数3,参数N;
参数1=Request['参数1'];
参数2=Request['参数2'];
参数3=Request['参数3'];
参数N=Request['参数N'];
*/
function GetRequest()
{
    var url = location.search; //获取url中"?"符后的字串
    var theRequest = new Object();
    if(url.indexOf("?") != -1)
    { 
      var str = url.substr(1);
        strs = str.split("&");
      for(var i = 0; i < strs.length; i ++)
        { 
         theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);
        }
    }
    return theRequest;
}

//-------------------------------------------------------------------------------------
// 扩展String类的功能  TrimUnnecessaryBlank 由Bruce Chen 所写
//-------------------------------------------------------------------------------------
String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }
String.prototype.LTrim = function() { return this.replace(/(^\s*)/g, ""); } 
String.prototype.RTrim = function() { return this.replace(/(\s*$)/g, ""); } 

// 去除不必要的空格（两头，中间多个空白,包括全角空格，变成一个空格）
String.prototype.TrimUnnecessaryBlank = function() 
{ 
    return this.replace(/(^\s*)|(\s*$)/g, "").replace(/(\s{2,}|　+)/g," ");
}
//-------------------------------------------------------------------------------------


// 拷贝code当中的值到剪贴板；拷贝完成后提示 msg 信息
function copySelectUrl(code, msg) {
    if ($("#"+code).val()=="")
        return;
        
    var t = document.getElementById(code);
    t.select();
    t.createTextRange().execCommand('Copy');
    alert(msg);
}
function GetPinyinV(sr)
{
	var sr_a = sr.split(" ");
	var sr_py = "";
	for(var i=0; i<sr_a.length; i++)
	{
		sr_py += GetWordPY(sr_a[i]);
		if (i!=sr_a.length-1)
		{
			sr_py += " ";
		}
	}
	return sr_py;
}
function GetWordPY(src)
{
    src = src.toLowerCase();
	var PYDic = new Object();
	PYDic["a1"] = "ā";
	PYDic["a2"] = "á";
	PYDic["a3"] = "ǎ";
	PYDic["a4"] = "à";
	
	PYDic["e1"] = "ē";
	PYDic["e2"] = "é";
	PYDic["e3"] = "ě";
	PYDic["e4"] = "è";
	
	PYDic["i1"] = "ī";
	PYDic["i2"] = "í";
	PYDic["i3"] = "ǐ";
	PYDic["i4"] = "ì";
	
	PYDic["o1"] = "ō";
	PYDic["o2"] = "ó";
	PYDic["o3"] = "ǒ";
	PYDic["o4"] = "ò";
	
	PYDic["u1"] = "ū";
	PYDic["u2"] = "ú";
	PYDic["u3"] = "ǔ";
	PYDic["u4"] = "ù";

	PYDic["v1"] = "ǖ";
	PYDic["v2"] = "ǘ";
	PYDic["v3"] = "ǚ";
	PYDic["v4"] = "ǜ";

	var nn = src.substring(src.length-1);
	if (nn=="1" || nn=="2" || nn=="3" || nn=="4")
	{
		src = src.substring(0,src.length-1);
		var pp = "-";
		pp = (src.indexOf("a")>0)?"a":pp;
		pp = (pp=="-")?((src.indexOf("e")>0)?"e":pp):pp;
		pp = (pp=="-")?((src.indexOf("i")>0)?"i":pp):pp;
		pp = (pp=="-")?((src.indexOf("o")>0)?"o":pp):pp;
		pp = (pp=="-")?((src.indexOf("u")>0)?"u":pp):pp;
		pp = (pp=="-")?((src.indexOf("v")>0)?"v":pp):pp;
		return src.replace(pp,PYDic[pp+nn]);
	}
	return src;
}
function SetPinyin(word,PYCtrlId)
{
    $.get("/Ajaxserver/pinyin.ashx",
    {w:word},
    function(data)
    {
        $("#"+PYCtrlId).val(data.substring(data.indexOf("|")+1)).change();
    }
    );
}

jQuery.PrintReport = function(el)
{
    var iframe = document.createElement('IFRAME');
    var doc = null;
    $(iframe).attr('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;');
    document.body.appendChild(iframe);
    doc = iframe.contentWindow.document;
    var links = window.document.getElementsByTagName('link');
    for (var i = 0; i < links.length; i++)
        if (links[i].rel.toLowerCase() == 'stylesheet')
        doc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');
    doc.write('<div class="' + $(el).attr("class") + '">' + $(el).html() + '</div>');
    doc.close();
    iframe.contentWindow.focus();
    iframe.contentWindow.print();
    alert('请稍等......打印完毕后再关闭此对话框！');
    document.body.removeChild(iframe);
}