// this function simpy checks for existence of a form element
function checkFormElementExistance(f,name)
{
 	var n= f.length
	for(i=0;i<n;++i)
 	{
 		if (f.elements[i].name == name)	return true;
 	}
 	return false;
}




// open window or reload it 
function launch(newURL, newName, newFeatures, orgName)
{
  var remote = open(newURL, newName, newFeatures);
  if (remote.opener == null)
    remote.opener = window;
  remote.opener.name = orgName;
  return remote;
}

function launchRemote() {
  myRemote = launch("http://www.webreference.com/js/column7/demoontop.html", "myRemote", "height=400,width=110,channelmode=0,dependent=1,directories=0,fullscreen=0,location=0,menubar=0,resizable=1,scrollbars=1,status=1,toolbar=0", "myWindow");
}



// check browser version
function loadPage(where)
{
//	vers = navigator.appVersion;
//	vers = parseFloat(vers.substring(vers.lastIndexOf(".")-1,vers.length));
//
 //	if (navigator.appName=="Netscape")
//	{                                                             
//  		if (vers < 4)
//		{			
//		window.location.href ="http://gef.undp.org/pimsii/WrongBrowser.html";
//		window.location.target = where;	
//		if (top.location.href != location.href)
  //			top.location.href = location.href;

//		}
			
//	}
//	else if (navigator.appName == "Microsoft Internet Explorer")
//	{
//		location.target = where;
//		location.replace("http://gef.undp.org/pimsii/WrongBrowser.html");
	
//		if (top.location.href != location.href)
//  			top.location.href = location.href;

//	}

}


function isBlank(s)
{
 	var len=s.length
	var i

	for(i=0;i<len;++i)
	{
		if(s.charAt(i)!=" ") return false
	}

	return true
}



function checkFormElementExistance(f,name)
{
 	var n= f.length
	for(i=0;i<n;++i)
 	{
 		if (f.elements[i].name == name)	return true;
 	}
 	return false;
}







// quarter period validation
function checkQuarter(dateobject, field) 
{
	var a=dateobject.value;
	var err=0
	a = trim(a)
	var len=a.length
	//alert('a = '+len+ ' '+dateobject.name)

 	if ((len == 0) || (a == 'q-yyyy'))
	{
		return true
	}
	
	{
		if (a.length != 6) err=1
		b = a.substring(0, 1)// quarter
		c = a.substring(1, 2)// '-'
		d = a.substring(2, 6)// year
		var num = parseInt(b)
		if (isNaN(num)) err = 3
		if ((b < 1) || (b > 4) ) err = 4
		if (c != '-') err = 5
		if (isNaN(d)) err = 6
		if (d<1990 || d>2101) err = 7
		if (err>0) 
		{
			alert('Please enter '+ field + ' date in this format [q-yyyy] error:'+err) ;
	 		dateobject.value = "q-yyyy"		
	        dateobject.focus();
	        dateobject.select();
	        return false;
		}
		else 
		return true;
	}
}
// pads out single numbers
function padout(number) { return (number < 10) ? '0' + number : number; }

// remove spaces
function trim(a)
{
	var start
	var end
	var len = a.length
	start = 0
	for(i=0;i<len;++i)
	{
  		if ((a.charAt(i)==" ") || (a.charAt(i)=="\n"))
		{
			start = start +1			
		}
		else break;
	}
	a = a.substring(start,len)
	len = a.length
	end = len
	for(i=len;i>0;++i)
	{
  		if ((a.charAt(i)==" ") || (a.charAt(i)=="\n"))
		{
			end = end -1			
		}
		else break;
	}
	a = a.substring(0,end)			
	return a;
}


// validate EUROPEAN date

