// client-side validation function library

function trim(str)
{
   return str.replace(/^\s+|\s+$/g,"");
}

function showMsg(msg)
{
	alert(msg);
	return false;
}

function setFocus(ctrl, changeTab)
{
		if (changeTab == null)
			changeTab = true;

		visible = true;
		if (ctrl.style.display == 'none')
			visible = false;

		par = ctrl.parentNode;

		while ((par.tagName && par.tagName.toLowerCase() != "span") || (par.id && par.id.substr(0, 7).toLowerCase() != "tabdlg_"))
		{
			if (visible && par.style.display == 'none')
				visible = false;
			if (par.parentNode == null || par.parentNode == document)
			{
				par = null;
				break;
			}
			par = par.parentNode;
		}

		if (changeTab && par && par.style.display != "block")
		{
			tabNum = par.id.substr(par.id.length-1, 1);
			tabDialog(tabNum, false);
		}

		tag = ctrl.tagName.toLowerCase();
		if (((tag == "input" && ctrl.type.toLowerCase() == "text") || tag == "textarea") && visible)
			ctrl.focus();
}

function hasValue(obj, obj_type)
{
	if (obj == null)
		return true;

	if (obj_type == "TEXT" || obj_type == "PASSWORD")
	{
		if (trim(obj.value).length == 0)
	  		return false;
		else
	  		return true;
	}
	else if (obj_type == "SELECT")
	{
		var j;
		for (j=0;j < obj.length;j++)
		{
			if (obj[j].options == null)
				continue;

			for (i=0; i < obj[j].length; i++)
			{
				if (obj[j].options[i].selected && obj[j].options[i].value != 'cs_do_not_select')
					return true;
			}
		}
	   	return false;
	}
	else if (obj_type == "SINGLE_VALUE_RADIO" || obj_type == "SINGLE_VALUE_CHECKBOX")
	{
		if (obj.checked)
			return true;
		else
	   		return false;
	}
	else if (obj_type == "RADIO" || obj_type == "CHECKBOX")
	{
		if (obj.length)
		{
			for (i=0; i < obj.length; i++)
			{
				if (obj[i].checked)
					return true;
			}
		}
		else
		{
			if (obj.checked)
				return true;
		}
   	return false;
	}
}

function validateSelect(obj)
{
  var j;
  for (j = 0; j < obj.length; j++)
  {
    if (obj[j].options == null)
      continue;

    if (obj[j].options[obj[j].selectedIndex].value == 'cs_do_not_select')
      return false;
    else if (obj[j].selectedIndex > -1)
      return true;
    return false;
  }
  return false;
}

function checkdate(object_value)
{
	if (object_value.length == 0)
		return true;

	isplit = object_value.indexOf('/');

	if (isplit == -1 || isplit == object_value.length)
		return false;

	sMonth = object_value.substring(0, isplit);

	if (sMonth.length == 0)
		return false;

	isplit = object_value.indexOf('/', isplit + 1);

	if (isplit == -1 || (isplit + 1) == object_value.length)
		return false;

	sDay = object_value.substring((sMonth.length + 1), isplit);

	if (sDay.length == 0)
		return false;

	sYear = object_value.substring(isplit + 1);

	if (!checkinteger(sMonth))
		return false;
	else if (!checkrange(sMonth, 1, 12))
		return false;
	else if (!checkinteger(sYear))
		return false;
	else if (!checkrange(sYear, 0, 9999))
		return false;
	else if (!checkinteger(sDay))
		return false;
	else if (!checkday(sYear, sMonth, sDay))
		return false;
	else
		return true;
}


