// --- Utilities --- //
function trim(str) {
//   return str.replace(/^\s*|\s*$/g,"");
}

function isValid(str) {
	return (str.match(/^[a-z0-9_]+$/));
}

function isDefined(str) {
    return (typeof(window[str]) == "undefined") ?  false : true;
}

function empty(str) {
	return (trim(str)=="" || trim(str)==null) ? true : false;
}

function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string') element = document.getElementById(element);
		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
}

function countcharsx(max,field,div) {
   if (field.value.length >= max) {
      field.value = field.value.substring(0, max);
   } else {
      $(div).innerHTML = ' ' + max - field.value.length + ' characters left.';
   }
}

function countchars(max,value,div) {
	if (max - value.length >= 0) {
		$(div).innerHTML = max - value.length;
	} else {
		$(div).innerHTML = 0;
	}
}

function refreshCaptcha() {
	var x = new Date();
	var y = x.getTime()
	alert(y);
	$('captchaimage').innerHTML = '<' + 'img width="135" height="45" src="/include/img.php?"' + y + ' alt="Captcha image" />';
}
// --- Utilities --- //



// --- Simple browser check (latest only) --- //
function check_browser() {
	browser = (((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 3 )) || ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4 )));
	if (browser) return false; else return true
}
function check_ie() {
	browser = ((navigator.appName=="Microsoft Internet Explorer") && (parseInt(navigator.appVersion)>=4));
	if (browser) return true; else return false;
}
// --- Simple browser check (latest only) --- //



// --- Voting n stuff ---
var type='vote';
var xmlObj = createRequestObject();

function Vote(div_name) {
	site_id = div_name.replace(/vote_count_/g, "");
	$('vote_link_' + site_id).innerHTML = "voted";
	ajaxRead("/include/vote.php?site_id=" + site_id);
}
function getRemoteData(url) {
	type = 'remote';
	$('retrieve').innerHTML = '<' + 'img src="/images/progress.gif" alt="Retrieving..." />';
	ajaxRead("/include/remotedata.php?url=" + url);
}

function VoteComment(rating,com_id) {
	type = 'comment';
	ajaxRead("/include/votecomment.php?com_id=" + com_id + '&r=' + rating);
}

function checkUsername(name) {
	if (isValid(name)) {
		type = 'username';
		var now = new Date();
		$('retrieve').innerHTML = '<' + 'img src="/images/progress.gif" alt="Retrieving..." />';
		ajaxRead('/include/checkusername.php?n=' + name + '&amp;ts=' + now);
	} else {
		alert("Please enter a valid username");
	}
}

function createRequestObject() {
	var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer") {
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    } else { ro = new XMLHttpRequest(); }
    return ro;
}

function ajaxRead(file) {
	xmlObj.open ('GET', file, true);
	xmlObj.onreadystatechange = handleResponse;
    xmlObj.send (null);
}

function handleResponse() {
	if (xmlObj.readyState == 4) {
		if (xmlObj.responseXML != null) {
			if (xmlObj.responseXML.getElementsByTagName('error').length > 0) {
				alert(xmlObj.responseXML.getElementsByTagName('error')[0].firstChild.data);
				if (type=='remote') $('retrieve').innerHTML = "[Unable to retrieve data.]";
				if (type=='vote') $('vote_link_' + site_id).innerHTML = "voted";
			} else {
				switch (type) {
					case 'vote': processVote(xmlObj); break;
					case 'comment': processCommentVote(xmlObj); break;
					case 'remote': processRemoteData(xmlObj); break;
					case 'username': processUsername(xmlObj); break;
				}
			}
		} else {
			alert('Unable to perform requested action.');
			if (type=='remote') $('retrieve').innerHTML = "[Unable to retrieve data.]";
			if (type=='username') $('retrieve').innerHTML = "[Unable to retrieve data.]";
		}
	}
}

function processVote(xmlObj) {
	if (xmlObj.responseXML.getElementsByTagName('site_id').length > 0) {
		counter = xmlObj.responseXML.getElementsByTagName('votes')[0].firstChild.data;
		site_id = xmlObj.responseXML.getElementsByTagName('site_id')[0].firstChild.data;
		$('vote_count_' + site_id).innerHTML = parseInt(counter);
	}
}

function processCommentVote(xmlObj) {
	if (xmlObj.responseXML.getElementsByTagName('com_id').length > 0) {
		id = xmlObj.responseXML.getElementsByTagName('com_id')[0].firstChild.data;
		level = xmlObj.responseXML.getElementsByTagName('level')[0].firstChild.data + "";
		$('rating_' + id).innerHTML = '<img width="11" height="16" src="/images/' + level + '.png" alt="' + level + '" />';
		$('vb_' + id).innerHTML = 'Voted';
	}
}

function processRemoteData(xmlObj) {
	if (xmlObj.responseXML.getElementsByTagName('title').length > 0) {
		title = xmlObj.responseXML.getElementsByTagName('title')[0].firstChild.data;
		document.submitForm.title.value = title;
	}
	if (xmlObj.responseXML.getElementsByTagName('description').length > 0) {
		description = xmlObj.responseXML.getElementsByTagName('description')[0].firstChild.data;
		if (description.length > 512) description = description.substring(0,512);
		document.submitForm.content.value = description;
	}
	$('retrieve').innerHTML = "[Done.]";
}

function processUsername(xmlObj) {
	if (xmlObj.responseXML.getElementsByTagName('message').length > 0) {
		message = xmlObj.responseXML.getElementsByTagName('message')[0].firstChild.data;
		$('retrieve').innerHTML = message;
	} else {
		$('retrieve').innerHTML = "[Error retrieving data]";
	}
}
// --- Voting n stuff ---



// --- Cookies --- //
function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}

function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}

function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}
// --- Cookies --- //



// --- Toggle div ---  //
function toggleDiv(div) {
	if (document.getElementById) {
		//var newstyle = document.getElementById(div).style;
		$(div).style.display = $(div).style.display ? "" : "block";
	} else if (document.all) {
		var newstyle = document.all[div].style;
		newstyle.display = newstyle.display ? "" : "block";
	} else if (document.layers) {
		var newstyle = document.layers[div].style;
		newstyle.display = newstyle.display ? "" : "block";
	}
}
// --- Toggle div --- //



// --- Set link target --- //
function setLinkTarget() {
	if (!document.getElementsByTagName) return false;
	var links=document.getElementsByTagName("a");
	for (var i=0; i < links.length; i++) {
		if (links[i].className.match("extlink")) {
			document.links[i].target = linktarget;
	    }
	}
}
// --- Set link target --- //


function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
	  window.onload = func;
  } else {
	  window.onload = function() {
		  oldonload();
		  func();
	  }
	}
}
