 // JavaScript Document
var variableCount = 0;
var vars;

var colors =  new Array('lightgrey','white','silver');
var oldcolor;
var oldTRcolor;
var oldTDcolor;
var infoShown = 0;

var browseWidth, browseHeight;

var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);

var tryTimeout;

function validateBirthDay(dateValue)
{ 
	var bdayYear = parseInt(dateValue.substr(0,4)); 
	var bdayMonth = parseInt(dateValue.substr(5,2)); 
	var bdayMonth2 = parseInt(dateValue.substr(6,1));
	var bdayDay = parseInt(dateValue.substr(8,2)); 
	//alert("bYear:"+bdayYear+" bMonth:"+bdayMonth+" bMonth2:"+bdayMonth2+" bday:"+bdayDay);
	if(bdayYear > 1900 && (bdayMonth > 0 || bdayMonth2 > 0) && bdayMonth < 13 && bdayDay > 0 && bdayDay < 32) 
		return true; 
	else
		return false; 
}

function clickToActivateControlIEFix()
{
	// This function fixes a misfeature in Internet Explorer, which display
	// a message 'click to activate or use this control' over objects tag
	// 
	// Ref : http://www.amarasoftware.com/flash-problem.htm
	//
	theObjects = document.getElementsByTagName("object");
	for (var i = 0; i < theObjects.length; i++) {
		theObjects[i].outerHTML = theObjects[i].outerHTML;
	}
}

function outputField(varName, type, name, size, value)
{
	//alert('varName : '+varName+', type : '+type+', name : '+name+', size : '+size+', value : '+value);
	output = "<input onblur='"+varName+".changed()' type='"+type+"' name='"+name+"'" ;
 	if(size > 0)
		output += "size='"+size+"' ";
	if(varName.indexOf("buybutton") > 0)
	{
		output += ' value="'+escape(value)+'">';
	}
	else
		output += " value='"+value.replace("'", "\\'")+"'>";

	return output;
}

function outputEditField(varName, name, size, value)
{
	if(size.shift)
		return outputTextArea(varName, name, size[1], size[0], value);
	else
		return outputField(varName, 'text', name, size, value);
}

function outputFileField(varName, name, size)
{
	return outputField(varName, 'file', name, size, '');
}

function outputHiddenField(varName, name, size, value)
{
	return outputField(varName, 'hidden', name, size, value);
}

//function outputImage(path, width=0, height=0, class='', align='', alt='')
function outputImage(path, width, height, altText)
{
	//alert ('outputImage(path'+path+", width="+width+", height="+height+", alt="+altText+")");
	output = '<img src="'+path+'" width="'+width+'" height="'+height+'" alt="'+altText+'">';
//	output += ">";
	return output;
}

function outputPasswordField(varName, name, size, value)
{
	return outputField(varName, 'password', name, size, value);
}

function outputSelectField(varName, name, optionvalues, optiondisplays, value)
{
	output = "<select name='"+name+"' onchange='"+varName+".changed();'>";
	for(oSFi = 0; oSFi < optionvalues.length; oSFi++)
	{
		output += "<option value='"+optionvalues[oSFi]+"'";
		if(value == optionvalues[oSFi])
			output += ' selected';
		output += '>'+optiondisplays[oSFi]+'</option>';
	}
	output += '</select>';
	return output;
}

function outputTextArea(varName, name, size, lines, value)
{
	return "<textarea onblur='"+varName+".changed()' cols='"+size+"' rows='"+lines+"' name='"+name+"'>"+value+"</textarea>";
}


function dotry(lafunction, laproperty)
{
	if(eval(laproperty))
		eval(lafunction);
	else
		tryTimeout = setTimeout('dotry(\''+lafunction+'\', \''+laproperty+'\');', 250);
}

function checkKey(e) {
     if(document.all) {
        if(event.keyCode == 13) {
            document.forms[0].submit();
        }
     } else if(document.layers) {
         if(e.which == 13) {
            e.target.submit();
        }
     }
}

