var aDebug=[];
var aMonths=['January','February','March','April','May','June','July','August','September','October','November','December'];  
var aWeekdays=['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; 

var b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
var b64 = [];
var f64 =[];
for (var i=0; i<b64s.length ;i++) {
	b64[i] = b64s.charAt(i);
	f64[b64s.charAt(i)] = i;
}

function utf8Encode(sInput){
	var sOutput=''
	for (var j=0; j<sInput.length; j++){
		iCode=sInput.charCodeAt(j);
		if (iCode<128){
			sOutput += String.fromCharCode(iCode);
		}else if (iCode<2048){
			sOutput += String.fromCharCode((iCode>>6)|192);
			sOutput += String.fromCharCode((iCode&63)|128);
		}else if (iCode<65536){
			sOutput += String.fromCharCode((iCode>>12)|224);
			sOutput += String.fromCharCode(((iCode>>6)&63)|128);
			sOutput += String.fromCharCode((iCode&63)|128);
		}else{
			sOutput += String.fromCharCode((iCode>>18)|240);
			sOutput += String.fromCharCode(((iCode>>12)&63)|128);
			sOutput += String.fromCharCode(((iCode>>6)&63)|128);
			sOutput += String.fromCharCode((iCode&63)|128);
		}
	}
	return sOutput;

}

function utf8Decode(sInput){
	var sOutput = "";
	var i=0;
	var iCode1=iCode2=iCode3=iCode4=0;

	while(i<sInput.length){
		iCode1 = sInput.charCodeAt(i);
		if (iCode1<128) {
			sOutput += String.fromCharCode(iCode1);
			i++;
		}else if((iCode1>191) && (iCode1<224)) {
			iCode2 = sInput.charCodeAt(i+1);
			sOutput += String.fromCharCode(((iCode1&31)<<6) | (iCode2&63));
			i+=2;
		}else if((iCode1>223) && (iCode1<240)) {
			iCode2 = sInput.charCodeAt(i+1); 
			iCode3 = sInput.charCodeAt(i+2);
			sOutput += String.fromCharCode(((iCode1&15)<<12) | ((iCode2&63)<<6) | (iCode3&63));
			i+=3;
		}else{
			iCode2 = sInput.charCodeAt(i+1); 
			iCode3 = sInput.charCodeAt(i+2);
			iCode4 = sInput.charCodeAt(i+3);
			sOutput += String.fromCharCode(((iCode1&7)<<18) | ((iCode2&63)<<12) | ((iCode3&63)<<6) | (iCode4&63));
			i+=4;
		}
	}
	return sOutput;
}

function atobJSAlternate(sInput){
	return atobJS(sInput.replace(/#/g,'/').replace(/~/g,'='));
}

function btoaJSAlternate(sInput){
	return (btoaJS(sInput)).replace(/\//,'#').replace(/=/g,'~');
}

function atobJS(sInput){
	var sOutput=''; var i=0;
	sInput=sInput.replace(/\n|\r/g,""); sInput=sInput.replace(/=/g,"");
	while (i<sInput.length){
		sOutput += String.fromCharCode((f64[sInput.charAt(i)]<<2) | (f64[sInput.charAt(i+1)]>>4));
		sOutput += String.fromCharCode((((f64[sInput.charAt(i+1)]&15)<<4) | (f64[sInput.charAt(i+2)]>>2)));
		sOutput += String.fromCharCode((((f64[sInput.charAt(i+2)]&3)<<6) | (f64[sInput.charAt(i+3)])));
		i+=4;
	}
	if (sInput.length%4 == 2)
		sOutput = sOutput.substr(0, sOutput.length-2);
	if (sInput.length%4 == 3)
		sOutput = sOutput.substr(0, sOutput.length-1);

	return utf8Decode(sOutput);
	
}

function btoaJS(sInputX){

	if(sInputX.length<=0)
		return '';

	var sInput=utf8Encode(sInputX);

	var sOutput='';
	var sChar1,sChar2,sChar3;
	var iCode1,iCode2,iCode3,iCode4;
	var i=0;
	do{
		sChar1=sInput.charCodeAt(i++);
		sChar2=sInput.charCodeAt(i++);
		sChar3=sInput.charCodeAt(i++);
		iCode1=sChar1>>2;
		iCode2=((sChar1&3)<<4)|(sChar2>>4);
		iCode3=((sChar2&15)<<2)|(sChar3>>6);
		iCode4=sChar3&63;
		if (!sChar2||isNaN(sChar2)) {
			iCode3=iCode4=64;
		}else if (!sChar2||isNaN(sChar3)) {
			iCode4=64;
		}
		sOutput=sOutput+b64s.charAt(iCode1)+b64s.charAt(iCode2)+b64s.charAt(iCode3)+b64s.charAt(iCode4);
	}while (i<sInput.length);
	return sOutput;
}

String.prototype.trim=function(){
	return this.replace(/^\s+/,'').replace(/\s+$/,'');
};

function debugAlert(sAlert){
	aDebug.push(sAlert);
	while (aDebug.length>16)
		aDebug.shift();

	var sDebug='';
	for (var i=0; i<aDebug.length; i++){
		sDebug+=aDebug[i]+'<br/>';
	}

	if (oDiv=document.getElementById('JSDebugDiv')){
		//oDiv.style.backgroundColor='#ffffff';
		oDiv.innerHTML=sDebug;
	}
}

function getCookie(sCookieName){
	var aCookies=document.cookie.split(';');

	for (var i=0; i< aCookies.length; i++){
		var aCookie=aCookies[i].split('=');
		//debugAlert('parsing cookie "'+aCookie[0].trim()+'"');
		if ((aCookie.length>=2) && (aCookie[0].trim()==(sCookieName))){
			return aCookie[1].trim();
			break;
		}
	}
	return null;
}

function print_r(xSubject,iIndent,xLabel){
	sRet='';
	if (!iIndent)
		var iIndent=0;
	var i=iIndent;
	while (i>0){
		sRet+='&nbsp;&nbsp;';
		i--;
	}
	if (xLabel)
		sRet+=xLabel+': ';
	sRet+=xSubject+' ('+typeof(xSubject)+')<br/>';

	if ((typeof(xSubject) == 'object'))
		for (var x in xSubject)
			sRet+=print_r(xSubject[x],iIndent+1,x);
	
	return sRet;
}

function compareOptionAsc(oOption1, oOption2) {
	if (oOption1.sText.toLowerCase() > oOption2.sText.toLowerCase())
		return (1);
	else if (oOption1.sText.toLowerCase() < oOption2.sText.toLowerCase())
		return (-1);
	else
		return (0);
}

function sortSelect(oSelect) {

	aOptions = [];
	for (i=0; i < oSelect.options.length; i++) {
		aOptions[i] = { 
			sText:oSelect.options[i].text, 
			sValue:oSelect.options[i].value 
		};
	}

	aOptions.sort(compareOptionAsc);

	for (i=0; i < oSelect.options.length; i++) {
		oSelect.options[i].text = aOptions[i].sText;
		oSelect.options[i].value = aOptions[i].sValue;
	}
}

function ensureNumeric(oInput){
	oInput.value=(oInput.value.length<=0)?'0':oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : oInput.value);
	oInput.value=(oInput.value*1).toFixed(2);
}

function ensurePositiveNumeric(oInput){
	oInput.value=(oInput.value.length<=0)?'0':oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : oInput.value);
	if (oInput.value <0)
		oInput.value=0;
	oInput.value=(oInput.value*1).toFixed(2);
}

function ensureInteger(oInput){
	oInput.value=(oInput.value.length<=0)?'0':oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : parseInt(oInput.value,10));
}

function ensurePositiveInteger(oInput){
	oInput.value=(oInput.value.length<=0)?'0':oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : parseInt(oInput.value,10));
	if (oInput.value <0)
		oInput.value=0;
}

