var uncheckedCB="true";


function doCheck(field){
  if(uncheckedCB=="false"){      
        document.advancedsearchform.all.checked = true;
  	checkAll(field);
  	uncheckedCB="true";
  }else{
  	document.advancedsearchform.all.checked = false;
  	uncheckAll(field);
  	uncheckedCB="false";
  }
}


function checkAll(field)
{
   for (i = 0; i < field.length; i++){
	field[i].checked = true ;
   }
}

function uncheckAll(field)
{
   for (i = 0; i < field.length; i++){
	field[i].checked = false ;
   }
}


function uncheckCB(){
   document.advancedsearchform.all.checked = false;
   uncheckedCB="false";
}

var aVal = "false"

/*
TODO: CHECK AND UNCHECK ALL CHECKBOXES
function checkAll(field)
{
   if(aVal=="false"){
     for (i = 0; i < field.length; i++){
	field[i].checked = true ;
	aVal= "true";
     }
   }else{
     for (i = 0; i < field.length; i++){
       field[i].checked = false ;
       aVal= "false";
     }
   }
}
*/

//var c_value = "";
var m_value = "";


function get_checkbox_values()
{
	var catIDArray = new Array();
	var mediaArray = new Array();
    var j;

    j = 0;
	for (var i=0; i < document.advancedsearchform.content.length; i++){
		if (document.advancedsearchform.content[i].checked){
			catIDArray[j]=document.advancedsearchform.content[i].value ;
            j++ ;
		}
	}

	j = 0;
	for (var i=0; i < document.advancedsearchform.media.length; i++){ 
		if (document.advancedsearchform.media[i].checked){
			mediaArray[j] = document.advancedsearchform.media[i].value;
            j++ ;
		}
	}
}

function get_content_checkbox_array()
{
	var catIDArray = new Array();
    var j = 0;

	for (var i=0; i < document.advancedsearchform.content.length; i++){
		if (document.advancedsearchform.content[i].checked){
			catIDArray[j]=document.advancedsearchform.content[i].value ;
            j++ ;
		}
	}
	
	return catIDArray;
}

function get_media_checkbox_array()
{
	var mediaArray = new Array();
	var intchecked = 0;
    var j = 0;
    
	for (var i=0; i < document.advancedsearchform.media.length; i++){ 
		if (document.advancedsearchform.media[i].checked){
			mediaArray[j] = document.advancedsearchform.media[i].value;
            j++;
            intchecked++;
		}
	}
	
    // Return * if all media types were checked
    if ( intchecked == document.advancedsearchform.media.length ) { 
        mediaArray = '*';
    }
    
	return mediaArray;
}

var aDate, bDate;

