var __APP__ = '/index.php';
var __PUBLIC__ = '/Public';


function createEventFunction(obj, strFunc)
{
    var args = [];
    if(!obj) obj = window;
    for(var i = 2; i<arguments.length; i++ )args.push(arguments[i]);
    return function()    {
        obj[strFunc].apply(obj, args);
    }
}

function createCallbackFunction(obj, strFunc)
{
    if(!obj) obj = window;
    return function()    {
        obj[strFunc].apply(obj, arguments);
    }
}

function CleanTable(tTable)
{
    if( null == tTable )
        return;

    var rowNumber = tTable.rows.length;

    for(var i = 0; i < rowNumber; i++)
    {
        tTable.deleteRow(0);
    }
}

function CleanTableExceptTH(tTable)
{
    if( null == tTable )
        return;

    var rowNumber = tTable.rows.length;

    for(var i = 1; i < rowNumber; i++)
    {
        tTable.deleteRow(1);
    }
}


function ParamGenerator()
{
	this.paramArr = [];
}

ParamGenerator.prototype = {
	addParam:function(name, value)
	{
		this.paramArr.push( new Array(name, value) );
	},
	getValue:function(name)
	{
		var params = this.paramArr;
		var rtn=null;
		for(var i=0;i<params.length;i++)
		{
			if(params[i][0]==name)
			{
				rtn = params[i][1];
				break;
			}
		}
		return rtn;
	},
	getParam:function()
	{
		return this.paramArr;
	},
    toQueryString:function()
    {
        parameters = '';
        paramArr = this.paramArr;
        for( var i=0; i<paramArr.length; i++ )
        {
            parameters += paramArr[i][0] + "=" + encodeURIComponent(paramArr[i][1]) + "&";
        }
        return parameters;
    }
}




function PostTPAjax(modelname, funcname, paramArr, callback)
{
    var url = __APP__+"/" + modelname + "/" + funcname;

    var parameters = "";

    for( var i=0; i<paramArr.length; i++ )
    {
    	parameters += paramArr[i][0] + "=" + encodeURIComponent(paramArr[i][1]) + "&";

    }
    	//"name=" + encodeURIComponent(this.AddParentCategoryBox.value);

    new Ajax.Request(url,{
        method:'post',
        parameters:parameters,
        onComplete:callback
    });
}

function PostTPForm(modelname, funcname, paramArr)
{
	var url = __APP__+"/" + modelname + "/" + funcname;
    var submitform = document.createElement('form');
    submitform.method='POST';
    submitform.action=url;
    params = paramArr.getParam();
    for(var i=0;i<params.length;i++)
    {
        name=params[i][0];
        value=params[i][1];
        var textfield = document.createElement('input');
        textfield.type='hidden';
        textfield.id=name;textfield.name=name;
        textfield.value=value;
        submitform.appendChild(textfield);
    }
    document.body.appendChild(submitform);
    submitform.submit();
}

function GetTPAjax(modelname, funcname, paramArr, callback)
{
    var url = __APP__+"/" + modelname + "/" + funcname + "/";

    var parameters = "";

    for( var i=0; i<paramArr.length; i++ )
    {
    	parameters += paramArr[i][0] + "/" + encodeURIComponent(paramArr[i][1]) + "/";

    }
    url += parameters;

    new Ajax.Request(url,{
        method:'get',
        onComplete:callback
    });
}

/**
 * 重复字符串
 * @param i 要重复的字符串
 * @param m 重复次数
 * @return
 */
function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); }

/**
 * 返回打印的带格式文本
 * @return
 */
function sprintf () {
  var i = 0, a, f = arguments[i++], o = [], m, p, c, x;
  while (f) {
    if (m = /^[^\x25]+/.exec(f)) o.push(m[0]);
    else if (m = /^\x25{2}/.exec(f)) o.push('%');
    else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) {
      if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments.");
      if (/[^s]/.test(m[7]) && (typeof(a) != 'number'))
        throw("Expecting number but found " + typeof(a));
      switch (m[7]) {
        case 'b': a = a.toString(2); break;
        case 'c': a = String.fromCharCode(a); break;
        case 'd': a = parseInt(a); break;
        case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break;
        case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break;
        case 'o': a = a.toString(8); break;
        case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break;
        case 'u': a = Math.abs(a); break;
        case 'x': a = a.toString(16); break;
        case 'X': a = a.toString(16).toUpperCase(); break;
      }
      a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a);
      c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' ';
      x = m[5] - String(a).length;
      p = m[5] ? str_repeat(c, x) : '';
      o.push(m[4] ? a + p : p + a);
    }
    else throw ("Huh ?!");
    f = f.substring(m[0].length);
  }
  return o.join('');
}

function CleanOption(sel) {
    sel.innerHTML='';
}
function AddOption(sel,n,v) {
	var oOption = document.createElement("option");
	sel.appendChild(oOption);
	oOption.text = n;
	oOption.value = v;
	oOption = null;
}
function SelectOption(sel,v) {
    var options = sel.getElementsByTagName('option');
    for(var i=0;i<options.length;i++)
    {
        if(options[i].value==v)
        {
        	/**
        	 * fix IE6 bug
        	 */
        	try
        	{
        	options[i].selected=true;
        	}
        	catch(ex)
        	{
        		sel.selectedIndex = i;
        	}

            break;
        }
    }
}

