
		return this.baseUrl + 'AjaxController';
	}

 * 提供与Livevalidation一致的提示。
 */
var FormConsole = {
	warn : function(element,msg)
	{
	    this.message(element,msg,'LV_validation_message LV_invalid');
		new Effect.Pulsate($(element).next('.LV_validation_message'),{'duration':1.0,'pulses':3});       			
	},
	info : function(element,msg)
	{
		this.message(element,msg,'LV_validation_message LV_valid');
		
	},
	message : function(element,msg,cName)
	{
		
		if( nxtEl = $(element).next('.LV_validation_message') ) nxtEl.remove();	
	    var span = document.createElement('span');
	    Element.extend(span);
	    var textNode = document.createTextNode(msg);
	    span.appendChild(textNode); 
		span.addClassName(cName);
		$(element).parentNode.insertBefore(span,$(element).nextSibling);  
	},
	clear : function (element)
	{
		this.info(element,'');
	}
}

var MessageBox = {
	warn : function(message,options)

		Modalbox.show(html, {title: options.title, width: 300});		
	},
	info : function(message,options)
	{
		var html = '<div class="MB_alert"><p style="padding:9pt"> <img src="images/info.gif"/>"' + message + '</p><input type="button" onclick="Modalbox.hide()" value=" 确 定 " /></div>';

	{
	
		if(!$('messagebox'))
		{				
			var html = '<div id="messagebox" class="messagebox"><p style="padding:9pt"> <img src="images/ajax-loading.gif"/><span style="padding:3px" id="messagebox-content"> </span></p></div>';
					 //+ '<div id="messagebox-overlay" class="messagebox-overlay"></div>';
			var body = document.getElementsByTagName("body").item(0);
			new Insertion.Bottom(body, html);
		}
		$('messagebox-content').innerHTML = message;
		//$('messagebox').setStyle({left: Math.round((Element.getWidth(document.body) - Element.getWidth($('messagebox'))) / 2 ) + "px"});		
		//Element.show('messagebox-overlay'); 	
		new Dialog.Box('messagebox');
		new Effect.Appear('messagebox');
		//setTimeout('MessageBox.hide()',10000);
		
	},
	hide : function()
	{
		if($('messagebox'))
		{
			Element.hide('messagebox');
			Element.hide('messagebox-overlay');
		}
	}
}
function addBookmark(url,title)
{
	if(window.external)
	{
		window.external.AddFavorite(url, title);
	}
	else if (window.sidebar)
	{
		window.sidebar.addPanel(title, url,""); 
	}
}
 function copyToClipboard(txt) {   
      if(window.clipboardData) {   
              window.clipboardData.clearData();   
              window.clipboardData.setData("Text", txt);   
      } else if(navigator.userAgent.indexOf("Opera") != -1) {   
           window.location = txt;   
      } else if (window.netscape) {   
           try {   
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");   
           } catch (e) {   
                alert("被浏览器拒绝！\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");   
           }   
           var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);   
           if (!clip)   
                return;   
           var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);   
           if (!trans)   
                return;   
           trans.addDataFlavor('text/unicode');   
           var str = new Object();   
           var len = new Object();   
           var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);   
           var copytext = txt;   
           str.data = copytext;   
           trans.setTransferData("text/unicode",str,copytext.length*2);   
           var clipid = Components.interfaces.nsIClipboard;   
           if (!clip)   
                return false;   
           clip.setData(trans,null,clipid.kGlobalClipboard);   
             
      }   
      alert("地址已复制到剪贴板，请使用Ctrl+V粘贴。") 
 } 
