/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/



var Prototype = {
  Version: '1.4.0',
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
  emptyFunction: function() {},
  K: function(x) {return x}
};

var Class = {
  create: function() {
	 return function() {
      this.initialize.apply(this, arguments);
	  
    } 
  }
};

var Abstract = new Object();

Object.extend = function(destination, source) {

  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
};

Object.inspect = function(object) {
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
};

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
   

   
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
};

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
};

Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
};

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
};




Object.extend(String.prototype, {
  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(eval);
  },

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },

  toQueryParams: function() {
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
    return pairs.inject({}, function(params, pairString) {
      var pair = pairString.split('=');
      params[pair[0]] = pair[1];
      return params;
    });
  },

  toArray: function() {
    return this.split('');
  },

  camelize: function() {
    var oStringList = this.split('-');
    if (oStringList.length == 1) return oStringList[0];

    var camelizedString = this.indexOf('-') == 0
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
      : oStringList[0];

    for (var i = 1, len = oStringList.length; i < len; i++) {
      var s = oStringList[i];
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }

    return camelizedString;
  },

  inspect: function() {
    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
  }
});

String.prototype.parseQuery = String.prototype.toQueryParams;

var $break    = new Object();
var $continue = new Object();

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = true;
    this.each(function(value, index) { if (result = !!(iterator || Prototype.K)(value, index))  throw $break;});
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {results.push(iterator(value, index))});
    return results;
  },

  detect: function (iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index){  if (iterator(value, index)) results.push(value)});
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern)) results.push((iterator || Prototype.K)(value, index));
    });
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.collect(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value >= (result || value))
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value <= (result || value))
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator) {
    return this.collect(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.collect(Prototype.K);
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      iterator(value = collections.pluck(index));
      return value;
    });
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
};

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});

function $A(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
};
Array.from=$A;

Object.extend(Array.prototype, Enumerable);

Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0; i < this.length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != undefined || value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value.constructor == Array ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments).flatten();
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  indexOf: function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  shift: function() {
    var result = this[0];
    for (var i = 0; i < this.length - 1; i++)
      this[i] = this[i + 1];
    this.length--;
    return result;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }
});


var Hash = {
  _each: function(iterator) {
    for (key in this) {
      var value = this[key];
      if (typeof value == 'function' )   continue;
		
      var pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  },

  keys: function() {
    return this.pluck('key');
  },

  values: function() {
    return this.pluck('value');
  },

  merge: function(hash) {
    return $H(hash).inject($H(this), function(mergedHash, pair) {
      mergedHash[pair.key] = pair.value;
      return mergedHash;
    });
  },

  toQueryString: function() {
    return this.map(function(pair) {
      return pair.map(encodeURIComponent).join('=');
    }).join('&');
  },

  inspect: function() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }
};

function $H(object) {
  var hash = Object.extend({}, object || {});
  Object.extend(hash, Enumerable);
  Object.extend(hash, Hash);
  return hash;
};
ObjectRange = Class.create();
Object.extend(ObjectRange.prototype, Enumerable);
Object.extend(ObjectRange.prototype, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    do {
      iterator(value);
      value = value.succ();
    } while (this.include(value));
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
};

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new ActiveXObject('MSXML2.XMLHTTP.4.0')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
      function() {return new XMLHttpRequest()}
    ) || false;
  },

  activeRequestCount: 0
};

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responderToAdd) {
    if (!this.include(responderToAdd))
      this.responders.push(responderToAdd);
  },

  unregister: function(responderToRemove) {
    this.responders = this.responders.without(responderToRemove);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (responder[callback] && typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },

  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});

Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      parameters:   ''
    };
    Object.extend(this.options, options || {});
  },

  responseIsSuccess: function() {
    return this.transport.status == undefined  || this.transport.status == 0 || (this.transport.status >= 200 && this.transport.status < 300);
  },

  responseIsFailure: function() {
    return !this.responseIsSuccess();
  }
};

Ajax.Request = Class.create();
Ajax.Request.Events =['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(url, options) {
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
	this.url=url	
  },

  request: function(url) {
    var parameters = this.options.parameters || '';
    if (parameters.length > 0) parameters += '&_=';

    try {
      this.url = url;
      if (this.options.method == 'get' && parameters.length > 0)
        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;

      Ajax.Responders.dispatch('onCreate', this, this.transport);

      this.transport.open(this.options.method, this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) {
        this.transport.onreadystatechange = this.onStateChange.bind(this);
        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
      }

      this.setRequestHeaders();

      var body = this.options.postBody ? this.options.postBody : parameters;
      this.transport.send(this.options.method == 'post' ? body : null);

    } catch (e) {
      this.dispatchException(e);
    }
  },

  setRequestHeaders: function() {
    var requestHeaders =
      ['X-Requested-With', 'XMLHttpRequest',
       'X-Prototype-Version', Prototype.Version];

    if (this.options.method == 'post') {
      requestHeaders.push('Content-type',
        'application/x-www-form-urlencoded');	
      /* Force "Connection: close" for Mozilla browsers to work around
       * a bug where XMLHttpReqeuest sends an incorrect Content-length
       * header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType)
        requestHeaders.push('Connection', 'close');
    };

    if (this.options.requestHeaders)
      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);

    for (var i = 0; i < requestHeaders.length; i += 2)
      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState != 1)      this.respondToReadyState(this.transport.readyState);
  },

  header: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) {}
  },

  evalJSON: function() {
    try {
      return eval(this.header('X-JSON'));
    } catch (e) {}
  },

  evalResponse: function() {
    try {
      return eval(this.transport.responseText);
    } catch (e) {
      this.dispatchException(e);
    }
  },

  respondToReadyState: function(readyState) {
    var event = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();

    if (event == 'Complete') {     
	 if ((this.header('Content-type') || '').match(/^text\/javascript/i)) return this.evalResponse();
	 
      try {
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport, json);
      } catch (e) {
        this.dispatchException(e);
      }
    }
	

	
    try {
      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + event, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }

    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
    if (event == 'Complete')
      this.transport.onreadystatechange = Prototype.emptyFunction;
  },

  dispatchException: function(exception) {    
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Updater = Class.create();

Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.containers = {
      success: container.success ? $(container.success) : $(container),
      failure: container.failure ? $(container.failure) :
        (container.success ? null : $(container))
    };

    this.transport = Ajax.getTransport();
    this.setOptions(options);

    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
    }).bind(this);

    this.request(url);
  },

  updateContent: function() {
    var receiver = this.responseIsSuccess() ?
      this.containers.success : this.containers.failure;
    var response = this.transport.responseText;

    if (!this.options.evalScripts)
      response = response.stripScripts();

    if (receiver) {
      if (this.options.insertion) {
        new this.options.insertion(receiver, response);
      } else {
        Element.update(receiver, response);
      }
    };

    if (this.responseIsSuccess()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});




function $() {
  var results = [], element;
  for (var i = 0; i < arguments.length; i++) {
    element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    results.push(Element.extend(element));
  }
  return results.length < 2 ? results[0] : results;
};

document.getElementsByClassName = function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(Element.extend(child));
    return elements;
  });
};

/*--------------------------------------------------------------------------*/

if (!window.Element)
  var Element = new Object();

Element.extend = function(element) {
  if (!element) return;
  if (_nativeExtensions) return element;

  if (!element._extended && element.tagName && element != window) {
    var methods = Element.Methods, cache = Element.extend.cache;
    for (property in methods) {
      var value = methods[property];
      if (typeof value == 'function')
        element[property] = cache.findOrStore(value);
    }
  }

  element._extended = true;
  return element;
};

Element.extend.cache = {
  findOrStore: function(value) {
    return this[value] = this[value] || function() {
      return value.apply(null, [this].concat($A(arguments)));
    }
  }
};

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      Element[Element.visible(element) ? 'hide' : 'show'](element);
    }
  },

  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = 'none';
    }
  },

  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = '';
    }
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
  },

  update: function(element, html) {
    $(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
  },

  replace: function(element, html) {
    element = $(element);
    if (element.outerHTML) {
      element.outerHTML = html.stripScripts();
    } else {
      var range = element.ownerDocument.createRange();
      range.selectNodeContents(element);
      element.parentNode.replaceChild(
        range.createContextualFragment(html.stripScripts()), element);
    }
    setTimeout(function() {html.evalScripts()}, 10);
  },

  getHeight: function(element) {
    element = $(element);
    return element.offsetHeight;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).include(className);
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).add(className);
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).remove(className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    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.remove(node);
    }
  },

  empty: function(element) {
    return $(element).innerHTML.match(/^\s*$/);
  },

  childOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);
    while (element = element.parentNode)
      if (element == ancestor) return true;
    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var x = element.x ? element.x : element.offsetLeft,
        y = element.y ? element.y : element.offsetTop;
    window.scrollTo(x, y);
  },

  getStyle: function(element, style) {
    element = $(element);
    var value = element.style[style.camelize()];
    if (!value) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        var css = document.defaultView.getComputedStyle(element, null);
        value = css ? css.getPropertyValue(style) : null;
      } else if (element.currentStyle) {
        value = element.currentStyle[style.camelize()];
      }
    }

    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';

    return value == 'auto' ? null : value;
  },

  setStyle: function(element, style) {
    element = $(element);
    for (var name in style)
      element.style[name.camelize()] = style[name];
  },

  getDimensions: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'display') != 'none')
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = '';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = 'none';
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element._overflow = element.style.overflow;
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
  },

  undoClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element.style.overflow = element._overflow;
    element._overflow = undefined;
  }
};

Object.extend(Element, Element.Methods);

var _nativeExtensions = false;

if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  var HTMLElement = {};
  HTMLElement.prototype = document.createElement('div').__proto__;
};

Element.addMethods = function(methods) {
  Object.extend(Element.Methods, methods || {});

  if(typeof HTMLElement != 'undefined') {
    var methods = Element.Methods, cache = Element.extend.cache;
    for (property in methods) {
      var value = methods[property];
      if (typeof value == 'function')
        HTMLElement.prototype[property] = cache.findOrStore(value);
    }
    _nativeExtensions = true;
  }
};

Element.addMethods();

var Toggle = new Object();
Toggle.display = Element.toggle;

/*--------------------------------------------------------------------------*/





/*--------------------------------------------------------------------------*/

Abstract.Insertion = function(adjacency) {
  this.adjacency = adjacency;
};

