function ValiderAdrMail(monAdresse)
{

	var indexAro = monAdresse.indexOf('@');
	if (indexAro == -1) {
	return false;
	}
	var otherIndexAro = monAdresse.indexOf('@', indexAro+1);
	if (otherIndexAro != -1) {
	return false;
	}
	if ( (indexAro == 0) || (indexAro == monAdresse.length-1) ) {
	return false;
	}
	var indexPoint = monAdresse.indexOf('.');
	if ( (indexPoint == -1) || (indexPoint == 0) ) {
	return false;
	}
	var otherIndexPoint = monAdresse.indexOf('.', indexPoint);
	while (otherIndexPoint != -1) {
	if ( (indexPoint+1 == otherIndexPoint) || (otherIndexPoint == indexAro-1) || (otherIndexPoint == indexAro+1)  ) {
	return false;
	}
	indexPoint = otherIndexPoint;
	otherIndexPoint = monAdresse.indexOf('.', indexPoint+1);
	}
	if ( (indexPoint == monAdresse.length+1) || (indexAro > indexPoint) || (indexPoint == monAdresse.length-1) ) {
	return false;
	}
	if (!(isAdrMail(monAdresse))) {
	return false;
	}
	return true;

}


function PopupCentrer(url)
{
	window.open(url, '','resizable=no, location=no, width=700, height=500, menubar=no, status=no, scrollbars=no, menubar=no');
}


function PopupNoSizes(url, width, height)
{
	window.open(url, '','resizable=no, location=no, width=' + width + ', height=' + height + ', menubar=no, status=no, scrollbars=yes, menubar=no');
}


function GotoLink(where)
{
	window.location.href = where;
}


function ValidateSearch(searchTextBoxID, errorMessage, length, queryWord)
{
    if (length == null)
        length = 3;
	textToSearch = jQuery.trim(document.getElementById(searchTextBoxID).value);
	
	if (textToSearch.length >= length)
	{
	    window.location = "/search/results.aspx?" + "query" + "=" + textToSearch;
	  //  window.location = "/search/results.aspx?" + queryWord + "=" + textToSearch;
	    
	}
	else
	{
		document.getElementById(searchTextBoxID).value = errorMessage;
		
}
	return false;
}


function openPopUp(url, name, w, h)
{

	w += 32;
	h += 96;
	wleft = (screen.width - w) / 2;
	wtop = (screen.height - h) / 2;

	if (wleft < 0)
	{
		w = screen.width;
		wleft = 0;
	}

	if (wtop < 0)
	{
		h = screen.height;
		wtop = 0;
	}

	var win = window.open(url, name, 'width=' + w + ', height=' + h + ', ' +
	'left=' + wleft + ', top=' + wtop + ', ' + 'location=no, menubar=no, ' +
	'status=no, toolbar=no, scrollbars=yes, resizable=no');

	win.resizeTo(w, h);
	win.moveTo(wleft, wtop);
	win.focus();

}


function UpperText(textBoxToUpper)
{

	//
	// http://daniellarson.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=amonth%3D11%26ayear%3D2006
	// http://tlt.its.psu.edu/suggestions/international/bylanguage/greekchart.html
	//

	textBoxToUpper.value = textBoxToUpper.value.toUpperCase();

	for ( i = 0; i < textBoxToUpper.value.length; i++ )
	{
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(902),String.fromCharCode(0x0391)); // ALPHA
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(904),String.fromCharCode(0x0395)); // EPSILON
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(905),String.fromCharCode(0x0397)); // ETA
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(906),String.fromCharCode(0x0399)); // IOTA
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(908),String.fromCharCode(0x039f)); // OMICRON
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(910),String.fromCharCode(0x03a5)); // UPSILON
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(911),String.fromCharCode(0x03a9)); // OMEGA
		textBoxToUpper.value = textBoxToUpper.value.replace(String.fromCharCode(962),String.fromCharCode(931));
	}

}


function ProperText(textBoxToUpper)
{
    textBoxToUpper.value = textBoxToUpper.value.toProperCase();
}


function CheckKeyCode(event)
{

	var Key = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

	if ( (Key == 189 || Key == 109) ||
	     (Key >= 48 && Key <= 57) ||
	     (Key == 8) || (Key == 9) ||
	     (Key == 17) || (Key == 116) ||
	     (Key == 8) || (Key == 46) ||
	     (Key == 17) || (Key == 86) ||
	     (Key >= 37 && Key <= 40) ||
	     (Key >= 96 && Key <= 105) ||
	     (Key == 13) )
	{
		return true;
	}
	else
	{	
		return false;
	}
	
}


function URLEscape(url)
{    
    return url.replace(/\?/g, "$**$").replace(/&/g,"$*$");
}


function LogVisit(sessionGUID,sessionID,source)
{

    /*
    var b_lang = navigator.userLanguage;
    var os = navigator.oscpu;
    var resolution = screen.width + " x " + screen.height;
    */
    
    var browser = navigator.userAgent;    
    var refer = document.referrer;    
    var currentURL = document.location.pathname+document.location.search; //page+query string
    currentURL=URLEscape(currentURL);
    refer=URLEscape(refer);

    //var logURL= "http://"+document.domain+"/logging/VisitLog.aspx?ran="+Math.random();    
    var logURL = "/logging/visitlog.aspx?ran="+Math.random();
    var qstring = "&uastring="+browser+"&referrer="+refer+"&currentPage="+currentURL+"&sessionid="+sessionID + "&visitorGuid="+sessionGUID+"&source="+source;

    var img = new Image(0,0);
    img.src=logURL+qstring;    
    
}


function getAjaxRequest()
{
    
    var r
    
    r=false;        
    
    if (window.XMLHttpRequest)
    {
        try 
        {
            r=new XMLHttpRequest();
        }
        catch (e)
        {
            r=false;
        }
    }
    
    if (window.ActiveXObject)
    {
        try
        {                
            r =  new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
            r=false;
        }        
    }
    
    return r;
    
}


