/*****************************************************************
	AjaxHelper Ver 0.7
	Copyright 2005 by Teddy <shijie.ma@gmail.com> (http://ilungasoft.com)
	Based on "prototype1.2", "msncore"
	Last Modified: 2005/11/3
*****************************************************************/

//----------------------------------form----------------------------------------

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).focus();
    $(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;
  },
  
  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disable = 'true';
    }
  },

  focusFirstElement: function(form) {
    form = $(form);
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      if (element.type != 'hidden' && !element.disabled) {
        Field.activate(element);
        break;
      }
    }
  },

  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)
      return encodeURIComponent(parameter[0]) + '=' + 
        escape(parameter[1]);                   
  },
  
  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 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':  
	    if (element.checked){
	      return [element.id, "1"];
	    }else{
	      return [element.id, "0"];
	    }
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.id, element.value];
  },

  textarea: function(element) {
    return [element.id, element.value];
  },

  select: function(element) {
    var index = element.selectedIndex;
    var value = element.options[index].value || element.options[index].text;
    return [element.id, (index >= 0) ? 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() {
    setTimeout(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;
    }
    
    this.registerCallback();
  }
}

Form.Element.Observer = Class.create();
Form.Element.Observer.prototype = (new Abstract.TimedObserver()).extend({
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create();
Form.Observer.prototype = (new Abstract.TimedObserver()).extend({
  getValue: function() {
    return Form.serialize(this.element);
  }
});

AjaxHelper.SerializeForm = function(form)
{
	return Form.serialize(form);
};



//===¶È¼ÙÇÐ»»£½£½£½£½£½£½£½£½£½
function addEvent(obj,eventType,func){
	if(obj.attachEvent){obj.attachEvent("on" + eventType,func);}
	else{obj.addEventListener(eventType,func,false)}
	}
function delEvent(obj,eventType,func){
	if(obj.detachEvent){obj.detachEvent("on" + eventType,func)}
	else{obj.removeEventListener(eventType,func,false)}
	}
function clickOther(el){
	thisObj = el.target?el.target:event.srcElement;
	//alert(thisObj.tagName== "BODY")
	do{
		if(thisObj.id == "beCityPack") return;
		if(thisObj.tagName == "BODY"){
			hidemenu();
			return;
			};
		thisObj = thisObj.parentNode;
	}while(thisObj.parentNode);
}
function showccc(evt,obj){
	var light=document.getElementById("beCityPack");
	var linkID=document.getElementById(obj);
	var _event = evt ? evt : event; 
	var curleft =0;
	var curtop = 0;
   if (linkID.offsetParent) {
      do {
			curleft += linkID.offsetLeft;
			curtop += linkID.offsetTop;
      } while (linkID = linkID.offsetParent); 
    
	document.all.beCityPack.style.left=curleft;
	document.all.beCityPack.style.top=curtop+24;
   }
    light.style.display='block';
	addEvent(document.body,"mousedown",clickOther)
 }
function hidemenu(){
 var light=document.getElementById("beCityPack");
 delEvent(document.body,"mousedown",showccc);
 light.style.display='none';
 
}

function showCC(eve){
	hidemenu();
 //alert(document.all[eve].href);
 document.all.bcc.innerHTML=eve+'³ö·¢'
}
 



