

//break frames
if (top.location != location) {
    top.location.href = document.location.href ;
}

/*
Nico, ajout de la gestion des cookies pour intrack.
*/
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

/* END Gestion Cookeis */


/*
START Gestion Intrack
*/
/* document.getElementsBySelector(selector)
   - returns an array of element objects from the current document
     matching the CSS selector. Selectors can contain element names, 
     class names and ids and can be nested. For example:
     
       elements = document.getElementsBySelect('div#main p a.external')
     
     Will return an array of all 'a' elements with 'external' in their 
     class attribute that are contained inside 'p' elements that are 
     contained inside the 'div' element which has id="main"

   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
   See http://www.w3.org/TR/css3-selectors/#attribute-selectors

   Version 0.4 - Simon Willison, March 25th 2003
   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
   -- Opera 7 fails 
*/

function getAllChildren(e) {
  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
  return e.all ? e.all : e.getElementsByTagName('*');
}

document.getElementsBySelector = function(selector) {
  // Attempt to fail gracefully in lesser browsers
  if (!document.getElementsByTagName) {
    return new Array();
  }
  // Split selector in to tokens
  var tokens = selector.split(' ');
  var currentContext = new Array(document);
  for (var i = 0; i < tokens.length; i++) {
    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
    if (token.indexOf('#') > -1) {
      // Token is an ID selector
      var bits = token.split('#');
      var tagName = bits[0];
      var id = bits[1];
      var element = document.getElementById(id);
      if (tagName && element.nodeName.toLowerCase() != tagName) {
        // tag with that ID not found, return false
        return new Array();
      }
      // Set currentContext to contain just this element
      currentContext = new Array(element);
      continue; // Skip to next token
    }
    if (token.indexOf('.') > -1) {
      // Token contains a class selector
      var bits = token.split('.');
      var tagName = bits[0];
      var className = bits[1];
      if (!tagName) {
        tagName = '*';
      }
      // Get elements matching tag, filter them for class selector
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue; // Skip to next token
    }
    // Code to deal with attribute selectors
    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
      var tagName = RegExp.$1;
      var attrName = RegExp.$2;
      var attrOperator = RegExp.$3;
      var attrValue = RegExp.$4;
      if (!tagName) {
        tagName = '*';
      }
      // Grab all of the tagName elements within current context
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      var checkFunction; // This function will be used to filter the elements
      switch (attrOperator) {
        case '=': // Equality
          checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
          break;
        case '~': // Match one of space seperated words 
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
          break;
        case '|': // Match start with value followed by optional hyphen
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
          break;
        case '^': // Match starts with value
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
          break;
        case '$': // Match ends with value - fails with "Warning" in Opera 7
          checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
          break;
        case '*': // Match ends with value
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
          break;
        default :
          // Just test for existence of attribute
          checkFunction = function(e) { return e.getAttribute(attrName); };
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (checkFunction(found[k])) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
      continue; // Skip to next token
    }
    // If we get here, token is JUST an element (not a class or ID selector)
    tagName = token;
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
      var elements = currentContext[h].getElementsByTagName(tagName);
      for (var j = 0; j < elements.length; j++) {
        found[foundCount++] = elements[j];
      }
    }
    currentContext = found;
  }
  return currentContext;
}

/* That revolting regular expression explained 
/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
  \---/  \---/\-------------/    \-------/
    |      |         |               |
    |      |         |           The value
    |      |    ~,|,^,$,* or =
    |   Attribute 
   Tag
*/



// =============================================================================
// Class: HandlerSet
// =============================================================================

function HandlerSet() {
    this.clearHandlers();
}

HandlerSet.prototype = {
    addHandler : function(f, key) {
        key = key || this.uniqueID++;
        this.installedHandlers[key] = f;
        return key;
    },

    removeHandler : function(key) {
        delete this.installedHandlers[key];
    },

    clearHandlers : function() {
        this.installedHandlers = { };
        this.uniqueID = 0;
    },

    replaceHandlers : function(f, key) {
        clearHandlers();
        return addHandler(f, key);
    },

    applyAll : function(object, arguments) {
        for (var handler in this.installedHandlers) {
            this.installedHandlers[handler].apply(object, arguments);
        }
    },

    debug : function() {
        var str = "";
        for (var p in this.installedHandlers) {
            str += p + " => " + this.installedHandlers[p] + "\n";
        }
        alert(str);
    }
};