function LogModuleClick(sessionGUID,moduleName,moduleGuid,collectionID)
{
    var logURL= "http://"+document.domain+"/logging/moduleclicklog.aspx?ran="+Math.random();    
    var qstring = "&sessionid="+sessionGUID+"&module="+moduleName+"&moduleGuid="+moduleGuid+"&collectionID=" + collectionID+ "&actionid=1";    
    var req=getAjaxRequest();
    req.onreadystatechange=function(){};
    req.open("GET",logURL+qstring);        
    req.send(null);
}


function ScrollToBottom()
{
	$(document).ready
	(
		function ()
		{
			window.scrollTo(0, 1500);
		}
	);
}

function UpdateCartCount(value)
{
	
	$('.spanCartCount').html("("+value+")");
}

function ShowPopup(elementId,height,width,title)
{
	if(title==null)
		title=$("#"+elementId).attr("title");
	if(width==null)
		width=450;
	if(height==null)
		height=175;
	dhtmlmodal.open('popup', 'div', elementId, title, 'width='+width+'px,height='+height+'px,center=1,resize=0,scrolling=1');
}

function SwitchLanguage(curLang)
{
    var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;

    $.ajax({
        url: "/logging/ajax.aspx?method=setlanguage&clientLang=" + userLang + "&curLang=" + curLang,
        dataType: "text",
        async: true,
        cache: true,
        success: function (res)
        {
            if (res != "" && res != " ")
            {
                window.location = res;
            }
        }
    }
	);
}

function SetUniqueRadioButton(nameregex, current)
{
    re = new RegExp(nameregex);
    for (i = 0; i < document.forms[0].elements.length; i++)
    {
        elm = document.forms[0].elements[i]
        if (elm.type == 'radio')
        {
            if (re.test(elm.name))
            {
                elm.checked = false;
            }
        }
    }
    current.checked = true;
}

function HideBrokenImage(img)
{
    img.style.display = "none";
    img.onerror = "";
    return true;
}