var User = {
	login : function(options){
		//var valid = new Validation('userLoginForm', {onSubmit:false,stopOnFirst:true,useTitles:true,immediate:true});
        //var result = valid.validate();
		//if(!result) return;

		var url = AjaxController.getUrl();
		var pars = {'q':'UserLogin'};       
	 		
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&"+ Form.serialize('userLoginForm'),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = originalRequest.responseJSON;
	
					if( !result.value ) 
					{
						if(options&& options.onFail)
						{
							options.onFail(result);
						}
						else
						{
		   					FormConsole.warn(result.field,result.message);
							Field.activate(result.field);
						}

					}
					else
					{
						var rurl ='';
						if(result.redirect)
						{
							rurl = result.redirect;
						}
						if(options&& options.redirect)
						{
							rurl = options.redirect;
						}
						if(rurl)
						{
							location.href = rurl;
						}
						else
						{
   							location.reload(5);
						}
					}
				}     
	        }         
	    );				
	},
	signup : function(form1,form2,redirectUrl) // @TODO array
	{
		var url = AjaxController.getUrl();
		var pars = {'q':'UserRegister','action':'save'};       

	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&" + Form.serialize(form1)+ "&"+ Form.serialize(form2),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					//var result  = JSON.parse(originalRequest.responseText);
					var result = originalRequest.responseJSON;

					if( result && result.value ) 
					{
						if(redirectUrl)
						{

						else
						{
							location.href = 'main/life.jsp';
						}
					}
					else
					{
						MessageBox.hide();
   						if(result)
   						{
   							//alert(result);
   							var f = result.field;
   							if(result.field=='captcha')
   							{
   								f = 'imgCaptcha';
   							}
	   						FormConsole.warn(f,result.message);
							Field.activate(result.field);
   						}
   						else
   						{
   							FormConsole.warn('label_accept',I18N.$('SignupFail'));
   						}
					}
				}     
	        }         
	    );		
		/*
		$(formId).request({
		
		  method: 'post',
		
		  parameters: { interests:'JavaScript', 'hobbies[]':['programming', 'music'] },
		
		  onComplete: function(){ alert('Form data saved!') }
		
		})
		*/
	},
	save : function(form1,form2)
	{
		var url = AjaxController.getUrl();
		var pars = {'q':'UserRegister','action':'save'};       

	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&" + Form.serialize(form1),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					//var result  = JSON.parse(originalRequest.responseText);
					var result = originalRequest.responseJSON;
					
					if( result && result.value ) 
					{
						alert('已保存！');
						location.reload();
					}
					else
					{
   						if(result)
   						{
	   						FormConsole.warn(result.field,result.message);
							Field.activate(result.field);
   						}
   						else
   						{
   							FormConsole.warn('label_accept',I18N.$('SignupFail'));
   						}
					}
				}     
	        }         
	    );			
	},
	changePassword : function(formId){

		var url = AjaxController.getUrl();
		var pars = {'q':'ChangePassword'};       
	 		
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&"+ Form.serialize(formId),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = originalRequest.responseJSON;
	
					if( !result.value ) 
					{
						FormConsole.warn(result.field,result.message);
						Field.activate(result.field);
					}
					else
					{
   						//MessageBox.info(I18N.$('PasswordChanged'),{title: I18N.$('success')});
   						alert(I18N.$('PasswordChanged'));
   						location.reload();
					}
				}     
	        }         
	    );				
	},	
	isExist : function (user)
	{
		var url = AjaxController.getUrl();
		var pars = {'q' : 'UserRegister',
				'action' : 'isExist',
				'user' : user
			}; 		
			
		var r = false;
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString(),asynchronous:false,
	          onComplete: function (originalRequest)
				{
					var result  = JSON.parse(originalRequest.responseText);
					r = result.value;
				}     
	        }         
        );
        return r;	  		
	},
   	logout : function()
	{
		var url = AjaxController.getUrl();
		var pars = {'q':'UserLogout'};       
		 		
	    var ajax = new Ajax.Request( url,
	        { method: 'get',parameters:$H(pars).toQueryString(),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var msg  = originalRequest.responseText;
					location.reload();
				}     
	        }         
        );	        	
	},
   	showLoginForm : function()
	{
		//Lightbox.init();
		//Lightbox.showBoxByAJAX('AjaxController?q=UserLoginForm',280,300);
		var img = new Image();
		img.src = 'ValidateCode';
		Modalbox.show('AjaxController?q=UserLoginForm', {title: I18N.$('login'), width: 280});
	},
   	showChangePasswordForm : function(id)
	{
		if(id)
		{
			var url = AjaxController.getUrl();
			var pars = {'q':'ChangePasswordForm'}; 			
			new Ajax.Updater( id,url,
		        { method: 'post',parameters:$H(pars).toQueryString(),
		          asynchronous:true,evalScripts: true   
		        }         
	        );			
		}
		else
		{
			Modalbox.show('AjaxController?q=ChangePasswordForm', {title: I18N.$('ChangePassword'), width: 320});
		}
	},	
	sendActiveMail : function()
	{
		var url = AjaxController.getUrl();
		var pars = {'q':'UserRegister','action':'sendActivityMail'};       
		 		
	    var ajax = new Ajax.Request( url,
	        { method: 'get',parameters:$H(pars).toQueryString(),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var o  = originalRequest.responseJSON;
					if(o!=null && o.value)
					{
						//MessageBox.info("邮件已发出，请注意查收！",{title: I18N.$('success')});
						alert("邮件已发出，请注意查收！");
					}
					else
					{
		
						//MessageBox.warn("邮件发送失败，稍后请重试！", {title: I18N.$('fail')});
						alert("邮件发送失败，稍后请重试！");
					}
				}     
	        }         
        );			
	},
	recoverPassword : function(form,afterSubmit){

		var url = AjaxController.getUrl();
		var pars = {'q':'UserLogin','action':'RecoverPassword'};       
	 	var result = null;	
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&"+ Form.serialize(form),
	          asynchronous:false,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					result  = originalRequest.responseJSON;
	
					if( !result.value ) 
					{
	   					FormConsole.warn(result.field,result.message);
						Field.activate(result.field);
					}
					else
					{
					    if(afterSubmit)
					    {
					        afterSubmit();
					    }
					    else
					    {
						location.href = 'getpassword?step=2';
						}
					}
				}     
	        }         
	    );			
	    return result;	
	},
	registerUsername : function(form,afterUrl){

		var url = AjaxController.getUrl();
		var pars = {'q':'UserLogin','action':'registerUsername'};       
	 		
 		
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&"+ Form.serialize(form),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = originalRequest.responseJSON;
	
					if( !result.value ) 
					{
	   					FormConsole.warn(result.field,result.message);
						Field.activate(result.field);
					}
					else
					{
		var ahref='profile';
		if(afterUrl)
		{
			ahref = afterUrl;
		}	
						location.href = ahref;
					}
				}     
	        }         
	    );				
	}	
}
var UserLog = {
	remove : function(lid)
	{
		var url = AjaxController.getUrl();
		var pars = {'q':'Theme','action':'removeLog','lid':lid}
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() ,
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = JSON.parse(originalRequest.responseText);
	   			    if( result.value ) 
	   			    {
	   			    	location.reload();
	   			    }
	   			    else
	   			    {
	   			    	alert(result.message);
	   			    }
				}     
	        }         
	    );			
	},
	setState : function(lid,state)
	{
		var url = AjaxController.getUrl();
		var pars = {'q':'Theme','action':'setLogState','lid':lid,'state':state}
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() ,
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = JSON.parse(originalRequest.responseText);
	   			    if( result.value ) 
	   			    {
	   			    	location.reload();
	   			    }
	   			    else
	   			    {
	   			    	alert(result.message);
	   			    }
				}     
	        }         
	    );			
	}
}

