// CATEGORIES COMBOBOX GENERATOR
function _cbo_categories_gen(data, target)
{
	var myTarget = $(target);
	var outputHTML = "";
	outputHTML += "<select id=\"cbo_categories\" onchange=\"_category_load(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);\">";
	for(var i=0; i<data.length; i++)
	{
		outputHTML += "<option value=\""+data[i][0]+"\">"+data[i][1]+"</option>";
	}
	outputHTML += "</select>";
	myTarget.innerHTML = outputHTML;
}
function _cbo_categories_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_cbo_categories_gen(data, "cbo_categories_gen_div");
			}
		}
	});
}

// STYLES COMBOBOX GENERATOR
function _cbo_styles_gen(data, target)
{
	var myTarget = $(target);
	var outputHTML = "";
	outputHTML += "<select id=\"cbo_styles\" onchange=\"_style_load(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);\">";
	for(var i=0; i<data.length; i++)
	{
		outputHTML += "<option value=\""+data[i][0]+"\">"+data[i][1]+"</option>";
	}
	outputHTML += "</select>";
	myTarget.innerHTML = outputHTML;
}
function _cbo_styles_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_cbo_styles_gen(data, "cbo_styles_gen_div");
			}
		}
	});
}

// SITE HIDEALLPAGES
function _sites_hideallpages(groupName)
{
	var allULs = document.getElementsByTagName("UL");
	for(var i=0; i<allULs.length; i++)
		if(allULs[i].id.indexOf(groupName+"_")==0)
			allULs[i].style.display = 'none';
	var allAs = document.getElementsByTagName("A");
	for(var i=0; i<allAs.length; i++)
		if(allAs[i].id.indexOf(groupName+"_navBtn_")==0)
			allAs[i].className = "";
}
// SITE SHOWPAGE
function _sites_showpage(groupName, pageNo)
{
	_sites_hideallpages(groupName);
	var pageUL = $(groupName+"_"+pageNo);
	pageUL.style.display = 'block';
	var allAs = document.getElementsByTagName("A");
	for(var i=0; i<allAs.length; i++)
		if(allAs[i].id == groupName+"_navBtn_"+pageNo)
			allAs[i].className = "currentpage";
}
// DISPLAY RATE FACTORY
function _display_rate_factory(rate)
{
	var outputHTML = "";
	outputHTML += "		<ul>";
	var _rate = Math.floor(parseFloat(rate));
	for(var j=0; j<_rate; j++)
	{
		outputHTML += "			<li class=\"one_rate\"></li>";
	}
	if(parseFloat(rate) > parseInt(rate))
	{
		outputHTML += "			<li class=\"hafl_rate\"></li>";
	}
	outputHTML += "		</ul>";
	return outputHTML;
}
// SITE FACTORY
function _site_factory(data, i)
{
	var outputHTML = "";
	var addClass = "";
	if((i+1)%4==0)
		addClass = "none_margin_li";
	outputHTML += "<li class=\"list_pic_li "+addClass+"\">";
	outputHTML += "	<p><a href=\"javascript:_site_open('"+data[i][2]+"');\"><img src=\"images/graphics/blank.gif\" width=\"145\" height=\"118\" style=\"background:url("+data[i][4]+") no-repeat center center;\" border=\"1\" alt=\""+data[i][3]+"\" /></a></p>";
	outputHTML += "	<span><a href=\"javascript:_site_open('"+data[i][2]+"');\">"+data[i][1]+"</a></span>";
	
	outputHTML += "	<div id=\"display_rate_"+data[i][0]+"\" class=\"display_rate\">";
	outputHTML += _display_rate_factory(data[i][5]);
	outputHTML += "	</div>";
	
	outputHTML += "	<div class=\"make_rate\">";
	outputHTML += "		<ul>";
	outputHTML += "			<li class=\"none_bg_padding\">";
	if(data[i][6]=="rated")
	{
		outputHTML += "				<select disabled><option selected>rated</option></select>";
	}
	else
	{
		outputHTML += "				<select id=\"_site_rate_select_"+data[i][0]+"\" onchange=\"_site_rate('"+data[i][0]+"', this.selectedIndex); _site_disable_rate("+data[i][0]+"); ApplyFadeInOut('"+"display_rate_"+data[i][0]+"', 'DIV'); _site_updaterate("+data[i][0]+")\">";
		outputHTML += "					<option>rate it</option>";
		for(var j=0; j<5; j++)
		{
			outputHTML += "					<option>"+("●".times(j+1))+"</option>";
		}
		outputHTML += "				</select>";
	}
	outputHTML += "			</li>";
	//outputHTML += "			<li><a href=\"javascript:_site_post('"+data[i][0]+"');\">Post</a></li>";
	outputHTML += "			<li><a href=\"javascript:_site_save('"+data[i][2]+"', '"+data[i][1]+"');\">Save</a></li>";
	outputHTML += "			<li class=\"none_bg_padding_margin\"><a href=\"javascript:_site_report_popup('"+data[i][2]+"');\">Report</a></li>";
	outputHTML += "		</ul>";
	outputHTML += "	</div>";
	outputHTML += "</li>";
	return outputHTML;
}
// SITES GENERATOR
function _sites_gen(data, target, _pageSize, _groupName)
{
	var myTarget = $(target);
	var outputHTML = "";
	var pageSize = (typeof(_pageSize)=='number' && _pageSize!=null) ? _pageSize : 0;
	var groupName = (typeof(_groupName)=='string' && _groupName!=null) ? _groupName : "";
	if(pageSize>1)
	{
		var numOfPages = Math.ceil(data.length / pageSize);
		outputHTML += "<div id=\""+groupName+"_nav\" align=\"center\" class=\"pagination\"><ul>";
		for(var p=0; p<numOfPages; p++)
		{
			var addClass = (p==0) ? " class=\"currentpage\" " : "";
			outputHTML += "<li><a id=\""+groupName+"_navBtn_"+p+"\" "+addClass+" href=\"javascript:_sites_showpage('"+groupName+"', "+p+")\" onclick=\"this.blur();\">"+(p+1)+"</a></li>";
		}
		outputHTML += "</ul></div>";
		for(var p=0; p<numOfPages; p++)
		{
			var offset = p * pageSize;
			var addStyle = (p!=0) ? " style=\"display:none\" " : " style=\"display:block\" ";
			outputHTML += "<ul id=\""+groupName+"_"+p+"\" class=\"list_pic_ul\" "+addStyle+">";
			for(var i=offset; i<data.length && i<(offset+pageSize); i++)
			{
				outputHTML += _site_factory(data, i);
			}
			outputHTML += "</ul>";
		}
		/*
		outputHTML += "<div id=\""+groupName+"_nav\" align=\"center\" class=\"pagination\" style=\"padding-top:20px;\"><ul>";
		for(var p=0; p<numOfPages; p++)
		{
			var addClass = (p==0) ? " class=\"currentpage\" " : "";
			outputHTML += "<li><a id=\""+groupName+"_navBtn_"+p+"\" "+addClass+" href=\"javascript:_sites_showpage('"+groupName+"', "+p+")\" onclick=\"this.blur();\">"+(p+1)+"</a></li>";
		}
		outputHTML += "</ul></div>";
		*/
	}
	else
	{
		outputHTML += "<ul class=\"list_pic_ul\">";
		for(var i=0; i<data.length; i++)
		{
			outputHTML += _site_factory(data, i);
		}
		outputHTML += "</ul>";
	}
	
	myTarget.innerHTML = outputHTML;
}

