var unicode = true;
var long_sms = false;

if(!len_limit)
	var len_limit = 0;

function SmsCounter(Elem, Counter)
{
	this.elem = Elem;
	this.Register();
	this.counter = Counter;
}

SmsCounter.prototype.IsUnicode = function(Text)
{
	for(var i=0;i<Text.length;i++)
	{
		var chr = Text.charAt(i);
		// check spacial chars
		if(chr.toUpperCase() >= 'A' && chr.toUpperCase() <= 'Z')
			continue;

		if(!gsm_code_table[chr])
			return true;
	}
		
	return false;
}

SmsCounter.prototype.StrLen = function(Text)
{
	if(unicode && this.IsUnicode(Text))
		return Text.length;
	else
		return this.StrLenGsm(Text);
}

SmsCounter.prototype.StrLenGsm = function(Text)
{
	var rs = new String();
	for(var i=0;i<Text.length;i++)
	{
		var c = Text.charAt(i);
		if(c.toUpperCase() >= "A" && c.toUpperCase() <= 'Z')
			rs += c;
		else
			rs += gsm_code_table[c];
	}
	
	return rs.length;
}

SmsCounter.prototype.GetCharsAmountPerSms = function(Text)
{
/*
	if(unicode)
	{
		if(this.IsUnicode(Text))
			return 70;
		else
		{
			if(long_sms && is > 160)
				return 153;
			else
				return 160;
		}
	}
	else
	{
		if(long_sms && is > 160)
			return 153;
		else
			return 160;
	}
*/
	return 70;
}

SmsCounter.prototype.GetMaxSmsCount = function()
{
	/*
	if(long_sms)
		return 1;

	if(unicode)
		return 2;
	else
		return 1;

	return 1;
	*/
	return max_sms_count;
}

SmsCounter.prototype.AddEvent = function(Elem, EventName, Func, Capture)
{
	/*
	if(Elem.addEventListener)
		Elem.addEventListener(Event, Func, Capture);
	else if(Elem.attachEvent)
		Elem.attachEvent("on" + Event, Func);
	*/
	Event.observe(Elem, EventName, Func, Capture);

}

SmsCounter.prototype.Register = function()
{
	var self = this;
	var listener = function (e) 
	{
		// document.send_sms.code.value = txt
		// Event.observe(Elem, EventName, Func, Capture);
		self.Count(self.elem, self.counter); 
	}
	
	var elem = this.elem;
	this.AddEvent(elem, "keydown", listener, true);
	this.AddEvent(elem, "keyup", listener, true);
	this.AddEvent(elem, "change", listener, true);
	this.AddEvent(elem, "focus", listener, true);
	this.AddEvent(elem, "blur", listener, true);
}

SmsCounter.prototype.Count = function(Elem, Counter) 
{
	// alert("dasfa");
	var txt = Elem.value;
	var is = this.StrLen(txt);
	var chars_per_sms = this.GetCharsAmountPerSms(txt);
	var sms_count_max = this.GetMaxSmsCount();
	var max_len = (len_limit == 0)?(sms_count_max * chars_per_sms):len_limit;
	max_len -= reserved_length;
	
	var sms_count_new = Math.ceil((is) / chars_per_sms);
	if(sms_count_new == 0)
		sms_count_new = 1;
	
	var sms_count_old = sms_count_new;
	var rest = max_len - is;

	if (max_len - is < 0)
	{
		Elem.value = txt.substr(0, max_len - 0);
		rest = 0;
	}
	//document.send_sms.code.value = txt;
	if(Counter)
		Counter.value = rest;
}