Abstract.Insertion.prototype = {
  initialize: function(element, content) {
    this.element = $(element);
    this.content = content.stripScripts();

    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        if (this.element.tagName.toLowerCase() == 'tbody') {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range = this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      this.insertContent([this.range.createContextualFragment(this.content)]);
    }

    setTimeout(function() {content.evalScripts()}, 10);
  },

  contentFromAnonymousTable: function() {
    var div = document.createElement('div');
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
};

var Insertion = new Object();

Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});

Insertion.Top = Class.create();
Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(true);
  },

  insertContent: function(fragments) {
    fragments.reverse(false).each((function(fragment) {
      this.element.insertBefore(fragment, this.element.firstChild);
    }).bind(this));
  }
});

Insertion.Bottom = Class.create();
Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
  initializeRange: function() {
    this.range.selectNodeContents(this.element);
    this.range.collapse(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.appendChild(fragment);
    }).bind(this));
  }
});

Insertion.After = Class.create();
Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
  initializeRange: function() {
    this.range.setStartAfter(this.element);
  },

  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment,
        this.element.nextSibling);
    }).bind(this));
  }
});

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set(this.toArray().concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set(this.select(function(className) {
      return className != classNameToRemove;
    }).join(' '));
  },

  toString: function() {
    return this.toArray().join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);
var Field = {
  clear: function() {
    for (var i = 0; i < arguments.length; i++)
      $(arguments[i]).value = '';
  },

  focus: function(element) {
    $(element).focus();
  },

  present: function() {
    for (var i = 0; i < arguments.length; i++)
      if ($(arguments[i]).value == '') return false;
    return true;
  },

  select: function(element) {
    $(element).select();
  },

  activate: function(element) {
    element = $(element);
    element.focus();
    if (element.select)
      element.select();
  }
};

/*--------------------------------------------------------------------------*/

var Form = {
  serialize: function(form) {
    var elements = Form.getElements($(form));
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
      var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }

    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = $(form);
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    $(form).reset();
  }
};

Form.Element = {
  serialize: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;

      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];

      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('&');
    }
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
};

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && typeof(opt[value])=="undefined") value = opt.text;
    };
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && typeof(opt[value])=="undefined")  optValue = opt.text;
        value.push(optValue);
      }
    };
    return [element.name, value];
  }
};

/*--------------------------------------------------------------------------*/

var $F = Form.Element.getValue;

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = function() {};
Abstract.TimedObserver.prototype = {
  initialize: function(element, frequency, callback) {
    this.frequency = frequency;
    this.element   = $(element);
    this.callback  = callback;

    this.lastValue = this.getValue();
    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
};

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = function() {};
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    var elements = Form.getElements(this.element);
    for (var i = 0; i < elements.length; i++)
      this.registerCallback(elements[i]);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        case 'password':
        case 'text':
        case 'textarea':
        case 'select-one':
        case 'select-multiple':
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
};

Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
};

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,

  element: function(event) {
    return event.target || event.srcElement;
  },

  isLeftClick: function(event) {
    return (((event.which) && (event.which == 1)) ||
            ((event.button) && (event.button == 1)));
  },

  pointerX: function(event) {
    return event.pageX || (event.clientX +
      (document.documentElement.scrollLeft || document.body.scrollLeft));
  },

  pointerY: function(event) {
    return event.pageY || (event.clientY +
      (document.documentElement.scrollTop || document.body.scrollTop));
  },

  stop: function(event) {
    if (event.preventDefault) {
      event.preventDefault();
      event.stopPropagation();
    } else {
      event.returnValue = false;
      event.cancelBubble = true;
    }
  },

  // find the first node with the given tagName, starting from the
  // node the event was triggered on; traverses the DOM upwards
  findElement: function(event, tagName) {
    var element = Event.element(event);
    while (element.parentNode && (!element.tagName ||
        (element.tagName.toUpperCase() != tagName.toUpperCase())))
      element = element.parentNode;
    return element;
  },

  observers: false,

  _observeAndCache: function(element, name, observer, useCapture) {
    if (!this.observers) this.observers = [];
    if (element.addEventListener) {
      this.observers.push([element, name, observer, useCapture]);
      element.addEventListener(name, observer, useCapture);
    } else if (element.attachEvent) {
      this.observers.push([element, name, observer, useCapture]);
      element.attachEvent('on' + name, observer);
    }
  },

  unloadCache: function() {
    if (!Event.observers) return;
    for (var i = 0; i < Event.observers.length; i++) {
      Event.stopObserving.apply(this, Event.observers[i]);
      Event.observers[i][0] = null;
    }
    Event.observers = false;
  },

  observe: function(element, name, observer, useCapture) {
    var element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.attachEvent))
      name = 'keydown';

    this._observeAndCache(element, name, observer, useCapture);
  },

  stopObserving: function(element, name, observer, useCapture) {
    var element = $(element);
    useCapture = useCapture || false;

    if (name == 'keypress' &&
        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
        || element.detachEvent))
      name = 'keydown';

    if (element.removeEventListener) {
      element.removeEventListener(name, observer, useCapture);
    } else if (element.detachEvent) {
      element.detachEvent('on' + name, observer);
    }
  }
});

/* prevent memory leaks in IE */
Event.observe(window, 'unload', Event.unloadCache, false);
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;

    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        p = Element.getStyle(element, 'position');
        if (p == 'relative' || p == 'absolute') break;
      }
    } while (element);
    return [valueL, valueT];
  },

  offsetParent: function(element) {
    if (element.offsetParent) return element.offsetParent;
    if (element == document.body) return element;

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return element;

    return document.body;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = this.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = this.realOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = this.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
	    element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  clone: function(source, target) {
    source = $(source);
    target = $(target);
    target.style.position = 'absolute';
    var offsets = this.cumulativeOffset(source);
    target.style.top    = offsets[1] + 'px';
    target.style.left   = offsets[0] + 'px';
    target.style.width  = source.offsetWidth + 'px';
    target.style.height = source.offsetHeight + 'px';
  },

  page: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent==document.body)
        if (Element.getStyle(element,'position')=='absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      valueT -= element.scrollTop  || 0;
      valueL -= element.scrollLeft || 0;
    } while (element = element.parentNode);

    return [valueL, valueT];
  },

  clone: function(source, target) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || {});

    // find page position of source
    source = $(source);
    var p = Position.page(source);

    // find coordinate system to use
    target = $(target);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(target,'position') == 'absolute') {
      parent = Position.offsetParent(target);
      delta = Position.page(parent);
    };

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    };

    // set position
    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
  },

  absolutize: function(element) {
    element = $(element);
    if (element.style.position == 'absolute') return;
    Position.prepare();

    var offsets = Position.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';;
    element.style.left   = left + 'px';;
    element.style.width  = width + 'px';;
    element.style.height = height + 'px';;
  },

  relativize: function(element) {
    element = $(element);
    if (element.style.position == 'relative') return;
    Position.prepare();

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
  }
};

// Safari returns margins on body which is incorrect if the child is absolutely
// positioned.  For performance reasons, redefine Position.cumulativeOffset for
// KHTML/WebKit only.
if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
  Position.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
};




Object.extend(String.prototype, {
  truncate: function(length, truncation) {
    length = length || 30;
    truncation = truncation === undefined ? '...' : truncation;
    return this.length > length ? this.slice(0, length - truncation.length) + truncation : this;
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  }
});


/*
说明: 一个全局对象,它负责所有共用的方法和对象的创建工作,和一些系统中用到的常量的命名管理
作者:吴少刚
项目组:商格里拉项目组
创建日期:2006-11-21
*/


//创建一个全局的类,这个类拥有全局共用的方法和属性,
//这样做就像相当于加了命名空间，使方法易找易用。

//页面对象的统一管理,并有注解，利于查看每个控件的作用
var G = new Object();