/*---------------/
/*  ImageSwitch  /
/*--------------*/

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('b T=9(1t,1R){c(!$("#T")){$("13").L("<H C=\'T\'></H>")}c(1R){$("#T").1h($("#T").1h()+"<2a/>"+1t)}A{$("#T").1h($("#T").1h()+1t)}};(9($){$.1v.2d=9(1Q,1C){b 1P={1Y:"19",f:"",X:J,w:2e,i:1J,h:0,S:0,u:-1J,v:0,s:0,1c:"1e",10:"",1o:"",15:""};b 5=$.25(1P,1Q);b 3=y;b l=0;b 6;b j;b B;b r=9(){3.U("P",-1)};c($.1k(1C)){r=9(){1C();3.U("P",-1)}}b 1X=9(){3.2c().L("<V N=\'G\' C=\'"+6.M("#","")+"\'/>");$(6).g("e",3.g("e"));$(6).4("d","q");$(6).4("7",3.d().7);$(6).4("8",3.d().8);$(6).4("t",1);3.g("e",5.f);c(5.X){3.4("t",5.S);3.x({"t":1},5.w)}$(6).x({"t":0},5.w,9(){$(6).F();r()})};b 1n=9(19){$("13").L("<V N=\'G\' C=\'"+6.M("#","")+"\'/>");$(6).4("d","q");c(19){$(6).g("e",5.f);$(6).4("7",3.k().7+5.h);$(6).4("8",3.k().8+5.i);$(6).4("t",5.S);v=3.k().7;u=3.k().8;s=1}A{$(6).g("e",3.g("e"));3.g("e",5.f);$(6).4("7",3.k().7);$(6).4("8",3.k().8);$(6).4("t",1);v=3.k().7+5.v;u=3.k().8+5.u;s=5.s}$(6).x({"t":s,"7":v,"8":u},5.w,9(){3.g("e",5.f);$(6).F();r()})};b 12=9(12){$("13").L("<V N=\'G\' C=\'"+6.M("#","")+"\'/>");$(6).4("d","q");c(12){$(6).g("e",5.f);$(6).4("7",3.k().7+5.h);$(6).4("8",3.k().8+5.i);$(6).4("t",5.S);$(6).4("o",1M);$(6).4("p",1M);$(6).4("z-O","2f");v=3.k().7;u=3.k().8;s=1;c(R.1L.1K){$(y).1g(1N,9(){$(5.15).4("D-1a","Z("+5.f+")")})}A{$(y).1g(1O,9(){$(5.15).4("D-1a","Z("+5.f+")")})}}$(6).x({"t":s,"7":v,"8":u},5.w,9(){3.g("e",5.f);$(6).F();r()})};b 16=9(16){$("13").L("<V N=\'G\' C=\'"+6.M("#","")+"\'/>");$(6).4("d","q");c(16){$(6).g("e",5.f);$(6).4("7",3.k().7+5.h);$(6).4("8",3.k().8+5.i);$(6).4("t",5.S);v=3.k().7;u=3.k().8;s=1;c(R.1L.1K){$(y).1g(1N,9(){$(5.15).4("D-1a","Z("+5.f+")")})}A{$(y).1g(1O,9(){$(5.15).4("D-1a","Z("+5.f+")")})}}$(6).x({"t":s,"7":v,"8":u},5.w,9(){3.g("e",5.f);$(6).F();r()})};b 1z=9(17){b E=3.1q(J);3.1F("<H C=\'a-"+l+"\'></H>");$("#a-"+l).4("1I","1s");$("#a-"+l).o(3.o());$("#a-"+l).p(3.p());$("#a-"+l).4("2g","2i 2j #2k");$("#a-"+l).L("<V N=\'G\' C=\'"+6.M("#","")+"\'/>");$(6).4("d","q");b h=0;b i=0;1b(5.1c){m"1e":i=-3.o();n;m"1G":i=3.o();n;m"1x":h=-3.p();n;m"1w":h=3.p();n}c(17){$(6).g("e",5.f);$(6).4("7",h);$(6).4("8",i);$(6).4("t",5.S);v=0;u=0;s=1}A{$(6).g("e",3.g("e"));$(6).4("8",0);$(6).4("7",0);3.g("e",5.f);v=h;u=i;s=5.s}c(3.4("d")!="q"){$("#a-"+l).4("d","18");3.4("d","q")}A{$("#a-"+l).4("d","q");$("#a-"+l).4("8",3.4("8"));$("#a-"+l).4("7",3.4("7"));3.4("7",0);3.4("8",0)}c(5.X&&17){3.x({"7":-h,"8":-i},5.w)}$(6).x({"t":s,"7":v,"8":u},5.w,9(){E.g("e",5.f);E.1E("P");$("#a-"+l).14(E);r()})};b 1A=9(){b E=3.1q(J);3.1F("<H C=\'a\'></H>");$("#a").4("1I","1s");$("#a").o(3.o());$("#a").p(3.p());$("#a").L("<H N=\'W\' C=\'"+j.M("#","")+"\'/>");$(j).g("e",5.f);$(j).4("d","q");$(j).4("D-1r","#11");c(5.10.1p>0){$(j).4("D",5.10)}$(j).o(3.o());$(j).p(3.p());b h=0;b i=0;1b(5.1c){m"1e":i=-3.o();n;m"1G":i=3.o();n;m"1x":h=-3.p();n;m"1w":h=3.p();n}$(j).4("7",h);$(j).4("8",i);c(3.4("d")!="q"){$("#a").4("d","18");3.4("d","q")}A{$("#a").4("d","q");$("#a").4("8",3.4("8"));$("#a").4("7",3.4("7"));3.4("7",0);3.4("8",0)}$(j).x({"7":0,"8":0},5.w,9(){3.g("e",5.f);$(j).x({"7":h,"8":i},5.w,9(){E.g("e",5.f);E.1E("P");$("#a").14(E);r()})})};b 1y=9(){b 1D=3.4("d");b 1m=3.4("8");b 1f=3.4("7");3.1F("<H C=\'a\'></H>");$("#a").4("1I","1s");$("#a").o(3.o());$("#a").p(3.p());$("#a").L("<H N=\'W\' C=\'"+j.M("#","")+"\'/>");$(j).4("d","q");$(j).4("D-1r","#11");c(5.10.1p>0){$(j).4("D",5.10)}$(j).o(3.o());$(j).p(3.p());$("#a").L("<H N=\'Y\' C=\'"+B.M("#","")+"\'/>");$(B).4("d","q");$(B).4("D-1r","#11");c(5.1o.1p>0){$(B).4("D",5.1o)}$(B).o(3.o());$(B).p(3.p());b h=0;b i=0;1b(5.1c){m"1e":i=-3.o();n;m"1G":i=3.o();n;m"1x":h=-3.p();n;m"1w":h=3.p();n}$(j).4("7",h);$(j).4("8",i);$(B).4("7",-h);$(B).4("8",-i);c(!5.X){$(j).4("D","#11 Z("+5.f+") 1V-22 "+ -i/2+"1i "+ -h/2+"1i");$(B).4("D","#11 Z("+5.f+") 1V-22 "+i/2+"1i "+h/2+"1i")}c(3.4("d")!="q"){$("#a").4("d","18");3.4("d","q")}A{$("#a").4("d","q");$("#a").4("8",1m);$("#a").4("7",1f);3.4("d","q");3.4("7",0);3.4("8",0)}$(j).x({"7":h/2,"8":i/2},5.w,9(){3.g("e",5.f);c(!5.X){3.4("d",1D);3.4("7",1f);3.4("8",1m);$("#a").14(3)}A{$(j).x({"7":h,"8":i},5.w,9(){3.4("d",1D);3.4("7",1f);3.4("8",1m);$("#a").14(3)})}});$(B).x({"7":-h/2,"8":-i/2},5.w,9(){3.g("e",5.f);c(!5.X){r()}A{$(B).x({"7":-h,"8":-i},5.w,9(){r()})}})};b 1u=9(1d){b E=3.1q(J);c(3.4("z-O")==\'27\'){3.4("z-O",2o)}c(3.4("d")!="q"){3.4("d","18")}$("13").L("<V N=\'G\'  C=\'"+6.M("#","")+"\'/>");$(6).4("d","q");$(6).4("7",3.k().7);$(6).4("8",3.k().8);c(1d){$(6).4("t",5.S);$(6).4("z-O",3.4("z-O")-1);$(6).g("e",5.f)}A{$(6).4("t",1);$(6).4("z-O",3.4("z-O")+1);$(6).g("e",3.g("e"));3.g("e",5.f)}c(1U.1T(5.v)<3.p()&&1U.1T(5.u)<3.o()){v=3.k().7;u=3.k().8+3.o()}A{v=3.k().7+5.v;u=3.k().8+5.u}s=1;$(6).x({"t":s,"7":v,"8":u},5.w,9(){c(1d){$(6).4("z-O",2m)}A{s=5.s;$(6).4("z-O",2)}$(6).x({"t":s,"7":3.k().7,"8":3.k().8},5.w,9(){E.g("e",5.f);E.1E("P");3.14(E);$(6).F();r()})})};1j y.20(9(){3=$(y);c(!3.1H()){l=$.U(3);3.U("P",l);6="#G-"+l;j="#Y-"+l;B="#24-"+l;b 1W=23 1S();1W.e=5.f;$.1Z(5.f,9(){1b(5.1Y){m"2b":1X();n;m"19":1n(J);n;m"16":16(J);n;m"12":12(J);n;m"29":1n(1l);n;m"1d":1u(J);n;m"28":1u(1l);n;m"17":1z(J);n;m"26":1z(1l);n;m"1A":1A();n;m"1y":1y();n}})}})}})(R);(9($){$.1v.1H=9(){c(y.U("P")>0){1j J}A{1j 1l}}})(R);(9($){$.1v.2n=9(I,K,r){1j y.20(9(){c($(y).1H()){b l=$.U(y,"P");$("#G-"+l).Q(I,K);$("#W-"+l).Q(I,K);$("#Y-"+l).Q(I,K);$(y).Q(I,K);$("#G-"+l).F();$("#W-"+l).F();$("#Y-"+l).F();c($.1k(r)){r()}}})}})(R);(9($){$.2l=9(I,K,r){$(".G").Q(I,K);$(".W").Q(I,K);$(".Y").Q(I,K);$(y).Q(I,K);$(".G").F();$(".W").F();$(".Y").F();$.U(y,"P",-1);c($.1k(r)){r()}}})(R);(9($){$.1Z=9(21,r){b 1B=23 1S();1B.e=21;c($.1k(r)){$(1B).2h(r())}}})(R);',62,149,'|||Obj|css|Args|EffectImageId|top|left|function|GrpViewport|var|if|position|src|NewImage|attr|StartTop|StartLeft|EffectDivId1|offset|EffectID|case|break|width|height|absolute|EndFunction|EndOpacity|opacity|EndLeft|EndTop|Speed|animate|this||else|EffectDivId2|id|background|backup|remove|GrpEffectImg|div|clearQueue|true|gotoEnd|append|replace|class|index|imageswitch|stop|jQuery|StartOpacity|Debug|data|img|GrpEffectDiv|EffectOriginal|GrpEffectDiv1|url|Door1|FFF|FlyZoom|body|replaceWith|DivID|FlyBG|ScrollIn|relative|FlyIn|image|switch|Direction|FlipIn|RightLeft|orgTop|delay|html|px|return|isFunction|false|orgLeft|Fly|Door2|length|clone|color|hidden|mess|Flip|fn|DownTop|TopDown|DoubleDoor|Scroll|SingleDoor|TempImage|FuntionHandle|orgPosition|removeAttr|wrap|LeftRight|ImageAnimating|overflow|50|mozilla|browser|300|1350|1250|defaults|Arguements|line|Image|abs|Math|no|TempImg|FadeImage|Type|ImagePreload|each|FileName|repeat|new|GrpEffectDiv2|extend|ScrollOut|auto|FlipOut|FlyOut|br|FadeIn|parent|ImageSwitch|1000|200001|border|load|1px|solid|D9D9D9|ImageStopAll|101|ImageStop|100'.split('|'),0,{}))