function setFieldValue(fieldname, fieldvalue, formname, submitnow)
{
	if(arguments.length < 3)
		formname = 'forms[0]';

	//alert('document.'+formname+'.'+fieldname+'.value = \''+fieldvalue+'\';');
	eval('document.'+formname+'.'+fieldname+'.value = \''+fieldvalue+'\';');
	if(arguments.length >= 4 && arguments[3] == 1)
		eval('document.'+formname+'.submit();');
}


function makeWindowFull()
{
	var scr_w = screen.availWidth;
	var scr_h = screen.availHeight;
	var browseWidth, browseHeight;

	if (document.layers){
	  browseWidth=window.outerWidth;
	  browseHeight=window.outerHeight;
	}
	if (document.all){
	  browseWidth=document.body.clientWidth;
	  browseHeight=document.body.clientHeight;
	}

	if (scr_w != browseWidth|| scr_h != browseHeight) {
	  window.resizeTo(scr_w, scr_h);
	  window.moveTo(0, 0);
	}
}

function initWindowDimensions()
{
	if (document.layers){
	  browseWidth=window.outerWidth;
	  browseHeight=window.outerHeight;
	}
	if (document.all){
	  browseWidth=document.body.clientWidth;
	  browseHeight=document.body.clientHeight;
	}
}

function convertPosition(position, axis)
{
	initWindowDimensions();
	if(isNaN(position))
	{
		if(axis == 'x')
		{
			indexPercent = position.indexOf('%');
			if(indexPercent > 0)
				newposition = parseInt(browseWidth * parseInt(position) / 100);
			else
				newposition = parseInt(position);
		}
		else if(axis == 'y')
		{
			indexPercent = position.indexOf('%');
			if(indexPercent > 0)
				newposition = parseInt(browseHeight * parseInt(position) / 100);
			else
				newposition = parseInt(position);
		}
	}
	else
		newposition = position;

	//alert('position ='+position+' ; newposition='+newposition+' ; axis = '+axis);

	//makebad;
	return newposition;
}

function buildPackage(packageId)
{
	window.open('package.php?packageid='+packageId, 'cart');
	switchVisibility('shoppingCart');
}

function openWindow(aurl, aframe, awidth, aheight)
{
	var atop = 0;
	var aleft = 0;
	var ascroll = 0;

	if(awidth <= 20)
		awidth = 400;
	if(aheight <= 20)
		aheight = 300;

	if((screen.height -70) < aheight)
	{
		ascroll = 1;
		aheight = screen.height - 70;
		atop = 0;
	}
	else
		atop = parseInt((screen.height - aheight) / 3);

	if((screen.width -30 ) < awidth )
	{
		ascroll = 1;
		awidth= screen.width - 30;
		aleft = 0;
	}
	else
		aleft = parseInt((screen.width - awidth) / 3);

	var windowprops = "top="+atop+",left="+aleft+",width="+awidth+",height="+aheight+",resizable=0";

	if(ascroll == 1)
		windowprops += ',scollbars=1';
	//left=50,top=50,resizeable=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,toolbars=0
	window.open(aurl, aframe, windowprops);
}

function switchVisibility(element)
{
	elementObject = getElement(element);
 	visibility = elementObject.style.visibility;
	if(visibility == 'hidden')
	{
		elementObject.style.visibility = 'visible';
		//elementObject.style.display = 'block';
	}
	else if(visibility == 'visible')
	{
		elementObject.style.visibility = 'hidden';
		//elementObject.style.display = 'none';
	}
}

function appendHTML(element, text)
{
	elementObject = getElement(element);
	text = elementObject.innerHTML + text + '<br>';
	elementObject.innerHTML = text;
}

function changeHTML(element, text)
{
	elementObject = getElement(element);
	elementObject.innerHTML = text;
}

function getElement(layerID)
{
	if (document.getElementById)
		return document.getElementById(layerID);
	else if (document.all)
	{
		return document.all.layerID;
		//eval('object = document.all.'+layerID+';');
		//return object;
	}
	else
		return null;
}

