//Open modal entry form --------------------

function openModalWindow() {
    w=435;
	//document.getElementById("fullscreen").style.width = window.innerWidth;
	//document.getElementById("fullscreen").style.height = window.innerHeight;
	document.getElementById("mform").style.display = "";
	var h=document.getElementById("mform").offsetHeight; //610;
	//l=(window.innerWidth-455)/2;
	t= window.pageYOffset+100;
    document.getElementById("mform").style.top = t+"px";
	//document.getElementById("mform").style.left = l+"px";
	//document.getElementById("mformshadow").style.top = '0px'; //(t-20)+"px";
	//document.getElementById("mformshadow").style.left = '0px'; //(l-20)+"px";
	document.getElementById("mformshadow").style.width = window.innerWidth+"px"; //(w+40)+"px";
	document.getElementById("mformshadow").style.height = document.body.scrollHeight+"px";//(h+40)+"px";
	document.getElementById("mformshadow").style.display = "";
}


// HTML formatting inserts---------------

function addtags(type){
 	if(type=="b"){tag1="<b>";tag2="</b>";}
	if(type=="i"){tag1="<i>";tag2="</i>";}
	if(type=="h"){
		var URL = prompt("Enter the URL" ,"http://");
		if (URL=="http://" || !URL)return;
		tag1="<a target=\"_blank\" href=\""+URL+"\">";tag2="</a>";
	}
	if(type=="m"){
		var URL = prompt("Enter the email address" );
		if (!URL)return;
		tag1="<a href=\"mailto:"+URL+"\">";tag2="</a>";
	}
	if(type=="d"){tag1="<div id=\"indent\">";tag2="</div>";}
	
	if(window.getSelection){
		var start=  document.entryform.message.selectionStart;
		var end = document.entryform.message.selectionEnd;
		var Text = document.entryform.message.value;
		var Textstart=Text.slice(0,start);
		var Textend=Text.slice(end);
		if(start==end){var seltext=URL;}
		else{var seltext=Text.slice(start,end);}
		Text=Textstart+tag1+seltext+tag2+Textend;
		document.entryform.message.value=Text;
	}else{
		var seltext= document.selection.createRange().text;
		if(seltext!=""){
			Text=tag1+seltext+tag2;
			document.selection.createRange().text=Text;
		}
		//alert (range.text);
		//var duprange = range.duplicate();
		//duprange.moveToElementText(element);
		//duprange.setEndPoint( 'EndToEnd', range );
		//var start = duprange.text.length - range.text.length;
		//var end = start + range.text.length;
	}
	
}

// show or hide a block of text --------------

function toggle(uid) {
	var ele = document.getElementById("toggleText"+uid);
	var text = document.getElementById("displayText"+uid);
	if(ele.style.display == "block") {
    		ele.style.display = "none";
	}else{ele.style.display = "block";}
} 

// generate email address -------------
function contact(name,subject) {
	address="mailto:"+name+"@owa-usa.org"
	if(subject) address=address+"?subject="+subject;
	window.location=address; 
}

// Spawn a popup window
function openPopup(url,name,w,h) {
	var newWindow = window.open(url, name,'width=' + w + ',height=' + h + ',toolbars=no,scrollbars=yes');
	newWindow.focus();
}

// Function to hide a given object
function hide(id) {
	if(document.getElementById) {
		obj = document.getElementById(id);
		obj.style.display = 'none';
	}
}

// Function to show a given object
function show(id) {
	if(document.getElementById) {
		obj = document.getElementById(id);
		obj.style.display = 'block	';
	}
}

// Function to change the class of an object
function changeClass(id,new_class) {
	if(document.getElementById) {
		obj = document.getElementById(id);
		if(obj) {
			obj.className = new_class;
			return true;
		}
	}
	return false;
}

// Wrapper function to change the classes of several objects
function changeClasses(elmList,color) {
	if (document.getElementById) {
		for (var i = 0; i < elmList.length; i++) {
			changeClass(elmList[i],color);
		}
	}
}

// Function to show the properties of an object in an alert window
function showProps(obj) {
	var str = '';
	for(prop in obj) {
		str += prop + ' : ' + obj[prop] + "\n";
	}
	alert(str);
}

