// --------------------------------------------------
// code copyright Lightmaker 2006
// --------------------------------------------------
// inputbox.js
// version: 1.0 (minimal version)
// created: 8 June 2006
// updated: 13 September 2006
// creator: Julian Wheaton
// lightmaker.com
// --------------------------------------------------


var day_array=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
var month_array=new Array('January','February','March','April','May','June','July','August','September','October','November','December');


// inputbox_change...
function inputbox_change(input_obj,fieldtype_str)
{
	if (typeof(input_obj)=="string")
	{
		input_obj=getfield(input_obj);
	}
	var name_str=input_obj.name;

	switch (fieldtype_str)
	{
		case "date":
			var on_str=name_str.substr(name_str.length-1);
			name_str=name_str.substr(0,name_str.length-1);
			var v_obj=getfield(name_str);
			var d_obj=getfield(name_str+"d");
			var m_obj=getfield(name_str+"m");
			var y_obj=getfield(name_str+"y");
			
			var d=getvalue(d_obj);
			var m=getvalue(m_obj);
			var y=getvalue(y_obj);
			
			if (m=="-")
			{
				m=0;
			}
			else if (m=="+")
			{
				m=13;
			}
			
			if (d=="-")
			{
				d=31;
				if (m.length>0)
				{
					m--;
				}
			}
			else if (d=="+")
			{
				d=1;
				if (m.length>0)
				{
					m++;
				}
			}
			
			var maxdays=(isNumber(m) && isNumber(y)) ? daysinmonth(m-1,y) : ((isNumber(m)) ? daysinmonth(m-1,2000) : 31);

			if (isNumber(d))
			{
				if (d>maxdays)
				{
					d=maxdays;
				}
			}
			if (isNumber(m))
			{
				if (m<1)
				{
					m=12;
					if (y.length>0)
					{
						y--;
					}
				}
				else if (m>12)
				{
					m=1;
					if (y.length>0)
					{
						y++;
					}
				}
			}
			if (isNumber(y))
			{
				var mmy=minmax(y_obj);
				if (y<mmy.min)
				{
					y=mmy.min;
				}
				else if (y>mmy.max)
				{
					y=mmy.max;
				}
			}
			
			
			if (!isNumber(m))
			{
				if (m_obj.options[1].value=="-")
				{
					m_obj.options[1]=null;
				}
				if (m_obj.options[m_obj.options.length-1].value=="+")
				{
					m_obj.options[m_obj.options.length-1]=null;
				}
			}
			else
			{
				if (m_obj.options[1].value!="-")
				{
					while (m_obj.options.length>1)
					{
						m_obj.options[m_obj.options.length-1]=null;
					}
					m_obj.options[m_obj.options.length]=new Option(" ","-");
					for (var i=0; i<month_array.length; i++)
					{
						m_obj.options[m_obj.options.length]=new Option(month_array[i],i+1);
					}
				}
				if (m_obj.options[m_obj.options.length-1].value!="+")
				{
					m_obj.options[m_obj.options.length]=new Option(" ","+");
				}
			}
			
			if (!isNumber(d))
			{
				if (d_obj.options[1].value=="-")
				{
					d_obj.options[1]=null;
				}
				if (d_obj.options[d_obj.options.length-1].value=="+")
				{
					d_obj.options[d_obj.options.length-1]=null;
				}
			}
			else
			{
				if (d_obj.options[1].value!="-")
				{
					while (d_obj.options.length>1)
					{
						d_obj.options[d_obj.options.length-1]=null;
					}
					d_obj.options[d_obj.options.length]=new Option(" ","-");
					for (var i=1; i<=28; i++)
					{
						d_obj.options[d_obj.options.length]=new Option(i,i);
					}
				}
			}
			
			if (minmax(d_obj).max!=maxdays)
			{
				if (d_obj.options[d_obj.options.length-1].value=="+")
				{
					d_obj.options[d_obj.options.length-1]=null;
				}
				for (var i=Math.floor(d_obj.options[d_obj.options.length-1].value)+1; i<=maxdays; i++)
				{
					d_obj.options[d_obj.options.length]=new Option(i,i);
				}
				while (maxdays<Math.floor(d_obj.options[d_obj.options.length-1].value))
				{
					d_obj.options[d_obj.options.length-1]=null;
				}
			}
			if (isNumber(d))
			{
				if (d_obj.options[d_obj.options.length-1].value!="+")
				{
					d_obj.options[d_obj.options.length]=new Option(" ","+");
				}
			}
			
			setvalue(d_obj,d);
			setvalue(m_obj,m);
			setvalue(y_obj,y);
			if (isNumber(d) && isNumber(m) && isNumber(y))
			{
				setvalue(v_obj,d+" "+month_array[m-1]+" "+y);
			}
			else
			{
				setvalue(v_obj,"");
			}
			
			inputbox_calendar(name_str,true);
			
			break;
		
		case "create":
			var value_str=getvalue(input_obj);
			var text_obj=input_obj.form[name_str+"text"];
			if (value_str=="create")
			{
				text_obj.disabled=false;
				document.getElementById(name_str+"create").style.display="";
				text_obj.focus();
				text_obj.select();
			}
			else
			{
				text_obj.disabled=true;
				document.getElementById(name_str+"create").style.display="none";
			}
			break;
		
		case "url":
			var value_str=getvalue(input_obj);
			if (value_str!="")
			{
				if (value_str.indexOf(".")==-1 && value_str.indexOf("/")==-1)
				{
					value_str="www."+value_str+".com/";
				}
				if (value_str.indexOf("://")==-1)
				{
					value_str="http://"+value_str;
				}
			}
			setvalue(input_obj,value_str);
			break;
			
		case "number":
			var value_str=getvalue(input_obj);
			value_str=Math.round(value_str);
			if (isNaN(value_str))
			{
				value_str="";
			}
			setvalue(input_obj,value_str);
			break;
			
		case "colour":
			var value_str=getvalue(input_obj);
			try
			{
				document[name_str+"_img"].style.backgroundColor=value_str;
			}
			catch(e)
			{
				
			}
			
			break;
	}
}


