
//
//  (C) Visma Industream AS - 2003
//
//  These files are parts of Visma Industream Products and should not be used without written permission
//
// (Note: Except for the Xtree parts. See included files for distribution & copyrights.
//

/* Check for browser type */
NS4 = (document.layers) ? true : false;

function enterToSubmitForm(event, formname)
{ 	
	var code = 0;
	
	if (NS4)
		code = event.which;
	else
		code = event.keyCode;
	if (code==13)
		document.forms[formname].submit();
}



 

/* GENERAL FUNCTION TO RETURN FRAME BY NAME - A DEFINITE MUST HAVE! */
function getFrameByName(origin, name) {
if(!origin) { // nothing
	origin = window;  // set frame = current window
}

if(origin.name == name) {  // Is this it?
	return origin;
}

if(origin.frames.length == 0) { // Only one frame
	if(origin.name == name) {
		return origin;
	} else {
		return null; // Not the one
	}
} else { // Several frames
	for (var f = 0; f < origin.frames.length; f++) {
		var res = getFrameByName(origin.frames[f], name);
		if(res!=null) {
			return res;
		}
	} // for
} // else

return null;
}




/* Functions for tabbedpane look'n feel and control */

//
// Called when a tab is clicked
//
function activateTab(tab, src, win) {

	/* Set all elements with id='tab' inactive */
	elements = document.all['tab'];

	for (var i = 0; i < elements.length; i++) {
  	elements[i].className = 'tabinactive';
	}
	
	/* Set the requested one active */
	tab.className = 'tabactive';
	
	/* Update window with information */
	f = getFrameByName(top, win);
	/*used to be: top.frames[win].location = src; */
	if(f != null) {
		f.location = src;
	}
}

//
// Called when a tab is mouse-overed
//
function hiliteTab(tab) {
	tab.className = tab.className + '-hilite';
}

//
// Called when a tab is mouse-outed
//
function normalizeTab(tab) {
	re = /-hilite/gi;

	oldname = tab.className;
	
	tab.className = oldname.replace(re,'');
}




/* INFORMATION WINDOW STUFF */
function updateInformationWindow(type, message) {
	f = getFrameByName(top, 'warning');
	f.location = 'com.industream.market.storefront.InformationWindow?func='+type+'&message='+message;
}

function clearInformationWindow() {
	f = getFrameByName(top, 'warning');
	f.location = 'com.industream.market.storefront.InformationWindow';
}


/* GENERAL FRAME STUFF */
function placeDocumentInFrame(src, target) {

	if(target == null) {
		f = document;
	} else {
		f = getFrameByName(top, target);
	}
	if(f != null) {
		f.location = src;
	}
}

function placeDocumentOnTop(src) {
	top.location = src;
}


/* DIALOGS */

//
// Confirm
//
function confirmDialog(src, target, message ) {

	if (confirm(message)) {
		placeDocumentInFrame(src, target);
	}
}


/* NEW WINDOW */

//
// Popup - Create a new window named <name> containg <src>
//
// The window have no toolbars etc.
//
function popup(url, name) {
    window.open(url, name ,"toolbar=no,menubar=no,windowbar=no,titlebar=no,scrollbars=no,resizable=yes,width=600,height=500");
    return;
}


//
// isValidCreditCard(field f, string failuremessage)
//
// Validate the checksum of the card number
// If not valid, "delete" content in field, and inform user
//
function isValidCreditCard(f, phrase) {

	ccnum=f.value;
	// Checksum ("Mod 10")
	// Add even digits in even length strings or odd digits in odd length strings.
	var checksum = 0;
	
	for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
		checksum += parseInt(ccnum.charAt(i-1));
	}
	// Analyze odd digits in even length strings or even digits in odd length strings.
	for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
		var digit = parseInt(ccnum.charAt(i-1)) * 2;
		
		if (digit < 10) { 
			checksum += digit; 
		} else { 
			checksum += (digit-9);
		}
	} // for
		
	if ((checksum % 10) == 0) {
		return true;
	} else {
		alert(phrase); 
		f.value=''; 
		return false;
	}	
}




// Some needful global declarations
var monthArray = new Array();
monthArray = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];

var weekdayArray = new Array();
weekdayArray = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];

var daypickerFrame;  // Handle to popup window

var daypickerTodayYear;
var daypickerTodayMonth;
var daypickerTodayDay;

var daypickerSelectedYear;
var daypickerSelectedMonth;
var daypickerSelectedDay;
var daypickerSelectedForm;
var daypickerSelectedField;
var daypickerSelectedFormat;

var userpickerSelectedForm;
var userpickerSelectedField;
var userpickerFrame;