function submit()
{
	if(validateForm())
		document.forms[0].submit();
}

function getFieldObject(field)
{
	fieldObject = eval('document.forms[0].'+field);
	return fieldObject;
}

function getFieldValue(field)
{
	fieldObject = getFieldObject(field);
	value = fieldObject.value;
	return value;
}

function setFocusOnField(field)
{
	fieldObject = getFieldObject(field);
	fieldObject.focus();
	fieldObject.select();
	//eval('document.forms[0].'+field+'.focus();');
}

function setColors(el, bg, fg)
{
  if (el.style)
  {
   el.style.backgroundColor = bg;
   el.style.color = fg;
  }
}


function hasSelection(field, minimum)
{
	selection = eval('document.forms[0].'+field+'.selectedIndex;');
	if(selection >= minimum)
		return true;
	else
		return false;
}
function validateUsingFunction(field, laFunction, parametre, ok, invalid)
{
	wrongBG = '#FF0000';
	wrongFG = '#FFFFFF';
	rightBG = '#E1E1E1';
	rightFG = '#000000';

	value = getFieldValue(field);
	//alert('field = '+field+'; laFunction = '+laFunction+'; parametre = '+parametre+'; ok = '+ok+'; invalid = '+invalid);

	if(laFunction == 'cardTypeChanged')
	{
		result = eval(laFunction+'("'+field+'");');
	}
	else if(laFunction == 'hasSelection')
	{
		result = eval(laFunction+'("'+field+'", "'+parametre+'");');
	}
	else
		result = eval(laFunction+'("'+value+'");');

	if(result == false)
	{
		changeHTML(field+'_status', invalid);
		setColors(getFieldObject(field), wrongBG, wrongFG);
		//setFocusOnField(field);
	}
	else
	{
		changeHTML(field+'_status', ok);
		setColors(getFieldObject(field), rightBG, rightFG);
	}

	return result;

}

function showStatus(string, objectid, framename)
{
	if(!objectid || !objectid.length)
		objectid = 'status';

	if(framename)
	{
		if(framename.length)
			eval(framename+'.statusareaname.changeHTML("status", '+string+');');
	}
	else
		changeHTML(objectid, string);
}

function addStatus(string, objectid, framename)
{
	if(!objectid || !objectid.length)
		objectid = 'status';

	if(framename)
	{
		if(framename.length)
		{
			showStatus(framename+'.appendHTML("status", '+string+');', 'status2');
			eval(framename+'.appendHTML("'+objectid+'", "'+string+'");');
		}
	}
	else
		appendHTML(objectid, string);
}

var dfx = new function() {
	this.client = new function() {
		var c = new Array();
		var a = navigator.userAgent.toLowerCase();
		var m_v = parseFloat( navigator.appVersion);
		//alert('browser: '+a+'; version: '+m_v);
		if( a.indexOf( 'opera' ) == -1 ) {
			if( a.indexOf( 'gecko' ) != -1 ) {
				var v = parseFloat( a.slice( a.lastIndexOf( '/' ) + 1 ) );
				c[0] = "ns" + parseInt( m_v );
				c[1] = "ns" + parseInt( v );
				c[2] = "ns" + v;
				c[3] = 'ns';
				c[4] = v;
			}
			if( a.indexOf('msie') != -1 ) {
				var v = parseFloat( a.slice( a.indexOf( 'msie' ) + 4 ) );
				c[0] = "ie" + parseInt( m_v );
				c[1] = "ie" + Math.round( v * 10 ) / 10;
				c[2] = "ie" + v;
				c[3] = 'ie';
				c[4] = v;
			}
			if(a.indexOf('konqueror') != -1) {
				var v = parseFloat( a.slice(a.indexOf("konqueror/") + 10));
				c[0] = 'konqueror'+parseInt(m_v);
				c[1] = 'konqueror'+Math.round(v*10)/10;
				c[2] = 'konqueror'+v;
				c[3] = 'konqueror';
				c[4] = v;
			}
			if(a.indexOf('safari') != -1) {
				var v = parseFloat( a.slice(a.indexOf("safari/") + 7));
				c[0] = 'safari'+parseInt(m_v);
				c[1] = 'safari'+Math.round(v*10)/10;
				c[2] = 'safari'+v;
				c[3] = 'safari';
				c[4] = v;
			}
			if(a.indexOf('firebird') != -1) {
				var v = parseFloat( a.slice(a.indexOf("firebird/") + 9));
				c[0] = 'firebird'+parseInt(m_v);
				c[1] = 'firebird'+Math.round(v*10)/10;
				c[2] = 'firebird'+v;
				c[3] = 'firebird';
				c[4] = v;
			}
			if(a.indexOf('firefox') != -1) {
				var v = parseFloat( a.slice(a.indexOf("firefox/") + 9));
				c[0] = 'firefox'+parseInt(m_v);
				c[1] = 'firefox'+Math.round(v*10)/10;
				c[2] = 'firefox'+v;
				c[3] = 'firefox';
				c[4] = v;
			}
		}
		if( a.indexOf('opera') != -1 ) {
			var v = parseFloat( a.slice( a.indexOf( 'opera' ) + 6 ) );
			c[0] = "opera"+parseInt(m_v);
			c[1] = "opera" + parseInt( v );
			c[2] = "opera" + v;
			c[3] = 'opera';
			c[4] = v;
		}
		return c;
	}
}

