/**
 * @package form functions
 * @author {@link mailto:steve@toolbox.net Steve Simons, Toolbox Studios, Inc.}
 * @license http://www.toolbox.net Contact about usage
 * @copyright Copyright 2006
**/

/* --- Admin JS --- */

function format_date(str) {
  var result='';
  if (str.length>0) {
    var curDate = new Date();
    var dateparts = (str.replace(/[^0-9]+/g,'-') + '---').split('-');
    if (dateparts[1].length==0) { dateparts[1]=dateparts[0]; dateparts[0]=''; }
    var Mth=parseInt(dateparts[0].replace(/^0+/,''));
    if (isNaN(Mth) || Mth<1 || Mth>12) Mth=curDate.getMonth() + 1;
    var Day=parseInt(dateparts[1].replace(/^0+/,''));
    if (isNaN(Day) || Day<1 || Day>31) Day=curDate.getDay();
    var Year=parseInt(dateparts[2].replace(/^0+/,''));
    if (isNaN(Year)) Year=curDate.getFullYear();
    if (Year<1000) Year+=2000;
    result=(Mth<10 ? '0' + Mth : Mth) + '/' + (Day<10 ? '0' + Day : Day) + '/' + Year;
  }
  return result;
}

function field_date(obj) {
  obj.value = format_date(obj.value);
}


function field_hoursMinutesSeconds(obj) {
	var cln=obj.value.replace(/[^0-9:]/g,"") + '::';
	var parts=new Array();
	var part;
	while (parts.length<3) {
		part = (cln.indexOf(':')>0 ? cln.substr(0,cln.indexOf(':')) : '0');
		cln = cln.replace(/^[^:]*:(.*)$/,'$1');
		parts[parts.length] = parseInt(part.replace(/^0*([0-9]+)$/,'$1'));
	}
	var hrs=parts[0];
	var mins=parts[1];
	var secs=parts[2];
	if (secs>59) {
		mins += Math.floor(secs/60);
		secs %= 60;
	}
	if (mins>59) {
		hrs += Math.floor(mins/60);
		mins %= 60;
	}
	var result = hrs.toString();
	result += ':' + (mins<10 ? '0' : '') + mins.toString();
	result += ':' + (secs<10 ? '0' : '') + secs.toString();
	obj.value=result;
}


function format_time(timestr) {
  var result = '';
  if (timestr.length>0) {
    var curDate = new Date();
    var timeparts = timestr.replace(/([^0-9]+)/g, " ").split(' ');
    var hours = parseInt(timeparts[0].replace(/^0+/,''));
    var mins = (timeparts[1] ? parseInt(timeparts[1].replace(/^0+/,'')) : 0);
    var ampm = timestr.replace(/([^aApP]+)/g,"");
    if (isNaN(hours) || hours > 24 || hours < 0) {
      hours = curDate.getHours();
      ampm = '';
    }
    if (isNaN(mins) || mins > 59 || mins < 0) {
      mins = 0; // curDate.getMinutes();
    }
    if (hours > 12) {
      ampm = 'P';
      hours = hours % 12;
    } else {
      if ((ampm.length == 0 || !ampm.match('[aA]')) && (hours < 7 || hours == 12)) ampm='P';
    }
    if (hours == 0) hours = 12;
    if (ampm.match('[Pp]')) ampm='PM'; else ampm='AM';
    var hr = '00' + hours;
    var mn = '00' + mins;
    result = hr.substring(hr.length - 2,hr.length) + ':' + mn.substring(mn.length - 2,mn.length) + ' ' + ampm;
  }
  return result;
}

function field_time(obj) {
  obj.value = format_time(obj.value);
}



function format_datetime(datetime) {
  var result=datetime.replace(/^[ ]+/,'');
  var fw=datetime.indexOf(' ');
  if (fw>0)
    result=format_date(result.substring(0,fw)) + ' ' + format_time(result.substring(fw+1,result.length));
  else result=format_date(result);
  return result;
}

function field_datetime(obj) {
  obj.value = format_datetime(obj.value);
}