function insertStylesheet() {

	with(daypickerFrame) {
		document.writeln("<STYLE>");
		document.writeln("<!-- ");
		document.writeln("TD {border: none black; }");
		document.writeln("TD {border-width: 1pt; }");

		document.writeln("BODY {margin: 1pt; }");

		document.writeln("TABLE {border: inset black; }");
		document.writeln("TABLE {margin: 0pt; }");
		document.writeln("TABLE {border-width: 1pt; }");

		document.writeln("A, BODY, FONT, TD, TH {font: Bold 8pt Verdana, Arial; }");
		document.writeln("A, BODY, TD, TH { color: #000000 }");

		document.writeln("A:link, A:visited {color: #000000; }");
		
		document.writeln(" -->");
		document.writeln("</STYLE>"); 
	}
	
}


function isWeekend(year, month, day) {
	var d = getWeekday(year, month, day );
	if( d==0 || d==6) {
		return true;
	}else {
		return false;
	}
}

function getDaysInMonth(year, month) {
   var lastDate = new Date(year, month, 0);
   return lastDate.getDate();
}

function getWeekday(year, month, day) {

	var d = new Date(year, month-1, day+1);
	return d.getUTCDay();
}

function getWeekdayName(year, month, day) {
	return weekdayArray[ getWeekday(year, month, day) ];
}


function drawHeadingCell(t) {
	with(daypickerFrame) {
		document.writeln("<TD BGCOLOR=#000000><FONT COLOR=#FFFFFF><B>"+ t +"</B></FONT></TD>");
	}
}

function drawBlankCell(year, month, day) {
	with(daypickerFrame) {
		document.writeln("<TD BGCOLOR=#808080>&nbsp;</TD>");
	}
}

function drawDateCell(year, month, day) {
	with(daypickerFrame) {
	
		if(year==daypickerSelectedYear && month==daypickerSelectedMonth && day==daypickerSelectedDay) {
			document.writeln("<TD BGCOLOR=#E0B0B0>");
			document.write("<A CLASS='selecteddday' onClick='closing=false' HREF='javascript:window.opener.selectDay("+year+","+month+","+day+");'>");
			document.writeln(day+"</A></TD>");
		} else if(year==daypickerTodayYear && month==daypickerTodayMonth && day==daypickerTodayDay) {
			document.writeln("<TD BGCOLOR=#B0B0E0>");
			document.write("<A CLASS='today' onClick='closing=false' HREF='javascript:window.opener.selectDay("+year+","+month+","+day+");'>");
			document.writeln(day+"</A></TD>");
		} else if(isWeekend(year, month, day) ) {
			document.writeln("<TD BGCOLOR=#C0C0C0>");
			document.write("<A CLASS='weekendday' onClick='closing=false' HREF='javascript:window.opener.selectDay("+year+","+month+","+day+");'>");
			document.writeln(day+"</A></TD>");
			
		} else {
			document.writeln("<TD BGCOLOR=#E0E0E0>");
			document.write("<A CLASS='normalday' onClick='closing=false' HREF='javascript:window.opener.selectDay("+year+","+month+","+day+");'>");
			document.writeln(day+"</A></TD>");
		}
	}
}


function drawCalendar(year, month) {

	with(daypickerFrame) {
		var firstDay = getWeekday(year, month, 1);
		var numDays = getDaysInMonth(year, month);

		// Write weekday headings
		document.writeln("<TABLE HEIGHT='100%' WIDTH='100%' COLS='7'>");

		// Write month info and controllers
		document.writeln("<TR>");
		document.writeln("<TD COLSPAN='2' ALIGN='LEFT'>")
		document.write('<A CLASS="control" onClick="closing=false" HREF="javascript:window.opener.drawPreviousMonth('+year+','+month+');">&lt;&lt;</A></TD>');
		document.writeln("<TD COLSPAN='3' ALIGN='CENTER'>"+month+" "+year+"</TD>");
		document.writeln("<TD COLSPAN='2' ALIGN='RIGHT'>")
		document.write('<A CLASS="control" onClick="closing=false" HREF="javascript:window.opener.drawNextMonth('+year+','+month+');">&gt;&gt;</A></TD>');
		document.writeln("</TR>");		

		document.writeln("<TR>");
		drawHeadingCell("Su");
		drawHeadingCell("Mo");
		drawHeadingCell("Tu");
		drawHeadingCell("We");
		drawHeadingCell("Th");
		drawHeadingCell("Fr");
		drawHeadingCell("Sa");
		document.writeln("</TR>");

		var done = false;
		for(i=0; i<=41; i++) {

			// If new week close row and begin new
			if(i>0 && i%7==0) {
				document.write("</TR><TR>");
				}
				// First week in calendar
				if(i<firstDay ) {
					drawBlankCell();
				}
				else if (i>(numDays+firstDay-1)){
					drawBlankCell();
				} else {
					drawDateCell(year, month, i-firstDay+1);
				}
	
			}
		document.write("</TABLE>");
	} // with daypickerframe
}