G = 
{
    JSObjForLoad:null,
    PageObj: {
        Div_Nav: "divNav",//导航菜单容器 G.PageObj.Div_Feed
        Div_SimMenu:"divSimMenu",
        Div_Feed: "Div_Feed",//装载提要的最大的Fram
        Div_Info: "divInfoTooltip",//装载信息提示Frame或者一个Feed  
        Div_MenuFeed:"divMenuFeed",
        Div_DM:"DM"//拖动装饰框,主要的任务是复制当前Feed的外观,然后实现动画拖动
            
      },
 
    //所有需要样式的列表，集中在这里以便在各处调用 Style.Feed.TitleBar.Title.Title
    Style:{
           Feed:{
               TitleBar:{
                  CEIcon:"CEIcon",                                 //展开和折叠的样式                                              
                  Edit:"Edit",                                     //编辑按钮样式     
                  Close:"Close",                                   //关闭按钮样式
                  UpDown:"UpDown",                                 //上移和下移按钮的样式      
                  FeedTitleBarWork:"FeedTitleBarWork",             //标题栏中程序控制区(这个是关键，所有要控制的标题栏按钮均在此区域)                   
                  FeedEMCArea:"FeedEMCArea",
                  
                  
                  FeedTitleBar:  "FeedTitleBar",                  //提要标题栏的默认样式
                  FeedTiBarMOverM:"FeedTitleBarMOverM",              //提要标题栏当mouse经过时 当不可以移动的提要要另作样式
                  FeedTiBarMOverN:"FeedTitleBarMOverN",              //提要标题栏当mouse经过时，不能移动时它的样式
                  Title:{ Title:"Title",//标题的样式
                          FeedTitleMouseover:"FeedTitleMouseover"},//提要标题当mouse经过时   
                             
                  CloseButtonMouseOver:"MouseOver"//关闭按钮的mouse经过时的样式
               },
               EditArea:{//模板的编辑区
                   FeedEditArea:"FeedEdit", //编辑区样式 
                   FeedEditHeader:"FeedEditHeader"       //编辑区弹出时的页眉样式            
               },
               Frame:{
                    FeedFrame:"FeedFrame"//提要最大框架的样式
               },
               Content:{           
                    FeedContent:"FeedContent"//提要内容区样式
                    
               },
               //模板中各样式 G.Style.Feed.TMP.StanConTMP.divBtn
               TMP:{
                    //标准内容模板
                    StanConTMP:{
                        divBtnF:"divBtnF", //div类型按钮
                        divBtnClickF:"divBtnClickF",//点击后的样式
                        
                         divBtnM:"divBtnM", //div类型按钮
                        divBtnClickM:"divBtnClickM",//点击后的样式
                        
                         divBtnL:"divBtnL", //div类型按钮
                        divBtnClickL:"divBtnClickL"//点击后的样式
                    }
               }            
           },
           //定义菜单所有的样式
           Menu:{
           //菜单构成时样式
          
           MenuPartFrame:"MenuPartFrame",//一个菜单子项的框架样式
           MenuUpStatic:"StaicMenuup",//静态时菜单顶部的样式
           MenuIconArea:"MenuIconArea",//菜单图标区域
           MenuTitle:"MenuTitle",//菜单标题区样式
           MenuTitleForLevel1:"MenuTitleForLevel1",//一级菜单的样式
           SubMenuArea:"SubMenuArea",//子菜单容器样式
           SubMenuAreaFrame:"SubMenuAreaFrame",//子菜单区域样式
            
           ModuleForbid:"ModuleForbid",//菜单禁用的样式
           
          
          
           MenuUpMouseOver:"MenuMouseOver",//菜单上半部分在mouse经过时
           
           //MenuUpArea:"MenuUpArea", //菜单上半部的样式,菜单分二大部分1.上部分(图标区+标题区)2.下半部分(显示子菜单部分)
           DesPop:"InfoTooltip"//提示框弹出          
           
           },
           SimMenu: {
               SimMenuFrame:"SimMenuFrame", 
               MenuPartFrame:"SimMenuPartFrame",//一个菜单子项的框架样式
               MenuUpStatic:"SimMenuUpStatic",//静态时菜单顶部的样式
               MenuIconArea:"SimMenuIconArea",//菜单图标区域
               MenuTitle:"SimMenuTitle",//菜单标题区样式              
               SubMenuArea:"SimSubMenuArea",//子菜单容器样式
               SubMenuAreaFrame:"SimSubMenuAreaFrame"//子菜单区域样式
           },
           //点击菜单弹出一个有效Feed的样式
           PopmessageBox:{
           InfoFrame:"InfoFrame",  //信息提标框的最外面样式
           InfoFeedName:"InfoFeedName",//Feed容器的样式
           InfotitleBarFrame:"InfotitleBarFrame",//提标框标题栏的样式
           AddToPageFrame:"AddToPageFrame"       
           },
          //各列的样式
          Columns:{
            ColOne:"left",
            ColTwo:"center",
            ColThr:"right"        
          },
          LastFrame:{
            lastframe:"ajaxarea"
          },
          //导航菜单样式
          Nav:{
             NavFrame:"NavFrame",//导航框架,最外面一层
            MenuTeam:"MenuTeam",//菜单组框架
            TeamSpace:"MenuTeamSpace",//各分组间的分隔线
            NavTopFrame:"NavTopFrame"//导航的顶部样式
            
          }
      
    },
    //系统在程序中所用图片地址及名称,因为这里的目录结构和未来是不一样的，统一做在这里以后好更换 
    //G.SysPicture.CloseIcon
    SysPicture:{
        
        MenuIconPath:"im/Icon",//菜单小图标路径
        MoveUpIcon:"../images/common/up.gif", //模块上移图片
        MoveDownIcon:"../images/common/down.gif",   //模块下移图片
        CollapseUpIcon:"../images/common/+.gif", //标题栏处折叠后图片
        CollapseDownIcon:"../images/common/shrinkIcon.jpg",//标题栏处折叠前图片
        CloseIcon:"../images/common/X.gif",//关闭小图标
        MenuExpand:"../images/common/-.gif" ,//展开时菜单前方图标
        MenuCollapse:"../images/common/+.gif"//折叠时图标
    },    
    ActionURL: {
        GetData:"http://localhost:8008/GetData.php",//子菜单加载地址
        SaveData:"http://localhost:8008/SaveData.php"//保存数据专用        
    },
    //路径管理
    Path:{
        //系列模板加载路径,模板只用保存文件名称,
        // 在请求时只要加上这个路径就OK. G.TMPPath.EditTMP ConTMP
        TMPPath: {
            EditTMP:"../js/TMP/EditTMP/",//编辑类型模板
            ConTMP:"../js/TMP/ConTMP/"  //内容类型模板
        },
        
        DUrlPath:"../XML/Data/" , //数据路径地址,以后做的页面全放在这个路径下面，在xml配置文件中只需要文件名称即可,还有一种需要全名称地址的，以符号"/"来区别 
        DXSLPath:"../XSL/" //数据模板的地址
        
    },
    findPosX: function(obj){
        var curleft = 0;
        if (obj.offsetParent) {
            while (obj.offsetParent) {
                curleft += obj.offsetLeft;
                obj = obj.offsetParent;
            }
        } else if (obj.x) curleft += obj.x;
        return curleft;    
    },    

    findPosY: function(obj){
        var curtop = 0;
        if (obj.offsetParent) {
            while (obj.offsetParent) {
                curtop += obj.offsetTop;
                obj = obj.offsetParent;
            }
        } else if (obj.y) curtop += obj.y;
        return curtop;    
    },    

    /*
    取得页面滚动的XY座标值
    */
    getScrollXY:  function()
    {
		var scrollY = 0 , scrollX = 0; 
	    if (typeof window.pageYOffset != 'undefined') { 
		    scrollX = window.pageXOffset;
	   	    scrollY = window.pageYOffset; 
	    } 
	    else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') { 
		    scrollX = document.documentElement.scrollLeft;		 
	   	    scrollY = document.documentElement.scrollTop; 
	    } 
	    else if (typeof document.body != 'undefined') { 
		    scrollX = document.body.scrollLeft;
	   	    scrollY = document.body.scrollTop; 
	    }
	    return {left:scrollX,top:scrollY}
    },
    //取得浏览器版本
    getBrowserType: function()
    {
      var _platform = null;
	  if (typeof(navigator) == "undefined")
	   {
		   return "not-browser";
	   }
        var ua = navigator.userAgent.toLowerCase();
        if (/msie/i.test(ua))
        {
            if (/msie 6/i.test(ua))
            {
	            _platform = "ie6";
            }
            else if (/msie 5\.5/i.test(ua))
            {
	            _platform = "ie5.5";
            }
            else if (/msie 5\.[^5]/i.test(ua))
            {
	            _platform = "ie5";
            }
            else
            {
	            _platform = "ie";
            }
            //isIE = true;
        }
        else if (/gecko/i.test(ua))
        {
            _platform = "moz";
           // isMoz = true;
        }
        else if (/opera/i.test(ua))
        {
            _platform = "opera";
           // isPoera = true;
        }
        else
        {
            _platform = "other";
            //isOther = true;
        }
        return _platform;  
    },   
   
      
     /*事件处理类,所有相关的方法都要集中到这里        
     */
     EventUtil: {
        /*为控件附加事件方法
        oTarget:事件对象
        sEventType:事件类型
        fnhandler:事件处理器
        */
        $ADE: function(oTarget,sEventType,fnHandler){

           Event.observe(oTarget,sEventType,fnHandler,false);
        
        },
        /*移除控件的事件*/
        $RME: function(oTarget,sEventType,fnHandler){

               Event.stopObserving(oTarget,sEventType,fnHandler,false)
        },
        /* 格式化事件，由于事件的属性在DOM和IE中有所区别,这样可以把各属性统一起来
         * 使用注意：必须在另一个能获得event对象引用的方法中使用  
         */
        FormatEvent: function(oEvent){
            if(G.Browser.isIE)
            {
                oEvent.charCode = oEvent.type == "keypress"?oEvent.keyCode:0;
                oEvent.eventPhase = 2;//此属性代表事件的阶段：0-捕获阶段,1-在目标上, 2-冒泡阶段
                oEvent.isChar = (oEvent.charCode > 0);
                oEvent.pageX = oEvent.clientX + document.body.scrollLeft;//shubiao相对于页面的X座标
                oEvent.pageY = oEvent.clientY + document.body.scrollTop;
                oEvent.preventDefault = function(){
                    this.returnValue  = false;//阻止事件的默认行为.如事件oncontextmenu发生时,不让用户使用上下文菜单
                };
                if(oEvent.type == "mouseout"){
                    oEvent.relatedTarget = oEvent.toElement;//表示正在进入的元素
                }else if(oEvent.type == "mouseover"){
                    oEvent.relatedTarget = oEvent.fromElement;//表示所离开的元素                    
                }
                
                oEvent.stopPropagation = function(){
                    this.cancelBubble = true;   //阻止事件的冒泡
                };
                
                return oEvent;               
                   
            }       
        },
        
        getEvent: function(){
            if(window.event){
                return this.FormatEvent(window.event);//如果是IE事件则格式化事件
            }else{
                return G.EventUtil.getEvent.caller.arguments[0];
            }
        }
     },
     
     //修复图片,增加效果
    fixImage: function(img, width, height) {
       
       if (!G.Browser.IsIE)
          return;

       var currentSrc = img.src;

       var imgStyle = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + currentSrc + "', sizingMethod='scale')";
       img.src = 'images/clearpixel.gif';
       img.style.width  = width + "px";
       img.style.height = height + "px";
       img.style.filter =  imgStyle;
    },
    
     //把对象定位到指定的对象旁边显示,这两个参数对象都是DIV控件
     //传入参数：CurObj=要定位的对象 TargetObj=目标对象 两个对象都是div对象
     PosToFather: function(CurObj,TopTargetObj,leftTargetObj){
        CurObj.style.position = "absolute";
        CurObj.style.left = "0px";  
        CurObj.style.top = "0px";
        
        if(isNaN(TopTargetObj))//typeof TopTargetObj != "string"&&typeof leftTargetObj!="string")
        {
            CurObj.style.left =   (G.findPosX(leftTargetObj) + parseInt(leftTargetObj.clientWidth)) + 5 + "px";//可能要加菜单的客户端宽度
            CurObj.style.top = (G.findPosY(TopTargetObj) - parseInt(TopTargetObj.clientHeight) - 3) + "px"; 
            
        }
        else
        {
            CurObj.style.left = leftTargetObj + "px";//可能要加菜单的客户端宽度
            CurObj.style.top = TopTargetObj + "px"; 
            
        }         
     },

    //从JS文件载入JS对象,一般这种情况就是编辑模板类的载入    
    //传入参数：FileURL 
    LoadJSObj: function(TMPURL,FatherObj,SucessHandler)
    {
       //用ajax动态获取JS文件对象成功
       new  Ajax.Request(TMPURL,{method:'get',parameters:null,onComplete:SucessHandler.bind(FatherObj)})
        
    } ,
    
    
    //转换成HTML编码
   htmlEncode: function(text) {
	return text.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
    }  

    
}
if(!browser)
  var browser = G.getBrowserType();