function inputbox_calendar(name_str,redraw)
{
	var o=document.getElementById(name_str+"_calendar");
	if (!o)
	{
		return;
	}
	if (!redraw)
	{
		o.style.display=(o.style.display=="none") ? "" : "none";
	}
	if (o.style.display=="none")
	{
		return;
	}
	
	var td=new Date();

	var m=getvalue(name_str+"m");
	var y=getvalue(name_str+"y");
	
	var yearrange=minmax(getfield(name_str+"y"));
	
	m=(isNumber(m)) ? m-1 : td.getMonth();
	y=(isNumber(y)) ? y : td.getFullYear();
	
	currentd=getvalue(name_str+"d");
	currentm=m;
	currenty=y;

	var str='';
	var start=new Date(y,m,1).getDay();
	var class_str="present";
	
	m--;
	if (m==-1)
	{
		y--;
		m=11;
	}
	var days=daysinmonth(m,y);
	if (start>=3)
	{
		d=days+1-start;
	}
	else
	{
		d=days+1-start-7;
	}


	
	str+='<table cellspacing="0" cellpadding="0" border="0" class="inputbox_calendar" onDragstart="return false;" onSelectstart="return false;">';
	str+='<tr>';
	for (var x=0; x<7; x++)
	{
		str+='<th>'+day_array[x].substr(0,1)+'</th>';
	}
	str+='</tr>';
	for (var a=0; a<6; a++)
	{
		str+='<tr>';
		for (var b=0; b<7; b++)
		{
			if (d>days)
			{
				d=1;
				m++;
				if (m>11)
				{
					m=0;
					y++;
				}
				var days=daysinmonth(m,y);
			}
			if (d==currentd && m==currentm && y==currenty)
			{
				class_str="selected";
			}
			else if (d==td.getDate() && m==td.getMonth() && y==td.getFullYear())
			{
				class_str="today";
			}
			else if (m==currentm && y==currenty)
			{
				class_str="date";
			}
			else
			{
				class_str="other";
			}
			str+='<td class="'+class_str+'">';
			if (y>=yearrange.min && y<=yearrange.max)
			{
				str+='<a href="#" onDblClick="inputbox_calendar(\''+name_str+'\');" onclick="inputbox_calendar_select(\''+name_str+'\','+y+','+m+','+d+');return false;">';
			}
			str+=d;
			if (y>=yearrange.min && y<=yearrange.max)
			{
				str+='</a>';
			}
			str+='</td>';
			d++;
		}
		str+='</tr>';
	}
	str+='</table>';

	str+='<a href="" onkeypress="inputbox_calendar_select(\''+name_str+'\','+td.getFullYear()+','+td.getMonth()+','+td.getDate()+');return false;" onclick="inputbox_calendar_select(\''+name_str+'\','+td.getFullYear()+','+td.getMonth()+','+td.getDate()+');return false;">Today</a> | <a href="" onkeypress="inputbox_calendar_select(\''+name_str+'\');return false;" onclick="inputbox_calendar_select(\''+name_str+'\');return false;">No Date</a>';
	
	str='<table cellspacing="0" cellpadding="0" border="0" class="detail"><tr><td>'+str+'</td></tr></table>';
	o.innerHTML=str;
}


// m -> [0..11]
function inputbox_calendar_select(name_str,y,m,d)
{
	setvalue(name_str+"y",y);
	inputbox_change(name_str+"y","date");
	setvalue(name_str+"m",m+1);
	inputbox_change(name_str+"m","date");
	setvalue(name_str+"d",d);
	inputbox_change(name_str+"d","date");
}