function highlight(state, event) {
	if(dfx.client[3] == 'ns')
		element=event.target;
	else
		element=event.srcElement;
	//else if(e)
	//	element=e.srcElement;

	if (element)
	{
		if	(element.tagName=='INPUT' || element.tagName=='TEXTAREA') // || element.tagName == 'SELECT'
	    {

			etype=element.type;
			if ((etype=='submit' || etype=='reset') && state==1) state=2;
				element.style.backgroundColor=colors[state];
			element.focus();
		}
	}
}

function showMousePosition()
{
	element = event.srcElement;
	if(!infoShown)
	{
		infoShown = 1;
		for(i = 0; i < element.style.all.length; i++)
		{
			addStatus(i+' = '+element.style.all[i], 'status', 'statusareaname');
		}
	}
	showStatus(event.type+' = x'+event.screenX+' - y'+event.screenY);
}

function swapImage(id, src)
{
	obj = getElement(id);
	if(obj.src)
		obj.src = src;
}


/**********
 * Swap the IMG with a new one.
 *
 * @param str imageDOMId
 * @param str containerDOMId Image container (optionnal)
 * @param int mediaDBId MediaId of database
 * @return int orderno
 *
 * @author David Lauzon, New Commerce Solutions
 *
 * Note : The variable mediasProperties must be defined in the page where it is used
 **********/
function swapMediaImage(imageDOMId, containerDOMId, mediaDBId)
{
	var imageEl	  = getElement(imageDOMId);
	var imageCont = getElement(containerDOMId);

	var imageProperties = extractMediaProperties(mediaDBId);
	
	var imageSrc	    = imageProperties[0];
	var imageWidth      = imageProperties[1];
	var imageHeight     = imageProperties[2];
	var imageOrderNo    = imageProperties[3];
//	alert ('Changing Image : '+imageSrc+' '+imageWidth+" x "+imageHeight);

	imageEl.src	   = imageSrc;
	imageEl.width  = imageWidth;
	imageEl.height = imageHeight;

	if (imageCont != null)
	{
		//alert ('Setting image container width to '+imageWidth);
		imageCont.style.width = imageWidth + "px";
		imageCont.style.height = imageHeight + "px";
		imageCont.style.visibility = 'visible';
		//alert('swapMediaImage() height : '+imageCont.style.height);
	}
	
	return imageOrderNo;
}



/**********
 * Return media navigation information
 *
 * @param int mediaDBId MediaId of database
 * @return array mediaNav (previousId, nextId, firstId, lastId)
 * @author David Lauzon, New Commerce Solutions
 *
 **********/
