<!--
/*******************************************************************************

FILE: global.js
AUTHOR: Nick Eagland www.concisecode.net
VERSION: 1.0
DATE: 2006/06/26

--------------------------------------------------------------------------------

global scripts for concisecode.net
	
--------------------------------------------------------------------------------

*******************************************************************************/
// detect os and store in a variable
// This script sets OSName variable as follows:
// "Windows"    for all versions of Windows
// "MacOS"      for all versions of Macintosh OS
// "Linux"      for all versions of Linux
// "UNIX"       for all other UNIX flavors 
// "Unknown OS" indicates failure to detect the OS
var OSName="Unknown OS";

if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";


function compArr2Fld(val2Comp, array, compValIdx)
{
	var alen = eval(array + ".length");
	var retVal = 0;

	for (var i=0; i<alen; i++){
		if (eval(array + "[i]["+compValIdx+"]") == val2Comp){
			retVal = i;
			break;
		}
	}
	return retVal;
}


function validateForm(form_name, formFields, defVals)
{
	fldStr = new String(formFields);
	valStr = new String(defVals);
	fldArr = fldStr.split("!");
	valArr = valStr.split("!");
	//alert(fldArr.length);
	for(i=0; i<fldArr.length; i++)
	{
		fld_name = new String(fldArr[i]);
		def_val = new String(valArr[i]);
		fldVal = document.forms[form_name].elements[fld_name].value;
		fld_type = document.forms[form_name].elements[fld_name].type;

		if(isEmpty(form_name, fld_name) || get_field_value(form_name, fld_name) == def_val ) 
		{
			cleanFldName = replVal(fld_name,"str_","");
			cleanFldName = replVal(cleanFldName,"_"," ");			
			alert ('Please enter a '+cleanFldName.toUpperCase());
			focusFld(form_name, fld_name);
			return false;
		}
		if (fld_type == 'select-one') // validating a dropdown
		{
			if (document.forms[form_name].elements[fld_name].options[document.forms[form_name].elements[fld_name].selectedIndex].value == '??')
			{
				cleanFldName = replVal(fld_name,"int","");
				cleanFldName = replVal(cleanFldName,"id","");
				cleanFldName = replVal(cleanFldName,"_"," ");
				alert ('Please select a '+cleanFldName.toUpperCase());
				focusFld(form_name, fld_name);
				return false;
			}
		}
		if (fld_name.indexOf("email") != -1)
		{
			if (!validateEmail(form_name, fld_name) )
			{
				cleanFldName = replVal(fld_name,"str_","");
				cleanFldName = replVal(cleanFldName,"_"," ");
				alert ('Please enter a valid '+cleanFldName.toUpperCase());
				focusFld(form_name, fld_name);
				return false;
			}
		}
	}
	return true;
	
}


function get_field_value(form_name, fld_name) 
{
 	value = document.forms[form_name].elements[fld_name].value;
 	return value;
}


function set_field_value(form_name, fld_name, var_value)
{
	document.forms[form_name].elements[fld_name].value = var_value;
}


function empty_field_value(form_name, fld_name)
{
	document.forms[form_name].elements[fld_name].value = '';
}


function validateCheckBox(form_name, element_name)
{
	return document.forms[form_name].elements[element_name].checked;
}


// forces form submit on enter
function enterSubmit(int_keycode, str_submit_event) 
{
	if (int_keycode == 13) 
	{    
		//alert('keycode');
		eval(str_submit_event);
		return false;
	}
}


// Check for null and for empty
function isEmpty(form_name, fld_name) 
{
	value = document.forms[form_name].elements[fld_name].value;
    if (value == "" || value == null || typeof(value) == "undefined") {return true;} else {return false;}
}


function focusFld(form_name,fld_name)
{
	//alert(form_name);
	document.forms[form_name].elements[fld_name].focus();
}


function validateNumber(form_name, element_name, allow_blank) 
{
	return (!allow_blank) ? false : testRegExp(form_name, element_name, '^-?[0-9]*\\.?[0-9]*$');
}


function replVal(value,str2Repl,replStr)
{
	str2Repl = new String (str2Repl);
	rExp = new RegExp(str2Repl, "gi");
	replStr = new String(replStr);
	return value.replace(rExp, replStr);
}


function testRegExp(form_name, element_name, re) 
{
	//alert(document.forms[form_name].elements[element_name].value);
	return new RegExp(re).test(document.forms[form_name].elements[element_name].value);
}


