/******************************************************************************
* gshpJsUtils.js
*******************************************************************************
Fonctions diverses
*******************************************************************************
*                                                                             *
* Copyright 2006									                          *
*                                                                             *
******************************************************************************/
//	-------------------------------------------------------------------------
//	provide the correct url for the image provider
//	-------------------------------------------------------------------------

function getImageProviderUrl()
{
	var extension = document.location.pathname;
	var pos = extension.lastIndexOf(".");
	extension = extension.substr(pos + 1).toLowerCase();
	if(extension == "aspx") {
		return "imageProvider.aspx";
	}
	return "imageProvider.asp";
}

//	-------------------------------------------------------------------------
//	Document writing
//	-------------------------------------------------------------------------
function gshpDocumentWrite( str ) 
{
	document.write(str);
} 

//	-------------------------------------------------------------------------
//	Showing or hiding of custom failure paragraph
//	-------------------------------------------------------------------------
function gshpShowCustomFailurePara( sId, bShow, sText )
{
	if (bShow == null) 	var bShow = true;
	if (sText == null) 	var sText = "";
	
	var failurePara = document.getElementById(sId + "_failure_custom");
	if (failurePara != null) {
		failurePara.innerHTML = sText;
		failurePara.style.display = (bShow ? "block" : "none");
	}
}

//	-------------------------------------------------------------------------
//	Formatting of price value
//	-------------------------------------------------------------------------
function gshpFormatPriceValue(currency, unit)
{
	currency = parseFloat(currency);
	if (isNaN(currency)) return "&nbsp;";
	var sign ="";
	if (currency < 0) {
		currency = -currency;
		sign = "-";
	}
	var integer = Math.floor(currency);
	// NB : A cause des arrondis, on utilise round au lieu de floor et on ne va pas factoriser l'expression mathematique en ecrivant : 100 * (currency - integer)
	// De plus, comme on travaille avec 2 decimales, si la partie decimale est egale a 100 (xx.9964), il ne faut pas oublier de rajouter 1 a la partie entiere et d'affecter 0 a la partie decimale
	// Cas a probleme : 583.05 | 152.89 | 6.9964
	var dec = Math.round((100 * currency) - (100 * integer));
	if (dec == 100) {
	    integer += 1;
	    dec = 0;
	}
	var full = "" + integer;
	var decimal = "" + dec;
	if (decimal.length == 1) decimal = "0"+decimal;
	var res = null;
	var pos = full.length;
	while (pos > 3) {
		block = full.substr(pos - 3, 3);
		if (res == null) {
			res = block;
		} else {
			res = block + " "+res;
		}
		pos -= 3;
	}
	if (pos > 0) {
		block = full.substr(0, pos);
		if (res == null) {
			res = block;
		} else {
			res = block+" "+res;
		}
	}
	if (unit == "&#8364;") unit = String.fromCharCode(8364);
	if (unit == "£") {
		res = unit + "\240" + sign + res + "." + decimal;
	}
	else
	if (unit == "$") {
		res = unit + "\240" + sign + res + "." + decimal;
	}
	else
	if ((unit != null) && (unit != "")) {
		res = sign + res + "," + decimal + "\240" + unit;
	}
	else {
		res = sign + res + "," + decimal;
	}
	return res;
}

//	-------------------------------------------------------------------------
//	Recovery of effective width and height maintaining ratio
//	-------------------------------------------------------------------------
function gshpGetEffectiveWidth(width, height, expectedWidth, expectedHeight)
{
	width = parseInt(width);
	height = parseInt(height);
	expectedWidth = parseInt(expectedWidth);
	expectedHeight = parseInt(expectedHeight);
	if(isNaN(expectedWidth) || expectedWidth == 0) {
		if(isNaN(expectedHeight) || expectedHeight == 0) return width;
		if(expectedHeight > height) return width;
		return Math.floor(width * expectedHeight / height);
	} else if(isNaN(expectedHeight) || expectedHeight == 0) {
		if(width < expectedWidth) return width;
		return expectedWidth;
	}
	if(width * expectedHeight > height * expectedWidth) {
		if(width < expectedWidth) return width;
		return expectedWidth;
	}
	if(height < expectedHeight) return width;
	return Math.floor(width * expectedHeight / height);
}

function gshpGetEffectiveHeight(width, height, expectedWidth, expectedHeight)
{
	width = parseInt(width);
	height = parseInt(height);
	expectedWidth = parseInt(expectedWidth);
	expectedHeight = parseInt(expectedHeight);
	if(isNaN(expectedHeight)|| expectedHeight == 0) {
		if(isNaN(expectedWidth) || expectedWidth == 0) return height;
		if(expectedWidth > width) return height;
		return Math.floor(height * expectedWidth / width);
	} else if(isNaN(expectedWidth) || expectedWidth == 0) {
		if(height < expectedHeight) return height;
		return expectedHeight;
	}
	if(height * expectedWidth > width * expectedHeight) {
		if(height < expectedHeight) return height;
		return expectedHeight;
	}
	if(width < expectedWidth) return height;
	return Math.floor(height * expectedWidth / width);
}