// =============================================================================
// Function Class: EventHandler
// =============================================================================

function isEventHandler(x) {
    return (typeof x == 'function' &&
            x.handlers &&
            x.handlers.constructor == HandlerSet);
}

function makeEventHandler(original) {
    var handlers = new HandlerSet();

    if (typeof original == 'function') {
        handlers.addHandler(original);
    }

    // The event handler is a function, so it can be used with the DOM.
    // But when it's called, we apply all the handlers in the set.
    var result = function() {
        handlers.applyAll(this, arguments);
    };

    // We also expose its handler set so we can get at it later.
    result.handlers = handlers;

    return result;
}

// =============================================================================
// Module: Behavior
// =============================================================================

var Behavior = {
    registry : new Array,

    register : function(sheet) {
        Behavior.registry.push(sheet);
    },

    registerEventHandlers : function(element, handlers) {
        for (var event in handlers) {
            if (!isEventHandler(element[event])) {
                element[event] = makeEventHandler(element[event]);
            }
            element[event].handlers.addHandler(handlers[event]);
        }
    },

    apply : function() {
        for (var i = 0; i < Behavior.registry.length; i++) {
            var sheet = Behavior.registry[i];
            for (var selector in sheet) {
                var list = document.getElementsBySelector(selector);
                if (!list) {
                    continue;
                }
                for (var j = 0; j < list.length; j++) {
                    Behavior.registerEventHandlers(list[j], sheet[selector]);
                }
            }
        }
    },

    addLoadHandler : function(handler) {
        var oldHandler = window.onload;

        if (typeof oldHandler != 'function') {
            window.onload = handler;
        }
        else {
            window.onload = function() {
                oldHandler();
                handler();
            };
        }
    }
};

/*
END Gestion Intrack
*/



Behavior.addLoadHandler(function() { 
	init();
	Behavior.apply();
});



var switched = false;
var useragent = navigator.userAgent.toLowerCase();
var ie = ((useragent.indexOf('msie') != -1) && (useragent.indexOf('opera') == -1) && (useragent.indexOf('webtv') == -1));


function init() {

	Behavior.register({
		".intrack" : {
			onmousedown : function(){
				createCookie('intrack',this.getAttribute('intrack'), 1);
			}
		}
	});
	
	//switch_width();
	/*
	END Intrack Rules.
	*/
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function position_menu(objmenu,objposition){
	if (objmenu != null && objposition != null) {
		imgpos = findPos(objposition);
	  	objmenu.style.left=imgpos[0]+'px';
	 	objmenu.style.top=imgpos[1]+'px';
	}
}

function reset_position_menu(objmenu){
  	objmenu.style.left='0px';
 	objmenu.style.top='0px';
}


var menu_activation = true;




function switch_width(){
		return true;
		
		var classtext = '';
	
		if(document.all && !document.getElementById){
			var skn = document.all["contener"];
			var mp = document.all["menu_product"];
			var mpi = document.all["menu_product_positioner"];
			var mt = document.all["menu_themas"];
			var mti = document.all["menu_themas_positioner"];
		}
		else{
			var skn = document.getElementById("contener");
			var mp = document.getElementById("menu_product");
			var mpi = document.getElementById("menu_product_positionner");
			var mt = document.getElementById("menu_themas");
			var mti = document.getElementById("menu_themas_positionner");
		}
		
		if(skn != undefined){
				
				if(testwidth() > 920){
					if(skn.className != "content1024") classtext = "content1024";
				}else{
					if(skn.className != "content800") classtext = "content800";;
				}
				
				
				if(classtext != ''){
					skn.className = classtext;
				}
			if(menu_activation == true){	 	
				position_menu(mp,mpi);
				position_menu(mt,mti);
			}
		}

}

/* Nico jeudi 3 juin 2010, 10:53:40 (UTC+0200)
 * Deprecated 
 * */
//window.onresize = switch_width;


function testwidth() {
  var myWidth = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
  }
  return myWidth;
}


function switch_search(pSearch){
	
	var totalResult = 5;
	
	for(var i=1; i<totalResult+1; i++){
		var test = document.getElementById('result_' + i);
		var test2 = document.getElementById('top_pagi_' + i);
		if(pSearch == undefined && test != null) pSearch = i;
		if(i == pSearch){
			if(test != null){
				test.style.display = "block";
				if(test2 != null) test2.style.display = "block";
				document.images["switch_picto_"+i].src = "/i/search-picto-moins.gif";
			}
		}else{
			if(test != null){
				test.style.display = "none";
				if(test2 != null) test2.style.display = "none"
				document.images["switch_picto_"+i].src = "/i/search-picto-plus.gif";
			}
		}
	}

}

