var generalVars=new Object();

var pageVars;

function collectElements(container, condition, recursive, collection)
{
	if (!collection)
		collection=new Array();
	if (!condition)
		condition="1";
	var elements;
	elements = container.childNodes; //get all sub elements under the container

	for (var i=0; i<elements.length; i++)
	{ //scan through the sub elements
		theElement=elements[i];
		if (theElement.nodeType==1 && eval(condition)) //if the element has a defined "langText" attribute
			collection.push(theElement);
		else if (recursive && theElement.hasChildNodes()) //if the element has sub nodes
			collectElements(theElement, condition, collection); //call to iterate over the sub nodes
	}
	return collection;
}

function fillPageVars()
{
	if (pageVars)
		delete pageVars;
	pageVars=(document.location.hash.length>1) ? document.location.hash.substring(1).split('&') : new Array(0);
	for (var i=0; i<pageVars.length; i++)
	{
		var tempArray=pageVars[i].split('=');
		pageVars[tempArray[0]]=decodeURIComponent(tempArray[1]);
		delete tempArray;
	}
}

function escapeRegExp(inText)
{
	var matcher=new RegExp('\\\\|\\||\\(|\\)|\\[|\\{|\\^|\\$|\\*|\\+|\\?|\\.', 'gi');
	var result;
	var outText='';
	var lastMatch=0;
	while (result=matcher.exec(inText))
	{
		outText+=inText.substring(lastMatch, result.index);
		outText+='\\' + result[0];
		lastMatch=result.index+1;
	}
	delete matcher;
	outText+=inText.substr(lastMatch);
	return outText;
}

function strReplace(theText, fromArray, toArray, dontEscape)
{
	var expression='';
	var replacementArray=new Object();
	var maxToIndex=toArray.length-1;
	for (var i=0; fromArray.length; i++)
	{
		expression+='|' + ((dontEscape)?fromArray[i]:escapeRegExp(fromArray[i]));
		replacementArray[fromArray[i]]=toArray[Math.min(i, maxToIndex)];
	}
	expression=expression.substr(1);
	var matcher=new RegExp(expression, "gi");
	var result;
	var outText='';
	var lastMatch=0;
	while (result=matcher.exec(theText))
	{
		outText+=theText.substring(lastMatch, result.index);
		outText+=replacementArray[result[0]];
		lastMatch=result.index+1;
	}
	delete matcher;
	delete replacementArray;
	outText+=theText.substr(lastMatch);
	return outText;	
}

function strCount(mainStr, searchStr, dontEscape)
{
	var occurance=0;
	if (!dontEscape)
		searchStr=escapeRegExp(searchStr);
	var matcher=new RegExp(searchStr, "gi");
	while (matcher.exec(mainStr))
		occurance++;
	delete matcher;
	return occurance;
}

function LBtoBR(theText)
{
	theText=theText.replace(/(\r|\n)/g,"<br>");
	return theText;
}

function BRtoLB(theText)
{
	theText=theText.replace(/(<br>|<br \/>)/gi, "\n");
	return theText;
}

function checkRequiredFormElements(theForm)
{
	var result=true;
	for(var i=0; (result && (i<theForm.elements.length)); i++)
	{
		if (theForm.elements[i].getAttribute("reqLen"))
			result=result && (theForm.elements[i].value.length>=parseInt(theForm.elements[i].getAttribute("reqLen")))
	}
	if (!result)
	{
		if (visualParams["infoBox"])
			visualParams["infoBox"].show(generalVars["invalidInfoMsg"]);
		else
			alert(generalVars["invalidInfoMsg"]);
	}
	return result;
}

function SetAllCheckBoxes(FormName, FieldName, CheckValue)
{
	if(!document.forms[FormName])
		return;
	var objCheckBoxes = document.forms[FormName].elements[FieldName];
	if(!objCheckBoxes)
		return;
	var countCheckBoxes = objCheckBoxes.length;
	if(!countCheckBoxes)
		objCheckBoxes.checked = CheckValue;
	else
		// set the check value for all check boxes
		for(var i = 0; i < countCheckBoxes; i++)
			objCheckBoxes[i].checked = CheckValue;
}

