
/**
 * Scripts divers
 * 
 * @author Roland Dufour <roland@rentashop.fr> pour Rentashop eCommerce
 */

var RSPlug_Misc = {};


/** Evenement **/

RSPlug_Misc.addEvent = function (element, eventName, callback){
	if (element.addEventListener){
		element.addEventListener(eventName, callback, false);
	} else if (element.attachEvent){
		element.attachEvent('on' + eventName, callback);
	}
};


/** Ajax **/

RSPlug_Misc.ajax = {};
RSPlug_Misc.ajax.getXhr = function (){
	var obj;
	if (window.XMLHttpRequest){
		obj = new XMLHttpRequest();
	} else if (window.ActiveXObject){
		var ieversions = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0'];
		for (var i=0; !obj && i<ieversions.length; i++){
			try {
				obj = new ActiveXObject(ieversions[i]);
			} catch (e){
				obj = null;
			}
		}
	}
	return obj;
};

RSPlug_Misc.ajax.sendGet = function (url, async, callback){
	if (null === async || async){
		async = true;
	} else {
		async = false;
	}
	var xhr = RSPlug_Misc.ajax.getXhr();
	if (null !== xhr){
		xhr.open('GET', url, async);
		if (null !== callback && typeof callback == 'function'){
			xhr.onreadystatechange = function(){
				if (xhr.readyState == 4){
					callback(xhr);
				}
			};
		}
		xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
		xhr.send(null);
	}
};

RSPlug_Misc.ajax.sendPost = function (url, data, async, callback){
	if (null === async || async){
		async = true;
	} else {
		async = false;
	}
	var xhr = RSPlug_Misc.ajax.getXhr();
	if (null !== xhr){
		xhr.open('POST', url, async);
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");	
		xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
		if (null !== callback && typeof callback == 'function'){
			xhr.onreadystatechange = function(){
				if (xhr.readyState == 4){
					callback(xhr);
				}
			};
		}
		xhr.send(data);
	}
};


/** Element **/

RSPlug_Misc.byId = function (id){
	return document.getElementById(id);
};

RSPlug_Misc.getPos = function (obj){
	if (typeof obj == 'string'){
		obj = RSPlug_Misc.byId(obj);
	}
	var pos = {x:0, y:0};
	if (obj.offsetParent){
		while (true){ 
			pos.x += obj.offsetLeft;
			pos.y += obj.offsetTop;
			if (!obj.offsetParent){
				break;
			}
			obj = obj.offsetParent;
        }
	} else {
		if (obj.x) {
			pos.x += obj.x;
		}
		if (obj.y) {
			pos.y += obj.y;
		}
	}
	return pos;
};

RSPlug_Misc.setPos = function (obj, pos){
	if (typeof obj == 'string'){
		obj = RSPlug_Misc.byId(obj);
	}
	if (null !== pos.x && undefined !== pos.x){
		obj.style.left = pos.x +'px';
	}
	if (null !== pos.y && undefined !== pos.y){
		obj.style.top = pos.y +'px';
	}
};


/** Cookies **/

RSPlug_Misc.cookie = {};

RSPlug_Misc.cookie.set = function (cookieName, value, validity){
	var date_exp = new Date();
	date_exp.setTime(date_exp.getTime()+(null !== validity && undefined !== validity ? validity : 365*24*3600*1000));
	document.cookie = cookieName + '=' + escape(value) + '; expires=' + date_exp.toGMTString() + '; path=/';
};

RSPlug_Misc.cookie.del = function (cookieName){
	var date_exp = new Date();
	date_exp.setTime(date_exp.getTime()-3600);
	document.cookie = cookieName + '=; expires=' + date_exp.toGMTString() + '; path=/';
};

RSPlug_Misc.cookie.get = function (cookieName){
	var arg = cookieName + '=';
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg){
			return RSPlug_Misc.cookie._getVal(j);
		}
		i = document.cookie.indexOf(' ', i) + 1;
		if (i == 0){
			break;
		}
	}
	return null;
};

RSPlug_Misc.cookie._getVal = function (offset){
	var endstr = document.cookie.indexOf (';', offset);		
	if (endstr == -1){
		endstr = document.cookie.length;
	}
	return unescape(document.cookie.substring(offset, endstr));
};



/** Scroll **/

