function callLine(id){
	this.id=id;
	this.msgs=[];
	this.alert='';
	this.phonePreg={countryCode:/\d{1}/,cityCode:/\d{3}/,phoneNumber:/\d{7}/};
	this.timeout=[5000,20000];
	var self=this;
	this.blink=null;/**{
		times:2,
		hidden:200,
		visible:500
	};*/
	DOMReady(function(){self.init()});	
}

callLine.prototype.init= function(){
	//инициируем сообщения:
	this.msgsTarget=DOM(this.id+'_msgs');
	this.msgsImg=DOM(this.id+'_msgsImg');
	this.printMsgs();
	this.phoneSubmit=DOM(this.id+'_phoneSubmit');
	this.phone=DOM(this.id+'_phone');
	//инициируем форму:
	
	this.form=DOM(this.id+'_form');

	var self=this;
	//телефон:
	this.phoneFS=DOM(this.id+'_phoneFS');
	this.phone=DOM(this.id+'_phone');
	this.phone.hide();
	
	this.countryCode=DOM(this.id+'_countryCode');
	this.countryCode.listen('keyup', this.onChange(this.countryCode));
	this.countryCode.value=this.phone.value.substr(0,1);
	this.countryCode.show();
	this.cityCode=DOM(this.id+'_cityCode');
	this.cityCode.value=this.phone.value.substr(1,3);
	this.cityCode.listen('keyup', this.onChange(this.cityCode));
	
	this.cityCode.show();
	this.phoneNumber=DOM(this.id+'_phoneNumber');
	this.phoneNumber.listen('keyup', this.onChange(this.phoneNumber));
	this.phoneNumber.show();
	this.submitPhone=DOM(this.id+'_submitPhone');
	this.submitPhone.disabled=true;	
	//имя:
	this.nameFS=DOM(this.id+'_nameFS');
	this.nameFS.hide();
	this.name=DOM(this.id+'_name');
	this.submit=DOM(this.id+'_submit');
	
	this.name.listen('keyup', function(e){
		if (self.validateName()) self.submit.disabled=false;
		else self.submit.disabled=true;
	})
	
	
	this.submit.disabled=true;
	
	this.form.listen('submit',function(e){
	
		if (self.validatePhone()){
			if (self.validateName()){
				//return true;
				var update=DOM(self.id+'_update');				
				var iframe=op.create('div',self.id+'_trgt',{innerHTML:'<iframe name="'+self.id+'_trgt"></iframe>'},self.form);
				self.form.target=self.id+'_trgt';				
				//
				self.phoneFS.hide();
				self.nameFS.hide();
				DOM(self.id+'_message').show();
				if (self.alert) alert(self.alert);
				return true;
			}
			else {
				self.phone.value=self.countryCode.value+self.cityCode.value+self.phoneNumber.value;				
				self.phoneFS.hide();				
				self.nameFS.show();
				self.name.focus();
			}
		}
		else return false;
	});
}

callLine.prototype.printMsgs= function(){
	if (!this.msgs.length) return;
	var rnd=Math.floor(Math.random()*this.msgs.length);
	
	if (rnd){
		var className={attach:'enabled',detach:'disabled'};		
	}
	else {
		var className={attach:'disabled',attach:'disabled'};		
	}
	DOM('call_msgs').innerHTML=this.msgs[rnd];
	var self=this;
	var timeout=this.timeout[0]+Math.ceil(Math.random()*(this.timeout[1]-this.timeout[0]));
	setTimeout(function(){self.printMsgs();}, timeout);
	op.animateRange(
		function(o){			
			setElementOpacity(self.msgsImg,o);
		},
		function(){
			self.msgsImg.detachClass(className.detach);
			self.msgsImg.attachClass(className.attach);			
			op.animateRange(				
				function(o){
					setElementOpacity(self.msgsImg,o);
				}, null, 0.2, 1, 0.2, 100, null);
		}, 
		1, 0.2, 0.2, 100, null);
	
	if (this.blink){
		//помигаем:
		this.blinkCounter=this.blink.times;
		this.blinkHide();
	}
}

callLine.prototype.blinkHide=function(){
	var self=this;
	this.msgsImg.style.visibility='hidden';
	this.msgsTarget.style.visibility='hidden';
	setTimeout(function(){self.blinkShow();}, this.blink.hidden);
}

callLine.prototype.blinkShow=function(){	
	this.msgsImg.style.visibility='visible';
	this.msgsTarget.style.visibility='visible';
	this.blinkCounter--;
	if (this.blinkCounter>0){
		var self=this;
		setTimeout(function(){self.blinkHide();}, this.blink.visible);
	}
}

callLine.prototype.validateName= function(){
	return (this.name.value.length)?true:false;
}

callLine.prototype.validatePhone= function(){
	var ret=true;
	for (fieldName in this.phonePreg){
		if (this.phonePreg[fieldName].test(this[fieldName].value)){
			this[fieldName].attachClass('complete');			
		}
		else{
			ret=false;
			this[fieldName].detachClass('complete');
		}
		if (!/\d*/.test(this[fieldName].value)) this[fieldName].attachClass('invalid');
		else this[fieldName].detachClass('invalid');
	}
	return ret;
}

callLine.prototype.onChange= function(el){
	var self=this
	return function(){
		if (self.validatePhone()){
			self.submitPhone.disabled=false;
			self.submitPhone.select();
		}
		else {
			self.submitPhone.disabled=true;
		}		
	}
}