/*-----------------/
/*  DHTML Windows  /
/*----------------*/

// -------------------------------------------------------------------
// DHTML Window Widget- By Dynamic Drive, available at: http://www.dynamicdrive.com
// v1.0: Script created Feb 15th, 07'
// v1.01: Feb 21th, 07' (see changelog.txt)
// v1.02: March 26th, 07' (see changelog.txt)
// v1.03: May 5th, 07' (see changelog.txt)
// v1.1:  Oct 29th, 07' (see changelog.txt)
// -------------------------------------------------------------------

var dhtmlwindow = {
    imagefiles: ['windowfiles/min.gif', '/repository/images/dhtmlClose.gif', 'windowfiles/restore.gif', 'windowfiles/resize.gif'], //Path to 4 images used by script, in that order
    ajaxbustcache: true, //Bust caching when fetching a file via Ajax?
    ajaxloadinghtml: '<b>Loading Page. Please wait...</b>', //HTML to show while window fetches Ajax Content?

    minimizeorder: 0,
    zIndexvalue: 100,
    tobjects: [], //object to contain references to dhtml window divs, for cleanup purposes
    lastactivet: {}, //reference to last active DHTML window

    init: function(t) {
        var domwindow = document.createElement("div") //create dhtml window div
        domwindow.id = t
        domwindow.className = "dhtmlwindow"
        var domwindowdata = ''
        domwindowdata = '<div class="drag-handle">'
        domwindowdata += 'DHTML Window <div class="drag-controls"><img src="' + this.imagefiles[0] + '" title="Minimize" /><img src="' + this.imagefiles[1] + '" title="Close" /></div>'
        domwindowdata += '</div>'
        domwindowdata += '<div class="drag-contentarea"></div>'
        domwindowdata += '<div class="drag-statusarea"><div class="drag-resizearea" style="background: transparent url(' + this.imagefiles[3] + ') top right no-repeat;">&nbsp;</div></div>'
        domwindowdata += "</div><div class='drag-footer'><a onclick='$(\".dhtmlwindow\").hide(); $(\"#interVeil\").hide()'>Fermer</a></div>"

        domwindow.innerHTML = domwindowdata
        document.getElementById("dhtmlwindowholder").appendChild(domwindow)
        //this.zIndexvalue=(this.zIndexvalue)? this.zIndexvalue+1 : 100 //z-index value for DHTML window: starts at 0, increments whenever a window has focus
        var t = document.getElementById(t)
        var divs = t.getElementsByTagName("div")
        for (var i = 0; i < divs.length; i++) { //go through divs inside dhtml window and extract all those with class="drag-" prefix
            if (/drag-/.test(divs[i].className))
                t[divs[i].className.replace(/drag-/, "")] = divs[i] //take out the "drag-" prefix for shorter access by name
        }
        //t.style.zIndex=this.zIndexvalue //set z-index of this dhtml window
        t.handle._parent = t //store back reference to dhtml window
        t.resizearea._parent = t //same
        t.controls._parent = t //same
        t.onclose = function() { return true } //custom event handler "onclose"
        t.onmousedown = function() { dhtmlwindow.setfocus(this) } //Increase z-index of window when focus is on it
        t.handle.onmousedown = dhtmlwindow.setupdrag //set up drag behavior when mouse down on handle div
        t.resizearea.onmousedown = dhtmlwindow.setupdrag //set up drag behavior when mouse down on resize div
        t.controls.onclick = dhtmlwindow.enablecontrols
        t.show = function() { dhtmlwindow.show(this) } //public function for showing dhtml window
        t.hide = function() { dhtmlwindow.hide(this) } //public function for hiding dhtml window
        t.close = function() { dhtmlwindow.close(this) } //public function for closing dhtml window (also empties DHTML window content)
        t.setSize = function(w, h) { dhtmlwindow.setSize(this, w, h) } //public function for setting window dimensions
        t.moveTo = function(x, y) { dhtmlwindow.moveTo(this, x, y) } //public function for moving dhtml window (relative to viewpoint)
        t.isResize = function(bol) { dhtmlwindow.isResize(this, bol) } //public function for specifying if window is resizable
        t.isScrolling = function(bol) { dhtmlwindow.isScrolling(this, bol) } //public function for specifying if window content contains scrollbars
        t.load = function(contenttype, contentsource, title) { dhtmlwindow.load(this, contenttype, contentsource, title) } //public function for loading content into window
        this.tobjects[this.tobjects.length] = t
        return t //return reference to dhtml window div
    },

    open: function(t, contenttype, contentsource, title, attr, recalonload) {
        var d = dhtmlwindow //reference dhtml window object
        function getValue(Name) {
            var config = new RegExp(Name + "=([^,]+)", "i") //get name/value config pair (ie: width=400px,)
            return (config.test(attr)) ? parseInt(RegExp.$1) : 0 //return value portion (int), or 0 (false) if none found
        }
        if (document.getElementById(t) == null) //if window doesn't exist yet, create it
            t = this.init(t) //return reference to dhtml window div
        else
            t = document.getElementById(t)
        this.setfocus(t)
        t.setSize(getValue(("width")), (getValue("height"))) //Set dimensions of window
        var xpos = getValue("center") ? "middle" : getValue("left") //Get x coord of window
        var ypos = getValue("center") ? "middle" : getValue("top") //Get y coord of window
        //t.moveTo(xpos, ypos) //Position window
        if (typeof recalonload != "undefined" && recalonload == "recal" && this.scroll_top == 0) { //reposition window when page fully loads with updated window viewpoints?
            if (window.attachEvent && !window.opera) //In IE, add another 400 milisecs on page load (viewpoint properties may return 0 b4 then)
                this.addEvent(window, function() { setTimeout(function() { t.moveTo(xpos, ypos) }, 400) }, "load")
            else
                this.addEvent(window, function() { t.moveTo(xpos, ypos) }, "load")
        }
        t.isResize(getValue("resize")) //Set whether window is resizable
        t.isScrolling(getValue("scrolling")) //Set whether window should contain scrollbars
        t.style.visibility = "visible"
        t.style.display = "block"
        t.contentarea.style.display = "block"
        t.moveTo(xpos, ypos) //Position window
        t.load(contenttype, contentsource, title)
        if (t.state == "minimized" && t.controls.firstChild.title == "Restore") { //If window exists and is currently minimized?
            t.controls.firstChild.setAttribute("src", dhtmlwindow.imagefiles[0]) //Change "restore" icon within window interface to "minimize" icon
            t.controls.firstChild.setAttribute("title", "Minimize")
            t.state = "fullview" //indicate the state of the window as being "fullview"
        }
        return t
    },

    setSize: function(t, w, h) { //set window size (min is 150px wide by 100px tall)
        t.style.width = Math.max(parseInt(w), 150) + "px"
        t.contentarea.style.height = Math.max(parseInt(h), 100) + "px"
    },

    moveTo: function(t, x, y) { //move window. Position includes current viewpoint of document
        this.getviewpoint() //Get current viewpoint numbers
        t.style.left = (x == "middle") ? this.scroll_left + (this.docwidth - t.offsetWidth) / 2 + "px" : this.scroll_left + parseInt(x) + "px"
        t.style.top = (y == "middle") ? this.scroll_top + (this.docheight - t.offsetHeight) / 2 + "px" : this.scroll_top + parseInt(y) + "px"
    },

    isResize: function(t, bol) { //show or hide resize inteface (part of the status bar)
        t.statusarea.style.display = (bol) ? "block" : "none"
        t.resizeBool = (bol) ? 1 : 0
    },

    isScrolling: function(t, bol) { //set whether loaded content contains scrollbars
        t.contentarea.style.overflow = (bol) ? "auto" : "hidden"
    },

    load: function(t, contenttype, contentsource, title) { //loads content into window plus set its title (3 content types: "inline", "iframe", or "ajax")
        if (t.isClosed) {
            alert("DHTML Window has been closed, so no window to load contents into. Open/Create the window again.")
            return
        }
        var contenttype = contenttype.toLowerCase() //convert string to lower case
        if (typeof title != "undefined")
            t.handle.firstChild.nodeValue = title
        if (contenttype == "inline")
            t.contentarea.innerHTML = contentsource
        else if (contenttype == "div") {
            var inlinedivref = document.getElementById(contentsource)
            t.contentarea.innerHTML = (inlinedivref.defaultHTML || inlinedivref.innerHTML) //Populate window with contents of inline div on page
            if (!inlinedivref.defaultHTML)
                inlinedivref.defaultHTML = inlinedivref.innerHTML //save HTML within inline DIV
            inlinedivref.innerHTML = "" //then, remove HTML within inline DIV (to prevent duplicate IDs, NAME attributes etc in contents of DHTML window
            inlinedivref.style.display = "none" //hide that div
        }
        else if (contenttype == "iframe") {
            t.contentarea.style.overflow = "hidden" //disable window scrollbars, as iframe already contains scrollbars
            if (!t.contentarea.firstChild || t.contentarea.firstChild.tagName != "IFRAME") //If iframe tag doesn't exist already, create it first
                t.contentarea.innerHTML = '<iframe src="" frameborder=0 style="margin:0; padding:0; width:100%; height: 100%" name="_iframe-' + t.id + '"></iframe>'
            window.frames["_iframe-" + t.id].location.replace(contentsource) //set location of iframe window to specified URL
        }
        else if (contenttype == "ajax") {
            this.ajax_connect(contentsource, t) //populate window with external contents fetched via Ajax
        }
        t.contentarea.datatype = contenttype //store contenttype of current window for future reference
    },

    setupdrag: function(e) {
        var d = dhtmlwindow //reference dhtml window object
        var t = this._parent //reference dhtml window div
        d.etarget = this //remember div mouse is currently held down on ("handle" or "resize" div)
        var e = window.event || e
        d.initmousex = e.clientX //store x position of mouse onmousedown
        d.initmousey = e.clientY
        d.initx = parseInt(t.offsetLeft) //store offset x of window div onmousedown
        d.inity = parseInt(t.offsetTop)
        d.width = parseInt(t.offsetWidth) //store width of window div
        d.contentheight = parseInt(t.contentarea.offsetHeight) //store height of window div's content div
        if (t.contentarea.datatype == "iframe") { //if content of this window div is "iframe"
            t.style.backgroundColor = "#F8F8F8" //colorize and hide content div (while window is being dragged)
            t.contentarea.style.visibility = "hidden"
        }
        document.onmousemove = d.getdistance //get distance travelled by mouse as it moves
        document.onmouseup = function() {
            if (t.contentarea.datatype == "iframe") { //restore color and visibility of content div onmouseup
                t.contentarea.style.backgroundColor = "white"
                t.contentarea.style.visibility = "visible"
            }
            d.stop()
        }
        return false
    },

    getdistance: function(e) {
        var d = dhtmlwindow
        var etarget = d.etarget
        var e = window.event || e
        d.distancex = e.clientX - d.initmousex //horizontal distance travelled relative to starting point
        d.distancey = e.clientY - d.initmousey
        if (etarget.className == "drag-handle") //if target element is "handle" div
            d.move(etarget._parent, e)
        else if (etarget.className == "drag-resizearea") //if target element is "resize" div
            d.resize(etarget._parent, e)
        return false //cancel default dragging behavior
    },

    getviewpoint: function() { //get window viewpoint numbers
        var ie = document.all && !window.opera
        var domclientWidth = document.documentElement && parseInt(document.documentElement.clientWidth) || 100000 //Preliminary doc width in non IE browsers
        this.standardbody = (document.compatMode == "CSS1Compat") ? document.documentElement : document.body //create reference to common "body" across doctypes
        this.scroll_top = (ie) ? this.standardbody.scrollTop : window.pageYOffset
        this.scroll_left = (ie) ? this.standardbody.scrollLeft : window.pageXOffset
        this.docwidth = (ie) ? this.standardbody.clientWidth : (/Safari/i.test(navigator.userAgent)) ? window.innerWidth : Math.min(domclientWidth, window.innerWidth - 16)
        this.docheight = (ie) ? this.standardbody.clientHeight : window.innerHeight
    },

    rememberattrs: function(t) { //remember certain attributes of the window when it's minimized or closed, such as dimensions, position on page
        this.getviewpoint() //Get current window viewpoint numbers
        t.lastx = parseInt((t.style.left || t.offsetLeft)) - dhtmlwindow.scroll_left //store last known x coord of window just before minimizing
        t.lasty = parseInt((t.style.top || t.offsetTop)) - dhtmlwindow.scroll_top
        t.lastwidth = parseInt(t.style.width) //store last known width of window just before minimizing/ closing
    },

    move: function(t, e) {
        t.style.left = dhtmlwindow.distancex + dhtmlwindow.initx + "px"
        t.style.top = dhtmlwindow.distancey + dhtmlwindow.inity + "px"
    },

    resize: function(t, e) {
        t.style.width = Math.max(dhtmlwindow.width + dhtmlwindow.distancex, 150) + "px"
        t.contentarea.style.height = Math.max(dhtmlwindow.contentheight + dhtmlwindow.distancey, 100) + "px"
    },

    enablecontrols: function(e) {
        var d = dhtmlwindow
        var sourceobj = window.event ? window.event.srcElement : e.target //Get element within "handle" div mouse is currently on (the controls)
        if (/Minimize/i.test(sourceobj.getAttribute("title"))) //if this is the "minimize" control
            d.minimize(sourceobj, this._parent)
        else if (/Restore/i.test(sourceobj.getAttribute("title"))) //if this is the "restore" control
            d.restore(sourceobj, this._parent)
        else if (/Close/i.test(sourceobj.getAttribute("title"))) //if this is the "close" control
            d.close(this._parent)
        return false
    },

    minimize: function(button, t) {
        dhtmlwindow.rememberattrs(t)
        button.setAttribute("src", dhtmlwindow.imagefiles[2])
        button.setAttribute("title", "Restore")
        t.state = "minimized" //indicate the state of the window as being "minimized"
        t.contentarea.style.display = "none"
        t.statusarea.style.display = "none"
        if (typeof t.minimizeorder == "undefined") { //stack order of minmized window on screen relative to any other minimized windows
            dhtmlwindow.minimizeorder++ //increment order
            t.minimizeorder = dhtmlwindow.minimizeorder
        }
        t.style.left = "10px" //left coord of minmized window
        t.style.width = "200px"
        var windowspacing = t.minimizeorder * 10 //spacing (gap) between each minmized window(s)
        t.style.top = dhtmlwindow.scroll_top + dhtmlwindow.docheight - (t.handle.offsetHeight * t.minimizeorder) - windowspacing + "px"
    },

    restore: function(button, t) {
        dhtmlwindow.getviewpoint()
        button.setAttribute("src", dhtmlwindow.imagefiles[0])
        button.setAttribute("title", "Minimize")
        t.state = "fullview" //indicate the state of the window as being "fullview"
        t.style.display = "block"
        t.contentarea.style.display = "block"
        if (t.resizeBool) //if this window is resizable, enable the resize icon
            t.statusarea.style.display = "block"
        t.style.left = parseInt(t.lastx) + dhtmlwindow.scroll_left + "px" //position window to last known x coord just before minimizing
        t.style.top = parseInt(t.lasty) + dhtmlwindow.scroll_top + "px"
        t.style.width = parseInt(t.lastwidth) + "px"
    },


    close: function(t) {
        try {
            var closewinbol = t.onclose()
        }
        catch (err) { //In non IE browsers, all errors are caught, so just run the below
            var closewinbol = true
        }
        finally { //In IE, not all errors are caught, so check if variable isn't defined in IE in those cases
            if (typeof closewinbol == "undefined") {
                alert("An error has occured somwhere inside your \"onclose\" event handler")
                var closewinbol = true
            }
        }
        if (closewinbol) { //if custom event handler function returns true
            if (t.state != "minimized") //if this window isn't currently minimized
                dhtmlwindow.rememberattrs(t) //remember window's dimensions/position on the page before closing
            if (window.frames["_iframe-" + t.id]) //if this is an IFRAME DHTML window
                window.frames["_iframe-" + t.id].location.replace("about:blank")
            else
                t.contentarea.innerHTML = ""
            t.style.display = "none"
            t.isClosed = true //tell script this window is closed (for detection in t.show())
        }
        return closewinbol
    },


    setopacity: function(targetobject, value) { //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between)
        if (!targetobject)
            return
        if (targetobject.filters && targetobject.filters[0]) { //IE syntax
            if (typeof targetobject.filters[0].opacity == "number") //IE6
                targetobject.filters[0].opacity = value * 100
            else //IE 5.5
                targetobject.style.filter = "alpha(opacity=" + value * 100 + ")"
        }
        else if (typeof targetobject.style.MozOpacity != "undefined") //Old Mozilla syntax
            targetobject.style.MozOpacity = value
        else if (typeof targetobject.style.opacity != "undefined") //Standard opacity syntax
            targetobject.style.opacity = value
    },

    setfocus: function(t) { //Sets focus to the currently active window
        this.zIndexvalue++
        t.style.zIndex = this.zIndexvalue
        t.isClosed = false //tell script this window isn't closed (for detection in t.show())
        this.setopacity(this.lastactivet.handle, 0.5) //unfocus last active window
        this.setopacity(t.handle, 1) //focus currently active window
        this.lastactivet = t //remember last active window
    },


    show: function(t) {
        if (t.isClosed) {
            alert("DHTML Window has been closed, so nothing to show. Open/Create the window again.")
            return
        }
        if (t.lastx) //If there exists previously stored information such as last x position on window attributes (meaning it's been minimized or closed)
            dhtmlwindow.restore(t.controls.firstChild, t) //restore the window using that info
        else
            t.style.display = "block"
        this.setfocus(t)
        t.state = "fullview" //indicate the state of the window as being "fullview"
    },

    hide: function(t) {
        t.style.display = "none"
    },

    ajax_connect: function(url, t) {
        var page_request = false
        var bustcacheparameter = ""
        if (window.XMLHttpRequest) // if Mozilla, IE7, Safari etc
            page_request = new XMLHttpRequest()
        else if (window.ActiveXObject) { // if IE6 or below
            try {
                page_request = new ActiveXObject("Msxml2.XMLHTTP")
            }
            catch (e) {
                try {
                    page_request = new ActiveXObject("Microsoft.XMLHTTP")
                }
                catch (e) { }
            }
        }
        else
            return false
        t.contentarea.innerHTML = this.ajaxloadinghtml
        page_request.onreadystatechange = function() { dhtmlwindow.ajax_loadpage(page_request, t) }
        if (this.ajaxbustcache) //if bust caching of external page
            bustcacheparameter = (url.indexOf("?") != -1) ? "&" + new Date().getTime() : "?" + new Date().getTime()
        page_request.open('GET', url + bustcacheparameter, true)
        page_request.send(null)
    },

    ajax_loadpage: function(page_request, t) {
        if (page_request.readyState == 4 && (page_request.status == 200 || window.location.href.indexOf("http") == -1)) {
            t.contentarea.innerHTML = page_request.responseText
        }
    },


    stop: function() {
        dhtmlwindow.etarget = null //clean up
        document.onmousemove = null
        document.onmouseup = null
    },

    addEvent: function(target, functionref, tasktype) { //assign a function to execute to an event handler (ie: onunload)
        var tasktype = (window.addEventListener) ? tasktype : "on" + tasktype
        if (target.addEventListener)
            target.addEventListener(tasktype, functionref, false)
        else if (target.attachEvent)
            target.attachEvent(tasktype, functionref)
    },

    cleanup: function() {
        for (var i = 0; i < dhtmlwindow.tobjects.length; i++) {
            dhtmlwindow.tobjects[i].handle._parent = dhtmlwindow.tobjects[i].resizearea._parent = dhtmlwindow.tobjects[i].controls._parent = null
        }
        window.onload = null
    }

} //End dhtmlwindow object

    document.write('<div id="dhtmlwindowholder"><span style="display:none">.</span></div>') //container that holds all dhtml window divs on page
    window.onunload = dhtmlwindow.cleanup


    // -------------------------------------------------------------------
    // DHTML Modal window- By Dynamic Drive, available at: http://www.dynamicdrive.com
    // v1.0: Script created Feb 27th, 07'
    // v1.01 May 5th, 07' Minor change to modal window positioning behavior (not a bug fix)
    // v1.1: April 16th, 08' Brings it in sync with DHTML Window widget. See changelog.txt for the later for changes.
    // REQUIRES: DHTML Window Widget (v1.01 or higher): http://www.dynamicdrive.com/dynamicindex8/dhtmlwindow/
    // -------------------------------------------------------------------

    if (typeof dhtmlwindow == "undefined")
        alert('ERROR: Modal Window script requires all files from "DHTML Window widget" in order to work!')

    var dhtmlmodal = {
        veilstack: 0,
        open: function(t, contenttype, contentsource, title, attr, recalonload) {
            var d = dhtmlwindow //reference dhtmlwindow object
            this.interVeil = document.getElementById("interVeil") //Reference "veil" div
            this.veilstack++ //var to keep track of how many modal windows are open right now
            this.loadveil()
            if (recalonload == "recal" && d.scroll_top == 0)
                d.addEvent(window, function() { dhtmlmodal.adjustveil() }, "load")
            var t = d.open(t, contenttype, contentsource, title, attr, recalonload)
            t.controls.firstChild.style.display = "none" //Disable "minimize" button
            t.controls.onclick = function() { dhtmlmodal.close(this._parent, true) } //OVERWRITE default control action with new one
            t.show = function() { dhtmlmodal.show(this) } //OVERWRITE default t.show() method with new one
            t.hide = function() { dhtmlmodal.close(this) } //OVERWRITE default t.hide() method with new one
            return t
        },


        loadveil: function() {
            var d = dhtmlwindow
            d.getviewpoint()
            this.docheightcomplete = (d.standardbody.offsetHeight > d.standardbody.scrollHeight) ? d.standardbody.offsetHeight : d.standardbody.scrollHeight
            this.interVeil.style.width = d.docwidth + "px" //set up veil over page
            this.interVeil.style.height = this.docheightcomplete + "px" //set up veil over page
            this.interVeil.style.left = 0 //Position veil over page
            this.interVeil.style.top = 0 //Position veil over page
            this.interVeil.style.visibility = "visible" //Show veil over page
            this.interVeil.style.display = "block" //Show veil over page
        },

        adjustveil: function() { //function to adjust veil when window is resized
            if (this.interVeil && this.interVeil.style.display == "block") //If veil is currently visible on the screen
                this.loadveil() //readjust veil
        },

        closeveil: function() { //function to close veil
            this.veilstack--
            if (this.veilstack == 0) //if this is the only modal window visible on the screen, and being closed
                this.interVeil.style.display = "none"
        },


        close: function(t, forceclose) { //DHTML modal close function
            $(".dhtmlwindow").hide();
            $("#interVeil").hide();
        },


        show: function(t) {
            dhtmlmodal.veilstack++
            dhtmlmodal.loadveil()
            dhtmlwindow.show(t)
        }
} //END object declaration


        document.write('<div id="interVeil"></div>')
        dhtmlwindow.addEvent(window, function() { if (typeof dhtmlmodal != "undefined") dhtmlmodal.adjustveil() }, "resize")



