
if (typeof MVD === 'undefined') {
	MVD = {};
}

if (!MVD.Ajax) {
    MVD.Ajax = function() {
    	var getXMLHttpObject = function () {
    		var ret = false;
    	    if (window.XMLHttpRequest) {
    	        ret = new XMLHttpRequest ();
    			if(ret.readyState === null){
    					ret.readyState = 1;
    					ret.addEventListener('load', function(){
    						ret.readyState = 4;
    						if( typeof (ret.onreadystatechange) === 'function') {
    							ret.onreadystatechange();
    						}
    					}, false);
    			}
    	    } else if (window.ActiveXObject) {
    	        try { ret = new ActiveXObject ("Msxml2.XMLHTTP"); }
    	        catch (e)
    	        { try { ret = new ActiveXObject ("Microsoft.XMLHTTP"); }
    	          catch (e2) { }
    	        }
    	    }
    	    return ret;
    	};
    	
    	var prefix = '';
    	var ext = '.aspx';

    	var encode = encodeURIComponent;
    	
    	var newXmlHttp = function (onComplete, onError) {
    		var xmlHttp = getXMLHttpObject();
    		if (xmlHttp) {
    			xmlHttp.onreadystatechange = function () {
    				if (xmlHttp.readyState == 4 || xmlHttp.readyState=="complete") {
    					var res_status = 0;
    					try {
    						res_status = xmlHttp.status;
    					} catch(e) {}
    					if ((res_status >= 200) && (res_status < 300)) {
    						if(onComplete) {
    							onComplete(xmlHttp.responseText);
    						}
    					} else {
    						if(onError) {
    							onError(xmlHttp.responseText);
    						}
    					}
    				}
                };
    		}
    		return xmlHttp;
    	};

    	var doGet = function (url, onComplete, onError) {		
    		var xmlHttp = newXmlHttp(onComplete, onError);
    		if (xmlHttp) {				
    			xmlHttp.open ('GET', url, true);											
    			// Evitar cache en IE
    			xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
    			xmlHttp.send (null);
    		}
    	};

    	var doPost = function(url, parms, onComplete, onError ) {
    		var xmlHttp = newXmlHttp(onComplete, onError);
    		if (xmlHttp) {			
    			xmlHttp.open ('POST', url, true);
    			xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    			var qstr = '';
    			for (var parm in parms) if (parms.hasOwnProperty(parm)) {
    				if (qstr) {
    					qstr += '&';
    				}
    				qstr += parm + '=' + encode(parms[parm]);
    			}
    			xmlHttp.send (qstr);
    		}
    	};

    	return {
    			
    			get: doGet,
    			getGX : function (url, params, onComplete, onError) {
    				doGet(prefix + url + ext + '?' + params, onComplete, onError);
    			},

                updateGX : function (url, param, elemId) {
                    var e = document.getElementById(elemId);
                    if (e) {
                        this.getGX(url, param, function (c) { e.innerHTML = c; });                  
                    }
                },
                
    			post: doPost,			
    			postGX : function (url, params, onComplete, onError) {
    				doPost(prefix + url + ext, params, onComplete, onError);
    			},
    			
    			setEncode: function(enc) {
    				encode = (enc == 'UTF8') ? encodeURIComponent : escape;
    				return this;
    			},
    			setPrefix : function(p) {
    				prefix = p;
    				return this;
    			},
    			setExt : function(e) {
    				ext = e;
    				return this;
    			}			
    		};
    }();

    // Backcompatibility
    var jxcll = MVD.Ajax.get;
    var jxcllPost = MVD.Ajax.post;
}
if (typeof MVD === 'undefined') {
	MVD = {};
}

if (!MVD.CMS) {
	MVD.CMS = {};
}

MVD.find = function (array, e) {
	for(var i=0,l=array.length; i<l; i++) {
		if (array[i] === e) {
			return i;
		}
	}
	return -1;
};


MVD.filter = function (list, func) {
		var res = [];
		for (var i=0; i<list.length; i++) {
			if (func(list[i])) {
				res.push(list[i]);
			}
		}
		return res;
};


