
function PrintThisPage(pAdditionalParams) 
{ 
	var url = window.location.href;
	var lAdditionalParamsStr = ''; 
		
	if (isSet(pAdditionalParams) && isArray(pAdditionalParams)) {
		
		for (pIndex in pAdditionalParams) {
			lAdditionalParamsStr = lAdditionalParamsStr + '&' + pIndex + '=' + pAdditionalParams[pIndex];
		}
	}
	
	SharpPos = url.indexOf('#');
	if (SharpPos == -1) {
		url = url + '&printversion=1' + lAdditionalParamsStr;
	} else {
		url = url.substring(0,SharpPos) + '&printversion=1' + lAdditionalParamsStr + '#' + url.substring(SharpPos);
	}
	
	window.open(url); 
	return;
}

function PrintThisPDF() 
{ 
	var url = window.location.href;
	
	SharpPos = url.indexOf('#');
	if (SharpPos == -1) {
		url = url + '&printversion=1&pdf=1';
	} else {
		url = url.substring(0,SharpPos-1) + '&printversion=1&pdf=1#' + url.substring(SharpPos);
	}
	
	location.href=url; 
	return;
}

/*
// fold/unfold expandable lists
function ELSetFoldState(pGroupRow) {
	//-1 -> folded
	//1 -> expanded
	if (pGroupRow.tagName.toUpperCase() != 'TR') return;

	for (i = 1; i <= pGroupRow.branchesCount; i++) {
		if (pGroupRow.foldState == 1) {
			document.getElementById(pGroupRow.id+'_expimage').src = '/images/tree_collapsed.gif';
			document.getElementById(pGroupRow.id+'_'+i).style.display = 'none';
		} else {
			document.getElementById(pGroupRow.id+'_expimage').src = '/images/tree_expanded.gif';
			document.getElementById(pGroupRow.id+'_'+i).style.display = 'inline';
		}
	}

	document.getElementById(pGroupRow.id).foldState *= -1;
}
*/

// Default styles of the elements labels for checkForm()
var defaultElementStyles = new Array();
		
function checkForm() {
	var lFormElements = document.forms[0].elements, lElement, checkPassed = true;
	
	for (var lElementId=0; lElementId<lFormElements.length; lElementId++) {
		if (isSet(lFormElements[lElementId].required) && (lFormElements[lElementId].required == 1)) {
			// get parent TD
			var lParentCell = getParentElementByTagName(lFormElements[lElementId], "TD");
			
			// here we suppose that element is popup (and it is in additional table) so try to get its label
			// i know the function may bug easy as it rely on chance, but if someone have better idea then to rewrite it :)
			if (!isSet(lParentCell.previousSibling) || !isSet(lParentCell.previousSibling.className) || (lParentCell.previousSibling.className.indexOf("reqtd") == -1)) {
				lParentCell = getParentElementByTagName(lParentCell, "TD");
			}
							
			if (getElementValue(lFormElements[lElementId].name) == "") {
				// store default label style and set error label background
				if (!isSet(defaultElementStyles[lElementId])) defaultElementStyles[lElementId] = lParentCell.previousSibling.style.backgroundImage;
				// change background to red to indicate the error
				lParentCell.previousSibling.style.backgroundColor = "#ff0000";
				lParentCell.previousSibling.style.color = "#ffffff";
				checkPassed = false;
			} else {
				// if we have this element defined in defaultElementStyles array
				// the element was empty before, but now it is not, so restore its previous style
				// and unset it from defaultElementStyles array
				if (isSet(defaultElementStyles[lElementId])) {
					lParentCell.previousSibling.style.backgroundImage = defaultElementStyles[lElementId];
					defaultElementStyles[lElementId] = undefined;
				}
			}
		}
	}

	return checkPassed;
}


//Parses out the repeating section number out of any control name in this section
function getRSIDFromRSControlName(pControlName) {
	var lIdPosition = pControlName.indexOf("____");
	var lResult = pControlName.substring(lIdPosition + 4);
	return lResult;
}

function getSectionsDeletedBeforeSection(pSectionName, pRSID) {
	var lSectionsDeletedBefore = 0;
	for (i=0; i< eval("RS"+pSectionName+"DeletedSections.length"); i++) {
		if (eval("RS"+pSectionName+"DeletedSections[i]") < pRSID) {
			lSectionsDeletedBefore++;
		}
	}
	return lSectionsDeletedBefore;
}