function OpenForgotPassword(title)
{
    forgotPassWindow = dhtmlmodal.open('ForgotPassword', 'iframe', '/login/forgotPasswordLayer.aspx', title, 'width=340px,height=112px,top=0,left=0,center=1,resize=0,scrolling=1')
	return false;
}


function InitializeForgotPassForFirstTime()
{
    $(".drag-contentarea", parent.document.body).height(112);
    $("#ForgotPassword", parent.document.body).height(158);
}


function ChangeForgotPassHeightAfterErrors()
{
    $(".drag-contentarea", parent.document.body).height(120);
    $("#ForgotPassword", parent.document.body).height(166);
}

function SetSession(sessionVar, sessionValue) {
    var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;

    $.ajax({
        url: "/logging/ajax.aspx?method=setsession&sessionVar=" + sessionVar + "&sessionValue=" + sessionValue,
        dataType: "text",
        async: false,
        cache: false,
        success: null
    }
	);
}



function SetMultipleSessions(strArr) {
    var arr = $.makeArray(strArr);
    var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;
   
    $.ajax({
        url: "/logging/ajax.aspx?method=setmultiplesessions&sessionArr=" + arr,
        dataType: "text",
        async: false,
        cache: false,
        success: null
    }
    );
}

function CallJsonRpc(strArr, methodName) {
    var arr = $.makeArray(strArr);
    var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;

    $.ajax({
        url: "/logging/ajax.aspx?method=jsonrpc&params=" + arr + "&methodname=" + methodName,
        dataType: "json",
        async: true,
        cache: false,
        success: null
    }
    );
}


