/*
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();
});


function init() {

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

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() {
	/**
	 * We do not load the page if the language is already chosen.
	 */
	$.prompt($('#layer_langues').html());
};
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;
};

/**
 * 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';
	companeo_countries["LU"] = 'luxembourg';
	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());
 		}
	}
};

/**
 * Open a layout for a given layer_id.
 */
function open_layout(layer_id) {
 	if ($('#'+layer_id).html() != null) {
 		$.prompt($('#'+layer_id).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;
	}
	
	var state = 'null'
	if (disable == true) {
		$(button).css("display", "none");
		$(button+"_hidden").css("display", "inline");
		state = 'f';
	} else {
		$(button).css("display", "inline");
		$(button+"_hidden").css("display", "none");
	}
		
	this.update_user_status($("#rfq_id_js").val(), state);
};


function update_user_status(rfq_id, state) {
	
	if (rfq_id == undefined) {
		return false;
	}
	
	$.ajax({
		type		: "POST",
		url			: "/w3s/w3s_user.php",
		data		: "w3s=update_user_status&rfq_id=" + rfq_id + "&state=" + state,
		dataType 	: "json"
	});
	
}


$(window).resize(function(){
	var skn = $("#contener");
  if(testwidth() > 920){
  	if(!skn.hasClass("content1024")){
  		skn.removeClass("content800")
  			.addClass("content1024");
  	}
  }else{
   	if(!skn.hasClass("content800")){
  		skn.removeClass("content1024")
  			.addClass("content800"); 	
  	}
  }

  	if($("#menu_product_positionner").length > 0) $("#menu_product").positionTo("#menu_product_positionner");
});


function showSearch() {
	$("#menu_product").hide();
	$("#menu_elmt").slideDown("normal", function(){
		if(jQuery.browser['msie'] == true) $("#menu_product").positionTo("#menu_product_positionner");
		$("#menu_product").showBreadcrumb(true);
		$("#ttl_contsup").hide();
	});
	$("#menu_elmt #categ_content li").not(".geotag").hoverIntent({over:showChk,out:hideChk});
	
		
};

function hideSearch() {
	$("#menu_product").hide();
	$("#menu_elmt").slideUp("normal", function(){
		$("#menu_product").showBreadcrumb();
		$("#ttl_contsup").show();
	});
	$("#menu_elmt #categ_content li").not(".geotag").unbind();
};

function resetSearch(){
	$("#search_rnat div.search_text > span").hide();
	$("#search_rnat .input_search")
			.attr('value','')
			.show()
			.trigger('focus');
};

function showChk(){
	$("#menu_product").hide();
	$(this).find("div.detail_checklist").slideDown("normal", function(){
		$("#menu_product").showBreadcrumb(true);
	});
};

function hideChk(){
	$("#menu_product").hide();
	$(this).find("div.detail_checklist").slideUp("normal", function(){
		$("#menu_product").showBreadcrumb(true);
	});
};

function showhint(){
	$(this).tooltip();
};

function voidSearch(){
	return true;
};

(function($){
		/**
		 * This function centers an absolutely positioned element
		 */
	
		$.fn.positionTo = function(positionner) {
			var tOffset	= $(positionner).offset();
			var tLeft	= tOffset.left;
			var tTop	= tOffset.top;
	
			return this.each(function() {
				var $element = $( this );
				$element.css({	left:  		tLeft, 
								top: 		tTop
							});
			});		
		};
})(jQuery)

