<!--

//Copyright Mangolab Ltd. 2008. All rights reserved.
//USES:
// -j_utils_strings.js
// -j_utils_url.js
//SUMMARY:
// Used by various pages to retrieve key pairs and values from a location search string.
// NB GENERIC - supports up to 16 variable-value pairs in the search string
//HISTORY:
// 23.10.08 - <FC> - Reviewd / FB ref: CASE:1496

//Call SetParameters passing the active window
//GetParameterValue('parameter') can then be called - see _DOCUMENTATION for parameter list
var parms = new Array(15); //ie 1st = 0
var CntParameters = 0;

//call to set parms array from window.location.search
function SetParameters(){ // removed AWindow parameter
//nb includes clearing array
arraySubParms(window.location.search); // replaced AWindow with window
}

//requires j_utils_url.js
function GetUpdatedURL(AURL,ASearchParameter,ANewSearchParameterValue){
var StrBase = GetBaseUrl(AURL);
//now add/update the  URL search parameter with any  existing search string
var StrSearch=GetUpdatedSearchString(AURL,ASearchParameter,ANewSearchParameterValue); //this includes ? if needed   
//Add it all back together
var StrReturnUrl=StrBase+IndexPage+StrSearch;  
return StrReturnUrl;
}

function GetUpdatedSearchString(AnHRefSearchString,AParameter,AParameterValue){
arraySubParms(AnHRefSearchString);
//alert('jparams.js, SetParameters: CntParameters='+CntParameters);
UpdateOrAddParameter(AParameter,AParameterValue);
//return search string
var Str=GetHrefSearchString();
return Str;
}

function UpdateOrAddParameter(AParameter,AParameterValue){
if (IsParameterExists(AParameter)){ 
   //alert('jparams.js, UpdateOrAddParameter: *updating* '+AParameter+'='+AParameterValue);
   parms[AParameter]=AParameterValue;
   }  
   else {
   //alert('jparams.UpdateOrAddParameter: *adding* '+AParameter+'='+AParameterValue);
   AddParameter(AParameter,AParameterValue);
   }
}

function GetHrefSearchString(){
//Rebuild the params in to an href style search string
var Str='';
//alert('jparams.GetHrefSearchString: Building Search string from CntParameters='+CntParameters);
for (i = 0 ; i < CntParameters ; i++){    
    if (parms[i] != ''){
       //omit any parameters that have a blank value too
	    if (parms[parms[i]] != ''){
	       if (Str != ''){
	          Str = Str + '&';
		       }
	       Str= Str + parms[i] + '=' + parms[parms[i]];
	       //alert('jparams.GetHrefSearchString: i='+i+' Str='+Str);
	       }
        }
	}
if (Str!=''){
   Str='?'+Str;
   }
return Str;
}

function IsParameterExists(AParameter){
for (i = 0 ; i < CntParameters ; i++){
    if (parms[i] == AParameter){
	   //alert('jparams.js, IsParameterExists: Parameter['+i+']:'+AParameter+' already exists');
	   return true;
	   }
    }
return false;
}

function arraySubParms(astr){ 
   ClearArray(); //inc. CntParameters = 0;   
	 astr = astr.substring(astr.indexOf("?") + 1, astr.length); //was lastIndexOf, now changed
	 astr = SearchAndReplace(astr,"%20"," ");
	 k = astr.length;
	 //alert('jparams.arraySubParmsastr: astr='+astr);
     bstr = '';     
     parms[CntParameters] = 'main'; //cunning assignment so that any search value without a param goes into main array (overwritten if there are params)
     parms[parms[CntParameters]] = ''; //just in case no params & no search string
     for (i = 0 ; i <= k ; i++){
          ccStr = astr.substring(i,i+1);     
          if (ccStr == '+') ccStr = ' ';
          if (ccStr == '%')
               {
                 var xx = astr.substring(i,i+3) ;
                 ccStr = unescape(xx);   
                 i += 2;//ATD was 3
               }
          // car  
          if (ccStr == '=')
               {
                    parms[CntParameters] = bstr;
					//alert('jparams.arraySubParmsastr: added param key parms['+CntParameters+']='+parms[CntParameters]);
                    bstr = '';
                    continue;
               }
          //right-hand member of pair
          if ((ccStr == '&') || (i == k)) //ie if on last pass (otherwise requires final &)
               {
                    parms[parms[CntParameters]] = bstr;
					//alert('jparams.arraySubParmsastr: added param value parms['+CntParameters+']='+parms[CntParameters] + ' parms['+parms[CntParameters]+']='+parms[parms[CntParameters]]);					
                    CntParameters++;
                    bstr = '';
                    ccStr='';
                    continue;
               }
          bstr += ccStr;
        }
}

function ClearArray(){
for (i = 0 ; i < CntParameters ; i++){
    parms[i]='';}
CntParameters = 0;	
}

function GetParameterValue(AParameter){
try {
	var Str=''+parms[AParameter]; 
	if (Str=='undefined'){
	   Str='';
	   }
	return Str;   	   
    }
    catch(err) {
        return '';
		}	
} 

function GetParameterIndex(AParameter){
for (i = 0 ; i < CntParameters ; i++){
    if (parms[i] == AParameter){
      //alert('j_utils_params.js, GetParameterIndex: Parameter['+i+']:'+AParameter+' - found');
      return i;
      }
    }
return -1;
}

function AddParameter(AParameter,AParameterValue){
parms[CntParameters] = AParameter;
parms[AParameter] = AParameterValue;
//alert('jparams.AddParameter: added parms['+CntParameters+']='+parms[AParameter]+' New CntParameters='+CntParameters+'+1');
CntParameters++;
}

function DeleteParameter(AParameter){
i=GetParameterIndex(AParameter);
if (i >= -1){
      //alert('j_utils_params.js, DeleteParameter: Deleting Parameter['+i+']:'+parms[i]+'='+parms[parms[i]]);
      parms[AParameter]='';//blank associative array hash value
      parms.splice(i, 1);//.splice(index, number of elements) remove Aparameter element
      CntParameters -= 1; //reduce CntParameters by 1          
      }   
return (i >= -1);//send true if there was something to delete, false if not
}

//-->