// TOP 20 NEWEST SITES GENERATOR
function _20newsites_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_sites_gen(data, "20newsites_gen_div");
			}
		}
	});
}

// TOP 20 TOP RATED SITES GENERATOR
function _20topratedsites_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_sites_gen(data, "20topratedsites_gen_div");
			}
		}
	});
}

// TOP 20 TOP PROMOTED SITES GENERATOR
function _20promotedsites_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_sites_gen(data, "20promotedsites_gen_div");
			}
		}
	});
}

// GET SITES BY CATEGORYID
function _sitesbycate_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_sites_gen(data, "sitesbycate_gen_div", 40, "sitesbycate");
			}
		}
	});
}
function _category_load(cateid, catename)
{
	_load_page('category_load', {'cateid':cateid});
	$("page_category_load_title").innerHTML = catename;
}
function _category_setTitle(title)
{
	$("page_category_load_title").innerHTML = title;
}

// GET SITES BY STYLE
function _sitesbystyle_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_sites_gen(data, "sitesbystyle_gen_div", 40, "sitesbystyle");
			}
		}
	});
}
function _style_load(styleid, stylename)
{
	_load_page('style_load', {'styleid':styleid});
	$("page_style_load_title").innerHTML = stylename;
}
function _style_setTitle(title)
{
	$("page_style_load_title").innerHTML = title;
}