// just atest
function forminfo(name,msg)
{
	var elm = $(name);
	var advice = Validation.getAdvice(name, elm);

	if(advice == null) {

		advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + msg + '</div>'
		switch (elm.type.toLowerCase()) {
			case 'checkbox':
			case 'radio':
				var p = elm.parentNode;
				if(p) {
					new Insertion.Bottom(p, advice);
				} else {
					new Insertion.After(elm, advice);
				}
				break;
			default:
				new Insertion.After(elm, advice);
	    }
		advice = Validation.getAdvice(name, elm);
	}
	if(typeof Effect == 'undefined') {
		advice.style.display = 'block';
	} else {
		new Effect.Appear(advice, {duration : 1 });
	}
	var prop = '__advice'+name.camelize();
	elm[prop] = true;
	elm.removeClassName('validation-passed');
	elm.addClassName('validation-failed');	
}


function warn(msg)
{
	//Element.hide('console');
	$('console').innerHTML = '<div style="font:9pt 宋体;padding:3pt;border:1px solid #DD3C10;background-color: #ffebe8;width:200px">' +msg+'</div>';
	//new Effect.Appear($('console'), {duration : 1 });
}
var Phone = {
	compare :function(pidArray)
	{
		location.href = 'devicecompare?id=' + pidArray;
	}
}
var Theme = {
	save : function(formId,redirectUrl){
		var valid = new Validation(formId, {onSubmit:false,stopOnFirst:true,useTitles:true,immediate:true});
        var result = valid.validate();
		if(!result) return;
		MessageBox.wait('保存中，请稍候......');		
		var url = AjaxController.getUrl();
		var pars = {'q':'ThemeSave'
			};       
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() + "&"+ Form.serialize(formId),
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					//if($F('tid'))
					//{
						//location.reload();
					//}
					var url = 'mythemes';
					if(redirectUrl)
					{
						
					}
					location.href=redirectUrl;
					/*
					var result  = JSON.parse(originalRequest.responseText);
	
					if( !result.value ) 
					{
						warn(result.message);
						Field.activate(result.field);
					}
					else
					{
   						location.reload(5);
					}*/
				}     
	        }         
	    );				
	},	
	remove : function(tid){
		var text = tid;
		if(Object.isArray(tid))
		{
			text = tid.join(",");
		}

		this._submit({'q':'Theme','tid':text,'action':'delete'});			
	},		
	share : function(tid){
		this._submit({'q':'Theme','tid':tid,'action':'setState','state':'2'});			
	},	
	unshare : function(tid){
		this._submit({'q':'Theme','tid':tid,'action':'setState','state':'1'});			
	},	
	diggit: function(tid)
	{
		var pars = {'q':'Theme','tid':tid,'action':'diggit'};	
		var url = AjaxController.getUrl();
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() ,
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = JSON.parse(originalRequest.responseText);
	   			    if( result.value ) 
	   			    {
	   			    	//return result.count;
	   			    	location.reload();
	   			    }
	   			    else
	   			    {
	   			    	if(!result.login)
	   			    	{
	   			    		location.href = 'main/user.jsp';
	   			    	}
	   			    	else
	   			    	{
	   			    		alert(result.message);
	   			    	}
	   			    }
				}     
	        }         
	    );		
	},	
	download : function(tid)
	{
		this._submit({'q':'Theme','tid':tid,'action':'download'});	
	},
	_submit : function(pars){
		var url = AjaxController.getUrl();
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() ,
	          asynchronous:true,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = JSON.parse(originalRequest.responseText);
	   			    if( result.value ) 
	   			    {
	   			    	location.reload();
	   			    }
	   			    else
	   			    {
	   			    	alert(result.message);
	   			    }
				}     
	        }         
	    );				
	},	
	showEditForm : function(tid)
	{
		Lightbox.init();
		width = 300;
		if(tid) width = 600;
		Modalbox.show('AjaxController?q=ThemeForm&id='+tid, {title:I18N.$('theme'), width: 500});
	},
	show : function(tid)
	{
		Lightbox.init();
		Lightbox.showBoxByAJAX('AjaxController?q=ThemeDetail&id='+tid ,320,440);
		//window.open('theme?id='+tid);
	}
}

 */

  	{
	    this.options = Object.extend({
			capacity : 4,
			onOverflow : function(){},
			onItemClick : function(item){},
			toHtml : function(item)
			{		
				// Comparator.toggle('+item.id+');
				return '<li id="cbi_'+ item.id +'" style="padding:5px">' +
					'<img src="'+ item.image +'" style="width:80px"/><div>'+ item.caption  +
			   '</div></li>';
			}
	    }, o || {});
	    this.clear();
  	},
	clear : function()
	{
		this.list = new Array();
	},
	add : function(item)
	{
		this.list.push(item);
	},
	remove : function(id)
	{
		for (var i = 0, length = this.list.length; i < length; i++)
		{
			if(this.list[i].id==id) 
			{
				this.list.splice(i,1);
				return true;
			}
		}
	},
	build : function(container)
	{
		$(container).innerHTML = this.toString();
	},
	toString : function()
	{
		var html = new Array();
		var options = this.options;
		$A(this.list).each(
			function(item)
			{
				html.push(options.toHtml(item));
			}
		);
		var nullItem = {'id':-1,'caption':'','image':'images/phone/null.jpg'};
		var itemCount = this.list.length;
		for(i=itemCount;i<this.options.capacity;i++)
		{
			html.push(this.options.toHtml(nullItem));
		}
		return html.join('');
	}
}