function processPowerSearchForm(){
   var process = "true";
   
   var localContentArray = new Array()
   var localMediaArray = new Array()
   
   localContentArray = get_content_checkbox_array();
   localMediaArray = get_media_checkbox_array();
   
   var fromDate, toDate
   
   var frm = escape(document.advancedsearchform.from.value);
   var to = document.advancedsearchform.to.value
   var first_name = document.advancedsearchform.first_name.value
   var last_name = document.advancedsearchform.last_name.value
   var place = document.advancedsearchform.place.value
   var scope = document.advancedsearchform.scope.value

   get_checkbox_values()


   var url;
   
   //JRP - 20030310
   //validate text fields for asterisks
   if(!isValidWildcard(first_name)){
	alert('At least two characters must be entered before a wildcard in the first name field.');
	document.advancedsearchform.first_name.focus("");
	process = "false";
   }
   if(!isValidWildcard(last_name)){
	alert('At least two characters must be entered before a wildcard in the last name field.');
	document.advancedsearchform.last_name.focus("");
	process = "false";
   }
   if(!isValidWildcard(place)){
	alert('At least two characters must be entered before a wildcard in the place field.');
	document.advancedsearchform.place.focus("");
	process = "false";
   }
   if(!isValidWildcard(scope)){
	alert('At least two characters must be entered before a wildcard in the other keywords field.');
	document.advancedsearchform.scope.focus("");
	process = "false";
   }
   
   //JRP - 20030313
   //validate text fields for invlaid chars
   if(!containsNoInvalidChars(first_name)){
	document.advancedsearchform.first_name.focus("");
	process = "false";
   }
   if(!containsNoInvalidChars(last_name)){
	document.advancedsearchform.last_name.focus("");
	process = "false";
   }
   if(!containsNoInvalidChars(place)){
	document.advancedsearchform.place.focus("");
	process = "false";
   }
   if(!containsNoInvalidChars(scope)){
	document.advancedsearchform.scope.focus("");
	process = "false";
   }
   
   //validate date fields
   // -- start
   if(to != ""){
	   toDate = checkDate(to, 1);
	   if(!toDate){
		document.advancedsearchform.to.focus();
		process="false";
	   }
	   if(frm == ""){
	        alert("If you enter a 'To' date you must also enter a 'From' date.")
	        document.advancedsearchform.to.focus();
		process="false";
	   }
   }
   
   if(frm != ""){
	   fromDate = checkDate(frm, 2);
	   if(!fromDate){
		document.advancedsearchform.from.focus();
		process="false";
	   }
	    if(to == ""){
		alert("If you enter a 'From' date you must also enter a 'To' date.")
		document.advancedsearchform.from.focus();
		process="false";
	   }
   }
   
    if ( ( frm == "" ) && ( to == "" ) ) {
        fromDate = "";
        toDate = "";
    }
    
   if(fromDate>toDate){
   	alert("The 'From' date cannot be greater than the 'To' date.");
	document.advancedsearchform.from.focus();
	process="false";
   }
   // -- end

   //validate checkbox selections
   // -- start
   if (localContentArray.length == 0){
        alert("Please select at least one category.");
	process="false";
	// document.advancedsearchform.content.focus();
   }else if (localMediaArray.length == 0){
        alert("Please select at least one media type.");
   	process="false";
   	//document.advancedsearchform.media.focus();
   }
   // -- end
   
   //redidirct if validation process is true
   if (process=="true"){
   
        url = "";

        // Build the query in the format
        // query=first_name=john|last_name=smith|place=London|scope=will
        // %7C is a vertical-bar / pipe character - "|"
        // %3D is an equals sign
        if ( first_name != "" ) {
            url += "first_name%3D" + escape( first_name ) + "%7C";
        }
        if ( last_name != "" ) {
            url += "last_name%3D" + escape( last_name ) + "%7C";
        }
        if ( place != "" ) {
            url += "place%3D" + escape( place ) + "%7C";
        }
        if ( scope != "" ) {
            url += "scope%3D" + escape( scope ) + "%7C";
        }
        
        // remove trailing pipe
        if ( url != "" ) {
            url = url.substr( 0 , url.length-3 );
        }

        if ( fromDate != "" ) {
            url += "&first_date=" + fromDate;
        }
        if ( toDate != "" ) {
            url += "&last_date=" + toDate;
        }

        // Finally, assemble the rest of the URL
        url = "http://collections.europarchive.org/tna/20090630141827/http://www.nationalarchives.gov.uk/documentsonline/search-progress.asp?searchType=powersearch&query="  + url + "&catID=" + localContentArray + "&mediaArray=" + localMediaArray + "&pageNumber=1&queryType=1";

        document.location.href = url;
   }
}  

var illegalChars = /\W'/;   //' Homesite quote closing ;-)
  // allow only letters, numbers, and underscores

function validFieldEntry(formField,fieldLabel)
{
   if (illegalChars.test(formField.value)) {
       error = "The username contains illegal characters.\n";
	   alert(error);
	   
	   alert('Please enter a value for the "' + fieldLabel +'" field.');
       formField.focus();
	   return false;
   }   
   return true;
}

function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	
	return result;
}

function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}


/**********************************************************************/
/*Function name :isDigit(theDigit) */
/*Usage of this function :test for an digit */
/*Input parameter required:thedata=string for test whether is digit */
/*Return value :if is digit,return true */
/* else return false */
/**********************************************************************/
function isDigit(theDigit)
{
var digitArray = new Array('0','1','2','3','4','5','6','7','8','9'),j;

for (j = 0; j < digitArray.length; j++)
{if (theDigit == digitArray[j])
return true
}
return false

}
/*************************************************************************/
/*Function name :isPositiveInteger(theString) */
/*Usage of this function :test for an +ve integer */
/*Input parameter required:thedata=string for test whether is +ve integer*/
/*Return value :if is +ve integer,return true */
/* else return false */
/*function require :isDigit */
/*************************************************************************/
function isPositiveInteger(theString)
{
var theData = new String(theString)

if (!isDigit(theData.charAt(0)))
if (!(theData.charAt(0)== '+'))
return false

for (var i = 1; i < theData.length; i++)
if (!isDigit(theData.charAt(i)))
return false
return true
}