function CallJsonRpcSync(strArr, methodName, callbackFunction) {
    var arr = $.makeArray(strArr);
    var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;

    $.ajax({
        url: "/logging/ajax.aspx?method=jsonrpcwithresult&params=" + arr + "&methodname=" + methodName,
        dataType: "json",
        async: false,
        cache: false,
        success: callbackFunction
    }
    );
}


//-- AVAIL Code --//

//-- calljsonrpc is in master page (as it is generic) --//

//-- tracking code is currently not available; will be available when we actually start using the recommendations --//
function logAddedToCart(sessionID, productID, trackingCode) {
    sessionID = ai_getSessionID();
    var arr;

    if (trackingCode == '')
        arr = { SessionID: sessionID, ProductID: String(productID) };
    else
        arr = { SessionID: sessionID, ProductID: String(productID), TrackingCode: trackingCode };

    CallJsonRpc(JSON.stringify(arr), "logAddedToCart");
}



function logClickedOn(sessionID, productID, trackingCode) {
    sessionID = ai_getSessionID();

    if (trackingCode != '') {
        var arr = { SessionID: sessionID, ProductID: productID, TrackingCode: trackingCode };
        CallJsonRpc(JSON.stringify(arr), "logClickedOn");
    }
}


function logPurchase(sessionID, userID, productIDs, prices, orderID, currency) {
    sessionID = ai_getSessionID();

    var productIDsJson = JSON.parse(productIDs);
    var pricesJson = JSON.parse(prices);
    var arr = { SessionID: sessionID, UserID: userID, ProductIDs: productIDsJson, Prices: pricesJson, OrderID: orderID, Currency: currency };

    CallJsonRpc(JSON.stringify(arr), "logPurchase");
}