function checkeurodate(object_value)
{
	if (object_value.length == 0)
		return true;

	isplit = object_value.indexOf('/');

	if (isplit == -1)
		isplit = object_value.indexOf('.');

	if (isplit == -1 || isplit == object_value.length)
		return false;

	sDay = object_value.substring(0, isplit);

	monthSplit = isplit + 1;

	isplit = object_value.indexOf('/', monthSplit);

	if (isplit == -1)
		isplit = object_value.indexOf('.', monthSplit);

	if (isplit == -1 ||  (isplit + 1)  == object_value.length)
		return false;

	sMonth = object_value.substring((sDay.length + 1), isplit);

	sYear = object_value.substring(isplit + 1);

	if (!checkinteger(sMonth))
		return false;
	else
	if (!checkrange(sMonth, 1, 12))
		return false;
	else
	if (!checkinteger(sYear))
		return false;
	else
	if (!checkrange(sYear, 0, null))
		return false;
	else
	if (!checkinteger(sDay))
		return false;
	else
	if (!checkday(sYear, sMonth, sDay))
		return false;
	else
		return true;
}


function checkday(checkYear, checkMonth, checkDay)
{
	maxDay = 31;

	if (checkMonth == 4 || checkMonth == 6 ||
		checkMonth == 9 || checkMonth == 11)
		maxDay = 30;
	else if (checkMonth == 2)
	{
		if (checkYear % 4 > 0)
			maxDay =28;
		else if (checkYear % 100 == 0 && checkYear % 400 > 0)
			maxDay = 28;
		else
			maxDay = 29;
	}

	return checkrange(checkDay, 1, maxDay);
}

function validateintegerfield(object_value, min_value, max_value)
{
	if (object_value.length == 0)
		return true;

	if (!checkinteger(object_value))
		return false;

  if (min_value && min_value.length != 0 && object_value < parseInt(min_value))
    return false;

  if (max_value && max_value.length != 0 && object_value > parseInt(max_value))
    return false;

  return true;
}

function checkinteger(object_value)
{
	if (object_value.length == 0)
		return true;

	var decimal_format = ".";
	var check_char = object_value.indexOf(decimal_format);

	if (check_char == -1)
		return checknumber(object_value);
	else
		return false;
}


function numberrange(object_value, min_value, max_value)
{
	if (min_value != null)
	{
		if (object_value < min_value)
			return false;
	}

	if (max_value != null)
	{
		if (object_value > max_value)
			return false;
	}

	return true;
}


function checknumber(object_value)
{
	if (object_value.length == 0)
		return true;

	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;

	check_char = start_format.indexOf(object_value.charAt(0));

	if (check_char == 1)
		decimal = true;
	else if (check_char < 1)
		return false;

	for (var i = 1; i < object_value.length; i++)
	{
		check_char = number_format.indexOf(object_value.charAt(i));
		if (check_char < 0)
			return false;
		else if (check_char == 1)
		{
			if (decimal)
				return false;
			else
				decimal = true;
		}
		else if (check_char == 0)
		{
			if (decimal || digits)
				trailing_blank = true;
		}
		else if (trailing_blank)
			return false;
		else
			digits = true;
	}

	return true
}


function checkrange(object_value, min_value, max_value)
{
	if (object_value.length == 0)
		return true;

	if (!checknumber(object_value))
		return false;
	else
		return (numberrange((eval(object_value)), min_value, max_value));

	return true;
}


function checktime(object_value)
{
	if (object_value.length == 0)
		return true;

	isplit = object_value.indexOf(':');

	if (isplit == -1 || isplit == object_value.length)
		return false;

	sHour = object_value.substring(0, isplit);
	iminute = object_value.indexOf(':', isplit + 1);

	if (iminute == -1 || iminute == object_value.length)
		sMin = object_value.substring((sHour.length + 1));
	else
		sMin = object_value.substring((sHour.length + 1), iminute);

	if (!checkinteger(sHour))
		return false;
	else if (!checkrange(sHour, 0, 23))
		return false;

	if (!checkinteger(sMin))
		return false;
	else
	if (!checkrange(sMin, 0, 59))
		return false;

	if (iminute != -1)
	{
		sSec = object_value.substring(iminute + 1);

		if (!checkinteger(sSec))
			return false;
		else if (!checkrange(sSec, 0, 59))
			return false;
	}

	return true;
}