function reset_form(form_no)
	{
        var i = 0
        for( i = 0; i < document.forms[form_no].length; i++)
        {
        				if( (document.forms[form_no].elements[i].name != 'date_to_day') && (document.forms[form_no].elements[i].name != 'date_to_month') && (document.forms[form_no].elements[i].name != 'date_to_year') )
        				{
                	if ( document.forms[form_no].elements[i].type == "select-one" )
                			document.forms[form_no].elements[i].selectedIndex = 0
                	else if ( document.forms[form_no].elements[i].type == "text" || document.forms[form_no].elements[i].type == "textarea" )
                  	  document.forms[form_no].elements[i].value = "";
                	else if ( document.forms[form_no].elements[i].type == "select-multiple" )
                  	  document.forms[form_no].elements[i].selectedIndex = -1
        				}

        }//for
	}
	
function PopUpLinkWidthHeight(hyperlink,width,height)
{
	var now = new Date();
	window.open( hyperlink,now.getSeconds(),"left=200,top=200,height="+height+",width="+width+",status=no,toolbar=no,menubar=no,location=no,resizable=no");
    return false;
}

function Get_Content_Show_Hide(address,element)
{
 if(document.getElementById(element).style.display=='none')
 {
    document.getElementById(element).style.display='block';
    aV.AJAX.loadContent(address, element);
 }
 else
 {
  document.getElementById(element).style.display='none';
 }
}

function Open_Close_Div(id)
{
	var theDiv = document.getElementById(id);
	if(theDiv.style.display=='block')
	{
		theDiv.style.display='none';
	}
	else if(theDiv.style.display=='none')
	{
		theDiv.style.display='block';
	}
}

function Expand_Collapse_All_Divs(action)
{
	var arrayOfDivs = document.getElementsByTagName('div');
	var howMany = arrayOfDivs.length - 1;
	for (var i=0; i < howMany; i++) 
	{
		var thisDiv = arrayOfDivs[i];
		if(action=='expand')
		{
		 if(thisDiv.style.display=='none')
			{
				thisDiv.style.display='block';
			}
		}
		else if(action=='collapse')
		{
		 if(thisDiv.style.display=='block')
			{
				thisDiv.style.display='none';
			}
		}
	}
}

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 regexEmailValidate(fieldId){
	var result = false;
	var regex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,8})$/;
	var address = document.getElementById(fieldId).value;
	if(regex.test(address))
		result = true;
	return result;
}
function setWarning(error_div,warning_text){
	var err_element = document.getElementById(error_div);
	err_element.innerHTML = "<span style='color:red'>"+warning_text+"</span>";
}
function hideWarning(error_div){
	document.getElementById(error_div).innerHTML="";
}

function validEmail(formField,fieldLabel,required)
{
 var result = true;
 if (required && !validRequired(formField,fieldLabel))
 {
  result = false;
 }
  return result;
}

function validateForm(theForm)
{
	if (!validRequired(theForm.email,"E-Mail",true))
  return false;
}

	function stripslashes(str) 
	{
		str=str.replace(/\\'/g,'\'');
		str=str.replace(/\\"/g,'"');
		str=str.replace(/\\\\/g,'\\');
		str=str.replace(/\\0/g,'\0');
		str=str.replace(/\\n/g,'\n');
		return str;
	}
	function rawurlencode (str) 
	{
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
 
    var hexStr = function (dec) {
        return '%' + dec.toString(16).toUpperCase();
    };
 
    var ret = '',
            unreserved = /[\w.~-]/; // A-Za-z0-9_.~-
    str = (str+'').toString();
 
    for (var i = 0, dl = str.length; i < dl; i++) {
        var ch = str.charAt(i);
        if (unreserved.test(ch)) {
            ret += ch;
        }
        else {
            var code = str.charCodeAt(i);
            // Reserved assumed to be in UTF-8, as in PHP
            if (code < 128) { // 1 byte
                ret += hexStr(code);
            }
            else if (code >= 128 && code < 2048) { // 2 bytes
                ret += hexStr((code >> 6) | 0xC0);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 2048 && code < 65536) { // 3 bytes
                ret += hexStr((code >> 12) | 0xE0);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
            else if (code >= 65536) { // 4 bytes
                ret += hexStr((code >> 18) | 0xF0);
                ret += hexStr(((code >> 12) & 0x3F) | 0x80);
                ret += hexStr(((code >> 6) & 0x3F) | 0x80);
                ret += hexStr((code & 0x3F) | 0x80);
            }
        }
    }
    return ret;
	}		
	
	function toggleRename(obj,name,rename)
	{
		if(obj.firstChild.nodeValue == rename)
			obj.firstChild.nodeValue = name;
		else
			obj.firstChild.nodeValue = rename;
	}