//浏览器特性
G.Browser={                  
            isIE: /ie.*/g.test(browser),//|(typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined'),            
            isMoz:/moz.*/g.test(browser),
            isOpera:/opera.*/g.test(browser),
            isFirefox:(navigator.userAgent.toLowerCase().indexOf("firefox")!=-1),
            isOther:/other.*/g.test(browser)  
  } 


if (G.Browser.isMoz) {
	HTMLElement.prototype.removeNode = function() {
		this.parentNode.removeChild(this);
	}
}
  
//页面上有关HTML的操作方法  
G.HTMLPro = {
    //把一段html代码插入指定的对象最后面
    insertBottom:function(pObj, pContent)
    {
	    var tElement = $(pObj);
	    if(tElement.insertAdjacentHTML)
	    {			
		    if(tElement.tagName == 'TABLE')
		    {
			    //在表格中不能直接以HTML的方式把一行插入进到， 所以上面的方法不行
			    var tDiv=document.createElement("div"),tRows;
			    tDiv.innerHTML = "<table>"+pContent+"</table>"
			    tRows= tDiv.childNodes[0].tBodies[0].rows;
			    while(tRows.length>0){
				    pObj.tBodies[0].appendChild(tRows[0])
			    }
		    }else
		    {
			    tElement.insertAdjacentHTML('beforeEnd', pContent);	
		    }
		    tRows = null;
		    tDiv = null;
	    }else
	    {
		    var tRange = tElement.ownerDocument.createRange();//系统对象				
  		    initializeRange(tRange,tElement);//初始化范围对象				
		    insertContent([tRange.createContextualFragment(pContent)],tElement);
		    tRange = null;
	    }
    },


    initializeRange:function(pRange,pElement){
        pRange.selectNodeContents(pElement);
        pRange.collapse(pElement);
    },

    insertContent:function(fragments,pElement) {
        fragments.each((function(fragment) {	
          pElement.appendChild(fragment);
        }).bind(this));
    }
}  
  

//*********************************************拖动服务对象**********************//
//检测是否拖动处理完毕,如果完毕则隐藏装饰框DM(在页面上的框架)
var CheckMoveIsEnd = {
    CheckObj:{
        DM:null,
        FeedObj:null,
        curColObj:null  
     },
    Init:function(DM,FeedObj,curColObj)
    {
        this.CheckObj.DM = DM;
        this.CheckObj.FeedObj = FeedObj; 
        this.CheckObj.curColObj = curColObj;
        this.Check();       
    },
    Check: function(){
       if(this.CheckObj.DM.IsMoveEnd)
       {
            this.CheckObj.curColObj.Frame.replaceChild(this.CheckObj.FeedObj.Frame, G.MoveDisplayDiv);
            //交换在数组中的位置            
            G.MoveDisplayDiv.style.display = "none";
            this.CheckObj.FeedObj.Frame.style.position = "static";     
           
           this.CheckObj.DM.style.display = "none";
           this.CheckObj.FeedObj.Frame.style.visibility="visible";
           this.CheckObj.DM.innerHTML = "";
           
            this.CheckObj.DM = null;
            this.CheckObj.FeedObj = null; 
            this.CheckObj.curColObj = null;
           
       }
       else
       { 
           setTimeout("CheckMoveIsEnd.Check()", 200);
       }
    }

}

//在页面上显示信息
G.DM = function(divID,message,isadd)
{
    if(isadd)
           $(divID).innerHTML += message;
     else      
        $(divID).innerHTML = message;       
}

//指定控件在页面上滑动
//原理：从原始宽度以加速度的形式到指定的值,
//然后再以指定的加速度的形式停止到指定的宽度
//传入参数：MoveObj=移动对象 ObjWidth= 对象的原始宽度,AcceleValue=开始递增的值
G.SlideObj = function(MoveObj,ObjWidth,AcceleValue)
{
     MoveObj = $(MoveObj);
     if(ObjWidth <= MoveObj.clientWidth)
     {
           window.clearTimeout();
           MoveObj.style.width = ObjWidth + "px"; 
     }
     else
     {
        MoveObj.style.width = MoveObj.clientWidth + AcceleValue + "px";
        window.setTimeout("G.SlideObj('"+MoveObj.id +"',"+ObjWidth+","+AcceleValue+")", 10);
     }     
}

//隐藏清空提示框
//传入参数：ObjID=控制控件的ID EventType=事件类型 HOD=隐藏还是显示,为真则显示否则隐藏
G.HiddenODisplayFrame = function(ObjID,EventType,HOD)
{
    var PageObj = $(ObjID);
    var firstChild = PageObj.firstChild;
    if(firstChild != null)
     {
        firstChild.removeNode(true);
     }
    switch (EventType)
    {
        case "mouseover":
        {            
             PageObj.style.display = "block";     
             PageObj.innerHTML = "";            
            break;
        }
        case "mouseout":
        {            
             PageObj.style.display = "none";
                  
             PageObj.innerHTML = "";
            break;
        }
        case "click":
        {     
            //主要是针对菜单附件的隐藏或显示
           //当点击菜单时则显示控件,当点击关闭按钮时则隐藏控件 
           if(HOD)
           {      
                 PageObj.style.display = "block";     
                 PageObj.innerHTML = "";
           }
           else
           {
                PageObj.style.display = "none";     
                PageObj.innerHTML = "";
           }             
            break;
        }
    }   
}


//拖动时显示框
G.MoveDisplayDiv = document.createElement("div");
G.MoveDisplayDiv.ID = "MoveDisplayDiv";
G.MoveDisplayDiv.className = "MoveDisplayDiv";
//*********************************************页面上显示数据的方法**********************//
G.DisplayInfo = function(PageObj,Info){
    
    var pageobj = $(PageObj);
    pageobj.innerHTML = Info;
}
//*********************************************页面上显示数据的方法**********************//


//--------------------------------------------------DisFeed------------------------------------------------------//
/*
    名称:显示菜单附件 Feed的类,全局只实例化一个动态显示类
    功能及构成描述:一个容器类，它主要是用来在页面上包含Feed用的,并且要及时删除,                  
    初始化参数:一些保存在XML文件中的基本参数数据
             
*/
DisMenuFeed = Class.create();
DisMenuFeed.prototype = {
    initialize: function()
    {
        var frame = document.createElement("div");//最外框架
        var feedframe = document.createElement("div");//装Feed的框架
        var titleBarFrame = document.createElement("div");//最上面控制行为的超链
        this.Feed = null;//当前Feed
        this.CurMenu = null;//代表当前菜单
        
        this.PageContainerObj = null;//在页面上容纳MenuFeed的对象
       
        
        this.Frame = frame;
        this.FeedFrame = feedframe;
        
        frame.name = "InfoFrame";
        feedframe.name = "InfoFeedName";
        titleBarFrame.name = "InfotitleBarFrame"; 
        
        frame.className = G.Style.PopmessageBox.InfoFrame;
        feedframe.className = G.Style.PopmessageBox.InfoFeedName;
        titleBarFrame.className = G.Style.PopmessageBox.InfotitleBarFrame;
        
        var titlebar = '<table cellpadding=0 cellspacing=0 width=100%><tr><td align=center><div style="margin-left:10px;margin-top:5px; margin-bottom:5px"><a href="javascript:void(0);;">添加栏目到页面</a></div></td><td><div style="float:right;margin-right:8px"><a href="javascript:void(0);"><img src="'+ G.SysPicture.CloseIcon +'" border="0px" ></a></div></td></tr></table>';
         //var titlebar = '<div></div><div></div>';
        titleBarFrame.innerHTML = titlebar;
        var divs = titleBarFrame.getElementsByTagName("div");
        divs[0].className = G.Style.PopmessageBox.AddToPageFrame;
        
        feedframe.innerHTML = "数据正在装载中......";
        
        this.AddToPageFrame = divs[0]; 
        this.CloseFrame = divs[1];
        
        G.EventUtil.$ADE(this.CloseFrame,"click",this.MouseClickEventHandler.bind(this));   
        
        frame.appendChild(titleBarFrame);
        frame.appendChild(feedframe);      
        
    },
    //增加一个Feed框架到显示容器
    //传入参数：Feed=所构造的菜单附件Feed FatherMenu=当前菜单
    AddFeed: function(Feed,FatherMenu){
        if(this.Feed != null)
        {
            this.ClearFeed();
            
        }
        
        if(Feed != null)
        {
            this.FeedFrame.innerHTML = ""; 
            this.Feed = Feed;
            this.CurMenu = FatherMenu;
            this.FeedFrame.appendChild(Feed.Frame); 
        } 
        var PageObj = $(G.PageObj.Div_MenuFeed);
        this.PageContainerObj = PageObj;
        
          
       
        PageObj.appendChild(this.Frame); 
        
    },
    //清除Feed内容,及时回收内存
    ClearFeed: function(){
        if(this.Feed != null)
        {
            //删除移除方式
            this.Feed.Frame.removeNode(true);
            this.Feed = null;  
            this.CurMenu = null;
            
        }
    },
    //mouse经过的事件处理
    MouseOverEventHandler: function()
    {
        var oEvent = G.EventUtil.getEvent();
        if(oEvent.type == "mouseover")
        {
            this.className = G.Style.Feed.TitleBar.CloseButtonMouseOver;
         }
         else{
            this.className = "";
         } 
    },
    MouseClickEventHandler: function()
    {
        var PageObj = $(G.PageObj.Div_MenuFeed);
        PageObj.style.display = "none";
        
        this.ClearFeed();
    }
    
}


////--------------------------------------------------RequestCount------------------------------------------------------//
///*
//    名称:请求记数对象,主要是决定异步请求终止的条件
//    功能及构成描述:导步请求记数对象,根据条件终止当前发请求. 如果不按次数,则按时间来终止                  
//    初始化参数:MaxCount=发请求的最大次数 MaxTime=发请求的最大时间(秒) IsByCount=是否按次数终止
//             
//*/
//RequestCount = Class.create();
//RequestCount.prototype = {
//    initialize: function(MaxCount,MaxTime,StarTime,IsByCount)
//    {
//        
//        this.CurCount = 0;
//        this.MaxCount = MaxCount;
//        this.MaxTime = MaxTime;
//        this.IsByCount = IsByCount;
//        this.StatTime = StarTime;
//        this.CurTime = 
//    }
//}
 
 
 
 
//全局对象,一次只声明一次
var G_DMFeed = new DisMenuFeed();   

var EditTMP = new Object();
var ContentTMP = new Object();