function checkDate(dateobject, field) 
{
	//alert(field)
	//alert(dateobject.name);
	//alert(dateobject.value);
	var a = dateobject.value;
	var day = ""
	var mon = ""
	var yr = ""
	var err=0
 	var i = 0 
	var mm = 0
	var yy =0
	
	a = trim(a)
	var len=a.length
	if ((len == 0) || (a == 'dd/mm/yyyy'))
	{
		return true
	}
	else
	{
	 	// 1/1/1996
		if (a.length < 8) err=1
		//break into day - mont - year
		for(i=0;i<len;++i)
		{
  			if(a.charAt(i)=="/") 
			{
				day = a.substring(0,i)
				mm = i +1
				break;
			}
		}
		for(i=mm;i<len;++i)
		{
  			if(a.charAt(i) =="/") 
			{
				mon = a.substring(mm,i)
				yy = i +1
				break;
			}
		}
		yr = a.substring(yy,len)
		d = day // day
		b = mon // month
		f = yr // year
		
		var num = parseInt(d)
		if (isNaN(num)) err =10
		num = parseInt(b)
		if (isNaN(num)) err = 11
		num = parseInt(f)
		if (isNaN(num)) err = 12

		//alert('day = '+day +' mon= ' +mon+' year = '+yr)
		if (b<1 || b>12) err = 2
		if (d<1 || d>31) err = 4
		if (f<1899 || f>2100) err = 6
		if (b==4 || b==6 || b==9 || b==11)
		{
			if (d==31) err=7
		}
		// leap year check
		if (b==2)
		{
			var g=parseInt(f/4)
			if (isNaN(g)) 
			{
				err=8
			}
			if (d>29) err=9
			if (d==29 && ((f/4)!=parseInt(f/4))) err=10
		}
		if (err>0) 
		{
			alert('Please enter '+ field + ' date in this format [dd/mm/yyyy] '+ err) ;
			//alert(dateobject)
	        dateobject.focus()
	        dateobject.select()
	        return false;
		}
		else return true;
	}
}




// add to date yrs and months
function addDate(dateobject,yrs,mths) 
{
	//alert(dateobject.value);
	//alert ('y '+yrs+' m '+mths)
	var a = dateobject.value;
	var day = ""
	var mon = ""
	var yr = ""
	var err=0
 	var i = 0 
	var mm = 0
	var yy =0
	
	a = trim(a)
	var len=a.length
	if ((len == 0) || (a == 'dd/mm/yyyy'))
	{
		return true
	}
	else
	{
	 	// 1/1/1996
		if (a.length < 8) err=1
		//break into day - mont - year
		for(i=0;i<len;++i)
		{
  			if(a.charAt(i)=="/") 
			{
				day = a.substring(0,i)
				mm = i +1
				break;
			}
		}
		for(i=mm;i<len;++i)
		{
  			if(a.charAt(i) =="/") 
			{
				mon = a.substring(mm,i)
				yy = i +1
				break;
			}
		}
		yr = a.substring(yy,len)
		d = day // day
		b = mon // month
		f = yr // year
		// now add date value
		var new_yr=parseInt(f)
		
		new_yr= new_yr + parseInt(yrs)
		if ((parseInt(mon)+parseInt(mths)) > 12) // x-=12 = mon
		{
		 mon = (parseInt(mon) + parseInt(mths)) -12
		 new_yr = new_yr +1
		}
		else
		mon = parseInt(mon) + parseInt(mths)
		//alert ('new y '+new_yr+'new  m '+mon)
		if (mon==4 || mon==6 ||mon==9 || mon==11)
		{
			if (d==31) d=30
		}
		// leap year check
		if (mon==2)
		{
			var g=parseInt(f/4)
			if (isNaN(g)) 
			{
				err=8
			}
			if (d>29) d = 29
			if (d==29 && ((f/4)!=parseInt(f/4))) d=28
		}
		new_date = d+"/"+mon+"/"+new_yr
		return new_date		
	}
}