// CATEGORIES GENERATOR
function _categories_gen(data, target)
{
	var myTarget = $(target);
	var outputHTML = "";
	outputHTML += "<ul>";
	for(var i=0; i<data.length; i++)
	{
		outputHTML += "<li><a href=\"javascript:_category_load("+data[i][0]+"); _category_setTitle('"+data[i][1]+"');\" title=\""+data[i][2]+"\">"+data[i][1]+"</a></li>";
	}
	outputHTML += "</ul>";
	myTarget.innerHTML = outputHTML;
}
function _categories_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_categories_gen(data, "categories_gen_div");
			}
		}
	});
}

// PROMOTEDSITES GENERATOR
function _promotedsites_gen(data, target)
{
	var myTarget = $(target);
	var outputHTML = "";
	outputHTML += "<ul>";
	for(var i=0; i<data.length; i++)
	{
		outputHTML += "<li><a href=\"javascript:_site_open('"+data[i][2]+"\');\" title=\""+data[i][3]+"\">"+data[i][1]+"</a></li>";
	}
	outputHTML += "</ul>";
	myTarget.innerHTML = outputHTML;
}
function _promotedsites_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_promotedsites_gen(data, "promotedsites_gen_div");
			}
		}
	});
}

// LOGOS GENERATOR
function _logos_gen(data, target)
{
	var myTarget = $(target);
	var outputHTML = "";
	outputHTML += "<ul>";
	for(var i=0; i<data.length; i++)
	{
		var addClass = "";
		if(i%2!=0)
			addClass = "class=\"none_margin\"";
		outputHTML += "<li "+addClass+"><a href=\"javascript:_site_open('"+data[i][1]+"');\"><img src=\"images/graphics/blank.gif\" style=\"background:url("+data[i][0]+") no-repeat center\" width=\"120\" height=\"90\" /></a></li>";
	}
	outputHTML += "</ul>";
	myTarget.innerHTML = outputHTML;
}
function _logos_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_logos_gen(data, "logos_gen_div");
			}
		}
	});
}

// HOTNEWS GENERATOR
function _hotnews_gen(data, target)
{
	var myTarget = $(target);
	var outputHTML = "";
	outputHTML += "<ul>";
	for(var i=0; i<data.length; i++)
	{
		outputHTML += "<li><h1><a href=\"javascript:_news_show("+data[i][0]+");\">"+data[i][1].escapeHTML()+"</a></h1><p>"+data[i][2].escapeHTML()+"</p></li>";
	}
	outputHTML += "</ul>";
	myTarget.innerHTML = outputHTML;
}
function _hotnews_load(url)
{
	new Ajax.Request(url, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				_hotnews_gen(data, "hotnews_gen_div");
			}
		}
	});
}