function DeleteOptionByValue(sel,v) {
    var options = sel.getElementsByTagName('option');
    for(var i=0;i<options.length;i++)
    {
        if(options[i].value==v)
        {
        	sel.removeChild(options[i]);
            break;
        }
    }
}
function SetStatus(msg) {
    window.status = msg;
}
function ChineseNumber(num)
{
	num = parseInt(num)+'';
	var chinese_num = new Array('零','一','二','三','四','五','六','七','八','九');
	var rtn=new Array();
	for(var i=0;i<num.length;i++)
	{
		index = num.substring(i,i+1);
		rtn.push(chinese_num[index]);
	}
	return rtn.join('');
}

function ServerError() {
    alert('抱歉,记忆日的服务器出现了处理错误,这不是您的缘故,但建议您联系我们报告这个信息,我们将尽快修复它。');
    switch(arguments.length)
    {
    	case 1:
    		var errmsg = arguments[0];
    		var url = location.href;
    		LogErrorToServer(errmsg,url);
    	break;
    }
}
function LogErrorToServer(msg,pageurl)
{
	var img = document.createElement('img');
	img.src = '/errlog.php?msg='+encodeURI(msg)+'&pageurl='+encodeURI(pageurl);
	img.height=0;
	img.width=0;
}
function ParseTPAjaxReturn(text)
{
	var rst = null;
	try
	{
		eval('rst='+text+';');
	}
	catch(ex)
	{
		ServerError();
		return;
	}

	if(!rst)
	{
		ServerError();
		return;
	}
	return rst;
}

function SetPageHash(msg)
{
    window.location.hash='#'+(base64encode(msg));
}
function GetPageHash() {
    return base64decode(window.location.hash);
}


function IsArrContain(arr, item) {
    for( var i=0; i<arr.length; i++)    {
        if( arr[i] == item )
            return true;
    }
    return false;
}
//Example:
//writeCookie("myCookie", "my name", 24);
//Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.
function WriteCookie(name,value,hours){

	var expire="";

	if(hours!=null){

	  expire=new Date((new Date()).getTime()+hours*3600000);

	  expire="; expires="+expire.toGMTString();

	}
	path = '; path=/';

	document.cookie=name+"="+escape(value)+expire+path;

}

//Example:

//alert( readCookie("myCookie") );

function ReadCookie(name){

	var cookieValue="";

	var search=name+"=";

	if(document.cookie.length>0){

	  offset=document.cookie.indexOf(search);

	  if(offset!=-1){

	    offset+=search.length;

	    end=document.cookie.indexOf(";",offset);

	    if(end==-1){

	      end=document.cookie.length;

	    }

	    cookieValue=unescape(document.cookie.substring(offset,end));

	  }

	}

	return cookieValue;

}
function array_unique( array ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
    // +      input by: duncan
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Nate
    // *     example 1: array_unique(['Kevin','Kevin','van','Zonneveld','Kevin']);
    // *     returns 1: ['Kevin','van','Zonneveld']
    // *     example 2: array_unique({'a': 'green', 0: 'red', 'b': 'green', 1: 'blue', 2: 'red'});
    // *     returns 2: {'a': 'green', 0: 'red', 1: 'blue'}

    var key = '', tmp_arr1 = {}, tmp_arr2 = {};
    var val = '';
    tmp_arr1 = array;

  var __array_search = function (needle, haystack, strict) {
        var fkey = '';
      var strict = !!strict;
      for (fkey in haystack) {
          if ((strict && haystack[fkey] === needle) || (!strict && haystack[fkey] == needle) ) {
              return fkey;
          }
      }
      return false;
  }

    for (key in tmp_arr1) {
        val = tmp_arr1[key];
        if (false === __array_search(val, tmp_arr2)) {
            tmp_arr2[key] = val;
        }

        delete tmp_arr1[key];
    }

    return tmp_arr2;
}

function trim (str, charlist) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: mdsjack (http://www.mdsjack.bo.it)
    // +   improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
    // +      input by: Erkekjetter
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: DxGx
    // +   improved by: Steven Levithan (http://blog.stevenlevithan.com)
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // *     example 1: trim('    Kevin van Zonneveld    ');
    // *     returns 1: 'Kevin van Zonneveld'
    // *     example 2: trim('Hello World', 'Hdle');
    // *     returns 2: 'o Wor'
    // *     example 3: trim(16, 1);
    // *     returns 3: 6

    var whitespace, l = 0, i = 0;
    str += '';

    if (!charlist) {
        // default list
        whitespace = " \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000";
    } else {
        // preg_quote custom list
        charlist += '';
        whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
    }

    l = str.length;
    for (i = 0; i < l; i++) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(i);
            break;
        }
    }

    l = str.length;
    for (i = l - 1; i >= 0; i--) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(0, i + 1);
            break;
        }
    }

    return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

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, "");
}

/***
 * 兼容IE/FF的复制到剪贴板函数
 */

function CopyToClipboard(txt)
{
	if(window.clipboardData)
	{
		window.clipboardData.clearData();		window.clipboardData.setData("Text",txt);alert("复制成功！");
	}else if(navigator.userAgent.indexOf("Opera")!=-1)
	{
		window.location=txt;
	}else if(window.netscape)
	{
		try
		{
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		}catch(e)
		{
			alert("被浏览器拒绝！\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);		alert("复制成功！");
	}
}

function $RF(el, radioGroup) {
	if ($(el).type && $(el).type.toLowerCase() == 'radio') {
		var radioGroup = $(el).name;
		var el = $(el).form
	} else if ($(el).tagName.toLowerCase() != 'form') {
		return false
	}
	var checked = $(el).getInputs('radio', radioGroup).find(function(re) {
		return re.checked
	});
	return (checked) ? $F(checked) : null
}