RSPlug_Misc.onScrollY = function (callback, from, to){
	RSPlug_Misc.addEvent(window, 'scroll', function(){ RSPlug_Misc._onScrollY(from, to, callback); });
	if (null === from || from <= 0){
		RSPlug_Misc._onScrollY(from, to, callback);
	}
	return RSPlug_Misc;
};
RSPlug_Misc._onScrollY = function (from, to, callback){
	var scrollY = RSPlug_Misc.getScrollY();
	if ((null !== from && scrollY < from) || (null !== to && scrollY > to)){
		return false;
	}
	callback(scrollY);
};
RSPlug_Misc.getScrollY = function (){
	var db = !document.documentElement.clientWidth ? document.body : document.documentElement;
	return (db.scrollTop) ? db.scrollTop : window.pageYOffset;
};


/** STRING : CHAINES DE CARACTERES **/

RSPlug_Misc.string = {};

RSPlug_Misc.string.trim = function (myString){
	return myString.replace(/^\s+/g, '').replace(/\s+$/g, '');
};


/** CSS **/

RSPlug_Misc.css = {};

RSPlug_Misc.css.show = function (element){
	if (typeof element == 'object' && element instanceof Array){
		var retour = false;
		for (i in element){
			if (RSPlug_Misc.css.show(element[i])){
				retour = true;
			}
		}
		return retour;
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element){
			element.style.display = '';
			return true;
		}
		return false;
	}
};

RSPlug_Misc.css.hide = function (element){
	if (typeof element == 'object' && element instanceof Array){
		var retour = false;
		for (i in element){
			if (RSPlug_Misc.css.hide(element[i])){
				retour = true;
			}
		}
		return retour;
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element){
			element.style.display = 'none';
			return true;
		}
		return false;
	}
};

RSPlug_Misc.css.toogle = function (element, callbackShow, callbackHide){
	if (typeof element == 'object' && element instanceof Array){
		var retour = false;
		for (i in element){
			if (RSPlug_Misc.css.toogle(element[i], callbackShow, callbackHide)){
				retour = true;
			}
		}
		return retour;
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element){
			if (element.style.display == 'none'){
				element.style.display = '';
				if (typeof callbackShow == 'function'){
					callbackShow(element);
				}
			} else {
				element.style.display = 'none';
				if (typeof callbackHide == 'function'){
					callbackHide(element);
				}
			}
			return true;
		}
		return false;
	}
};

RSPlug_Misc.css.opacity = function (element, opacity){
	if (typeof element == 'object' && element instanceof Array){
		var retour = false;
		for (i in element){
			if (RSPlug_Misc.css.opacity(element[i], opacity)){
				retour = true;
			}
		}
		return retour;
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element){
			element.style.opacity = (opacity /100);
			element.style.filter = 'alpha(opacity=' + opacity + ')';
			return true;
		}
		return false;
	}
};

RSPlug_Misc.css.hasClassName = function (element, className){
	if (typeof element == 'object' && element instanceof Array){
		var retour = false;
		for (i in element){
			if (RSPlug_Misc.css.removeClassName(element[i], className)){
				retour = true;
			}
		}
		return retour;
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element && element.className){
			var classes = element.className.split(/\s+/);
			for (var i=0; i<classes.length; i++){
				if (classes[i] == className){
					return true;
				}
			}
		}
		return false;
	}
};

RSPlug_Misc.css.removeClassName = function (element, className){
	if (typeof(element) == 'object' && element instanceof Array){
		for (i in element){
			RSPlug_Misc.css.removeClassName(element[i], className);
		}
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element){
			var classes = element.className.split(/\s+/);
			element.className = '';
			for (var i=0; i<classes.length; i++){
				if (classes[i] != className){
					element.className += (element.className == '' ? '' : ' ') + classes[i];
				}
			}
		}
	}
};

RSPlug_Misc.css.addClassName = function (element, className){
	if (typeof element == 'object' && element instanceof Array){
		for (i in element){
			RSPlug_Misc.css.addClassName(element[i], className);
		}
	}
	else {
		if (typeof element == 'string') element = document.getElementById(element);
		if (element && !RSPlug_Misc.css.hasClassName(element, className)){
			element.className += (element.className == '' ? '' : ' ') + className;
		}
	}
};