// MM Image swapping functions
function preloadImages() { 
  var d=document; if(d.images){ if(!d.p) d.p=new Array();
	var i,j=d.p.length,a=preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.p[j]=new Image; d.p[j++].src=a[i];}}
}
function findObj(n, d) { 
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document); return x;
}
function swapImage() { 
  var i,j=0,x,a=swapImage.arguments; document.sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=findObj(a[i]))!=null){document.sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function swapImgRestore() { 
  var i,x,a=document.sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

// GENERIC CODE FOR CLIENT_SIDE ERROR VALIDATION
//  Core error checking functions taken from Netscape developer site

// VARIABLE DECLARATIONS
var errColor = "red";
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var whitespace = " \t\n\r";
var decimalPointDelimiter = ".";
var phoneNumberDelimiters = ".()- ";
var validUSPhoneChars = digits + phoneNumberDelimiters;
var digitsInUSPhoneNumber = 10;
var ZIPCodeDelimiters = "-";
var validZIPCodeChars = digits + ZIPCodeDelimiters;
var digitsInZIPCode1 = 5;
var digitsInZIPCode2 = 9;
var creditCardDelimiters = "- ";


// ********************************************************
// BEGIN CORE ERROR CHECKING FUNCTIONS
// ********************************************************

// Check whether string s is empty.
function isEmpty(s) {   
	return ((s == null) || (s.length == 0));
}

// Returns true if string s is empty or whitespace characters only.
function isWhitespace (s) {   
	var i;
    if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}

// Removes all characters which appear in string bag from string s.
function stripCharsInBag (s, bag) {
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

// Removes all characters which do NOT appear in string bag 
// from string s.
function stripCharsNotInBag (s, bag) {
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }
    return returnString;
}

// Removes all whitespace characters from s.
function stripWhitespace (s) {
	return stripCharsInBag (s, whitespace)
}

// Removes initial (leading) whitespace characters from s.
function stripInitialWhitespace (s) {
	var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;    
    return s.substring (i, s.length);
}

// Returns true if character c is an English letter 
// (A .. Z, a..z).
function isLetter (c) {
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

// Returns true if character c is a digit 
// (0 .. 9).
function isDigit (c) {
	return ((c >= "0") && (c <= "9"))
}

// Returns true if character c is a letter or digit.
function isLetterOrDigit (c) {
	return (isLetter(c) || isDigit(c))
}

// isInteger (STRING s [, BOOLEAN emptyOK])
// Returns true if all characters in string s are numbers.
function isInteger (s) {
	var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}


// isAlphabetic (STRING s [, BOOLEAN emptyOK])
// Returns true if string s is English letters (A .. Z, a..z) only.
function isAlphabetic (s) {
	var i;
    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (!isLetter(c))
        return false;
    }

    // All characters are letters.
    return true;
}

// isAlphanumeric (STRING s [, BOOLEAN emptyOK])
// Returns true if string s is English letters (A .. Z, a..z) and numbers only.
function isAlphanumeric (s) {
	var i;
    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);

    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }

    // All characters are numbers or letters.
    return true;
}


// isEmail (STRING s [, BOOLEAN emptyOK])
function isEmail2 (s) {
	if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
   
    if (isWhitespace(s)) return false;
    
	var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@")) {
		i++;
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != ".")) {
		i++;
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}


function isEmail(emailStr) {
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	
	if (matchArray==null) {
		return false;
		}
	var user=matchArray[1];
	var domain=matchArray[2];
	
	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			return false;
			}
		}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			return false;
			}
		}
	if (user.match(userPat)==null) {
		return false;
		}
	
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				return false;
				}
			}
		return true;
		}
	
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			return false;
			}
		}
	
	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) {
		return false;
		}
	
	if (len<2) {
		return false;
		}
	
	return true;
}

// Get checked value from radio button.
function getRadioButtonValue (radio) {
	for (var i = 0; i < radio.length; i++) {
		if (radio[i].checked) { break }
    }
    return radio[i].value
}



// Determines if a SELECT menu has a value
//  Requires a menu structured as follows:
//    	<SELECT name="foobar">
//			<OPTION selected="selected">Choose a state...</OPTION>
//			<OPTION value="val1">Value 1</OPTION>
//				...
//		</SELECT>
function isSelected(selectObj) {
	if (selectObj.selectedIndex != 0) {
		return true;
	} else {
		return false;
	}
}

// Determines if radio button is selected
function radioIsSelected(radioObj) {
	for (var i = 0; i < radioObj.length; i++) {
		if (radioObj[i].checked) {
			return true;
		}
	} 
	return false;
}

// Utility function to get the selected value within a select menu
function getSelectedValue(selectObj) {
	var idx = selectObj.selectedIndex;
	return selectObj.options[idx].value;
}