function checkZipSearchFields (pCity, pProvince, pZip) {
	var pCityObject = getElement(pCity);
	var pProvinceObject = getElement(pProvince);
	var pZipObject = getElement(pZip);
		
	if (pCityObject.value == '' && pProvinceObject.value == '' && pZipObject.value == '') {
		alert('Please enter at least part of City, State or Zip.');
		return false;
	}
	else {
		return true;
	}
}

function common_setGenderByPrefix(prefix,gender) {
	switch(prefix.value) {
		case "MR." : gender.value = 1
								 break;																		
		case "MRS." : 
		case "MS." :			
								 gender.value = 2
								 break;									 
	}
}


function lib_controlSetReadOnly(pControlName, pSetReadOnly, pTableEnclosed, pHideEnclosingTable, pAddClearLink, pClearLinkCustomCode, pUseCurrentValue) {
	var iControlToHideShow;
	var iControlToChangeBgColor;
	var iControl = getElement(pControlName);
	var iControlValue = getElementValue(pControlName);
	var iControlDisplayValue = ((iControl && isSet(iControl.tagName) && (iControl.tagName == "SELECT")) ? ((iControl.value != "") ? iControl.options[iControl.selectedIndex].text : "") : undefined);
	var iSpanElementName = "span_"+pControlName;
	var iSpanElement = getElement(iSpanElementName);
	if (!isSet(pUseCurrentValue)) pUseCurrentValue = true;
	if (!isSet(pHideEnclosingTable)) pHideEnclosingTable = true;

	if (isSet(pSetReadOnly) && pSetReadOnly) {
		//make read-only
		
		if (isSet(pTableEnclosed) && pTableEnclosed) {
			iControlToChangeBgColor = getParentElementByTagName(iControl, "TABLE");
			if (isSet(pHideEnclosingTable) && pHideEnclosingTable) {
				iControlToHideShow = getParentElementByTagName(iControl, "TABLE");
			} else {
				iControlToHideShow = iControl;
			}
		} else {
			iControlToChangeBgColor = iControl;
			iControlToHideShow = iControl;
		}
		
		if (!iControlToHideShow) return;

		//remove span element if it exists, we'll create a new one
		removeDOMelement(iSpanElementName);

		//generate spans on the fly
		if (!getElement(iSpanElementName)) {
			var oNewSpan = document.createElement("SPAN");
			oNewSpan.id = iSpanElementName;
			iControlToHideShow.insertAdjacentElement("afterEnd",oNewSpan);
		} else {
			//if we're here something went wrong
			return;
		}
		
		var iSpanElement = getElement(iSpanElementName);

		if (isSet(pUseCurrentValue) && pUseCurrentValue) {
			if (isSet(iControlDisplayValue)) {
				iSpanElement.innerHTML = iControlDisplayValue;
				iSpanElement.realValue = iControlValue;
			} else {
				iSpanElement.innerHTML = iControlValue;
			}
		} else {
			iSpanElement.innerHTML = "";
			if (isSet(iSpanElement.realValue)) iSpanElement.realValue = "";
		}
		
		var iControlToHideShowTd = getParentElementByTagName(iControlToChangeBgColor, "TD");
		if (iControlToHideShowTd) {
			iControlToHideShowTd.bgColor = "#EEEEEE";
		}
		
		if (isSet(pAddClearLink) && pAddClearLink) {
			if (isSet(pClearLinkCustomCode)) {
				lClearLinkCode = pClearLinkCustomCode;
			} else {
				lClearLinkCode = "clearElementValue(\'"+pControlName+"\');";
			}
			iSpanElement.innerHTML = "<b>"+iSpanElement.innerHTML+"</b> (<a href=\"javascript:"+lClearLinkCode +"\">clear</a>)";			
			iControlToHideShow.style.display = "none";
		} else {
			iControlToHideShow.style.display = "none";
		}
	} else {
		//make editable
		
		if (isSet(pTableEnclosed) && pTableEnclosed) {
			iControlToChangeBgColor = getParentElementByTagName(iControl, "TABLE");
			if (isSet(pHideEnclosingTable) && pHideEnclosingTable) {
				iControlToHideShow = getParentElementByTagName(iControl, "TABLE");
			} else {
				iControlToHideShow = iControl;
			}
		} else {
			iControlToChangeBgColor = iControl;
			iControlToHideShow = iControl;
		}

		if (isSet(pUseCurrentValue) && pUseCurrentValue) {
			if (isSet(iSpanElement.realValue)) {
				setElementValue(pControlName, iSpanElement.realValue);
				iSpanElement.realValue = "";
			}
		} else {
			setElementValue(pControlName, "");
		}

		clearElementValue(iSpanElementName);
		
		var iControlToHideShowTd = getParentElementByTagName(iControlToChangeBgColor, "TD");
		if (iControlToHideShowTd) {
			iControlToHideShowTd.bgColor = "#FFFFFF";
		}

		if (isSet(pAddClearLink) && pAddClearLink) {
			iControlToHideShow.style.display = "inline";
		} else {
			iControlToHideShow.style.display = "inline";
		}
	}
}