MVD.CMS.NotVot = function() {
	var URL_VOT = 'anvotarnoticia';
	var nnotId = 0;
	var elem_res;
	var elem_vot;
	var re = /.*#([0-9])/;
	var imgsPath = '';
	var imgs = {}; // on,off,mid,sel,prog

	var query = [];
	var opcs = [];
	var idPrefix;

	var show = function (elem) {
		elem.style.display = (elem.nodeName == 'SPAN') ? 'inline' : 'block';
	};

	var votar = function() {
		var voto = MVD.find(opcs, this);
		if (voto > 0) {
			sendVote(voto*2);
		}
		return false;
	};

	var starSelected = function() {
		var voto = MVD.find(opcs, this);
		if (voto > 0) {
			for(var i=1;i<= voto;i++) {
				opcs[i].firstChild.src = imgs.on.src;
			}
		}
		return false;
	};

	var starUnselected = function() {
		var voto = MVD.find(opcs, this);
		if (voto > 0) {
			for(var i=voto; i >= 1; i--) {
				opcs[i].firstChild.src = imgs.sel.src;
			}
		}
		return false;
	};

	var showResult = function(elem, value, quant) {
		var i;
		var c = elem.getElementsByTagName('img');
		for(i=1;(i*2)<=value;i++) {
			c[i-1].src = imgs.on.src;
		}
		if ((Math.floor(value/2)*2) < value) {
			c[i-1].src = imgs.mid.src;
			i++;
		}
		for(;i<=5;i++) {
			c[i-1].src = imgs.off.src;
		}
		c = elem.getElementsByTagName('span');
		c = MVD.filter(c, function(e) { return (e.className === "cantvotos"); });
		c[0].innerHTML = '' + quant;
		show(elem);
	};

	var enable = function() {
		if (elem_vot) {
			var res;
			var c = elem_vot.getElementsByTagName('a');
			for (var i=0; i<c.length; i++) {
				res = re.exec(c[i].href);
				if (res) {
					var valor = res[1];
					opcs[valor] = c[i];
					c[i].onclick = votar;
					c[i].onmouseover = starSelected;
					c[i].onmouseout = starUnselected;
					c[i].firstChild.border = '0';
					c[i].firstChild.src = imgs.sel.src;
				}
			}
			show(elem_vot);
		}
	};

	var processResults = function(txt) {
		var elem, v, res = txt.split(';');

		if (res.length == query.length) {
			for (var i=0; i<query.length; i++) {
				elem = document.getElementById(idPrefix + query[i]);
				if (elem && res[i]) {
					v = res[i].split(',');
					showResult(elem, v[0], v[1]);
				}
			}
		}
	};

	var onSuccess = function(txt) {
		var res = txt.split(',');
		if ((res.length == 3) && ((res[0] == 0) || (res[0] >= 3))) {
			showResult(elem_res, res[1], res[2]);
			if (res[0] == 0) {
				enable();
			} else {
				elem_vot.innerHTML = (res[0] == 9) ? 'Gracias por tu voto.' : '';
				show(elem_vot);
			}
		}
	};

	var onError = function() {
		elem_res.innerHTML = 'Error comunicaci&oacute;n.';
	};

	var getVoteState = function() {
		MVD.Ajax.postGX(URL_VOT, {NNotId: nnotId}, onSuccess, onError);
	};

	var sendVote = function(voto) {
		MVD.Ajax.postGX(URL_VOT, {NNotId: nnotId, voto:voto}, onSuccess, onError);
	};

	return {

		setImagesPath : function (path) {
			imgsPath = path;
			return this;
		},

		setImages: function(newimgs) {
			for(var i in newimgs) if (newimgs.hasOwnProperty(i)) {
				imgs[i]=new Image();
				imgs[i].src = imgsPath + newimgs[i];
			}
			return this;
		},

		getVote : function(nnot_id, res_id, vot_id) {
			nnotId = nnot_id;
			elem_res = document.getElementById(res_id);
			elem_vot = document.getElementById(vot_id);
			if (elem_res) {
				getVoteState();
			}
		},

		qAdd : function(nnot_id) {
			query.push(nnot_id);
		},

		setQuery: function(notlist) {
			query = notlist;
			return this;
		},

		getResults: function(id_prefix) {
			idPrefix = id_prefix;
			if (query.length > 0) {
				MVD.Ajax.postGX('angetnotresultvot', {ucs: query.join(',') }, processResults);
			}
			return this;
		}
	};
} ();

MVD.NotVot = MVD.CMS.NotVot;