function checkphone(object_value)
{
	if (object_value.length == 0)
		return true;

	if (object_value.length != 12)
		return false;

	if (!checknumber(object_value.substring(0,3)))
		return false;
	else if (!numberrange((eval(object_value.substring(0,3))), 100, 1000))
		return false;

	if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
		return false

	if (!checknumber(object_value.substring(4,7)))
		return false;
	else if (!numberrange((eval(object_value.substring(4,7))), 100, 1000))
		return false;

	if (object_value.charAt(7) != "-" && object_value.charAt(7) != " ")
		return false;

	if (object_value.charAt(8) == "-" || object_value.charAt(8) == "+")
		return false;
	else
		return (checkinteger(object_value.substring(8,12)));
}


function checkzip(object_value)
{
	if (object_value.length == 0)
		return true;

	if (object_value.length != 5 && object_value.length != 10)
		return false;

	if (object_value.charAt(0) == "-" || object_value.charAt(0) == "+")
		return false;

	if (!checkinteger(object_value.substring(0,5)))
		return false;

	if (object_value.length == 5)
		return true;

	if (object_value.charAt(5) != "-" && object_value.charAt(5) != " ")
		return false;

	if (object_value.charAt(6) == "-" || object_value.charAt(6) == "+")
		return false;

	return (checkinteger(object_value.substring(6,10)));
}


function checkcreditcard(object_value)
{
	var white_space = " -";
	var creditcard_string="";
	var check_char;

	for (var i = 0; i < object_value.length; i++)
	{
		check_char = white_space.indexOf(object_value.charAt(i));
		if (check_char < 0)
			creditcard_string += object_value.substring(i, (i + 1));
	}

	if (creditcard_string.length != 16)
		return false;

	if (creditcard_string.charAt(0) == "+")
		return false;

	if (!checkinteger(creditcard_string))
		return false;

	var doubledigit = creditcard_string.length % 2 == 1 ? false : true;
	var checkdigit = 0;
	var tempdigit;

	for (var i = 0; i < creditcard_string.length; i++)
	{
		tempdigit = eval(creditcard_string.charAt(i));

		if (doubledigit)
		{
			tempdigit *= 2;
			checkdigit += (tempdigit % 10);

			if ((tempdigit / 10) >= 1.0)
				checkdigit++;

			doubledigit = false;
		}
		else
		{
			checkdigit += tempdigit;
			doubledigit = true;
		}
	}
	return (checkdigit % 10) == 0 ? true : false;
}


function checkssc(object_value)
{
	var white_space = " -+.";
	var ssc_string="";
	var check_char;

	if (object_value.length == 0)
		return true;

	if (object_value.length != 11)
		return false;

	if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
		return false;

	if (object_value.charAt(6) != "-" && object_value.charAt(6) != " ")
		return false;

	for (var i = 0; i < object_value.length; i++)
	{
		check_char = white_space.indexOf(object_value.charAt(i));
		if (check_char < 0)
			ssc_string += object_value.substring(i, (i + 1));
	}

	if (ssc_string.length != 9)
		return false;

	if (!checkinteger(ssc_string))
		return false;

	return true;
}


function setFormParam (strFormName, strParamName, strParamValue)
{
	var strObjName = "document." + strFormName + "." + strParamName;
	var obj = eval (strObjName);
	obj.value = strParamValue;
	return true;
}


function checkregex(object_value, regex)
{
	return regex.test(object_value);
}

// js for checkemail and url
function checkEmail(obj_val)
{
	if (obj_val.length > 0)
	{
		mask = new RegExp();
		mask = /^.+\@.+\..+$/;
		return mask.test(obj_val);
	}
	return true;
}

function checkURL(obj_val)
{
	if (trim(obj_val).length == 0)
	{
		return true;
	}
	var v = new RegExp();
	v.compile("^(http|https)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*$");
	return v.test(obj_val);
}

function checkTxtArea(obj_val, name, max, req)
{
	if ((obj_val == '' || obj_val.length == 0) && req == 'yes')
	{
		alert("Please enter a value for " + name + ".");
		return false;
	}
	else if (max != 0)
	{
		if (obj_val.length > max)
		{
			alert("The value for " + name + " cannot exceed " + max + " characters.");
			return false;
		}
		else
			return true;
	}
	else
		return true;
}