function setCheckboxesRange(the_form, do_check, basename, min, max)
{
    for (var i = min; i < max; i++) 
	{
        if (typeof(document.forms[the_form].elements[basename + i]) != 'undefined') 
		{
            document.forms[the_form].elements[basename + i].checked = do_check;
        }
        if (typeof(document.forms[the_form].elements[basename + i + 'r']) != 'undefined') 
		{
            document.forms[the_form].elements[basename + i + 'r'].checked = do_check;
        }
    }

    return true;
}



// returns the text from a specific dropdown/select field
function dDownText2Fld(selFld,targFld)
{
	var dDownTxt = eval(selFld+".options["+selFld+".selectedIndex].text");
	//alert (dDownTxt);
	eval(targFld).value=dDownTxt;
}


function setAllFieldsDisabled(enableFlag)
{
    for (var i = 0; i<document.forms[0].elements.length; i++) {
        //if ((document.forms[0].elements[i].name.disabled == true)) {
           	setFldDisabled(document.forms[0].elements[i].name, enableFlag);
       // }
    }
}


function setFldDisabled(targFld,enableFlag)
{
	//alert (fld+' '+enableFlag)
	eval(targFld+".disabled = "+enableFlag)
}


function setFldReadOnly(targFld,enableFlag)
{
	eval(targFld+".readonly = "+enableFlag)
}


function refreshPage()
{
	this.window.self.reload( false );
}


function getFlashMovieObject(movieName)
//alert(navigator.appName);
{
	if ((navigator.userAgent).indexOf("Opera")!=-1) { // sniff for opera
		//alert("OPERA")
 		return document.getElementById(movieName);
	}

	if (window.document[movieName]) 
	{
		//alert (window.document[movieName]);
		return window.document[movieName];
	}
	if (navigator.appName.indexOf("Microsoft Internet")==-1)
	{
	if (document.embeds && document.embeds[movieName])
	  return document.embeds[movieName]; 
	}
	else if (navigator.appName.indexOf("Microsoft Internet")!=-1)
	{
		return document.getElementById(movieName);
	}
}


function flashPassVar(val)
{
	if (OSName != "MacOS") 
	{ // call flash dynamically if not mac
	 	var flashMovie=getFlashMovieObject("dynFlash");
	   	flashMovie.SetVariable("dynVar", val);
	} 
	else 
	{ // targets the flash correctly for macs - bit sketchy but it works
		var urlStr = new String(document.URL);
		if (urlStr.indexOf("?dynVar") > -1) {urlStr = urlStr.substr(0,urlStr.indexOf("?dynVar"))}
		//alert (urlStr);
		document.location.href = urlStr + "?dynVar="+val;
	}
}


function limitFieldSize(form_name, element_name, maxLength)
{
	fldVal = document.forms[form_name].elements[element_name].value;
	if (fldVal.length > maxLength)
	{
		document.forms[form_name].elements[element_name].value = fldVal.substr(0, maxLength);
	}
}


function validateSize(form_name, element_name) 
{
	alert( testRegExp(form_name, element_name, '^[0-9]+(px|%)?$'));
}


function validateEmail(form_name, element_name) 
{
	return testRegExp(form_name, element_name, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
}


var hovers = new Array();


/* adds standard hilighting of text fields in forms when focused and emptys any values within form */
function hoverEffects() 
{
	//get all elements (text inputs, passwords inputs, textareas)
	var elements = document.getElementsByTagName('input');
	var j = 0;
	for (var i4 = 0; i4 < elements.length; i4++) 
	{
		if((elements[i4].type=='text')||(elements[i4].type=='password')) 
		{
			hovers[j] = elements[i4];
			++j;
		}
	}
	elements = document.getElementsByTagName('textarea');
	for (var i4 = 0; i4 < elements.length; i4++) 
	{
		hovers[j] = elements[i4];
		++j;
	}
	
	//add focus effects
	for (var i4 = 0; i4 < hovers.length; i4++) 
	{
		hovers[i4].onfocus = function() {this.className += " hovered"; empty_field_value(this.form.name, this.name); }
		hovers[i4].onblur = function() {this.className = this.className.replace(/hovered/g, "");}
	}
}

function dateModified()
{
	if (Date.parse(document.lastModified) != 0) 
	{
	  var modiDate = new Date(document.lastModified);
	  var monthName = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	  document.write("Last modified. " + monthName[modiDate.getMonth()] + " " + modiDate.getDate() + ", " + modiDate.getFullYear() );
	 }
 }
// INIT
window.addEvent('domready', function() { 
	$$("a.noSpam").each(function(email) { var safeEmail = new SpamSafeEmail(email); })
});