function getMonthlyValue(pValue, pMeasure, pAdditionalMultiplier, pDateFrom, pDateTo, pAddPercent) {
	var lResult = 0;
	pMeasure = parseInt(pMeasure,10);
	switch (pMeasure) {
		case 1: //hourly
			if (!isSet(pAdditionalMultiplier)) {
				pAdditionalMultiplier = 0;
			}
			lResult = pValue*pAdditionalMultiplier*52/12;
	    	break;
		case 2: //weekly
			lResult = pValue*52/12;
	    	break;
		case 3: //bi-weekly
	   	lResult = pValue*26/12;
			break;
		case 4: //semi-monthly
	   	lResult = pValue*2;
			break;
		case 5: //monthly
			lResult = pValue;
			break;
		case 6: //Quarterly
			lResult = pValue/3;
			break;
		case 7: //semi-annually
			lResult = pValue/6;
			break;
		case 8: //annually
			lResult = pValue/12;
			break;
		case 9: // Year-to-Date		
			if (pDateFrom != "" && pDateTo != "") {
				daysBetween = days_between(pDateFrom,pDateTo);				
				if (daysBetween > 0) {
					lResult = pValue / daysBetween * 365 / 12;	
				}				
			}
			break;			
	}
	
	if (pAddPercent > 0) {
		lResult += lResult * pAddPercent /100;
	}
	
	return lResult;
}

function sajax_init_object() {
	var A;
	try {
		A=new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			A=new ActiveXObject("Microsoft.XMLHTTP");
		} catch (oc) {
			A=null;
		}
	}
	if(!A && typeof XMLHttpRequest != "undefined")
		A = new XMLHttpRequest();
	if (!A)
		alert("Could not create connection object.");
	return A;
}

function getHTMLFromURI(fullUri, pList, pName) {
	var i, x, n;
	var post_data;
	var args = new Array();
	var data;
	
	post_data = null;

	x = sajax_init_object();
	x.open('GET', fullUri, true);
	x.onreadystatechange = function() {
		//alert(x.readyState);
		if (x.readyState != 4) 
			return;
		var status;
		
		status = x.responseText.charAt(0);
		data = x.responseText;
		if (status == "-") 
			alert("Error: " + data);
		else{

			var empty_string = '<!--this_list_is_empty-->';
			//alert(data.search(empty_string));
			if (getElement(pList + '_antetkaEmpty')) {
				if(data.search(empty_string) == -1){
						document.getElementById(pList + '_antetkaEmpty').style.display = 'none';
						document.getElementById(pList + '_antetkaFull').style.display = 'block';				
				}
				else{
						document.getElementById(pList + '_antetkaEmpty').style.display = 'block';
						document.getElementById(pList + '_antetkaFull').style.display = 'none';			
				}			
			}
			document.getElementById(pList).innerHTML = data;
			//alert(data);
		}
	}
	x.send(post_data);
	delete x;
}