function intval(oInput){
	oInput=parseInt(oInput);
	return (isNaN(oInput)?0:oInput);
}

function ensureDate(oInput){
}

function ensureEmail(oInput){
	if (!(/^\w+([\.-]?\w+)*(\.\w{2,5})+$/.test(oInput.value)))
		oInput.value='invalid.email@nonexistent.domain';
}

function varByName(sName){
	return eval('(window.'+sName+')?'+sName+':null');
}

function getDaysInMonth(iYear,iMonth) {
	switch (iMonth){
		case 0:
		case 2:
		case 4:
		case 6:
		case 7:
		case 9:
		case 11:
			return 31;
			break;
		case 3:
		case 5:
		case 8:
		case 10:
			return 30;
			break;
		case 1:
			if (iYear%4==0){
				if (((iYear%100)==0)&&((iYear%400)!=0)){
					return 28;
				}else{
					return 29;
				}
			}else{
				return 28;
			}
			break;
		default:
			return 0;
	}
}

function renderCalendar(iTS,sCaller,sHideDiv,bInit,iTZ){
	
	var sOffsetTZ=0;
	if (typeof(iTZ)=='number')
		sOffsetTZ=" "+Math.round(iTZ*1)+" ";
	
	if (bInit){
		if (oCaller=document.getElementById(sCaller)){
			if ("value" in oCaller){
				var iTSTemp=(isNaN(oCaller.value) ? 0 : parseInt(oCaller.value));
				if (iTSTemp!=0)
					iTS=iTSTemp;
			}
		}
	}

	var oDate=new Date();
	oDate.setTime(iTS*1000);
	iMonth=oDate.getUTCMonth();
	iYear=oDate.getUTCFullYear();


	if(iMonth <0){
		iMonth=0;
	}else if(iMonth >11){
		iMonth=11;
	}

	if(iYear<1902){
		iYear=1902;
		iMonth=0;
	}else if(iYear>2037){
		iYear=2037;
		iMonth=11;
	}

	oDate=new Date();
	var iDayNow = oDate.getUTCDate();  
	var iMonthNow = oDate.getUTCMonth();
	var iYearNow = oDate.getUTCFullYear();

	var iDaysInMonth = getDaysInMonth(iYear,iMonth);
	oDate.setUTCFullYear(iYear); 
	oDate.setUTCMonth(iMonth); 
	oDate.setUTCDate(1); 
	var iFirstWeekday = oDate.getDay();// what about utc here ?

	var iNextYear=iYear;
	var iPrevYear=iYear;
	var iFutureYear = iYear +1; 
	var iPastYear = iYear -1; 

	var iPrevMonth = iMonth-1;  
	if (iPrevMonth <0) {
		iPrevMonth = 11; 
		iPrevYear--;
	} 
	var iNextMonth = iMonth+1; 
	if (iNextMonth > 11){
		iNextMonth =0; 
		iNextYear++;
	}

	var sReturn = '<table class="bsxCalTable" style="text-align:left;"><tr>'
		+'<td colspan="7" class="bsxCalYears">'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iYear-15,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">'+(iYear-15)+'&nbsp;</span>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iYear-10,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">'+(iYear-10)+'&nbsp;</span>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iYear-5,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">'+(iYear-5)+'&nbsp;</span>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iYear+5,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">'+(iYear+5)+'&nbsp;</span>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iYear+10,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">'+(iYear+10)+'&nbsp;</span>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iYear+15,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">'+(iYear+15)+'&nbsp;</span>'
		+'</td></tr><tr>'
		+'<td style="cursor:pointer;" class="bsxCalNav">'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iPastYear,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">&lt;&lt;</span><br/>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iPrevYear,iPrevMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">&lt;</span>'
		+'</td><td colspan=5 class="bsxCalHead" style="text-align:center;">'
		+aMonths[iMonth]
		+' '
		+iYear
		+'<br/><span class="bsxCalHeadNormal" style="cursor:pointer;" onclick="setCaller(\''+sCaller+'\',0,\''+sHideDiv+'\');">remove date</span>'
		+'</td><td class="bsxCalNav" style="text-align:right;">'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iFutureYear,iMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">&gt;&gt;</span><br/>'
		+'<span style="cursor:pointer;" onclick="document.getElementById(\'bsxCalendarDiv\').innerHTML = renderCalendar('+(43200+Date.UTC(iNextYear,iNextMonth,1)/1000)+',\''+sCaller+'\',\''+sHideDiv+'\',false,'+sOffsetTZ+');return false;">&gt;</span>'
		+'</td></tr><tr>';

	for(var i=0;i <7;i++){
		if(i==6||i==0) 
			sReturn += '<td class="bsxCalHeadHighlight">' + aWeekdays[i] + '</td>'; 
		else 
			sReturn += '<td class="bsxCalHeadNormal">' + aWeekdays[i] + '</td>';
	}

	sReturn += '</tr><tr>'; 
	
	for(var i=0;i<iFirstWeekday;i++) 
		sReturn += '<td class="bsxCalGrayed"></td>';

	for(var i=1;i<=iDaysInMonth;i++){
		if(iFirstWeekday==7){
			sReturn += '</tr><tr>'; 
			iFirstWeekday=0;
		} 
		if((iDayNow==i)&&(iYearNow==iYear)&&(iMonthNow==iMonth)) 
			sReturn += '<td class="bsxCalHighlight"><span style="cursor:pointer;" onclick="setCaller(\''+sCaller+'\','+(43200+Date.UTC(iYear,iMonth,i)/1000)+',\''+sHideDiv+'\',false,'+sOffsetTZ+');">'+i+'&nbsp;</span></td>';
		else 
			sReturn += '<td class="bsxCalNormal"><span style="cursor:pointer;" onclick="setCaller(\''+sCaller+'\','+(43200+Date.UTC(iYear,iMonth,i)/1000)+',\''+sHideDiv+'\',false,'+sOffsetTZ+');">'+i+'&nbsp;</span></td>';
		iFirstWeekday ++;
	} 

	for(var i=iFirstWeekday;i<7;i++) 
		sReturn += '<td class="bsxCalGrayed"></td>'; 

	sReturn += '</tr></table>';
	return sReturn;
}