// LOGIN
function _login(username, password)
{
	showAjaxLoader(true, "Logging in, please wait..");
	new Ajax.Request("phpmodules/login.php?username="+username+"&password="+password, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				if(typeof(data[0]["username"])=='string')
				{
					showAjaxLoader(false);
					$("login_place").hide();
					$("logout_place_username").innerHTML = data[0]["username"];
					$("logout_place").show();
					_load_page("main");
				}
				else
				{
					$("login_place").show();
					$("logout_place").hide();
				}
			}
		}
	});
}
function _logout()
{
	showAjaxLoader(true, "Logging out, please wait..");
	new Ajax.Request("phpmodules/logout.php", {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				if(transport.responseText=="ok")
				{
					$("login_place").show();
					$("logout_place").hide();
					showAjaxLoader(false);
				}
			}
		}
	});
}
function _signup(username, email, password)
{
	showAjaxLoader(true, "Registering, please wait..");
	new Ajax.Request("phpmodules/signup.php?username="+username+"&password="+password+"&email="+email, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				if(typeof(data[0]["status"])=='string')
				{
					switch(data[0]["status"])
					{
						case "ok":
							showAjaxLoader(false);
							$("login_place").hide();
							$("logout_place_username").innerHTML = data[0]["username"];
							$("logout_place").show();
							_load_page("main");
							return;
							break;
						case "username_notvalid":
							break;
					}
				}
				$("login_place").show();
				$("logout_place").hide();
			}
		}
	});
}
function _recover_username(email)
{
	showAjaxLoader(true, "Sending username, please wait..");
	new Ajax.Request("phpmodules/send_username.php?email=" + email, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				if(transport.responseText=="ok")
				{
					showAjaxLoader(false);
				}
			}
		}
	});
}
function _recover_password(email)
{
	showAjaxLoader(true, "Sending password, please wait..");
	new Ajax.Request("phpmodules/send_password.php?email=" + email, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				if(transport.responseText=="ok")
					showAjaxLoader(false);
			}
		}
	});
}

// SUBMIT SITE
function _submit_site(link, name, categoryid, description, email, thumburl)
{
	showAjaxLoader(true, "Registering, please wait..");
	new Ajax.Request("phpmodules/submitsite.php?link="+username+"&name="+password+"&cateid="+email, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				var data = eval(transport.responseText);
				if(typeof(data[0]["status"])=='string')
				{
					switch(data[0]["status"])
					{
						case "ok":
							showAjaxLoader(false);
							$("login_place").hide();
							$("logout_place_username").innerHTML = data[0]["username"];
							$("logout_place").show();
							_load_page("main");
							return;
							break;
						case "username_notvalid":
							break;
					}
				}
				$("login_place").show();
				$("logout_place").hide();
			}
		}
	});
}

// CONTACT
function _send_contact_email()
{
	var message = $("contact_message").value;
	var name = $("contact_name").value;
	var email = $("contact_email").value;
	var sn = $("contact_sercurity").value;
	showAjaxLoader(true, "Sending email, please wait..");
	new Ajax.Request("phpmodules/send_contactmail.php?email=" + email + "&message=" + message + "&name=" + name + "&sn=" + sn, {
		method:"GET",
		onComplete:function(transport)
		{
			if(transport.status==200)
			{
				if(transport.responseText=="ok")
				{
					showAjaxLoader(false);
					_load_page("main");
				}
			}
		}
	});
}

// THUMB UPLOADING
function _thumb_upload_success()
{
	showAjaxLoader(false);
	_load_page("main");
	showMessageBox(true, "Site has been submitted. Thankyou!");
}
function _thumb_upload_error(message)
{
	showAjaxLoader(false);
	showMessageBox(true, message);
}

// UTILS
function getRandomNumber(range)
{
	return Math.floor(Math.random() * range);
}
function getRandomChar()
{
	var chars = "0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ";
	return chars.substr( getRandomNumber(62), 1 );
}
function randomID(size)
{
	var str = "";
	for(var i = 0; i < size; i++)
	{
		str += getRandomChar();
	}
	return str;
}