// JavaScript Document
document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
} 

function get_by_class(el, cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = el.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
} 

function toggle (id) 
{			

	var all = document.getElementsByClassName('for_toggling');
	for(var i in all) {
		try{
			all[i].style.display = 'none';
		} catch (e) {
		}
	}
	document.getElementById(id).style.display = 'block';
}

function validate(msg, obj){
	var form = get_form(obj);
	var rg;
	var inputs    = to_array(form.getElementsByTagName("INPUT"));
	var textareas = to_array(form.getElementsByTagName("TEXTAREA"));
	var els       = inputs.concat(textareas);
	for (index in els){
		el=els[index];
		try {
			if (!el.hasAttribute("req"))
				continue;
		} catch (e) {
			continue;
		}
		switch (el.getAttribute("req")){
			case "yes":
				rg = new RegExp(".+");
				if (rg.test(el.value))
					continue; 
				alert(msg + el.getAttribute("reqName"));
				el.focus();
				return false;
			break;
			case "date":
				alert(Date.parse(el.value));
				if (IsNumeric(Date.parse(el.value)))
					continue; 
				alert(msg + el.getAttribute("reqName"));
				el.focus();
				return false;			break;
			case "no":
			case null:
			case "":
			continue;
			default :
				rg = new RegExp(el.getAttribute("req"));
				if (rg.test(el.value))
					continue; 
				alert(msg + el.getAttribute("reqName"));
				el.focus();
				return false;
			break;		
		}
	}
	return true;
}

function to_array(iterable) {
  if (!iterable) return [];
  if ('toArray' in Object(iterable)) return iterable.toArray();
  var length = iterable.length || 0, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}
function update_datetime(name)
{

	yearEl = document.getElementById(name + '_year');
	monthEl = document.getElementById(name + '_month');
	dayEl = document.getElementById(name + '_day');
	hourEl = document.getElementById(name + '_hour');
	minuteEl = document.getElementById(name + '_minute');

	if (yearEl.value == "" || monthEl.value=="") {
		document.getElementById(name).value = "";
		return
	}

   days_in_month = daysInMonth(monthEl.options[monthEl.selectedIndex].value, yearEl.options[yearEl.selectedIndex].value);
   while (days_in_month<dayEl.length-1) {
       dayEl.remove(dayEl.length-1);
   }
   for (i = dayEl.length; i<days_in_month+1; i++) {
       appendOptionLast(dayEl, i, i);
   }
   	if (yearEl.value == "" || monthEl.value=="" || dayEl.value=="" || hourEl.value=="" || minuteEl.value=="") {
		document.getElementById(name).value = "";
		return;
	}
   document.getElementById(name).value = yearEl.value + '-' + monthEl.value + '-' + dayEl.value + ' ' + hourEl.value + ':' + minuteEl.value;
}
function update_time(name)
{
	hourEl = document.getElementById(name + '_hour');
	minuteEl = document.getElementById(name + '_minute');

   	if (hourEl.value=="" || minuteEl.value=="") {
		document.getElementById(name).value = "";
		return;
	}
   document.getElementById(name).value = hourEl.value + ':' + minuteEl.value;
}

function update_dates(name)
{

	yearEl = document.getElementById(name + '_year');
	monthEl = document.getElementById(name + '_month');
	dayEl = document.getElementById(name + '_day');

	if (yearEl.value == "" || monthEl.value=="") {
		document.getElementById(name).value = "";
		return
	}

   days_in_month = daysInMonth(monthEl.options[monthEl.selectedIndex].value, yearEl.options[yearEl.selectedIndex].value);
   while (days_in_month<dayEl.length-1) {
       dayEl.remove(dayEl.length-1);
   }
   for (i = dayEl.length; i<days_in_month+1; i++) {
       appendOptionLast(dayEl, i, i);
   }
   	if (yearEl.value == "" || monthEl.value=="" || dayEl.value=="") {
		document.getElementById(name).value = "";
		return;
	}
   document.getElementById(name).value = yearEl.value + '-' + monthEl.value + '-' + dayEl.value;
}

function daysInMonth(month, year)
{
	   return new Date(year, month, 0).getDate();
}
function appendOptionLast(selEl, text, value) {
   var elOptNew = document.createElement('option');
   elOptNew.text = text;
   elOptNew.value = value;
   try {
       selEl.add(elOptNew, null); // standards compliant; doesn't work in IE
   }
   catch(ex) {
       selEl.add(elOptNew); // IE only
   }
}
function activate_button(el)
{	
	el.style.backgroundImage = 'url(/yoga/img/common/button_a.jpg)';
}
function deactivate_button(el)
{
	el.style.backgroundImage = 'url(/yoga/img/common/button.jpg)';
}
function set_cookie( name, value, expires, path, domain, secure )
{
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );
	
	/*
	if the expires variable is set, make the correct
	expires time, the current script below will set
	it for x number of days, to make it for hours,
	delete * 24, for minutes, delete * 60 * 24
	*/
	if ( expires )
	{
	expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}
// this fixes an issue with the old method, ambiguous values
// with this test document.cookie.indexOf( name + "=" );
function get_cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}
function delete_cookie( name, path, domain ) {
	if ( get_cookie( name ) ) document.cookie = name + "=" +
	( ( path ) ? ";path=" + path : "") +
	( ( domain ) ? ";domain=" + domain : "" ) +
	";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
function passwords_match(id, message)
{
	if (document.getElementById(id).value == document.getElementById(id + '_repeat').value)
		return true;
	alert(message);
	document.getElementById(id).focus();
	return false;
}
function IsNumeric(input)
{
   return (input - 0) == input && input.length > 0;
}

function get_form(obj)
{
	while (obj.tagName!='FORM'){
		obj = obj.parentNode;
	}
	return obj;
}
function get_parent_by_tag (el, tag)
{
	var parent = el;
	while ((parent = parent.parentNode) && parent.tagName != tag);
	return parent;
}

function multiform_select_all (el)
{
	var form = get_parent_by_tag(el, 'FORM');
	var checkboxes = get_by_class(form, 'item_checkbox');
	for (i = 0; i < checkboxes.length; i++)
		checkboxes[i].checked = true;

}
function multiform_select_none (el)
{
	var form = get_parent_by_tag(el, 'FORM');
	var checkboxes = get_by_class(form, 'item_checkbox');
	for (i = 0; i < checkboxes.length; i++)
		checkboxes[i].checked = false;

}