function validatefloatfield(form_field, min_value, max_value, precision)
{
	var object_value = form_field.value;

	if (object_value.length == 0)
		return true;

	if (!checknumber(object_value))
		return false;

	if (precision && precision.length != 0)
	{
		var factor = Math.pow(10, precision);
		object_value = Math.round(object_value * factor) / factor;
		object_value = object_value.toString();

		if (precision != 0)
		{
			if (object_value.indexOf('.') == -1)
				object_value = object_value + '.';

			var padding = precision - ((object_value.length - 1) - object_value.indexOf('.'));
			for (var i = 0; i < padding; i++)
			{
				object_value = object_value + '0';
			}
		}

		form_field.value = object_value;
	}

	if (max_value && max_value.length != 0 && object_value > parseFloat(max_value))
		return false;

	if (min_value && min_value.length != 0 && object_value < parseFloat(min_value))
		return false;

  return true;
}

function trueFloat(obj_val)
{
	if ((checknumber(obj_val) && obj_val.indexOf('.') >= 0) || obj_val.length == 0)
		return true;
	else
		return false;
}

 // img handling
function doSelectImage_new(urlval, callback, pageid, loader)
{
	// First look for AltText
	altText = "";
	idx = urlval.indexOf('|');
	if (idx != -1)
	{
		altText = "&alttext=" + encodeURIComponent(urlval.substr(idx + 1));
		urlval = urlval.slice(0, idx);
	}

	strurlstring = loader + '?csModule=controls/imagecommon/image-summary&pageid=' + pageid + '&controlid=0&checklock=0&isPageIndexImage=1&getAltText=1&CallBackFunction=ImageCallback_'+ callback + '&BackgroundImageURL=' + urlval + altText;
	newWindow ('selectimage', strurlstring);
}

function delImage(fieldID, fldobj)
{
	fldobj.value = '';
	document.getElementById(fieldID + 'Disp').src = '/commonspot/images/blank.gif';
	document.getElementById(fieldID + 'Disp').height = 0;
	document.getElementById(fieldID + 'Disp').width = 0;
	document.getElementById(fieldID + 'Exist').style.display = 'none';
	document.getElementById(fieldID + 'linkdel').style.display = 'none';
}

function launchRTE(loader, fieldid, hidelist, pasteplain)
{
	currentValue = escape(eval('document.' + fieldid + '.value'));
	newWindow('control_textBlockEditor', loader + '?csModule=metadata/form_control/text_block_editor&useupdateblock=1&hideButtons=' + hidelist + '&pastePlain=' + pasteplain + '&invokedfrom=templatemngrform&id=' + fieldid + '&pageID=0&currentValue=' + currentValue);
}
function update_block(fieldid, txt)
{
	obj = eval('document.' + fieldid);
	obj.value = txt;
}
function saveSelectionsToCookie(strFormName, cookieObj) 
{
	var setvalue;
	var fieldType;
	var index;
	var frm = eval('document.' + strFormName);
	var formname = frm.id;
	// Expire cookie in 999 days.
	var today = new Date();
	var exp   = new Date(today.getTime()+999*24*60*60*1000); 
	var expires="; expires="+exp.toGMTString();	
	var string = ''
	var cookieName = '';
	var chkCookieName = '';
	var chkSelect = '';
	var n = frm.length;

	for (i = 0; i < n; i++) 
	{
		e = frm[i].name;
		cookieName = '';
		for (var j = 0; j < cookieObj.length; j++)
		{
			if (cookieObj[j].fieldName == frm[i].name)
				cookieName = cookieObj[j].cookieName;
		}
		if (cookieName == '')
			continue;
			
		fieldValue = frm[i].value;     
		fieldType = frm[i].type;
		fieldID = frm[i].id;
		if (',radio,text,textarea,select-multiple,select-one,checkbox,'.indexOf(','+fieldType+',') == -1)
			continue;
		//
		// RADIO BUTTON
		//
		if (fieldType == "radio") 
		{
			if (frm[i].checked == true) 
			{
				string += frm[i].value + "\|";		
				setCookie(cookieName, string, expires);	
			}
			continue;
		}
		//
		// TEXT, TEXTAREA
		//
		if ((fieldType == "text") || (fieldType == "textarea")) 
			string = frm[i].value;
		//
		// DROPDOWN, MULTI-DROPDOWN
		//
		if ((fieldType == "select-multiple") || (fieldType == "select-one") ) 
		{
			string = '';
			for (var j=0; j<frm[i].options.length; j++)
			{
				if (frm[i].options[j].selected)
					string += frm[i].options[j].value + "\|";
			}
		}
		//
		// CHECKBOX
		//
		if (fieldType == "checkbox") 
		{
			chkCookieName = cookieName;
			cookieName = '';
			if (frm[i].checked == true) 
				chkSelect += frm[i].value + "\|";
		}
		if (cookieName != '') // check to avoid duplicate writing for multi-checkbox
		{
			setCookie(cookieName, string, expires);	
			cookieName = '';
			string = '';
		}	
	}
	// spl case for multi-checkbox
	if (chkCookieName != '')
		setCookie(chkCookieName, chkSelect, expires);
}