function doRecommendationsPresentation(sessionID, templateName, dynamicParameters, columnNames, pushProductControl, pushProductPagePosition) {
    sessionID = ai_getSessionID();
    var litContent = getRecommendations(sessionID, templateName, dynamicParameters, columnNames, pushProductControl, pushProductPagePosition);
}


function getRecommendations(sessionID, templateName, dynamicParameters, columnNames, pushProductControl, pushProductPagePosition) {
    var litContent = '';
    var arr = { SessionID: sessionID, TemplateName: templateName, DynamicParameters: dynamicParameters, ColumnNames: columnNames };
    CallJsonRpcSync(JSON.stringify(arr), "getRecommendations", "divSidePushProducts", pushProductControl, pushProductPagePosition);
}



function fixOnMouseOut(element, event, JavaScript_code) {
    var current_mouse_target = null;
    if (event.toElement) {
        current_mouse_target = event.toElement;
    } else if (event.relatedTarget) {
        current_mouse_target = event.relatedTarget;
    }
    if (!is_child_of(element, current_mouse_target) && element != current_mouse_target) {
        eval(JavaScript_code);
    }
}



function is_child_of(parent, child) {
    if (child != null) {
        while (child.parentNode) {
            if ((child = child.parentNode) == parent) {
                return true;
            }
        }
    }
    return false;
}


function FireDefaultButton(event, target) {
    if (event.keyCode == 13) {
        var src = event.srcElement || event.target;
        if (!src || (src.tagName.toLowerCase() != "textarea")) {
            var defaultButton;
            if (window.navigator.appName.toLowerCase().indexOf('explorer') == -1) {
                defaultButton = document.getElementById(target);
            }
            else {
                defaultButton = document.all[target];
            }
            //-- Link Button --//
            if (defaultButton && typeof (defaultButton.href) != "undefined") {
                eval($(defaultButton).attr('href'));
                event.cancelBubble = true;
                if (event.stopPropagation) event.stopPropagation();
                return false;
            }
            //-- Button --//
            else if (defaultButton && typeof (defaultButton.click) != "undefined") {
                defaultButton.click();
                event.cancelBubble = true;
                if (event.stopPropagation) event.stopPropagation();
                return false;
            }
        }
    }
    return true;
}