//显示或隐藏登录层
function ShowLogin(name,title,display,x,y,x1,y1,evt)
{
	var TheName = document.getElementById(name);
	if(typeof TheName!='undefined'&&TheName!=null)
	{
		try
		{
			var oEvent = G.EventUtil.getEvent();

			var popWidth=TheName.clientWidth;
			if(x!=null&&popWidth==0)
				popWidth = x;
			var popHeight=TheName.clientHeight;
			if(y!=null&&popHeight==0)
				popHeight = y;
			var popLeftAdjust;
			var popTopAdjust;

			try
			{
				var width = document.body.clientWidth || window.screen.width;
				var height = window.screen.availHeight;
      
				if(event.clientX+12+popWidth>width) popLeftAdjust=-popWidth-24
					else popLeftAdjust=0;
				if(event.clientY+12+popHeight>height) popTopAdjust=-popHeight-24
					else popTopAdjust=0;
       
				TheName.style.left=12 + event.clientX + G.getScrollXY().left + popLeftAdjust;
				TheName.style.top=12 + event.clientY + G.getScrollXY().top + popTopAdjust;

				if(parseInt(TheName.style.left) <= 0) TheName.style.left = 10;
				if(parseInt(TheName.style.top) <= 0) TheName.style.top = 10;
				if(parseInt(TheName.style.left) >= width) TheName.style.left = width - 10;
				if(parseInt(TheName.style.top) >= height) TheName.style.top = height - 10;
			}
			catch(e)
			{
				if(x1==null) x1 = x;
				if(y1==null) y1 = y;
				TheName.style.left = G.getScrollXY().left+x1;
				TheName.style.top  = G.getScrollXY().top+y1;
			}

		}catch(e){}

		if(display!=null)
			TheName.style.display=display;
		else
			TheName.style.display=TheName.style.display=='none'?'':'none';

		if(typeof TheName.DragStart=='undefined'&&title!=null&&title!='')
		{
			//建立拖动
			DargForBuild(title,name);
		}
	}
}

