function ratingAjax(type,id,score,val,scoreID,msg,msgID,area) { 
	var str = '&';	 
		var msgArea = document.getElementById(msgID); 
		msgArea.style.color = "gray";
		msgArea.innerHTML = msg;
		str += "msg=" + msg + "&msgID=" + msgID + "&type=" + type + "&id=" + id + "&score=" + score + "&scoreID=" + scoreID + "&val=" + val + "&area=" + area;		
		
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	  xmlhttp = new XMLHttpRequest();
	}
		
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
			var results = parseResponseText(xmlhttp.responseText);	
				if (stripos(xmlhttp.responseText,'DEBUG') !== false) {	
					var areaVar = document.getElementById(area);
					areaVar.innerHTML = debug(xmlhttp.responseText);
					return;
				}else{ 
					if (isset(results['area'])) area = results['area'];
					var areaVar = document.getElementById(area);
					if (isset(results['msg'])) message(results['msg'], results['msgType']);
					switch (results['status']) {
						case 'ERROR':
							if (isset(results['load'])) areaVar.innerHTML = results['load'];
						break;
						case 'RATING':
							var scoreVar = document.getElementById(results['scoreID']);
							scoreVar.innerHTML = results['score'];
						break;
						case 'FORM':
							areaVar.innerHTML = results['load'];
						break;
						case 'REDIRECT': 
							if (isset(results['load'])) {
								reloadPage(results['load']);
							}else{
								reloadPage(window.location);
							}
						break;
					}
				}
				corners();
				return;
		}
	}
	
   xmlhttp.open("POST", 'ajax.php?class=links&call=rating');
   xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
   xmlhttp.send(str);
}	

function callAjax(obj,call,area,fobj,msg,msgID,params) {	
	var str = '&';
	str += "area=" + area + "&";		 
	if (msg != undefined && msg != '' && msgID != undefined && msgID != '') { 
		var msgArea = document.getElementById(msgID); 
		window.scrollTo(0,0);
		msgArea.style.color = "gray";
		msgArea.innerHTML = msg;
		str += "msg=" + msg + "&msgID=" + msgID + "&";
	}else{
		var msgArea = document.getElementById('statusMsg');
		msgArea.innerHTML = '';
	}
		if (fobj != undefined && fobj != '') {
			str += parseObj(fobj);
		}	
		
		if (params != undefined && params != '') {
			str += "params=" + params;
		}

	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	  xmlhttp = new XMLHttpRequest();
	}
		
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
			var results = parseResponseText(xmlhttp.responseText);	
				if (stripos(xmlhttp.responseText,'DEBUG') !== false) {	
					var areaVar = document.getElementById(area);
					areaVar.innerHTML = debug(xmlhttp.responseText);
					return;
				}else{ 
					if (isset(results['reloadAreas'])) {
						parseAreas(results['reloadAreas']);
					}
					if (isset(results['area'])) area = results['area'];
					var areaVar = document.getElementById(area);
					if (isset(results['msg'])) message(results['msg'], results['msgType']);
					switch (results['status']) {
						case 'ERROR':
							if (isset(results['load'])) areaVar.innerHTML = results['load'];
						break;
						case 'FORM':
						case 'CONTENT':
							areaVar.innerHTML = results['load'];
						break;
						case 'REDIRECT': 
							if (isset(results['load'])) {
								reloadPage(results['load']);
							}else{
								reloadPage(window.location);
							}
						break;
					}
				}
				corners();
				return;
		}
	}
	
   xmlhttp.open("POST", 'ajax.php?class='+obj+'&call='+call);
   xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
   xmlhttp.send(str);
}	

function reloadPage(url) {
	window.parent.location.href = url;
}

function parseObj(fobj) {
	var str = '';
	for(var i = 0;i < fobj.elements.length;i++) {
	   switch(fobj.elements[i].type) {
		   case "text":
		   case "textarea":
		   case "password":
		   case "hidden":
				str += fobj.elements[i].name +
				 "=" + fobj.elements[i].value + "&";
		   break;
		   case "select-one":
				str += fobj.elements[i].name +
				"=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
		   break;
		   case "radio":
		    case "checkbox":
				if (fobj.elements[i].checked) {
				str += fobj.elements[i].name +
				"=" + fobj.elements[i].value + "&";
				}
		   break;
		   case "button":
		   	continue;
		   break;
		   default:
				alert('Unknown form type: ' + fobj.elements[i].type);
		   break;
		}
	}
	return str;
}

function stripos(strhaystack,strneedle,stroffset){
    var haystack = strhaystack.toLowerCase();
    var needle = strneedle.toLowerCase();
    var index = 0;
    if (undefined == stroffset)stroffset = 0;
    if ((index = haystack.indexOf(needle, stroffset)) > -1) return index;
    return false;
}

function explode(delimiter,string,limit) {     
    if (arguments.length < 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined') return null;
    if (delimiter === '' || delimiter === false || delimiter === null) return false;
    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        var splitted = string.toString().split(delimiter.toString());
        var string1 = splitted.splice(0, limit - 1);
        var string2 = splitted.join(delimiter.toString());
        string1.push(string2);
        return string1;
    }
}

function isset() {
    var arg = arguments; 
	var length = arg.length; 
	var i  =0;    
    if (length == 0) throw new Error('Empty isset'); 
    while (i != length) {
        if (typeof(arg[i]) == 'undefined' || arg[i] === null) { 
            return false; 
        } else { 
            i++; 
        }
    }
    return true;
}

function is_array(val) {
	return val && 'object' == typeof val && val.constructor == Array;
}

function debug(str) {
	var data = parseResponseText(str);
	var output = '';
	if (data && 'object' == typeof data) {
		for(key in data) { 
			output += key+'='+data[key]+'<br>';						
		}
	}
	return output; 
}

function parseResponseText(str) {
	if (str == '' || str == undefined) return false;
	var passback = new Object();
	var results = new Object(explode('/::/',str));
	for (key in results) {
		var array = new Object(explode('/=>/',results[key]));
		passback[array[0]] = array[1];
	}
	return passback;
}

function parseAreas(str) {
	if (str == '' || str == undefined) return false;
	var results = new Object(explode(':,:',str));
	for (key in results) {
		var array = new Object(explode(':=>:',results[key]));
		var area = document.getElementById(array[0]);
		area.innerHTML = array[1];
	}
	return;
}

function message(msg,type) {
	var msgArea = document.getElementById('statusMsg'); 
	switch(type) {
		case 'error':
			msgArea.style.color = "red";
		break;
		case 'notice':
			msgArea.style.color = "purple";
		break;
		case 'success':
			msgArea.style.color = "green";
		break;
		default:
			msgArea.style.color = "blue";
		break;
	} 
		msgArea.innerHTML = msg;
	//alert(msg); 
}