function getMediaNav (mediaDBId)
{
	var imageProperties = extractMediaProperties(mediaDBId);
	
	var mediaPrevId  = imageProperties[4];
	var mediaNextId  = imageProperties[5];
	var mediaFirstId = mediasProperties[0][0];
	var mediaLastId  = mediasProperties[mediasProperties.length-1][0];
	
	var mediaNav = Array(mediaPrevId, mediaNextId, mediaFirstId, mediaLastId);
	
	return mediaNav;
}


/**********
 * Extract the media properties
 *
 * @param int mediaDBId MediaId of database
 * @return array properties (src, width, height, orderno, previousid, nextid)
 * @author David Lauzon, New Commerce Solutions
 *
 * Note : The variable mediasProperties must be defined in the page where it is used
 *
 **********/
function extractMediaProperties (mediaDBId)
{
	for (var mediaKey in mediasProperties)
	{
		if (mediasProperties[mediaKey][0] == mediaDBId)
		{
			var mediaSrc     = mediasProperties[mediaKey][1];
			var mediaWidth   = mediasProperties[mediaKey][2];
			var mediaHeight  = mediasProperties[mediaKey][3];
			var mediaOrderNo = mediasProperties[mediaKey][4];
			var mediaPrevId  = -1;
			var mediaNextId  = -1;
			
			var mediaKeyN = parseInt(mediaKey);
			
			if (mediaKeyN > 0)
				mediaPrevId = mediasProperties[mediaKeyN-1][0];
			
			if (mediasProperties.length > (mediaKeyN+1))
				mediaNextId = mediasProperties[(mediaKeyN+1)][0];
			
			
			var oneMediaProperties = Array(mediaSrc, mediaWidth, mediaHeight, mediaOrderNo, mediaPrevId, mediaNextId);
			
			return oneMediaProperties;
		}
	}
}


function validateUsingRegEx(field, regex, parameter, ok, invalid)
{
	wrongBG = '#FF0000';
	wrongFG = '#FFFFFF';
	rightBG = '#E1E1E1';
	rightFG = '#000000';

	eval('reg = '+regex);
	//reg = new RegEx(regex);
	result = reg.test(getFieldValue(field))
	if(result)
	{
		setColors(getFieldObject(field), rightBG, rightFG);
		changeHTML(field+'_status', ok);
	}
	else
	{
		changeHTML(field+'_status', invalid);
		setColors(getFieldObject(field), wrongBG, wrongFG);
		//setFocusOnField(field);
	}

	return result;
}

function runClock(now)
{
	//showStatus(now);
	showStatus('now = '+now);
	if(isNaN(now))
	{
		adate = new Date();
		now = adate.getTime();
	}
	element = getElement(clock);
	d = new Date(now);
	display = '['+d.getFullYear()+'.'+(d.getMonth()+1)+'.'+d.getDate()+'] '+(d.getHours()+1)+':'+d.getMinutes()+':'+d.getSeconds();
	changeHTML('clock', display);
	setTimeout('runClock('+(now+1000)+')', 1000);
}

function formattime(milliseconds)
{
    atime = Math.floor(milliseconds/1000);
	hours = Math.floor((atime/60)/60);
	minutes = Math.floor((atime / 60)-(hours*60));
    seconds = Math.floor(atime - ((minutes * 60)+((hours*60)*60)));
	if (seconds<10) {seconds="0"+seconds;}
	if (minutes<10) {minutes="0"+minutes;}
	if (hours!=0) {
		if (hours<10) {	hours="0"+hours; }
		return hours+'h '+minutes+'m '+seconds+'s';
	}
	else {
		return minutes+'m '+seconds+'s';
	}
}

function runSessionClock(start)
{
	//showStatus('start = '+start);
	changeHTML('clock', formattime(start));
	sessionClock = setTimeout('runSessionClock('+(start+1000)+')', 1000);
}