//登录层
function showLoginLayer(username,url,target,eventid,evt)
{
	
	var TheDiv = document.getElementById('loginLayer');
	if(url.toLowerCase().indexOf('void(0)') >= 0)
	{
		url = '';
	}
	if(typeof TheDiv=='undefined'||TheDiv==null)
	{
		var oDiv 			= document.createElement("DIV");
		oDiv.id 			= 'loginLayer';
		oDiv.style.display  = 'none';
		oDiv.style.position = 'absolute';
		oDiv.style.width	= '420px';
		oDiv.style.height	= '180px';
		oDiv.style.zIndex	= 1;
		oDiv.style.backgroundColor = '#FFFFFF';

		var screenWidth 	= document.body.clientWidth || window.screen.width;
		var screenHeight 	= window.screen.availHeight;
		w				= screenWidth - 400;
		w				= Math.ceil( ( w + G.getScrollXY().left ) / 2 ); 
		h				= screenHeight - 180;
		h				= Math.ceil( ( h + G.getScrollXY().top ) / 2 ); 
		lPos 			= w;
		tPos 			= h;
		oDiv.style.top 		= tPos + 'px';
		oDiv.style.left 	= lPos + 'px';
		document.body.appendChild(oDiv);
		TheDiv				= oDiv;
		url = url.replace(/'+/g,"\\'");
		
		if(url.toLowerCase().indexOf('javascript:') >= 0)
		{
			var actionUrl = "JavaScript:getDataforAjax('checkLogin&isSess=no&'+Form.serialize(document.getElementById('loginForm')),null,'setcenter','post','"+getUrlHost()+"setcenter/index.php')";
		}
		else
		{
			var actionUrl = getUrlHost()+'setcenter/index.php?module=setcenter&action=checkLogin&isSess=no';
		}
   
		TheDiv.innerHTML = '<iframe id="ifrml" frameBorder="0" width="100%" height="200" scrolling="no"></iframe><div id="layerInIFrml" style="position: absolute; top: 0px; left: 0px; padding:0px;"><table width="100%" height="19" border="0" cellpadding="0" cellspacing="0" background="'+getUrlHost()+'images/common/layImageBg.gif"><tr><td width="95%" style="cursor:hand;" id="titlelogin" align="left">&nbsp;</td><td width="5%" align="right" style="padding-right:5px;"><img src="'+getUrlHost()+'images/common/close.gif" height="13" width="13" title="关闭" border="0" onclick="ShowLogin(\'loginLayer\');closeLoginDiv(\''+url+'\',\''+target+'\',\''+eventid+'\');" style="cursor:hand"/></td></tr></table><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="50%"><form id="loginForm" name="loginForm" action="'+actionUrl+'" method="post" onsubmit="ShowLogin(\'loginLayer\');closeLoginDiv(\''+url+'\',\''+target+'\',\''+eventid+'\');'+(target=='_blank'?'history.go(0);history.go(0);':'')+'" target="'+target+'"><table width="100%" border="0" cellspacing="0" cellpadding="0" style="padding-left:3px;">' + (url==null?'':'<input type="hidden" name="url" value="'+url+'" />') + ' <tr><td width="34%" height="8"></td><td width="66%"></td></tr><tr><td height="30" colspan="2" class="F12_000000_B">欢迎登陆商格里拉</td></tr><tr><td height="30" align="right" class="F12_666666">用户名：</td><td><label><input type="text" name="username" value="'+username+'" onKeyDown="if (event.keyCode==13){this.form.userPwd.focus();}" /></label></td></tr><tr><td height="30" align="right" class="F12_666666">密	码：</td><td align="center" valign="middle"><input type="password" name="userPwd" onKeyDown="if (event.keyCode==13){this.form.onsubmit();this.form.submit();}"/></td></tr><tr><td height="30" align="center" valign="middle">&nbsp;</td><td align="left" valign="middle"  class="F12_666666"><label><input type="checkbox" name="isSaveCookie" value="1" checked="checked"/></label><label for="checkbox">记住我的帐号</label></td></tr><tr><td height="30" colspan="2" align="center" valign="middle"><label></label><span style="padding-left:8px;"><input name="image222" type="image" src="'+getUrlHost()+'images/common/Yes.jpg" align="absmiddle" width="67" height="23" onclick=""/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="'+getUrlHost()+'images/common/No.jpg" align="absmiddle" width="69" height="25" onclick="ShowLogin(\'loginLayer\');closeLoginDiv(\''+url+'\',\''+target+'\',\''+eventid+'\');" style="cursor:hand" /></span></td></tr></table></form></td><td width="30" align="center"><img src="'+getUrlHost()+'images/common/SignBg.gif" width="1" height="145" /></td><td><table width="98%" border="0" cellspacing="0" cellpadding="0"><tr><td height="30" align="left"><span class="F12_666666">还不是会员？</span>	<a href="'+getUrlHost()+'setcenter/index.php?module=setcenter&action=regBasic" target="_blank" class="F12_FF7800_L_U">免费注册</a></td></tr><tr><td height="30" align="left"><span class="F12_666666">忘记密码了？</span>	<a href="'+getUrlHost()+'setcenter/index.php?module=setcenter&action=getPwd" target="_blank" class="F12_FF7800_L_U">找回密码</a></td></tr></table></td></tr></table><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td height="23" background="'+getUrlHost()+'images/common/layImageBg2.gif">&nbsp;</td></tr></table></div>';

	}
	//显示
    
	try{ShowLogin('loginLayer','titlelogin',null,400,400,350,50,evt);}
	catch(e){TheDiv.style.display  = '';}
}


//检查是否登录
function checkLogin(type,isWait,url,htmlContent,evt)
{
	
   if(navigator.appName.indexOf("Explorer") > -1)
   {
	 if(event.srcElement.tagName != 'A' || event.srcElement.tagName != 'AREA')
	 {
		if(event.srcElement.parentElement.tagName == 'A' || event.srcElement.parentElement.tagName == 'AREA')
			var oEvent = event.srcElement.parentElement;
		else
			var oEvent = event.srcElement;
	 }
	 else
	 {
		 var oEvent = event.srcElement;
	 }
   }
   else
    {

	   if(evt.target.tagName != 'A' || evt.target.tagName != 'AREA')
	 {
		if(evt.target.parentNode.tagName == 'A' || evt.target.parentNode.tagName == 'AREA')
			var oEvent = evt.target.parentNode;
		else
			var oEvent = evt.target;
	 }
	 else
	 {
		 var oEvent = evt.target;
	 }
    }
	var loginUserid		= getcookie('userid');
	var loginUserName	= getcookie('username');
	if(url==null)
	{
		if(oEvent.href==null||oEvent.href==''||oEvent.href=='#'||oEvent.href.toLowerCase().indexOf('void(0)')>=0)
			url = window.location.href;
		else
			url = oEvent.href;
	}
	url = url.replace(/#\w*/,'');
	if(type==1)//复杂检查
	{
		if(oEvent.id == null||oEvent.id=='')
		{
			oEvent.id = 'checkLoginA';
		}
		try
		{
			oEvent.href = 'JavaScript:void(0)';
			var target = oEvent.target;
			oEvent.target = '';
		}catch(e){}
		if(chechIsDiv())
		{
			hurl		= getUrlHost()+'setcenter/index.php';
			pars	= 'module=setcenter&action=checkIsLogin&from=div&target='+target+'&eventid='+oEvent.id+(isWait!=null&&isWait==true?'&isWait='+isWait:'')+'&url='+url.replace(/\?+/g, '<_>').replace(/\&+/g, '>_<');
			var myAjax	= new Ajax.Updater("saveAjaxLogin", hurl, {method: 'get', parameters: pars,evalScripts: true});
		}
	}
	else if(type==2)//重新登录
	{
		if(oEvent.id == null||oEvent.id=='')
		{
			oEvent.id = 'checkLoginA';
		}
		try
		{
			oEvent.href = 'JavaScript:void(0)';
			var target = oEvent.target;
			oEvent.target = '';
		}catch(e){}
		showLoginLayer(loginUserName,url,target,oEvent.id,evt);
	}
	else//简单检查(只检查是否存COOKIE)
	{
		
		if(loginUserid==null||loginUserid=='')
		{
			if(oEvent.id == null||oEvent.id=='')
			{
				oEvent.id = 'checkLoginA';
			}
			try
			{
				oEvent.href = 'JavaScript:void(0)';
				var target = oEvent.target;
				oEvent.target = '';
			}catch(e){}
			if(isWait!=null&&isWait==true)
			{
				
				showWaitDiv(loginUserName,url,target,oEvent.id,htmlContent,evt);
				
			}
			else
			{
				
				showLoginLayer(loginUserName,url,target,oEvent.id,evt);
			}
			return false;
		}
		return true;
	}
}

//关闭登录层
function closeLoginDiv(url,target,eventid)
{
	try{
		if(eventid!=''&&eventid!=null)
		{
			var theobj = document.getElementById(eventid);
			theobj.href = url;
			theobj.target = target;
			if(theobj.id=='checkLoginA')
			{
				theobj.id = '';
			}
		}
	}catch(e){}
}

//检查是否有提交AJAX层(无则创建)
function chechIsDiv()
{
	//创建要提交的层
	var TheDiv				= document.getElementById('saveAjaxLogin');
	if(typeof TheDiv=='undefined'||TheDiv==null)
	{	
		var oDiv			= document.createElement("DIV");
		oDiv.id				= "saveAjaxLogin";
		oDiv.style.display	= "none";
		document.body.appendChild(oDiv);
		return true;
	}
	else return true;
}

var timeWait;
//是否显示登录等待层
function showWaitDiv(username,url,target,eventid,htmlContent,evt)
{

	clearTimeout(timeWait);
	var TheDiv = document.getElementById('loginWaitLayer');
	if(typeof TheDiv=='undefined'||TheDiv==null)
	{
		TheDiv  			= document.createElement("DIV");
		TheDiv.id 			= 'loginWaitLayer';
		TheDiv.style.display  = 'none';
		TheDiv.style.border   = '#999999 2px solid';
		TheDiv.style.position = 'absolute';
		TheDiv.style.width	= '280px';
		TheDiv.style.height	= '60px';
		TheDiv.style.backgroundColor = '#FFFFFF';
		document.body.appendChild(TheDiv);
	}

	var timeOuts = 2
	if(htmlContent==null)
	{
		
		TheDiv.innerHTML = '<table border="0" cellpadding="3" cellspacing="3"><tr><td align="center">您目前的操作需要“<a href="JavaScript:void(0)" onclick="delWaitDiv();">登录</a>”才能继续......</td></tr><tr><td align="center" style="color:#666666">(<span id="timeOut">'+timeOuts+'</span>秒后自动弹出登录界面)<span id="wusername" style="display:none;">'+username+'</span><span id="wurl" style="display:none;">'+url+'</span><span id="wtarget" style="display:none;">'+target+'</span><span id="weventid" style="display:none;">'+eventid+'</span></td></tr></table>';

	}
	else
	{
		
		TheDiv.innerHTML = '<table border="0" cellpadding="3" cellspacing="3"><tr><td align="center">'+htmlContent+'</td></tr><tr><td align="center" style="color:#666666">(<span id="timeOut">'+timeOuts+'</span>秒后自动隐藏提示界面)<span id="wusername" style="display:none;">'+username+'</span><span id="wurl" style="display:none;">'+url+'</span><span id="wtarget" style="display:none;">'+target+'</span><span id="weventid" style="display:none;">'+eventid+'</span></td></tr></table>';
		
	}
	
	try{ShowLogin('loginWaitLayer',null,null,350,300,350,50,evt);}catch(e){}	
	timeWait = setTimeout("nowTimeOut()",1000);
}


//等待时间
function nowTimeOut()
{
	var TheTimeOut = document.getElementById('timeOut');
	var timeOuts = TheTimeOut.innerHTML-1;

	if(timeOuts <= 0)
	{
		delWaitDiv();
	}
	else
	{
		TheTimeOut.innerHTML = timeOuts;
		timeWait = setTimeout("nowTimeOut()",1000);
	}
}

//删除等待层
function delWaitDiv()
{
	var	TheDiv		  			= document.getElementById("loginWaitLayer");
	var	strWun  				= document.getElementById("wusername").innerHTML;
	var	strWurl  				= document.getElementById("wurl").innerHTML;
	var	strWtarget  			= document.getElementById("wtarget").innerHTML;
	var	strWeventid  			= document.getElementById("weventid").innerHTML;
	TheDiv.parentNode.removeChild(TheDiv);
	timeWait = null;
	showLoginLayer(strWun,strWurl,strWtarget,strWeventid);
}

//提示等待层
function showWaitDivCon(htmlContent,times)
{
	clearTimeout(timeWait);
	var TheDiv = document.getElementById('loginWaitLayer');
	if(typeof TheDiv=='undefined'||TheDiv==null)
	{
		TheDiv  			= document.createElement("DIV");
		TheDiv.id 			= 'loginWaitLayer';
		TheDiv.style.display  = 'none';
		TheDiv.style.border   = '#999999 2px solid';
		TheDiv.style.position = 'absolute';
		TheDiv.style.width	= '280px';
		TheDiv.style.height	= '60px';
		TheDiv.style.backgroundColor = '#FFFFFF';
		document.body.appendChild(TheDiv);
	}

	if(times==null)
		var timeOuts = 2;
	else
		var timeOuts = times;
  
	TheDiv.innerHTML = '<table border="0" cellpadding="3" cellspacing="3"><tr><td align="center">'+htmlContent+'</td></tr><tr><td align="center" style="color:#666666">(<span id="timeOut">'+timeOuts+'</span>秒后自动隐藏提示界面)</td></tr></table>';
	try{ShowLogin('loginWaitLayer',null,null,350,300,350,50);}catch(e){}	
	timeWait = setTimeout("showTimeOut()",1000);
}


//等待时间
function showTimeOut()
{
	var TheTimeOut = document.getElementById('timeOut');
	var timeOuts = TheTimeOut.innerHTML-1;

	if(timeOuts <= 0)
	{
		TheDiv.parentNode.removeChild(TheDiv);
		timeWait = null;
	}
	else
	{
		TheTimeOut.innerHTML = timeOuts;
		timeWait = setTimeout("nowTimeOut()",1000);
	}
}var SimDrag = {
    DragObj: null,
    Init:function(subObj,RootObj){
        subObj.onmousedown = SimDrag.Start.bind(RootObj);
		var frame = RootObj;  
        var oEvent = G.EventUtil.getEvent();   
        //if(frame.style.left) frame.style.left = "0px";
        //if(frame.style.top) frame.style.top = "0px";
    },    
    Start:function(){
        SimDrag.DragObj = this;
        var DragObj = this;  
        DragObj.DragStart(DragObj);   
        document.onmousemove = SimDrag.Draging;
        document.onmouseup = SimDrag.DragEnd;
        return false;
    },
    Draging:function(){
        var DragObj = SimDrag.DragObj;
        DragObj.Draging(DragObj);
        return false;
    },
    DragEnd:function(){
        var DragObj = SimDrag.DragObj;  
        document.onmousemove = null;
        document.onmouseup = null;
        DragObj.DragEnd(DragObj);      
        SimDrag.DragObj = null;
    }
  }  
  
//建立拖动层（参数:subName:拖动标题,RootName:拖动层）
function DargForBuild(subName,RootName)
{ 
	var title = $(subName);
	var dragDiv = $(RootName);
	SimDrag.Init(title,dragDiv);
	dragDiv.DragStart = function(dragobj){
	
			var oEvent = G.EventUtil.getEvent();
			var frame = dragobj;
			var frameleft =  G.findPosX(frame);
			var frametop = G.findPosY(frame);
			
			frame.OX = frameleft;
			frame.OY = frametop;
			
			frame.style.left = (frameleft-1)+"px";
			frame.style.top = (frametop-1)+"px";
			frame.style.position = "absolute";
			
			var x = event.clientX+ G.getScrollXY().left - frameleft;
			var y = event.clientY+ G.getScrollXY().top  - frametop;
			frame.oX = x;
			frame.oY = y;
	   }
	   
	   dragDiv.Draging = function(dragObj){
			 var frame = dragObj;
			 var oEvent = G.EventUtil.getEvent();
			 var frameleft = (G.getScrollXY().left + (event.clientX-frame.oX));
			 var frametop = (G.getScrollXY().top + (event.clientY-frame.oY));
			 frame.style.left = frameleft + "px";
			 frame.style.top = frametop +"px";
	   }
	   
	   dragDiv.DragEnd = function(dragObj){
			var frame = dragObj;
	   }
};

// Mail 取URL头
function getUrlHost()
{
	var hostVar	= "../";
	var tVar = window.location.href.indexOf("192.168.1.76/net114/");
	if(tVar > -1)
		hostVar	= "http://192.168.1.76/net114/";
	else
		hostVar	= "http://"+document.domain+'/';
	return hostVar;
}
// 用户是否登陆
function getUserStart()
{
	var userArr = document.cookie.match(new RegExp("(^| )userid=([^;]*)(;|$)"));
	if(userArr != null && userArr != "")
	{
		return true;
	}
	else
	{
		return false;
	}
}

//document.write( '<script language="JavaScript" src="'+getUrlHost()+'js/msn.js"><\/script>');
//增加字节数截取字符串方法(参数,start开始位置，end结束位置，append截取后追加在截取词后面的字符串)
String.prototype.substrB = function(start,end,append){
		var tmpstr = this.replace(/[^\x00-\xff]/g,"~^");
		tmpstr	   = tmpstr.substr(start,end);
		tmpstr	   = tmpstr.replace(/^\^/g,"`");
		end		   = tmpstr.replace(/~\^|~$/g,"`").length;
		if(end < this.length && append != null)
			return this.substr(start,end)+append;
		else
			return this.substr(start,end);
}

//增加计算字符串字节数方法
String.prototype.lengthB = function(){
	return this.replace(/[^\x00-\xff]/g,"~^").length;
}

//增加数组in_array方法(参数:value为要查找的关键字，type为返回类型<null为返回T|F、1为返回下标>)
Array.prototype.in_array = function (value,type){
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] == value) {
			if(type == 1)
				return i;
			else
				return true;
		}
	}
	if(type == 1)
		return -1;
	else	
		return false;
};

//清除引号
function charForClear(str)
{
    reg = new RegExp("'","gi");
	str = str.replace(reg,"‘");
}

//按字节数截取字符串
function substringForBit(str,start,end,suffix)
{
	if(suffix == null)
	suffix = '...';
	if(typeof str == 'string')
	{
		var tmpstr = str.substrB(start,end,suffix);
		document.write(tmpstr);
	}
	else
	{
		if(typeof str !='undefined' && str !=null)
		{
			str.innerHTML = str.innerHTML.substrB(start,end,suffix);
		}		
	}
}