var MultiPhoneSelector = Class.create();	
MultiPhoneSelector.prototype = {
	initialize: function(o)
  	{
	    this.options = Object.extend({
			capacity : 4,
			basketWrapper :'phoneBasket',
			imagePrefix : 'img_d',
			onOverflow : function(){},
			onChange : function(){},
			onAdd : function(id){},
			onRemove : function(id){}
	    }, o || {});
	    if(this.options.basket)
	    {
	    	this.basket = this.options.basket;
	    }
	    else
	    {
	    	this.basket = new PhoneBasket({capacity:this.options.capacity});
	    }
	    this.basket.build(this.options.basketWrapper);
	    
	    this.items = [];
	    this.removeItem = function(id)
	    {
			for (var i = 0, length = this.items.length; i < length; i++)
			{
				if(this.items[i]==id) 
				{
					this.items.splice(i,1);
					return true;
				}
			}	    	
	    };
	    
	    this._remove = function(id)
	    {
			this.removeItem(id);
			this.options.onChange();
 	
	    }	    
  	},
	add : function(id)
	{
		if (this.isExist(id)) return;
		if(this.items.length==this.options.capacity)
		{
			this.options.onOverflow();
			return;
		}
		this.items.push(id);

		
		var img = $(this.options.imagePrefix +id);
		var item = {'id':id,'caption':img.title,'image':img.src};
		this.basket.add(item);				
		new Effect.Opacity(img, {duration:0.5,from:1.0,to:0.2});
		this.basket.build(this.options.basketWrapper);
		
		this.options.onAdd(id);
		this.options.onChange();
	},
	remove : function(id)
	{
		this._remove(id);		
		this.basket.remove(id);		
		
		var img = $(this.options.imagePrefix +id);
		new Effect.Opacity(img, {duration:0.5,from:0.2,to:1.0});
		this.basket.build(this.options.basketWrapper);
		
		this.options.onRemove(id);
		this.options.onChange();
	},
	toggle : function(id)
	{
		if(this.isExist(id))
		{
			this.remove(id);
		}
		else
		{
			this.add(id);
		}
		
	},  	
	isExist : function(id)
	{
		return this.items.indexOf(id)!=-1;
	},
	clear : function()
	{
		for(i=0;i<this.items.length;i++)
		{
			this._remove(this.items[i]);
		}
		this.items.clear();
		this.basket.clear();
	},
	getSelection : function()
	{
		return this.items;
	}	

}


 */