var err=false;
/**********************************************************************/
/*Function name :isDate(s,f) */
/*Usage of this function :To check s is a valid format */
/*Input parameter required:s=input string */
/* f=input string format */
/* =1,in mm/dd/yyyy format */
/* else in dd/mm/yyyy */
/*Return value :if is a valid date return 1 */
/* else return 0 */
/*Function required :isPositiveInteger() */
/**********************************************************************/
function isDate(s, n){
	var a1=s.split("/");
	var e=true;
	var date = "";

	if (a1.length!=3)
	{
	    var regexp = /^(\d{4})$/;
	    if(regexp.test(s)==true){
	        if(n==1) date = date + s + "1231";
	    	if(n==2) date = date + s + "0101";
	    	e=true
	    	return date
	    }else{
			e=false;
		}
	}else{
	    var regexp = /^(\d{2})\/(\d{2})\/(\d{4})$/;

		if(regexp.test(s)==true){
			if (a1.length==3)
				var na=a1;

			if (isPositiveInteger(na[0]) && isPositiveInteger(na[1]) && isPositiveInteger(na[2])){
				var d=na[0],m=na[1];y=na[2];

				if((!validateDay(d,m)) ||(!validateMonth(m))){
				  e=false;
				}else{
					date= y + m + d
					e=true
					return date;
				}
			}else{
				e=false;
			}
		}else{e=false;}
	}
	return e
}

function checkDate(s, n){
	//var s=v.a.value;
	var dte

	if (dte = isDate(s, n)) {
		return dte
		//alert("The inputted date value is valid! - " + dte);
	} else {
	    if(err==false){
		   alert("Please input dates in the format DD/MM/YYYY or YYYY.");
		}
    }
	return false;
}

//check for leap years
function validateDay(day, month) {

      if(month==02){
      	   if (!inDayRangeForFeb(day)) {
	  		 alert("Enter a number between 1 and 28 (or 29 for leap years).");
	  		 err=true;
	  		 return false
		  }

      }else{
		  if (!inDayRange(day)) {
			 alert("Enter a number between 1 and 31.");
			 err=true;
			 return false
		  }
	  }
  return true
}

function inDayRange(inputStr) {
	var num = inputStr;
	if (num < 1 || num > 31) {
		return false
	}
	return true
}

function inDayRangeForFeb(inputStr) {
	var num = inputStr;
	if (num < 1 || num > 29) {
		return false
	}
	return true
}

function validateMonth(month) {
      if (!inMonthRange(month)) {
         alert("Enter a number between 1 (January) and 12 (December).");
         err=true;
         return false
      }
  return true
}

function inMonthRange(inputStr) {
	var num = inputStr;
	if (num < 1 || num > 12) {
		return false
	}
	return true
}

function resetForm(what){	
    for (var i=0, j=document.advancedsearchform.elements.length; i<j; i++) {
        myName = document.advancedsearchform.elements[i].name;
        myValue = document.advancedsearchform.elements[i].value;
       
       if (myName.indexOf('text')){
            if (myName == "searchType" || myName == "pageNumber" || myName == "Button"){
             //UNFORTUNATELY THIS IS NEEDED TO CATCH TYPE = BUTTONS !!
            }else{
                //alert("text = " + myName);
            	document.advancedsearchform.elements[i].value = "";
            } 
       }
           
           if (myName.indexOf('checkbox')){
             if (myName == "searchType" || myName == "pageNumber" || myName == "Button"){
                //UNFORTUNATELY THIS IS NEEDED TO CATCH TYPE = BUTTONS !!
             }else if (myName == "content"){
    	       //alert("checkbox = " + myName);
    	       document.advancedsearchform.elements[i].checked = false;
             }else if (myName == "media"){
    	       //alert("checkbox = " + myName);
    	       document.advancedsearchform.elements[i].checked = true;
    	     }
           }
    } 

}

function clearPowerSearchFields()
{
	document.advancedsearchform.first_name.value = "";
	document.advancedsearchform.last_name.value = "";
	document.advancedsearchform.place.value = "";
	document.advancedsearchform.scope.value = "";
	document.advancedsearchform.from.value = "";
	document.advancedsearchform.to.value = "";
    	document.advancedsearchform.all.checked = true;
    	checkAll(document.advancedsearchform.content);
   	checkAll(document.advancedsearchform.media);
}