function setCaller(sCaller,iValue,sHideDiv,bTime,iTZ){
	
	var iOffset=0;
	if (typeof(iTZ)=='number')
		iOffset=Math.round(iTZ*3600000);

	var oCaller=null;
	if (oCaller=document.getElementById(sCaller)){
		if ("value" in oCaller){
			var iOldUTC=parseInt(oCaller.value);
			var iNewPart=parseInt(iValue);
			
			if (isNaN(iOldUTC))
				iOldUTC=0;
			
			if (isNaN(iNewPart))
				iNewPart=0;

			if (bTime){
				if (iOldUTC==0)
					iNewPart=0;
				// we want to set the time part
				iOldUTC=iOldUTC-(iOldUTC%86400);
				oCaller.value=iOldUTC+iNewPart;
			}else{
				// we want to set the date part
				if (iNewPart==0)
					iOldUTC=0;
				
				var iOldTime=iOldUTC%86400;

				if ((iOldTime==0)&&(iNewPart!=0))
					iOldTime=43200;
				
				oCaller.value=iNewPart-(iNewPart%86400)+iOldTime;
			}
			
		}
	}
	var oCallerVisibleDate=null;
	var oCallerVisibleTime=null;
	oCallerVisibleTime=document.getElementById(sCaller+'-TimeVisible');
	oCallerVisibleDate=document.getElementById(sCaller+'-DateVisible');
	var oDate=new Date();
	oDate.setTime(oCaller.value*1000);

	if (oCallerVisibleDate){
		if ("value" in oCallerVisibleDate){
			if(oCaller.value==0){
				oCallerVisibleDate.value='';
			}else{
				
				var sDisplayMonth=""+(oDate.getUTCMonth()+1);
				if (sDisplayMonth<10)
					sDisplayMonth="0"+sDisplayMonth;
				var sDisplayDay=""+oDate.getUTCDate();
				if (sDisplayDay<10)
					sDisplayDay="0"+sDisplayDay;
				oCallerVisibleDate.value=sDisplayDay+"."+sDisplayMonth+"."+oDate.getUTCFullYear();
				
			}
		}
	}
	if (oCallerVisibleTime){
		if ("value" in oCallerVisibleTime){
			if(oCaller.value==0){
				oCallerVisibleTime.value='';
			}else{
				

				var iOffsetTime = oDate.getTime();
				var iOffsetTime = iOffsetTime + iOffset;
				oDate.setTime(iOffsetTime);
				
				var sDisplayHours=""+(oDate.getUTCHours());
				if (sDisplayHours<10)
					sDisplayHours="0"+sDisplayHours;
				var sDisplayMinutes=""+oDate.getUTCMinutes();
				if (sDisplayMinutes<10)
					sDisplayMinutes="0"+sDisplayMinutes;
				oCallerVisibleTime.value=sDisplayHours+":"+sDisplayMinutes;
				
			}
		}
	}
	if (sHideDiv){
		hideLayer(sHideDiv);
	}
}