var MultiPhoneSelector1 = Class.create();	
MultiPhoneSelector1.prototype = {
	initialize: function(o)
  	{
	    this.options = Object.extend({
			capacity : 4,
			onOverflow : function(){},

	    this.items = [];
	    this.removeItem = function(id)
	    {
			for (var i = 0, length = this.items.length; i < length; i++)
			{
				if(this.items[i]==id) 
				{
					this.items.splice(i,1);
					return true;
				}
			}	    	
	    };
	    
	    this._remove = function(id)
	    {
			this.removeItem(id);
			this.options.onChange();
			
			var e = $('img_d'+id);		
			Element.classNames('img_d'+id).set('opacity');
			e.up('li').removeClassName('selected');
			var radio = e.up('li').down('input');
			if(this.items.length && radio.checked)
			{
				radio = $('img_d'+this.items[this.items.length-1]).up('li').down('input')
				radio.checked = true;

			//隐藏Radio Wrapper
			Element.hide(e.next('div'));	    	

	{
		if(this.items.length==this.options.capacity)
		{
			this.options.onOverflow();
			return;
		}
		this.items.push(id);
		this.options.onChange();
		this.options.onAdd(id);
		
		var e = $('img_d'+id);
		Element.removeClassName('img_d'+id,'opacity');
		e.up('li').addClassName('selected');
		var radio = e.up('li').down('input');
		radio.checked = true;
		Element.show(radio.next('.primary'));
		
		// 显示Radio Wrapper
		Element.show(e.next('div'));

	},
	remove : function(id)
	{
		this._remove(id);

	},
	toggle : function(id)
	{
		if(Element.hasClassName('img_d'+id,'opacity'))
		{
			this.add(id);
		}
		else
		{
			this.remove(id);
		}
	},
	clear : function()
	{
		for(i=0;i<this.items.length;i++)
		{
			this._remove(this.items[i]);
		}
		this.items.clear();
	},
	getSelection : function()
	{
		return this.items;
	}

};






	Modalbox.hide()
}


/**
 * 用户注册验证管理。
 */
var ValidationManager = {
	initValidation : function (field)
	{
		
		if(field=='username')
		{
			var v1 = new LiveValidation( 'username', {onlyOnSubmit: false ,validMessage: '',wait:60000} );
			v1.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputUserName') } ); 
			v1.add( Validate.Length, { minimum: 6, maximum: 12 ,tooShortMessage:I18N.$('UserNameTooShort'),wrongLengthMessage :'用户名最短6位，最长12位。' } );
			v1.add( Validate.Format, { pattern: /^[a-zA-Z\u4e00-\u9fa5]{1}.*$/, failureMessage: I18N.$('UsernameMustBeginWithCh')  });
			v1.add( Validate.Format, { pattern: /^[a-zA-Z\u4e00-\u9fa5]{1}[a-zA-Z0-9\u4e00-\u9fa5]+$/, failureMessage: I18N.$('UsernameMust1')  });
			return v1;			
		}
		else if(field=='email')
		{
			var v2 = new LiveValidation( 'email', { onlyOnSubmit: false ,validMessage: '' });
			v2.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputEmail')} );
			v2.add( Validate.Email, { failureMessage: I18N.$('PleaseInputCorrectEmail') } );		
			v2.add( Validate.Format, { pattern: /^[a-zA-Z0-9@._-]+$/, failureMessage: I18N.$('PleaseInputCorrectEmail') });			
			return v2;		
		}
	},
	init: function()
	{
		this.fields = [];
		this.fields.push(this.initValidation('username'));
		this.fields.push(this.initValidation('email'));
		var v3 = new LiveValidation( 'password', {onlyOnSubmit: false , validMessage: ''} );
		v3.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputPassword') } ); 
		v3.add( Validate.Length, { minimum: 6, maximum: 12 ,tooShortMessage:I18N.$('PasswordTooShort'),wrongLengthMessage : I18N.$('PasswordTooShort')} );
		this.fields.push(v3);		
		var v4 = new LiveValidation( 'confirmPassword', {onlyOnSubmit: false , validMessage: ''});
		v4.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputConfirmPassword')  } ); 
		v4.add( Validate.Confirmation, { match: 'password', failureMessage: I18N.$('PasswordNotMatch')  } );
		this.fields.push(v4);
		var v5 = new LiveValidation( 'captcha', {onlyOnSubmit: false ,insertAfterWhatNode :$('imgCaptcha'), validMessage: '', wait: 500 });
		v5.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputCaptcha') } ); 
		this.fields.push(v5);
		var v6 = new LiveValidation( 'acceptance', { validMessage: '',insertAfterWhatNode :$('label_accept'), wait: 500 });
		v6.add( Validate.Acceptance , { failureMessage: I18N.$('UMustAgree') } ); 		
		this.fields.push(v6);		
		
		var v7 = new LiveValidation( 'age', {onlyOnSubmit: false , validMessage: ''});
		v7.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputAge')} ); 
		this.fields.push(v7);		
		var v8 = new LiveValidation( 'province', {onlyOnSubmit: false , validMessage: '',insertAfterWhatNode :$('city')});
		v8.add( Validate.Presence, { failureMessage: I18N.$('PleaseInputProvince')} ); 
		this.fields.push(v8);				
		
		var v9 = new LiveValidation( 'phoneNumber', {onlyOnSubmit: false , validMessage: ''});
		v9.add( Validate.Numericality, { onlyInteger: false,notAnIntegerMessage : I18N.$('PhoneNumberMustNumber'),notANumberMessage: I18N.$('PhoneNumberMustNumber')} );
		this.fields.push(v9);	
		//var v7 = new LiveValidation( 'question', {onlyOnSubmit: true , validMessage: ''} );
		//v7.add( Validate.Presence, { failureMessage: "请输入密码保护问题" } ); 
		//this.fields.push(v7);
		//var v8 = new LiveValidation( 'answer', {onlyOnSubmit: true , validMessage: ''} );
		//v8.add( Validate.Presence, { failureMessage: "请输入密码保护问题答案" } ); 		
		//v8.add( Validate.Length, { minimum: 6, maximum: 255 ,tooShortMessage:'答案不足六位',wrongLengthMessage : "答案不足六位" } );
		//this.fields.push(v8);		
	},				
	get : function(field)
	{
		return this.initValidation(field);
	},
	validate : function()
	{
		 return LiveValidation.massValidate(this.fields);
	}
}
var BaseCode = {
	getChildren : function(type,code,childType)
	{
		return this._getList({'q':'BaseCode','action':'getChildren','type':type,'code':code,'childType':childType});
	
	},
	getPhonesByBrand : function(brand)
	{

		return this._getList({'q':'BaseCode','action':'getPhonesByBrand','brand':brand});
	
	},
	_getList : function(pars)
	{
		var l;
		var url = AjaxController.getUrl();		
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() ,
	          asynchronous:false,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = originalRequest.responseJSON;
	   			    if( result.value ) 
	   			    {
	   			    	var arr = JSON.parse(result.array);
	 
	   			    	l = [];
	   			    	arr.each(function(item)
	   			    	{
	   			    		l.push(JSON.parse(item));
	   			    	}
	   			    	);
	   			    }
	   			    else
	   			    {
	   			    	alert(result.message);
	   			    }
				}     
	        }         
	    );	
	    return l;	
	}
}
var Category = {
	getActivities : function(cid)
	{
		var l;
		var url = AjaxController.getUrl();		
		var pars = {'q':'BaseCode','action':'getCategoryActivities','cid':cid}
	    var ajax = new Ajax.Request( url,
	        { method: 'post',parameters:$H(pars).toQueryString() ,
	          asynchronous:false,evalScripts: true,
	          onComplete: function (originalRequest)
				{
					var result  = originalRequest.responseJSON;
	   			    if( result.value ) 
	   			    {
	   			    	var arr = JSON.parse(result.array);
	 
	   			    	l = [];
	   			    	arr.each(function(item)
	   			    	{
	   			    		l.push(JSON.parse(item));
	   			    	}
	   			    	);
	   			    }
	   			    else
	   			    {
	   			    	alert(result.message);
	   			    }
				}     
	        }         
	    );	
	    return l;	
	}	
}


var FileUtil = {
	isImage : function(file)
	{
		var validImages = ["jpg","gif","bmp"];
 	 	for (var i = 0, ilength = validImages.length; i < ilength; ++i) {
    		if (file.toLowerCase().indexOf("." + validImages[i]) !== -1)
    		 { 
      			return true;
    		}
  		}
  		return false;
	}
}


var Dialog = {};
Dialog.Box = Class.create();
Object.extend(Dialog.Box.prototype, {
  initialize: function(id) {
    this.createOverlay();

    this.dialog_box = $(id);
    this.dialog_box.show = this.show.bind(this);
    this.dialog_box.hide = this.hide.bind(this);

    this.parent_element = this.dialog_box.parentNode;

    //var e_dims = Element.getDimensions(this.dialog_box);
    //var b_dims = Element.getDimensions(this.overlay);
    //this.dialog_box.style.left = ((b_dims.width/2) - (e_dims.width/2)) + 'px';
    //this.dialog_box.style.top = '12px';
    this.center(id);
  },

  createOverlay: function() {
    if($('dialog_overlay')) {
      this.overlay = $('dialog_overlay');
    } else {
      this.overlay = document.createElement('div');
      this.overlay.id = 'dialog_overlay';
      Object.extend(this.overlay.style, {
      	position: 'absolute',
      	top: 0,
      	left: 0,
      	zIndex: 90,
      	width: '100%',
      	backgroundColor: '#000',
      	display: 'none'
      });
      document.body.insertBefore(this.overlay, document.body.childNodes[0]);
    }
  },

  moveDialogBox: function(where) {
    Element.remove(this.dialog_box);
    if(where == 'back')
      this.dialog_box = this.parent_element.appendChild(this.dialog_box);
    else
      this.dialog_box = this.overlay.parentNode.insertBefore(this.dialog_box, this.overlay);
  },

  show: function() {
    this.overlay.style.height = this.getPageDimensions()[3]+'px';
    this.moveDialogBox('out');
    this.overlay.onclick = this.hide.bind(this);
    this.selectBoxes('hide');
    new Effect.Appear(this.overlay, {duration: 0.1, from: 0.0, to: 0.3});
    this.dialog_box.style.display = ''
  },

  hide: function() {
    this.selectBoxes('show');
    new Effect.Fade(this.overlay, {duration: 0.1});
    this.dialog_box.style.display = 'none';
    this.moveDialogBox('back');
    $A(this.dialog_box.getElementsByTagName('input')).each(function(e){if(e.type!='submit')e.value=''});
  },

  selectBoxes: function(what) {
    $A(document.getElementsByTagName('select')).each(function(select) {
      Element[what](select);
    });

    if(what == 'hide')
      $A(this.dialog_box.getElementsByTagName('select')).each(function(select){Element.show(select)})
  },
	getPageDimensions : function(){
		var xScroll, yScroll;
	
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = document.body.scrollWidth;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
	
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = windowWidth;
		} else {
			pageWidth = xScroll;
		}
		arrayPageSize = new Array(windowWidth,windowHeight,pageWidth,pageHeight) 
		return arrayPageSize;
	},
	center : function(element){
		try{
			element = document.getElementById(element);
		}catch(e){
			return;
		}
		var windowSize = this.getPageDimensions();
		var window_width  = windowSize[0];
		var window_height = windowSize[1];
		
		element.style.position = 'absolute';
		element.style.zIndex   = 99;
	
		var scrollY = 0;
	
		if ( document.documentElement && document.documentElement.scrollTop ){
			scrollY = document.documentElement.scrollTop;
		}else if ( document.body && document.body.scrollTop ){
			scrollY = document.body.scrollTop;
		}else if ( window.pageYOffset ){
			scrollY = window.pageYOffset;
		}else if ( window.scrollY ){
			scrollY = window.scrollY;
		}
	
		var elementDimensions = Element.getDimensions(element);
		var setX = ( window_width  - elementDimensions.width  ) / 2;
		var setY = ( window_height - elementDimensions.height ) / 2 + scrollY;
	
		setX = ( setX < 0 ) ? 0 : setX;
		setY = ( setY < 0 ) ? 0 : setY;
	
		element.style.left = setX + "px";
		element.style.top  = setY + "px";
		new Effect.Appear(element);

		//Element.show(element);
	}	
});