//
// LOAD FORM FIELD SELECTIONS FROM SAVED COOKIES
//
function loadSelectionsFromCookie(strFormName, cookieObj) {
	var e;
	var z;
	var x;
	var cookieName;
	var fieldArray;
	var fieldValues;
	var fieldValue;
	var frm = eval('document.' + strFormName);
	var formname = frm.id;
	var n = frm.length;

	for (i = 0; i < n; i++) 
	{
		e = frm[i].name;
		cookieName = '';
		for (var j = 0; j < cookieObj.length; j++)
		{
			if (cookieObj[j].fieldName == frm[i].name)
				cookieName = cookieObj[j].cookieName;
		}	
		if (cookieName == '')
			continue;

		fieldType  = frm[i].type;
		if (',radio,text,textarea,select-multiple,select-one,checkbox,'.indexOf(','+fieldType+',') == -1)
			continue;

		// Retrieve form elements from cookie and split into array.
		fieldValues = getCookie(cookieName);
		fieldArray  = fieldValues.split("\|");		
		fieldValue = fieldArray[0];
		fieldID = frm[i].id;
		//
		// TEXT, TEXTAREA
		//
		if ((fieldType == "text") || (fieldType == "textarea")) 
			frm[i].value = fieldValue;
		//
		// DROPDOWN, MULTI-DROPDOWN
		//
		if ((fieldType == "select-multiple") || (fieldType == "select-one") ) 
		{
			if (fieldValues != "|")
				fieldValues = "|" + fieldValues;
			var tempVal = '';	
			for (var j=0; j<frm[i].options.length; j++)
			{
				tempVal = "|" + frm[i].options[j].value + "|";
				if (fieldValues.indexOf(tempVal) != -1)
					frm[i].options[j].selected = true;
			}
		}		
		//
		// CHECKBOX, RADIO BUTTON
		//
		if (fieldType == "checkbox" || fieldType == "radio") 
		{
			if (fieldValues != "|")
				fieldValues = "|" + fieldValues;
			var tempVal = "|" + frm[i].value + "|";
			if (fieldValues.indexOf(tempVal) != -1)
				frm[i].checked = true;
		}

	}
}

function setCookie(c_name, c_value, c_expiration)
{
	document.cookie = c_name + "=" + c_value + c_expiration + "; path=/";		
}

function getCookie(c_name)
{
	if (document.cookie.length>0)
	{
	  c_start=document.cookie.indexOf(c_name + "=");
	  if (c_start!=-1)
	  {
	    c_start=c_start + c_name.length+1;
	    c_end=document.cookie.indexOf(";",c_start);
	    if (c_end==-1) 
		 	c_end=document.cookie.length;
	    return unescape(document.cookie.substring(c_start,c_end));
	  }
	}
	return "";
}