//加亮关键字(参数objID:要加亮对象ID，nums:要加亮对象数，str:关键字，color:要加亮颜色)
function fontColorForAdd(objID,nums,str,color)
{
	if(str == null||str == '')
		return;
	if(color == null)
		color="#C60A00";
    reg = new RegExp("("+str+"){1}","gi");
	if(nums==null)//单个加亮
	{
		var theObj = document.getElementById(objID);
		if(typeof theObj !='undefined' && theObj !=null)
		{
			theObj.innerHTML = theObj.innerHTML.replace(reg,"<font color="+color+">$1</font>");
		}
	}
	else//多个加亮
	{
		for(var i = 1;i<=nums;i++)	
		{
			var theObj = document.getElementById(objID+i);
			if(typeof theObj !='undefined' && theObj !=null)
			{
				theObj.innerHTML = theObj.innerHTML.replace(reg,"<font color="+color+">$1</font>");
			}
		}
	}
}


//读取cookie
function getcookie(cookieName)
{ 
	var cookieString  = new String(document.cookie);
	var cookieHeader  = cookieName+"=";
	var beginPosition = cookieString.indexOf(cookieHeader);
	if (beginPosition != -1)
	{
		var startStr  = beginPosition + cookieHeader.length;
		var endStr	  = window.document.cookie.indexOf (";", startStr);
		return cookieString.substring(startStr,endStr);
	}
	else
	{
		return '';
	}
}

//HTML 实体转换成相应的文本(参数为要转换对象ID)
function HtmltoText(objID,nums,start,end)
{
	if(start==null)
		start = 0;
	if(end==null)
		end = 106;
	if(nums==null)
	{
		var theObj = document.getElementById(objID);
		if(typeof theObj !='undefined' && theObj !=null)
		{
			var text = theObj.innerText || theObj.textContent;
			theObj.innerHTML = text.replace(/\s+/g,"");
		}
	}
	else
	{
		for(var i = 1;i<=nums;i++)	
		{
			var theObj = document.getElementById(objID+i);
			if(typeof theObj !='undefined' && theObj !=null)
			{
				var text = theObj.innerText || theObj.textContent;
				theObj.innerHTML = text.replace(/[\f\n\v]+/g,"").substrB(start,end,'...');
			}
		}
	}
}

//前台收藏
function collect(cmd,objId)
{
	var TheDiv = document.getElementById('collectDIV');
	if(typeof TheDiv=='undefined'||TheDiv==null)
	{
		var oDiv 			= document.createElement("DIV");
		oDiv.id 			= 'collectDIV';
		oDiv.style.display  = 'none';
		oDiv.style.position = 'absolute';
		oDiv.style.width	= '80px';		
		oDiv.style.backgroundColor = '#EAEAEA';

		document.body.appendChild(oDiv);
		TheDiv				= oDiv;
		TheDiv.innerHTML = '<div style="border: 1px solid #000000; background-color: #EAEAEA;"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td height="30" align="center"><a onclick="collectForSave(\''+cmd+'\',\''+objId+'\',1);" class="F12_0A50A1_L" style="cursor:hand;">公开分享</a></td></tr><tr><td height="1" align="center" bgcolor="#999999"></td></tr><tr><td height="30" align="center"><a onclick="collectForSave(\''+cmd+'\',\''+objId+'\',0);" class="F12_0A50A1_L" style="cursor:hand;">私有收藏</a></td></tr></table></div>';
	}
	//显示
	ShowLogin('collectDIV');
}

//保存收藏
function collectForSave(cmd,objId,isShare,event)
{
	ShowLogin('collectDIV');
	var width = document.body.clientWidth || window.screen.width;
	var height = window.screen.availHeight;
	
	if(event.clientX+12+300>width) popLeftAdjust=-300-24
		else popLeftAdjust=0;
	if(event.clientY+12+300>height) popTopAdjust=-300-24
		else popTopAdjust= -100;
	X	=	12 + event.clientX + G.getScrollXY().left + popLeftAdjust + 'px';
	Y	=	12 + event.clientY + G.getScrollXY().top + popTopAdjust + 'px';
	if(cmd == 'class')
	{
		var action    = Form.serialize('formR');
		var Thea 	  = document.getElementById('searchSave');
		//更新进一步选择
		var url 	  = getUrlHost()+'front/index.php';
		var pars 	  = 'module=class&isShare='+isShare+'&'+action.replace(/\action=\w+/,'action=searchForSave');
	}
	else if(cmd == 'cm')
	{
		//更新进一步选择
		var url 	  = objId+'&isShare='+isShare;
		var pars 	  = '';
	}
	else
	{
		var url 	  = getUrlHost()+'front/index.php';
		var pars 	  = 'module=class&action=searchForSave'+(cmd!=null&&cmd!=''?'&cmd='+cmd:'')+(objId!=null&&objId!=''?'&objId='+objId:'')+'&isShare='+isShare+'&x='+X+'&y='+Y;
	}
	var myAjax	= new Ajax.Updater('save', url, {method: 'get', parameters: pars,evalScripts: true});
}


function collectForCompleted(type,x,y)
{
	var TheDiv = document.getElementById('collectCompletedDIV');
	if(type == null)
	{
		type = 'favoriteNewsList';
	}
	if(typeof TheDiv=='undefined'||TheDiv==null)
	{
		var oDiv 			= document.createElement("DIV");
		oDiv.id 			= 'collectCompletedDIV';
		oDiv.style.display  = 'none';
		oDiv.style.position = 'absolute';
		oDiv.style.width	= '298px';
		oDiv.style.border	= '1px #CCCCCC solid';
		oDiv.style.padding	= '3px';
		oDiv.style.backgroundColor = '#FFFFFF';

		document.body.appendChild(oDiv);
		TheDiv				= oDiv;
		TheDiv.innerHTML = '<table width="100%" border="0" cellspacing="0" cellpadding="3"><tr><td width="98%" height="12" align="left" bgcolor="#AAD1EC" id="collectCompletedTitle" style="cursor:hand;"> &nbsp;<span class="F12_000000_B">收藏</span></td><td width="2%" height="12" align="right" bgcolor="#AAD1EC"><img src="'+getUrlHost()+'/images/common/X.gif" onclick="ShowLogin(\'collectCompletedDIV\');" width="8" height="8" style="cursor:hand;" /></td></tr><tr><td height="84" colspan="2" align="center" class="F14_002065_L">信息已成功收藏！<a href="#" class="F12_0000FF_L_U"></a></td></tr><tr><td height="30" colspan="2" align="center"><input type="button" name="goCollect" value="去收藏夹看看" onclick="window.open(\'http://www.sellgreat.com/setcenter/index.php?module=setcenter&action=frame&query='+type+'\');ShowLogin(\'collectCompletedDIV\');" style="cursor:hand;" />        <input type="button" name="brack" value="返回" onclick="ShowLogin(\'collectCompletedDIV\');" style="cursor:hand;" /></td></tr></table>';
	}

	//显示
	try{
		ShowLogin('collectCompletedDIV','collectCompletedTitle',null,x,x,y,y);
	}
	catch(e)
	{
		ShowLogin('collectCompletedDIV',null,null,0,0);
	}
}

//隐藏其它操作DIV

function hiddenOtherDiv(DivId)
{
	var aryDiv = document.getElementsByTagName("DIV");	
	for (var i in aryDiv) 
	{ 
		if(typeof aryDiv[i].id=='undefined'||aryDiv[i].id==null||aryDiv[i].id==''||aryDiv[i].id=='layerInIFrm')
		{
			continue;
		}

		if(aryDiv[i].style.position=='absolute')
		{
			if(aryDiv[i].id!=DivId)
			{
				aryDiv[i].style.display = 'none';
			}
		}
	}
}


//****************************************************************************
//// 功能描述: 				检查发送EMAIL提交的FORM
//// 参数:
//// 		TheForm: 			提交的FORM对象
//// 		isEmpty:			是否检查EMAIL为空
////****************************************************************************	
function chackFormSubmitForEmail(TheForm,isEmpty)
{
	if(typeof TheForm != 'object')
		TheForm = document.getElementById(TheForm);
	var inputs = TheForm.elements;
	var j = -1;
	var re = true;
	var empty = '';
	var mytitle = document.getElementById("mytitle");
	var mycontent = document.getElementById("mycontent");
	for(var i=0,z=0;i<inputs.length;i++)//检查所有的EMAIL地址
	{   
		if (inputs[i].type == "text"){
			if(inputs[i].name == "sendEmail[]") {
				empty = inputs[i].value;
				if(!checkEmail(inputs[i],'ce'+z++,isEmpty)&&j == -1) 
					j = i;
			}
		}
	}
	if(empty=='')
	{
		alert('请输入您要发送的EMAIL地址');
		re = false;
	}
	
	if(j != -1)//返回首个错误EMAIL地址
	{
		inputs[j].focus();
		 re = false;
	}
	re = re?checkOther(mycontent,"mycontent_note"):re;
	if(!re) return re;
}

//****************************************************************************
//// 功能描述: 				检查推荐给站内商友提交的FORM
//// 参数:
//// 		Obj: 				提交的FORM对象
////****************************************************************************	
function chackFormSubmitForRecUser(Obj)
{
	Obj = document.getElementById(Obj);
	var reType = false;
	var reCon = true;
	//说明是否为空
	if(Obj.content2.value.length<1||Obj.content2.value.replace(/^\s+|\s+$/g,"").length==0) {
		showErr("content_note","不能为空");
		reCon = false;
	}else{
		showErr("content_note","");
	}
	//是否选择用户
	var inputs = Obj.elements;
	for(var i=0,z=0;i<inputs.length;i++)
	{   
		if (inputs[i].type == "checkbox"&&inputs[i].name == "checkFriend[]"){
			if(inputs[i].checked)
			{
				reType = true;
				break;
			}
		}
	}
	//返回
	if(!reType)
	{
		showErr("select_note","请选择要推荐的商友");
		return reType;
	}else{
		showErr("select_note","");
	}
	if(!reCon) return reCon;
	
	return true;
}

////****************************************************************************
//// 功能描述: 				输入错误提示
//// 参数:
//// 		obj: 				错误提示显示对象
//// 		mes:				错误提示信息
////****************************************************************************	
function showErr(obj,mes)
{
	var objShowErr = document.getElementById(obj);		// 取得显示错误(或注释)的对象
	objShowErr = (typeof objShowErr == 'object') ? objShowErr : null;
		
	if (objShowErr != null) { 
		objShowErr.className = 'error';
		objShowErr.innerText = mes;
	}
}


function showSimple(name)
{
	var show = document.getElementById(name);
	if(show)
	{
		show.style.display=show.style.display=='none'?'':'none';
	}
}