// from rsshow
function CheckBoxGroup(name)
{
	this.init(name);
}

CheckBoxGroup.prototype.init = function(name)
{
	this.name = name;
}
CheckBoxGroup.prototype.checkAll = function()
{
	changeCheckStats(this.name,true);
}
CheckBoxGroup.prototype.uncheckAll = function()
{
	changeCheckStats(this.name,false);
}
CheckBoxGroup.prototype.checkInverse = function ()
{
	var arr  =document.getElementsByName(this.name);
		   
	var result = new Array();
	var j = 0;
	for (var i = 0; i < arr.length; i++)
	{
		var item = arr[i];
		item.checked = !item.checked ;
	}
}
CheckBoxGroup.prototype.getAll = function ()
{
    return document.getElementsByName(this.name);
}
CheckBoxGroup.prototype.getCheckedElements = function ()
{
	var arr  =document.getElementsByName(this.name);
	
			   
			   
	var result = new Array();
	var j = 0;
	for (var i = 0; i < arr.length; i++)
	{
		var item = arr[i];
		if (item.checked)
		{
			result [j++] =  item;
		}
	}
	return result ;
}
CheckBoxGroup.prototype.getCheckedValue = function ()
{
	var arr = this.getCheckedElements();
	var result = new Array();
	for (var i = 0; i < arr.length; i++)
	{
		result[i] = arr[i].value;
	}
	return result;
}