function switch_ask(pAsk){
	
	var totalAsk = 3;
	
	for(var i=0; i<totalAsk+1; i++){
	
		if(i == pAsk){
		
			if(document.getElementById("ask_detail_"+i).style.display == "none"){
				document.getElementById("ask_detail_"+i).style.display = "block";
				document.getElementById("ask_"+i).className = "ask_open";
				document.images["switch_picto_"+i].src = "/i/ask-picto-moins.gif";				
			} else {
				document.getElementById("ask_detail_"+i).style.display = "none";
				document.getElementById("ask_"+i).className = "ask_close";
				document.images["switch_picto_"+i].src = "/i/ask-picto-plus.gif";
			}

		} else {
			document.getElementById("ask_detail_"+i).style.display = "none";
			document.getElementById("ask_"+i).className = "ask_close";
			document.images["switch_picto_"+i].src = "/i/ask-picto-plus.gif";
		}
	}

}

function affCache(idDiv) {
	var div = document.getElementById(idDiv);
	
	if (div.style.display == "none") {
		div.style.display = "";
	} else {
		if(div.style.display == "") {
			div.style.display = "none";
		}
	}
}

function changeImage(idImg, imgName) {
	var img = document.getElementById(idImg);

	var arrImg = new Array("ask-picto-moins.gif", "ask-picto-plus.gif");

	var maReg = new RegExp(imgName, "gi");
	
	var result = img.src.match( maReg );

	if (result == arrImg[0]) {
		img.src = "/i/"+arrImg[1];
	} else {
		img.src = "/i/"+arrImg[0];
	}
}

/*
TEST
*/

// Ouverture de popup
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

/**
 * Open modal windows to choose language.
 */
function open_languages() {
	return true;
}

/**
 * Open a layout for a given layer_id.
 */
function open_layout(layer_id) { 	
 	if (document.getElementById(layer_id)) {
 		$.prompt(document.getElementById(layer_id).innerHTML);
 	}
}

/**
 * Check if country_code is for a forbidden country.
 * 
 * @param 	String country_code ex. FR.
 * @return Bool 
 */
function is_forbidden_countries(country_code) {
	var companeo_countries = new Array();
	companeo_countries["FR"] = 'france';
	companeo_countries["FX"] = 'france';
	companeo_countries["GP"] = 'france';
	companeo_countries["GF"] = 'france';
	companeo_countries["MQ"] = 'france';
	companeo_countries["MC"] = 'france';
	companeo_countries["RE"] = 'france';
	companeo_countries["PM"] = 'france';
	companeo_countries["NC"] = 'france';	
	companeo_countries["BE"] = 'belgium';
	companeo_countries["GB"] = 'uk';
	companeo_countries["NL"] = 'nl';
	return ((companeo_countries[country_code] != undefined) ? false : true);	
}

/**
 * Open layer "outgeo" for countries not supported by Companeo.
 */
function open_outgeo() {
	if (	($("#country").val() != undefined) 
		&& is_forbidden_countries($("#country").val()) == true) {
		if ($("#layer_outgeo").html() != null) {
 			$.prompt($("#layer_outgeo").html());
 		}
	}
}

/**
 * Disable or enable submit button. 
 */
function disable_form() {
	
	var disable = false;
	var no_business = $("#layer_particulier").css("display");
	var no_dn_business = $("#5").css("display");	
	var button = ($("#layer_btn").html() != undefined) ? $("#layer_btn").html() : '#btn_form';

	if (
			(no_business != undefined || no_dn_business != undefined) 
		&& 
			(
				($("#no_business").is(':checked') == true)
			|| 
				($("#list_segment").val() == 5)
			)
		) {
		disable = true;
	} else if (		($("#country").val() != undefined)
					&&	(is_forbidden_countries($("#country").val()) == true)) {
		disable = true;
	}
	
	if (disable == true) {
		$(button).css("display", "none");
		$(button+"_hidden").css("display", "inline");
	} else {
		$(button).css("display", "inline");
		$(button+"_hidden").css("display", "none");
	}
		
}