function copyCaller(sCaller,bTime,iTZ){
	var oCaller=null;
	if (oCaller=document.getElementById(sCaller)){
		if ("value" in oCaller){
			var iValue=oCaller.value;
			setCaller(sCaller,iValue,false,bTime,iTZ);
		}
	}	
}

function doCalendar(iTS,sCaller,sHideDiv,iTZ){
	document.getElementById('bsxCalendarDiv').innerHTML =renderCalendar(iTS, sCaller, sHideDiv, true, iTZ);
}

function parseTime(sTime,sCaller,iTZ){
	
	var oDate=new Date();
	oDate.setTime(0);
	var iHour=0;
	var iMinute=0;
	var iSecond=1;
	var iOffset=0;
	if (typeof(iTZ)=='number')
		iOffset=Math.round(iTZ*3600000);

	oDate.setUTCHours(iHour); 
	oDate.setUTCMinutes(iMinute);
	oDate.setUTCSeconds(iSecond); 

	aParse = sTime.match(/\d+/g);
	if (aParse && aParse.length==2){
		//debugAlert('match');
		if (aParse[0].substr(0,1)=='0'){
			aParse[0]=aParse[0].substr(1);
		}
		if (aParse[1].substr(0,1)=='0'){
			aParse[1]=aParse[1].substr(1);
		}
		
		if ((parseInt(aParse[1])>=0)&&(parseInt(aParse[0])>=0)){
			//debugAlert('pass');
			if (parseInt(aParse[0])>23){
				iHour=parseInt(aParse[1]);
				iMinute=parseInt(aParse[0]);
			}else{
				iHour=parseInt(aParse[0]);
				iMinute=parseInt(aParse[1]);				
			}
		}
	}
	//debugAlert(iHour);
	//debugAlert(iMinute);

	if((iHour<0)||(iHour>23)){
		iHour=0;
		iMinute=0;
		iSecond=0;
	}

	if((iMinute<0)||(iMinute>59)){
		iHour=0;
		iMinute=0;
		iSecond=0;
	}

	//debugAlert(iHour);
	//debugAlert(iMinute);

	oDate.setUTCHours(iHour); 
	oDate.setUTCMinutes(iMinute);
	oDate.setUTCSeconds(iSecond);

	//debugAlert(oDate.getTime());

	var iOffsetTime = oDate.getTime();
	var iOffsetTime = iOffsetTime - iOffset;
	oDate.setTime(iOffsetTime);

	if (sCaller){
		if((oDate.getTime()!=0)){
			setCaller(sCaller,oDate.getTime()/1000,false,true,iTZ);
			//debugAlert('set'+oDate.getTime());
		}else{
			copyCaller(sCaller,true,iTZ);
			//debugAlert('copy');
		}
	}

	return oDate.getTime()/1000;
}

