var Browser = new Object();

Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument != 'undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox") != - 1);
Browser.isSafari = (navigator.userAgent.toLowerCase().indexOf("safari") != - 1);
Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera") != - 1);

var utils = new Object();

utils.htmlEncode = function(text)
{
  return text.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

utils.trim = function( text )
{
  if (typeof(text) == "string")
  {
    return text.replace(/^\s*|\s*$/g, "");
  }
  else
  {
    return text;
  }
}

utils.isEmpty = function( val )
{
  switch (typeof(val))
  {
    case 'string':
      return utils.trim(val).length == 0 ? true : false;
      break;
    case 'number':
      return val == 0;
      break;
    case 'object':
      return val == null;
      break;
    case 'array':
      return val.length == 0;
      break;
    default:
      return true;
  }
}

utils.isNumber = function(val)
{
  var reg = /^[\d|\.|,]+$/;
  return reg.test(val);
}

utils.isInt = function(val)
{
  if (val == "")
  {
    return false;
  }
  var reg = /\D+/;
  return !reg.test(val);
}

utils.isEmail = function( email )
{
  var reg1 = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/;

  return reg1.test( email );
}

utils.isTel = function ( tel )
{
  var reg = /^[\d|\-|\s|\_]+$/; //只允许使用数字-空格等

  return reg.test( tel );
}

utils.fixEvent = function(e)
{
  var evt = (typeof e == "undefined") ? window.event : e;
  return evt;
}

utils.srcElement = function(e)
{
  if (typeof e == "undefined") e = window.event;
  var src = document.all ? e.srcElement : e.target;

  return src;
}

utils.isTime = function(val)
{
  var reg = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}$/;

  return reg.test(val);
}

utils.rowindex = function(tr)
{
  if (Browser.isIE)
  {
    return tr.rowIndex;
  }
  else
  {
    table = tr.parentNode.parentNode;
    for (i = 0; i < table.rows.length; i ++ )
    {
      if (table.rows[i] == tr)
      {
        return i;
      }
    }
  }
}

utils.$ = function(id)
{
  return document.getElementById(id);
}

utils.validator = function(val)
{
  switch (typeof(val))
  {
    case 'string':
      return validator.trim(val).length == 0 ? true : false;
      break;
    case 'number':
      return val == 0;
      break;
    case 'object':
      return val == null;
      break;
    case 'array':
      return val.length == 0;
      break;
    default:
      return true;
  }
}

utils.isArray = function(data) 
{
	return (data && data.join) ? true : false;
};

utils.isHTMLElement = function(ele, nodeName)
{
	if (ele == null || typeof ele != "object" || ele.nodeName == null)
	{
		return false;
	}
	
	if (nodeName != null) 
	{
		var test = ele.nodeName.toLowerCase();
		if (typeof nodeName == "string")
		{
			return test == nodeName.toLowerCase();
		}
		
		if (this.isArray(nodeName)) 
		{
			var match = false;
			for (var i = 0; i < nodeName.length && !match; i++) 
			{
				if (test == nodeName[i].toLowerCase()) 
				{
					match =  true;
				}
			}
			return match;
		}
		
		return false;
	}
	return true;
}

utils.addOptions = function(ele, data)
{
	var orig = ele;
	ele = this.$(ele);
	if (ele == null)
	{
		return;
	}
	var useOptions = this.isHTMLElement(ele, "select");
	var useLi = this.isHTMLElement(ele, ["ul", "ol"]);
	if (!useOptions && !useLi) 
	{
		return;
	}
	if (data == null) return;
	var text;
	var value;
	var selected;
	var opt;
	var li;
	if (this.isArray(data)) 
	{
		for (var i = 0; i < data.length; i++) 
		{
			if (useOptions) 
			{
				option=data[i].split('`');
				if (option.length>1) 
				{
					value	= option[0];
					text	= option[1];
				}
				else
				{
					text = data[i];
					value = text;
				}
				if (text || value) 
				{
					opt = new Option(text, value);
					if(value==arguments[2])
					{
						opt.selected=true;
					}
					ele.options[ele.options.length] = opt;
				}
			}
			else
			{
				li = document.createElement("li");
				value = data[i];
				if (value != null) 
				{
					li.innerHTML = value;
					ele.appendChild(li);
				}
			}
		}
	}
	else
	{
		for (var prop in data) 
		{
			if (!useOptions) 
			{
				return;
			}
			if (typeof data[prop] == "function") 
			{
				text = null;
				value = null;
			}
			else if (arguments[2]) 
			{
				text = prop;
				value = data[prop];
			}
			else
			{
				text = data[prop];
				value = prop;
			}
			if (text || value) 
			{
				opt = new Option(text, value);
				ele.options[ele.options.length] = opt;
			}
		}
	}
}

utils.getValueFrom = function(data, method)
{
	if (method == null) return data;
	else if (typeof method == 'function') return method(data);
	else return data[method];
}

utils.removeAllOptions = function(ele)
{
	var orig = ele;
	ele = utils.$(ele);
	if (ele == null) 
	{
		return;
	}
	var useOptions = this.isHTMLElement(ele, "select");
	var useLi = this.isHTMLElement(ele, ["ul", "ol"]);
	if (!useOptions && !useLi) 
	{
		return;
	}
	if (useOptions) 
	{
		ele.options.length = 0;
	}
	else 
	{
		while (ele.childNodes.length > 0) 
		{
			ele.removeChild(ele.firstChild);
		}
	}
}

utils.getValueFrom = function(data, method)
{
	if (method == null) return data;
	else if (typeof method == 'function') return method(data);
	else return data[method];
}

document.getCookie = function(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0])
      return decodeURIComponent(aCrumb[1]);
  }

  // a cookie with the requested name does not exist
  return null;
}

document.setCookie = function(sName, sValue, sExpires)
{
  var sCookie = sName + "=" + encodeURIComponent(sValue);
  if (sExpires != null)
  {
    sCookie += "; expires=" + sExpires;
  }

  document.cookie = sCookie;
}

document.removeCookie = function(sName,sValue)
{
  document.cookie = sName + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}

function getPosition(o)
{
    var t = o.offsetTop;
    var l = o.offsetLeft;
    while(o = o.offsetParent)
    {
        t += o.offsetTop;
        l += o.offsetLeft;
    }
    var pos = {top:t,left:l};
    return pos;
}

function cleanWhitespace(element)
{
  var element = element;
  for (var i = 0; i < element.childNodes.length; i++) {
   var node = element.childNodes[i];
   if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
     element.removeChild(node);
   }
}