function drawCalendarInFrame(year, month, day) {

		// Position to window
		var x, y;
		
		if (window.screenTop) {
			y = window.screenTop + 100;
			x = window.screenLeft + 100;
		} else if (window.screenY) {
			x = window.screenX + 100;
			y = window.screenY + 100;
		} else {
			x = 150;
			y = 150;
		}

    		daypickerFrame = window.open("","daypicker","status=no,toolbar=no,menubar=no,titlebar=no,scrollbars=no,resizable=no,width=160,height=160,top="+y+",left="+x+",screenX="+x+",screenY="+y);
    		
		// Bring into focus
		daypickerFrame.focus();
    		
	
	with(daypickerFrame) {
		document.open();
		document.writeln("<HTML><HEAD>");
		insertStylesheet();
		document.writeln("<TITLE>Daypicker</TITLE></HEAD><BODY  onLoad='closing=true' OnUnload='if(closing) window.opener.exitGracefully();' BGCOLOR=#ffffff>");
		drawCalendar(year, month);
		document.writeln("</BODY></HTML>");
		document.close(); 
	}
}

function drawPreviousMonth(year, month) {

	var nyear = year;
	var nmonth = month -1;
	
	if(nmonth==0) {
		nmonth=12;
		nyear = nyear - 1;
	}
	drawCalendarInFrame(nyear, nmonth, 1);
}

function drawNextMonth(year, month) {

	var nyear = year;
	var nmonth = month +1;
	
	if(nmonth==13) {
		nmonth=1;
		nyear = nyear + 1;
	}
	drawCalendarInFrame(nyear, nmonth, 1);
}

function selectDay(year, month, day) {

	daypickerSelectedYear="";
	daypickerSelectedMonth="";
	daypickerSelectedDay="";
	
	daypickerFrame.close();
	
	var fo = document[daypickerSelectedForm];
	var fi = fo[daypickerSelectedField];



	// adjust month and day to always be 2 digits
	if( month < 10 ) {
		month = "0"+month;
	}
	if( day < 10 ) {
		day = "0"+day;
	}


	// build date string based on format
	// These elements will be replaced:
	//
	// yyyy = 2001
	// MM = 12
	// dd = 24
	//
	var retval;
	
	retval = daypickerSelectedFormat;
	
	// set default
	if(retval == "") {
		retval = "dd.MM.yyyy";
	}
	

	retval = retval.replace(/yyyy/g, year);
	retval = retval.replace(/MM/g, month);
	retval = retval.replace(/dd/g, day);

	retval = retval.replace(/HH/g, '12');
	retval = retval.replace(/mm/g, '00');
	retval = retval.replace(/ss/g, '00');
	
	fi.value = retval;

	daypickerSelectedForm = "";
	daypickerSelectedField = "";
	daypickerSelectedFormat = "";
	window.status = "";

}

function exitGracefully() { // Used when window is closed without selecting a day
	daypickerSelectedYear="";
	daypickerSelectedMonth="";
	daypickerSelectedDay="";
	daypickerSelectedForm="";
	daypickerSelectedField="";
	daypickerSelectedFormat="";
}


function daypickerForFieldWithFormat(formname, fieldname, format) {

	daypickerSelectedYear = "";
	daypickerSelectedMonth = "";
	daypickerSelectedDay = "";

	daypickerSelectedForm = formname;
	daypickerSelectedField = fieldname;
	daypickerSelectedFormat = format;
	
	var d = new Date();

	daypickerTodayYear = d.getUTCFullYear();
	daypickerTodayMonth = (d.getUTCMonth()+1);
	daypickerTodayDay = d.getDate();


	// Try to parse content
	// Get access to actual data first
	var fo = document[daypickerSelectedForm];
	var fi = fo[daypickerSelectedField];
	
	var originalValue = new String(fi.value);
		
	// Let's get the data by positioning according to the format
	// Start with month
	var yearPos = daypickerSelectedFormat.search("yyyy");
	var monthPos = daypickerSelectedFormat.search("MM");
	var dayPos = daypickerSelectedFormat.search("dd");

	if(yearPos>-1 && monthPos>-1 && dayPos>-1) { // The format seems ok
		
		// ok - we've got the posisitions, let's grab the data
		daypickerSelectedYear = parseInt(originalValue.substr(yearPos, 4));
		daypickerSelectedMonth = parseInt(originalValue.substr(monthPos, 2));
		daypickerSelectedDay = parseInt(originalValue.substr(dayPos, 2));

		// If we've got some missing data we'll fall back to the current date
		if(isNaN(daypickerSelectedYear) || isNaN(daypickerSelectedMonth) || isNaN(daypickerSelectedDay) ) {
			var d = new Date();

			daypickerSelectedYear = daypickerTodayYear;
			daypickerSelectedMonth = daypickerTodayMonth;
			daypickerSelectedDay = daypickerTodayDay;
			window.status = "Unable to parse fieldvalue due to missing data";
				
		}  // missingdata
		
	}else { // format not ok - go for currentdate
		window.status = "Unable to parse fieldvalue due to invalid format";
		var d = new Date();

		daypickerSelectedYear = daypickerTodayYear;
		daypickerSelectedMonth = daypickerTodayMonth;
		daypickerSelectedDay = daypickerTodayDay;
	}

	drawCalendarInFrame(daypickerSelectedYear, daypickerSelectedMonth);
}