function parseDate(sDate,sCaller,iTZ){
	
	var oDate=new Date();
	oDate.setTime(0);

	var iMonth=0;
	var iYear=1970;
	var iDay=1;

	oDate.setUTCFullYear(iYear); 
	oDate.setUTCMonth(iMonth); 
	oDate.setUTCDate(1); 

	aParse = sDate.match(/\d+/g);
	if (aParse && aParse.length==3){
		//debugAlert('match');
		if (aParse[0].substr(0,1)=='0'){
			aParse[0]=aParse[0].substr(1);
		}
		if (aParse[1].substr(0,1)=='0'){
			aParse[1]=aParse[1].substr(1);
		}
		if (aParse[2].substr(0,1)=='0'){
			aParse[2]=aParse[2].substr(1);
		}
		if ((parseInt(aParse[1])>0)&&(parseInt(aParse[0])>0)&&(parseInt(aParse[2])>0)){
			//debugAlert('pass');
			if (parseInt(aParse[0])>31){
				if (parseInt(aParse[1])<13){
					iMonth=parseInt(aParse[1])-1;
					iDay=parseInt(aParse[2]);
					iYear=parseInt(aParse[0]);
					oDate.setTime(43200000);
				}else if (parseInt(aParse[2])<13){
					iMonth=parseInt(aParse[2])-1;
					iDay=parseInt(aParse[1]);
					iYear=parseInt(aParse[0]);
					oDate.setTime(43200000);
				}
			}else{
				if (parseInt(aParse[1])<13){
					iMonth=parseInt(aParse[1])-1;
					iDay=parseInt(aParse[0]);
					iYear=parseInt(aParse[2]);
					oDate.setTime(43200000);
				}else if (parseInt(aParse[0])<13){
					iMonth=parseInt(aParse[0])-1;
					iDay=parseInt(aParse[1]);
					iYear=parseInt(aParse[2]);
					oDate.setTime(43200000);
				}
			}
		}
	}
	//debugAlert(iDay);
	//debugAlert(iMonth);
	//debugAlert(iYear);

	if(iYear<100){
		iYear+=1900;
	}

	if(iYear<1902){
		iYear=1902;
		iMonth=0;
	}else if(iYear>2037){
		iYear=2037;
		iMonth=11;
	}

	//debugAlert(iDay);
	//debugAlert(iMonth);
	//debugAlert(iYear);

	if(iDay>getDaysInMonth(iYear,iMonth)){
		iDay=getDaysInMonth(iYear,iMonth);
	}

	oDate.setUTCFullYear(iYear); 
	oDate.setUTCMonth(iMonth); 
	oDate.setUTCDate(iDay); 

	if (sCaller){
		if((oDate.getTime()!=0)||(sDate.length==0)){
			setCaller(sCaller,oDate.getTime()/1000,iTZ);
			//debugAlert('set'+oDate.getTime());
		}else{
			copyCaller(sCaller,iTZ);
			//debugAlert('copy');
		}
	}

	return oDate.getTime()/1000;
}