function SetCookie (name, value)
{
   var argv = SetCookie.arguments;
   var argc = SetCookie.arguments.length;
   var expires = (2 < argc) ? argv[2] : null;
   var path = (3 < argc) ? argv[3] : null;
   var domain = (4 < argc) ? argv[4] : null;
   var secure = (5 < argc) ? argv[5] : false;

   document.cookie = name + "=" + escape (value) +
     ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
     ((path == null) ? "" : ("; path=" + path)) +
     ((domain == null) ? "" : ("; domain=" + domain)) +
	((secure == true) ? "; secure" : "");
}


function verifySameAndCopy(formname, fieldname1, fieldname2, targetField, fieldObject, minLength, error)
{
	fieldobj1 = eval('document.'+formname+'.'+fieldname1);
	fieldobj2 = eval('document.'+formname+'.'+fieldname2);
	if(fieldobj1.value == fieldobj2.value && fieldobj1.value.length >= minLength)
	{
		targetobj = eval('document.'+formname+'.'+targetField);
		targetobj.value = fieldobj2.value;
	}
	else
	{
		if(fieldobj2.name == fieldObject.name)
			alert(error);
//			alert('Your passwords do no match, or are too short (min 6 chars). Please reenter');
		fieldobj2.focus();
	}
}

function BooleanField(formName, ctrlName)
{
   	// Check the hidden control, for the SubmissionManager
	//alert (eval("document."+formName+"."+ctrlName+"__checkbox.checked"));
	if ( eval("document."+formName+"."+ctrlName+"__checkbox.checked"))
	{
		//alert ("1");
		eval("document."+formName+"."+ctrlName+".value = 1;");
	}
	else
	{
		//alert ("0");
		eval("document."+formName+"."+ctrlName+".value = 0;");
	}
}


function getXOffset(htmlElement)
{
	par = htmlElement;
	var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
	var macIE45 = document.all && !onWindows && getExplorerVersion() == 4.5;

	var lastXOffset = 0;
	x = 0;

	while(par)
	{
		if( par.leftMargin && ! onWindows )
			x += parseInt(par.leftMargin);

		if( (par.offsetLeft != lastXOffset) && par.offsetLeft )
			x += parseInt(par.offsetLeft);

		if( par.offsetLeft != 0 ) lastXOffset = par.offsetLeft;

		par = macIE45 ? par.parentElement : par.offsetParent;
	}
	return x;
}

function getYOffset(htmlElement)
{
	par = htmlElement;

	var onWindows = navigator.platform ? navigator.platform == "Win32" : false;
	var macIE45 = document.all && !onWindows && getExplorerVersion() == 4.5;

	var lastYOffset = 0;

	y = 0;

	while(par)
	{
		if( par.topMargin && !onWindows )
			y += parseInt(par.topMargin);


		if( (par.offsetTop != lastYOffset) && par.offsetTop )
			y += parseInt(par.offsetTop);

		if( par.offsetTop != 0 ) lastYOffset = par.offsetTop;
		par = macIE45 ? par.parentElement : par.offsetParent;
	}
	return y;
}


function print_r(mixed)
{
	if (isArray(mixed))
	{
		ret = "Array (";
		for ( key in mixed ) {
			ret += key + " => " + mixed[key];
		}
		ret += ")";
	}
	else {
		ret += mixed;
	}
	return ret;
}

// specific to FLIRT
function resizeContent()
{
   var contentEl = getElement("content");
  // alert("innerHeight:"+window.innerHeight+"yOffset:"+getYOffset(contentEl));

   var availableHeight = window.innerHeight - getYOffset(contentEl) - 70;
   if(availableHeight > 100)
	    contentEl.style.height = availableHeight + "px";
  // alert("avaliableHeight:"+availableHeight);
  // alert("height:"+contentEl.style.height);
   //alert("height:"+contentEl.style.getPropertyValue("height"));
   //alert(availableHeight + "px");

   //alert("height:"+contentEl.style.getPropertyValue("height"));
}

	function isArray (variable)
	{
		return ((variable != null) && (variable.shift));
	}


	function isString (variable)
	{
		return ((variable != null) && (variable.constructor == String));
	}