// convert european date to USA for DB storage
function convertToUSdate(dateobject)
{
	var day = ""
	var mon = ""
	var yr = ""
	var err=0

 	var i = 0 
	var mm = 0
	var yy =0
	//alert(dateobject.name +" convert")
	var a = dateobject.value

	var len = a.length
 	if ((len == 0) || (a == 'dd/mm/yyyy'))
	{
		//alert('a converted = '+len)
		return a
	}
	else
	{
		for(i=0;i<len;++i)
		{
  			if(a.charAt(i)=="/") 
			{
				day = a.substring(0,i)
				mm = i +1
				break;
			}
		}
		for(i=mm;i<len;++i)
		{
  			if(a.charAt(i) =="/") 
			{
				mon = a.substring(mm,i)
				yy = i +1
				break;
			}
		}
		yr = a.substring(yy,len)
		dateobject.value= mon+'/'+day+'/'+yr
	}
}


function checknumber(object)
    {
    //Returns true if value is a number or is NULL
    //otherwise returns false   
	var object_value = object.value;
	var err = 0


    if (object_value.length == 0)
        return true;

    //Returns true if value is a number defined as
    //   having an optional leading + or -.
    //   having at most 1 decimal point.
    //   otherwise containing only the characters 0-9.
        var start_format = " .,+-0123456789";
        var number_format = " .,0123456789";
        var check_char;
        var decimal = false;
        var trailing_blank = false;
        var digits = false;

    //The first character can be + - .  blank or a digit.
        check_char = start_format.indexOf(object_value.charAt(0))
    //Was it a decimal?
        if (check_char == 1)
            decimal = true;
        else if (check_char < 1)
                err = 1;
        
        //Remaining characters can be only . or a digit, but only one decimal.
        for (var i = 1; i < object_value.length; i++)
        {
                check_char = number_format.indexOf(object_value.charAt(i))
                if (check_char < 0)
                         err = 2;
						 
                else if (check_char == 1)
                {
                        if (decimal)            // Second decimal.
                           err = 3;
                        else
                                decimal = true;
                }
                else if (check_char == 0)
                {
                        if (decimal || digits)  
                                trailing_blank = true;
        // ignore leading blanks

                }
                else if (trailing_blank)
		                err = 4;
                else
                        digits = true;
        }       
    
		if (err>0) 
		{
			alert('Please enter only currency amounts '+ err) ;
			//alert(dateobject)
	        object.focus()
	        object.select()
	        return false;
		}
		else return true;

    }

// JAVASCRIPT HANDLING LOCKING AND UNLOCKING
function lockedObject(locked, image, lockedBySecurityLevel, userSecurityLevel) {

	if (lockedBySecurityLevel <= userSecurityLevel) {

		if (locked.value == 'Yes') {
			locked.value = 'No';
			image.src = 'img/locked1.gif';
		}
		else {
			locked.value = 'Yes';
			image.src = 'img/locked.gif';
		}
	}
	else
		alert ('You are not allowed to unlock this data element.');

	return false;
}

function unlockedObject(locked, image) {

	if (locked.value == 'Yes') {
		locked.value = 'No';
		image.src = 'img/unlocked.gif';
	}
	else {
		locked.value = 'Yes';
		image.src = 'img/unlocked1.gif';
	}

	return false;
}


// selects all checkboxes of one type
function checkAllItems(checkbox, type, form) {
	
	var status = checkbox.checked;
			
	for (var i=0; i < form.elements.length; i++) {
		if (form.elements[i].name == type) {
			form.elements[i].checked = status;
		}
	}
}

// checks if at least one checkbox is selected
function checkSelected(type, form) {
	
	var checked = false;
			
	for (var i=0; i < form.elements.length; i++)
		if (form.elements[i].name == type)
			if (form.elements[i].checked)
				checked = true;

	return checked;
}


function addStatusValueToSelect(mySelect, textField)
{
    if (mySelect.options[mySelect.selectedIndex].value=="-2")
    {
       myValue = window.prompt("Enter new status type:")
       if (myValue!="")
       {
          var optionName = new Option(myValue, -1, true, true)
          mySelect.options[mySelect.length] = optionName;
          textField.value = myValue;
       }
    }
   else
   {
      if (mySelect.options[mySelect.selectedIndex].value=="-1")
      {
         textField.value = mySelect.options[mySelect.selectedIndex].text;
      }
      else
      {
         textField.value = '';
      }
   }
}