//	-------------------------------------------------------------------------
//	Recovery of valid CSS class name
//	-------------------------------------------------------------------------
function gshpGetCSSClassName(name)
{
	if (typeof(name) != "string") return "";
	var className = objStringUtils.normalizeString(name);
	className = className.replace(/[^!-~]/g, "_");
	className = className.replace(new RegExp("[/\\\\:*?<>|'%\"]","g"), "_");
	className = className.replace(new RegExp("[.#]","g"), "_");
	return className;	
}

//	-------------------------------------------------------------------------
//	Change lang combo in backOffice
//	-------------------------------------------------------------------------
function gshpBackofficeLangComboChange(combo)
{
	var form = combo.form;
	var refLang = form.refLang.value;
	var editLang = form.editLang.value;
	var category = form.category.value;
	var url = document.location.href;
	var pos = url.indexOf("?");
	if(pos > 0) url = url.substr(0, pos);
	url += "?category=" + category + "&refLang=" + refLang + "&editLang=" + editLang + "&saveLang=true";
	url += "#translation";
	document.location = url;
	return false;
}
//	-------------------------------------------------------------------------
//	Copy reference lang version to editor
//	-------------------------------------------------------------------------
function gshpBoRichTextCopy(refName, bindName)
{
	var srcInput = document.getElementById(refName);
	if(srcInput == null) return false;
	var input = srcInput.form[bindName];
	if(input == null) return false;
	var name = "control" + input.id.substr(3);
	var html = input.value = srcInput.value;
	var control = eval(name);
	control.loadXHTML(html);
	return false;
}
function gshpBoMemoCopy(refName, bindName)
{
	var srcInput = document.getElementById(refName);
	if(srcInput == null) return false;
	var input = srcInput.form[bindName];
	if(input == null) return false;
	input.value = srcInput.value;
	return false;
}
function gshpBoTextCopy(refName, bindName)
{
	var srcInput = document.getElementById(refName);
	if(srcInput == null) return false;
	var input = srcInput.form[bindName];
	if(input == null) return false;
	input.value = srcInput.value;
	return false;
}

function gshpBoPrivateResourceCopy(refName, bindName, id)
{
	var srcInput = document.getElementById(refName);
	if(srcInput == null) return false;
	var input = srcInput.form[bindName];
	if(input == null) return false;
	var hidden = document.getElementById(id + "_h");
	if(hidden == null) hidden = document.getElementById(id);
	var oid = srcInput.value;
	if(oid != "") {
		var image = document.getElementById(id+"_i");
		var para = document.getElementById(id+"_p");
		var labelInput = document.getElementById(id+"_l");
		var descriptionInput = document.getElementById(id+"_d");	
		var swidth = parseInt(srcInput.getAttribute("SWIDTH"), 10);
		var sheight = parseInt(srcInput.getAttribute("SHEIGHT"), 10);
		var label = srcInput.getAttribute("SLABEL");
		var sourceUrl = srcInput.getAttribute("SURL");
		var description = srcInput.getAttribute("SDESCRIPTION");
		var pos = sourceUrl.lastIndexOf("/");
		var filename = sourceUrl.substr(pos+1);
		image.title = filename;
		para.innerHTML = filename;
		if (labelInput != null) labelInput.value = label;
		if (descriptionInput != null) descriptionInput.value = description;
		if (!isNaN(swidth) && !isNaN(sheight))
		{
			var w = parseInt(hidden.getAttribute("W"), 10);
			var h = parseInt(hidden.getAttribute("H"), 10);
			var size = computeImageSize(w, h, swidth, sheight);
			hidden.value = oid;
			var oid = parseInt(hidden.value, 10);
			var resizedUrl = imageProviderUrl + "?private_image=" + oid + "&ew=" + size[0] + "&eh=" + size[1];
			image.src = fixUrl(resizedUrl);
			image.className = "previewImage";
			resizeImagePreview(image, w, h, swidth, sheight);
			image.title += "\n" + swidth + " x " + sheight;
		}
	} else {
		resetPrivateResourcePreview(id, false);
	}
	return false;
}

function gshpClientSearchFormReset()
{
	document.getElementById('codeFilterId').value = "";
	document.getElementById('loginFilterId').value = "";
	document.getElementById('nameFilterId').value = "";
	document.getElementById('firstNameFilterId').value = "";
	document.getElementById('emailFilterId').value = "";
	document.getElementById('countryFilterId').value = "";
	document.getElementById('individualFilterId').value = "";
	document.getElementById('noCommandFilterId').value = "";
	document.getElementById('closedFilterId').value = "";
	document.getElementById('startFilterId').value = "";
	document.getElementById('endFilterId').value = "";
}

function gshpBasketSearchFormReset()
{
	document.getElementById('codeFilterId').value = "";
	document.getElementById('loginFilterId').value = "";
	document.getElementById('nameFilterId').value = "";
	document.getElementById('firstNameFilterId').value = "";
	document.getElementById('emailFilterId').value = "";
	document.getElementById('countryFilterId').value = "";
	document.getElementById('individualFilterId').value = "";
	document.getElementById('noCommandFilterId').value = "";
	document.getElementById('closedFilterId').value = "";
	document.getElementById('unchangedBasketId').value = "";
}