CheckBoxGroup.prototype.getElementByValue = function (value)
{
	var arr = this.getAll();
	for (var i = 0; i < arr.length; i++)
	{
		var item = arr[i];
		if(value == item.value)
		{
			return item;
		}
	}
	return false;
}
function changeCheckStats(name,value)
{
	var arr  =document.getElementsByName(name);
		   
	var result = new Array();
	var j = 0;
	for (var i = 0; i < arr.length; i++)
	{
		var item = arr[i];
		item.checked = value;
	}
}
function isRadioSelected(name)
{
    var l = document.getElementsByName(name);
    var count = l.length;
    for(var i=0;i<count;i++)
    {
        if(l[i].checked) return true;
    }
    return false;
}

function correctPNG1() 
{
for(var i=0; i<document.images.length; i++)
{
  var img = document.images[i]
  var imgName = img.src.toUpperCase()
  if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
  {
   var imgID = (img.id) ? "id='" + img.id + "' " : ""
   var imgClass = (img.className) ? "class='" + img.className + "' " : ""
   var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
   var imgStyle = "display:inline-block;" + img.style.cssText 
   if (img.align == "left") imgStyle = "float:left;" + imgStyle
   if (img.align == "right") imgStyle = "float:right;" + imgStyle
   if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle  
   var strNewHTML = "<span " + imgID + imgClass + imgTitle
   + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
  + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
   + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
   img.outerHTML = strNewHTML
   i = i-1
  }
}
}

//window.attachEvent("onload", correctPNG);