function format_dollar(amount,decimals) {
  if (typeof decimals == 'string') decimals = parseInt(decimals);
  if (decimals == undefined || isNaN(decimals) || decimals < 0 || decimals > 5) decimals=2;
  var multi = Math.pow(10,decimals);
  var value = Math.floor(parseFloat('0' + amount.replace(/[^0-9\.]/g,'')) * multi + 0.5);
  var cents = '00000' + (value % multi);
  var dollars = '' + Math.floor(value / multi);
  for (var c=dollars.length-3;c>0;c-=3) 
    dollars=dollars.substring(0,c) + ',' + dollars.substring(c,dollars.length);
  return (amount.match(/^-.*/) ? '-' : '') + dollars + (decimals>0 ? '.' : '') + cents.substring(cents.length-decimals,cents.length);
}

function field_dollar(obj,decimals) {
  obj.value = format_dollar(obj.value,decimals);
}

function field_formatdollar(obj,decimals) {
  obj.value = format_dollar(obj.value,decimals);
}



function valid_creditcard(cc,amex) {
  var numbers=cc.replace(/[^0-9]/g,'');
  return ((!amex && numbers.length==16) || (amex && numbers.length==15));
}

function format_creditcard(cc,amex) {
	var result=cc;
	if (valid_creditcard(cc,amex)) {
		var numbers=cc.replace(/[^0-9]/g,'');
		if (amex)
			result=numbers.substring(0,4) + ' ' + numbers.substring(4,10) + ' ' + numbers.substring(10,numbers.length);
		else
			result=numbers.substring(0,4) + ' ' + numbers.substring(4,8) + ' ' + numbers.substring(8,12) + ' ' + numbers.substring(12,numbers.length);
	}
	return result;
}

function field_creditcard(obj,amex) {
	obj.value=format_creditcard(obj.value,amex);
}

function validate_creditcard(obj,amex,errmsg) {
	if (obj.value.length>0) {
		if (valid_creditcard(obj.value,amex))
			field_creditcard(obj,amex);
		else {
			alert(errmsg);
			obj.select();
			obj.focus();
		}
	}
}

function field_number(obj) {
	if (obj.type=='text')
		obj.value = obj.value.replace(/[^0-9]/g,'');
}


function field_phone(obj) {
	if (obj.type=='text')
		obj.value = obj.value.replace(/[^0-9\(\)/-]/g,'');
}

function valid_email(address) {
	return address.search(/^[a-z0-9\._-]+@([a-z][a-z0-9_-]+\.)+[a-z]{2,7}$/i)!=-1;
}

function validate_email(obj,errmsg) {
	obj.value=obj.value.replace(/^ +/,'').replace(/ +$/,'');
	var result=valid_email(obj.value);
	if (obj.value.length>0 && !valid_email(obj.value)) {
		alert(errmsg);
		obj.select();
		obj.focus();
	}
}

/***************************/

function required(obj) {
	var lbl = document.getElementById(obj.name.replace(/^([a-z0-9_-]+).*$/i,'$1') + 'Label');
	if (lbl && lbl.className.search(/required/)!=-1) {
		// Hack to be sure IE doesn't try to autocomplete the field
		obj.setAttribute( "autocomplete", "off");
		if (obj.type=='text' || obj.type=='password')
			lbl.className=(obj.value.replace(/ +$/,'')=='' ? 'required' : 'requiredGood');
		if (obj.type=='radio' || obj.type=='checkbox') {
			var ckd = false;
			var objs = obj.form.getElementsByTagName('input');
			for (var g=0;g<objs.length;g++)
				if (objs[g].name == obj.name)
					ckd |= objs[g].checked;
			lbl.className=(!ckd ? 'required' : 'requiredGood');
		}
		if (obj.type=='select' || obj.type=='select-one' || obj.type=='select-multi')
			lbl.className=(obj.options[obj.selectedIndex].value=='' ? 'required' : 'requiredGood');
	}
}

function requiredAll(theForm) {
	for (var e=0;e<theForm.elements.length;e++)
		required(theForm.elements[e]);
}


/*****************************/

function getElement(theForm,elementName) {
	var result=false;
	for (var i=0;!result && i<theForm.elements.length;i++)
		if (theForm.elements[i].name==elementName)
			result=theForm.elements[i];
	return result;
}