// Setup Char Counter
function inputbox_counter(textname_str,limit_int)
{
	var obj=getfield(textname_str);
	obj.textname=textname_str;
	obj.countername=textname_str+"_counter";
	obj.limit=limit_int;

	obj.counter=document.getElementById(obj.countername);
	obj.showcounter=(obj.counter) ? true : false;

	obj.onkeyup=inputbox_charcounter;
	obj.onkeydown=inputbox_charcounter;
	obj.onkeypress=inputbox_charcounter;
	obj.onchange=inputbox_charcounter;
	obj.onpaste=inputbox_charcounter;

	obj.onchange();
}


// Char Counter
function inputbox_charcounter()
{
	var obj=getfield(this.textname);
	var size=Math.ceil(new String(obj.value).length);
	if (this.showcounter)
	{
		if (size>this.limit)
		{
			this.counter.style.color="red";
		}
		else
		{
			this.counter.style.color="";
		}
		this.counter.innerText=this.limit-size;
	}
}









// --------------------------------------------------



function getfield(name_str)
{
	for (var a=0; a<document.forms.length; a++)
	{
		for (var b=0; b<document.forms[a].length; b++)
		{
			if (document.forms[a][b].name==name_str)
			{
				return document.forms[a][b];
			}
		}
	}
	return false;
}


function getvalue(o)
{
	if (typeof(o)=="string")
	{
		o=getfield(o);
	}
	if (!o)
	{
		return;
	}
	return o.value;
}


function setvalue(o,value_str)
{
	if (typeof(o)=="string")
	{
		o=getfield(o);
	}
	if (!o)
	{
		return;
	}
	switch (o.type)
	{
		case "select-one":
			var idx=0;
			for (var i=0; i<o.options.length; i++)
			{
				if (o.options[i].value==value_str)
				{
					idx=i;
					break;
				}
			}
			o.selectedIndex=idx;
			break;
		default:
			o.value=value_str;
	}
}

function isNumber(n)
{
	var s=String(n);
	
	return ((s.length>0) && !isNaN(Math.floor(s)));
}


function minmax(obj)
{
	var o=new Object();
	o.min=null;
	o.max=null;
	for (var i=0; i<obj.options.length; i++)
	{
		if (isNumber(obj.options[i].value))
		{
			o.min=(o.min==null) ? obj.options[i].value : Math.min(o.min,obj.options[i].value);
			o.max=(o.max==null) ? obj.options[i].value : Math.max(o.max,obj.options[i].value);
		}
	}
	return o;
}

// m_int -> [0..11]
function daysinmonth(m_int,y_int)
{
	return Math.round((new Date(new Date(y_int,m_int+1,1).valueOf()-new Date(y_int,m_int,1).valueOf()).valueOf())/1000/60/60/24);
}
// --------------------------------------------------



// --------------------------------------------------
// Checkbox has been ticked:
// Select All = <input type="checkbox" name="id" value="" onclick="tick(this,true);">
// Normal = <input type="checkbox" name="id" value="" onclick="tick(this);">
// --------------------------------------------------
function tick(tick_obj,select_bln)
{
	var f_array=document.forms[tick_obj.form.name];
	var n_str=tick_obj.name;
	if (select_bln==true)
	{
		for (var i_int=0; i_int<f_array.length; i_int++)
		{
			if (f_array[i_int].name==n_str)
			{
				f_array[i_int].checked=tick_obj.checked;
			}
		}
	}
	else
	{
		var all_bln=true;
		for (var i_int=0; i_int<f_array.length; i_int++)
		{
			if (f_array[i_int].name==n_str && f_array[i_int].value!="" && f_array[i_int].checked==false)
			{
				all_bln=false;
			}
		}
		for (var i_int=0; i_int<f_array.length; i_int++)
		{
			if (f_array[i_int].name==n_str && f_array[i_int].value=="")
			{
				f_array[i_int].checked=all_bln;
			}
		}
	}
}


// --------------------------------------------------
// Count number of checkbox that have been ticked
// --------------------------------------------------
function tickcount(form_str,name_str)
{
	var f_array=document.forms[form_str];
	var c_int=0;
	if (f_array)
	{
		for (var i_int=0; i_int<f_array.length; i_int++)
		{
			if (f_array[i_int].name==name_str && f_array[i_int].value!="")
			{
				c_int+=(f_array[i_int].checked) ? 1 : 0;
			}
		}
	}
	return c_int;
}
// --------------------------------------------------




/*
function on_error(msg, url, line)
{
	alert (msg+"\n"+url+"\n"+line);
}
window.onerror = on_error;
*/