////****************************************************************************
//// 功能描述: 				检查用户的登录状态
//// 参数: userid: 			用户登录ID
////****************************************************************************	
function checkLoginTwo(outstr,userid,outstr2,type)
{
	var loginUserid = getcookie('userid');

	if(type!=1)
	{
		if(loginUserid==null||loginUserid=='')
		{
			alert('您还没有登陆，'+outstr+'失败，请先登陆！');
			return false;
		}
	}

	if(type!=2)
	{
		if(userid != null && loginUserid == userid)
		{
			alert('您'+outstr2+'自己'+outstr+'，'+outstr+'失败！');
			return false;
		}
	}
	return true;
}


////****************************************************************************
//// 功能描述: 				生成select的Option
//// 参数: ObjID:selectID,text:Option显示内容,value:Option的value值
////****************************************************************************
function addOption(ObjID,text,value){
	var o=document.createElement("option");
	o.text=text;
	o.value=value;
	//document.all.TitleMain.add(o);
	document.getElementById(ObjID).add(o);
}


////****************************************************************************
//// 功能描述: 				删除select的Option
//// 参数: ObjID:selectID
////****************************************************************************
function delOption(ObjID){
	 var oSel = document.getElementById(ObjID)
	 oSel.selectedIndex=1;
	 if (oSel.selectedIndex>0) {
		 oSel.remove(oSel.selectedIndex);
		 delOption(ObjID);
	 }
	 else
	 {
		 oSel.selectedIndex=0;
	 }
}


////****************************************************************************
//// 功能描述: 				选中select的Option
//// 参数: ObjID:selectID
////****************************************************************************
function secOption(ObjID,text){
	var oSel = document.getElementById(ObjID);
	for(var i = 0;i < oSel.length;i++)
	{
		if(oSel.options[i].innerHTML==text)
		{
			oSel.selectedIndex = i;
			return true;
			break;
		}
	}
	oSel.selectedIndex = 0;
}


//得到您定制的信息所在的地区
function getCustomPlaces(nums,prefix)
{	
	for(var i=0;i<=nums;i++)
	{
		var pla 	  = document.getElementById(prefix+i);
		if(typeof pla == 'object' && pla!=null)
			pla.innerHTML = getPlaceValue(pla.innerHTML,1);
	}
}


////****************************************************************************
//// 功能描述: 				提交AJAX更新页面
//// 参数: 					divId:要更新的DIV url:提交的URL,type:get/post
////****************************************************************************
function getDataforAjax(pars,divId,module,type,url)
{
	var thedivId		= document.getElementById(divId);
	if(typeof thedivId=='undefined'||thedivId==null)
	{
		var thedivId = document.createElement("DIV");
		thedivId.id = "saveAjax";
		thedivId.style.display = "";
		document.body.appendChild(thedivId);
	}
	else
	{
		thedivId.innerHTML	= '加载数据中...';
	}

	type				= type || 'get';
	module				= module || 'common';
	url					= url || getUrlHost()+module+'/index.php';
	pars				= 'module='+module+'&action='+pars;//alert(url+pars);return;
	var myAjax			= new Ajax.Updater(divId, url, {method: type, parameters: pars,evalScripts: true});
}


//****************************************************************************
//// 功能描述: 				分布选择页
//// 参数: 					divId:要更新的DIV
////****************************************************************************
function pageformGO(module,action,divId)
{
	getDataforAjax(action,divId,module);
}


//通过ajax更新页面(objId:为更新对象ID,url:为更新数据地址,pars:要传的参数,method:提交方式 get or post,asyn:是否异步处理)
function pageformNew(objId,url,pars,met,asyn,success)
{
	url = url || '/index.php';
	met = met || 'get';
	if(asyn == null) asyn = true;
	var myAjax	= new Ajax.Updater(objId, url, {method: met, parameters: pars,evalScripts: true,asynchronous:asyn,onSuccess:success});
}

////****************************************************************************
//// 功能描述: 				隐藏loading页面
//// 参数: 					objid:loading元素
////****************************************************************************
function loading(objid){
	if(document.all)
	{
		document.getElementById(objid).style.visibility="hidden";
		document.getElementById(objid).style.display="none";
	}
	else
	{
		document.getElementById(objid).style.visibility="";
		document.getElementById(objid).style.display="";
	}
	if(navigator.appName=="Netscape")
	{
		document.getElementById(objid).visibility='hide';
	}
}

////****************************************************************************
//// 功能描述: 				AJAX数据返回
//// 参数: 					pars:链接地址传入参数 toType:返回到属性
////****************************************************************************
function getStrforAjax(id,url,toType)
{
	if(typeof id != 'object')
		var show = document.getElementById(id);
	else
		var show = id;

	var ajax = InitAjax();

	ajax.open("GET", url, true);

	ajax.onreadystatechange = function() {
	　
	　if (ajax.readyState == 4 && ajax.status == 200) {
	　　　eval('show.'+toType+' = ajax.responseText');
	　}

	}
	ajax.send(null);
}

////****************************************************************************
//// 功能描述: 				取得用户默认头像
//// 参数: 					sex:用户姓别(1为男；0为女)
////****************************************************************************
function getAcquiescenceHead(sex,obj)
{
	try
	{
		if(sex==0)
		{
			obj.src = getUrlHost()+'images/common/girl.gif';
		}
		else
		{
			obj.src = getUrlHost()+'images/common/man.gif';
		}
	}catch(e){}
}


////****************************************************************************
//// 功能描述: 				取得图片失效时调用
//// 参数: 					obj:图片对象，url:图片地址
////****************************************************************************
function getImgError(obj,url)
{
	try
	{
		obj.src = url;
	}catch(e){}
}

////****************************************************************************
//// 功能描述: 				取得当前时间
//// 参数: 					format:为时间格式
////****************************************************************************
function DateDemo(format){	
	if(format == null)
		format = 'y-m-d h:mi';
   var d = new Date();								// 创建 Date 对象
	var s = new Array();
	s["d"] = d.getDate();
	s["d"] = (s["d"] < 10) ? ("0" + s["d"]) : s["d"];
	s["m"] = d.getMonth() + 1;
	s["m"] = (s["m"] < 10) ? ("0" + s["m"]) : s["m"];
	s["y"] = d.getFullYear();
	s["mi"] = d.getMinutes();
	s["h"] = d.getHours();

	var re = /(.*)(\W|^)(y|m|d|h|mi)(\W|$)(.*)/;
	var i = 0;
	while (re.exec(format) != null) {
		format = RegExp.$1 + RegExp.$2 + s[RegExp.$3] + RegExp.$4 + RegExp.$5;
	}
   return format;                                // 返回日期
}

////****************************************************************************
//// 功能描述: 				得到广告列表
//// 参数: 					divId:要显示的层,show:广告显示格式,iw:图片宽度,ih:图片高度,as:所属栏目,ih:所属位置
////****************************************************************************
function getAdvShow(divId,show,iw,ih,as,ap)
{
	var pars = 'getAdvList&s='+as+'&p='+ap+'&w='+iw+'&h='+ih+'&c='+show;
	getDataforAjax(pars,divId);
}

////****************************************************************************
//// 功能描述: 				弹出提示框
//// 参数: 					divId:提示框ID,title:提示框标题,content:提示框显示内容,bnFunc:提示框按钮对象事件,closeFunc:关闭提示框调用的事件
////****************************************************************************
function alertShow(content,title,bnFunc,closeFunc,divId)
{
	divId				= divId || 'alertDiv';
	closeFunc			= closeFunc || '';
	var thedivId		= document.getElementById(divId);
	if(typeof thedivId=='undefined'||thedivId==null)//是否存在提示框无则生成
	{
		var thedivId = document.createElement("DIV");
		thedivId.id = divId;
		thedivId.style.display = 'none';
		thedivId.style.position = 'absolute';
		thedivId.style.width = '450px';
		thedivId.style.padding='1px';
		thedivId.style.border='1px #919191 solid';
		thedivId.style.backgroundColor='#FFFFFF';
		document.body.appendChild(thedivId);
	}

	//默认数据
	title = title || '提示';
	content = content || '';
	bnFunc = bnFunc || '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td height="40" align="center"><input type="button" name="button" onclick="Show(\''+divId+'\');'+closeFunc+'" value="确定" /></td></tr></table>';
	//提示显示内容
	thedivId.innerHTML = '<iframe id="ifrm_at" frameBorder="0" width="100%" height="200" scrolling="no"></iframe><div id="layerInIFrm_at" style="position: absolute; top: 0px; left: 0px; padding:0px;" onresize="document.getElementById(\''+divId+'\').style.height = this.clientHeight;document.getElementById(\'ifrm_at\').height = this.clientHeight;"><table width="100%" height="19" border="0" cellpadding="0" cellspacing="0" background="'+getUrlHost()+'images/common/layImageBg.gif"><tr><td width="98%" id="'+divId+'_T" align="left" style="cursor:pointer;" class="F12_002065_B">&nbsp;'+title+'</td><td width="2%" align="right" style="padding-right:5px;"><img src="'+getUrlHost()+'images/common/close.gif" height="13" width="13" alt="关闭" border="0" onclick="Show(\''+divId+'\');'+closeFunc+'" /></td></tr></table><br /><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td align="center">'+content+'</td></tr></table><br /><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td align="center">'+bnFunc+'</td></tr></table><br /></div>';
	Show(divId,divId+'_T');//显示提示
}

////****************************************************************************
//// 功能描述: 				得到品牌列表
//// 参数: 					divId:要显示的层,u:用户ID,t:品牌类型,f:分隔符
////****************************************************************************
function getBrandShow(divId,u,t,f)
{
	t = t || '';
	f = f || '';
	var pars = 'getBrandList&u='+u+'&t='+t+'&f='+f;
	getDataforAjax(pars,divId);
}

//点击删除(ONCLICK)
function delCus(id,m,p,u,event)
{

	m = m||'shop';
	p = p||'myCusList&cmd=del&id=';
	u = u||getUrlHost()+'front/index.php';
	if(navigator.appName.indexOf("Explorer") > -1)
	{

		event.srcElement.parentElement.parentElement.removeChild(event.srcElement.parentElement);

	}
	else
	{

		event.target.parentNode.parentNode.removeChild(event.target.parentNode);

	}
	getDataforAjax(p+id,'saveAjax',m,null,u);
}

//限制图片最大值
function changeImgWH(obj,maxSize)
{
	if(obj.width > maxSize||obj.clientWidth> maxSize||obj.offsetWidth> maxSize)
	{
		return maxSize;
	}
	else return; 
};