function ManageAttach(pData, pItemIdField, pURI, pAction, pList, pTitle, pItemId, pItemHash, pURIParams) { 	
    var lItemHash;
	var lItemId;
	if(pItemHash == ''){
		if(document.getElementById('itemhash')){
			lItemHash = document.getElementById('itemhash').value;
		}
		else{
			lItemHash = '';
		}
	}
	else{
		lItemHash = pItemHash;
	}

	if(pItemId == ''){
		if(document.getElementById(pItemIdField)){
			lItemId = document.getElementById(pItemIdField).value;
		}
		else{
			lItemId = '';
		}
	}
	else{
		lItemId = pItemId;
	}
	var lIdString = '';
	if (typeof(pData) == 'number') {
		lIdString = pData;
	}
    else if (typeof(pData) == 'string') {
        lIdString = pData;
    } else {
                
		for (var i=0; i<pData.length; i++) {
            if (pData[i].id) {
                lIdString += pData[i].id;
            } else if (pData[i].itemtype && pData[i].itemid) {
                lIdString += pData[i].itemtype+':'+pData[i].itemid;
                
                if (pData[i].sendcopyto_email) {
                    lIdString += ':1';
                } else {
                    lIdString += ':0';
                }
                
                if (pData[i].sendcopyto_fax) {
                    lIdString += ':1';
                } else {
                    lIdString += ':0';
                }
                
                if (pData[i].sendcopyto_faxatt) {
                    lIdString += ':1';
                } else {
                    lIdString += ':0';
                }
                
                if (pData[i].sendcopyto_sms) {
                    lIdString += ':1';
                } else {
                    lIdString += ':0';
                }
                
                if (pData[i].relparties_roles) {
                    lIdString += ':'+ pData[i].relparties_roles;
                } else {
                    lIdString += ':0';
                }                                
            }
			if(i+1 < pData.length){
                if (pData[i].id) {
                    lIdString += ',';
                } else if (pData[i].itemtype && pData[i].itemid) {
                    lIdString += ',';
                }
			}
		}
	}
    
    var lURIParamsStr = '';
    
    if (isSet(pURIParams)) {
        for (lParamName in pURIParams) {
            lURIParamsStr = lURIParamsStr + lParamName + '=' + pURIParams[lParamName] + '&';
        }
    }
    
	var fullURL = pURI + '?' + lURIParamsStr + pItemIdField + '=' + lItemId + '&tAction=' + pAction + '&idstring=' + lIdString + '&itemhash=' + lItemHash;
    getHTMLFromURI(fullURL, pList, pTitle);
	//return true;
}

/**
 * Write options of a select control from an array
 * 
 * @param			string		name of the select control
 * @param			array			array with option values
 * @param			mixed			element value (optional)
 *
 * @return		null
 *
 * @version		1.0
 * @author		Daniel Mueller
 *
 */
function setSelectOptions (pElementName, pOptionsArray, pSelectedValue) {
	
	var lElement = getElement(pElementName);
	
	if (lElement) {
		
		lElement.options.length = 0;
		
		var i = 0;
		for (lIndex in pOptionsArray) {
			lElement.options[i] = new Option(pOptionsArray[lIndex]['name'],pOptionsArray[lIndex]['value']);
			if (pSelectedValue == pOptionsArray[lIndex]['value']) {
				lElement.SelectedIndex = i;
			}
			i++;
		}	
	}
}


/**
 * Auto populate the value from one control to another if the other is empty
 * 
 * @param			string		id of the first element
 * @param			string		id of the second element
 *
 * @return		null
 *
 * @version		1.0
 * @author		Stanislav Stratiev
 *
 */
function common_autoPopulateFieldIfEmpty(elementName1, elementName2, changedElement) {
	element1Value = getElementValue(elementName1);
	element2Value = getElementValue(elementName2);
	
	// if the two elements has values don't do anything
	if (element1Value && element2Value) {
		return;
	}
	
	// if we change the first element, and if the second is empty change the value
	if (changedElement == 1 && element1Value) {	
		setElementValue(elementName2,element1Value);
	}
	
	// if we change the second element, and if the first is empty change the value
	if (changedElement == 2 && element2Value)	{
		setElementValue(elementName1,element2Value);
	}	
}

function dayInLabelHandle (pEl, pTargetElName) {
	
	var d = parseDate(pEl.value);
	
	if (d) {
		
		var weekdays = new Array(7);
		weekdays[0]="SUN";
		weekdays[1]="MON";
		weekdays[2]="TUE";
		weekdays[3]="WED";
		weekdays[4]="THU";
		weekdays[5]="FRI";
		weekdays[6]="SAT";
		
		getElement(pTargetElName).innerHTML = weekdays[d.getDay()];
		
	} else {
		getElement(pTargetElName).innerHTML = '';
	}	
}
