var WordPress = {
	User: {
		login: function(strLogin, strPassword) {
			var params = 2;
			if (WordPress.User.login.arguments.length <= 1) {
				params = 0;
			}
			var resultName = "";
			if (WordPress.User.login.arguments[2] != null) {
				resultName = WordPress.User.login.arguments[2];
			}
			if (params == 0 && WordPress.User.login.arguments[0] != null) {
				resultName = WordPress.User.login.arguments[0];
				strLogin = '';
			}

			if (strLogin) {
				while (strLogin.search(/[^\w_]/) != -1) {
					strLogin = strLogin.replace(/[^\w_]/, "");
				}
				strLogin = strLogin.toLowerCase();
			}
			WordPress.Settings.logged = false;

			new Ajax.Request(WordPress.Settings.mirror, {
				method: "get",
				parameters: {url: WordPress.Settings.loginPage, log: strLogin,
					pwd: strPassword, post: WordPress.Settings.post, params: params,
					charset: WordPress.Settings.charset, update: 1
				},
				onSuccess: function(http) {
					var logged = false;
					if (http.responseText != '') {
						var pattern = /<div id="login_error">/i;
						if (pattern.test(http.responseText) == false) {
							if (params == 2) {
								WordPress.Settings.logged = true;
							}
							logged = true;
						}
					}
					if (resultName != null){
						eval(resultName + " = logged;");
					}
				}
			});
		},

		create: function(password, email, nick) {
			if (WordPress.User.create.arguments[3] != null) {
				var resultName = WordPress.User.create.arguments[3];
			}
			var login = "";
			if (email != null) {
				login = email;
				while (login.search(/[^\w_]/) != -1) {
					login = login.replace(/[^\w_]/, "");
				}
			} else {
				if (resultName != null){
					eval(resultName + " = 'Wrong email.';");
				}
				return;
			}
			new Ajax.Request(WordPress.Settings.mirror, {
				method: "get",
				parameters: {url: WordPress.Settings.createUserPage, user_name: login,
					pass1: password, pass2: password, user_email: email, tos: 1, signup_for: "user",
					stage: "validate-user-signup", update: 1,
					post: WordPress.Settings.post, charset: WordPress.Settings.charset
				},
				onSuccess: function(http) {
					var error = "";
					if (http.responseText != '') {
						var pattern = /<tr class="error">([^<]|<[^\/]|<\/[^t]|<\/t[^r])*(<p>([^<]|<[^\/]|<\/[^p])*<\/p>)+([^<]|<[^\/]|<\/[^t]|<\/t[^r])*<\/tr>/ig;
						while (pattern.test(http.responseText)) {
							error += RegExp.$2 + "<br />";
						}
					}
					if (error == "") {
						WordPress.User.setParams(email, "", nick);
					}
					if (resultName != null){
						eval(resultName + " = error;");
					}
				}
			});
		},
		setParams: function(email, role, nick) {
			new Ajax.Request(WordPress.Settings.forumPage, {
				method: "get",
				parameters: {email: email, role: role, nick: nick,
					method: "setRole"}
			});
		},
		checkRole: function(email) {
			var resultName = null;
			if (WordPress.User.checkRole.arguments[1] != null) {
				resultName = WordPress.User.checkRole.arguments[1];
			}
			new Ajax.Request(WordPress.Settings.forumPage, {
				method: "get",
				parameters: {email: email, method: "checkRole"},
				onSuccess: function(http) {
					var result = false;
					if (http.responseText != '') {
						var user;
						eval("user = " + http.responseText);
						if (user.email && user.role == "contributor") {
							result = true;
						}
					}
					if (!result) {
						WordPress.User.inviteContributor(user.email, resultName);
					} else if (resultName != null){
						eval(resultName + " = 'has role';");
					}
					if (!result && user && user.email && user.nick) {
						WordPress.User.setNick(user.email, user.nick);
					}
				}
			});
		},
		inviteContributor: function(email) {
			if (WordPress.Settings.timer == null && WordPress.Settings.subquery == 0) {
				if (WordPress.User.inviteContributor.arguments[1] != null) {
					WordPress.Settings.resultName = WordPress.User.inviteContributor.arguments[1];
				}
				WordPress.Settings.params = {email: email};
				WordPress.User.login("WordPress.Settings.result");
				WordPress.Settings.timer = setInterval("WordPress.User.inviteContributor('')", 100);
				WordPress.Settings.result = null;
			}
			if (WordPress.Settings.result === null) {
				return;
			}
			clearInterval(WordPress.Settings.timer);
			WordPress.Settings.timer = null;
			if (WordPress.Settings.result || WordPress.Settings.subquery >= 1) {
				if (WordPress.Settings.subquery == 0) {
					WordPress.Settings.subquery = 1;
					new Ajax.Request(WordPress.Settings.mirror, {
						method: "get",
						parameters: {url: WordPress.Settings.usersPage,
							post: WordPress.Settings.post, charset: WordPress.Settings.charset,
							params: 0, update: 1
						},
						onSuccess: function(http) {
							var wpnonce = "";
							if (http.responseText != '') {
								var pattern = /<form.*name="addexistinguser"[\w\W]*<input[^>]*name="_wpnonce"[^>]*value="([^"]*)"[^>]*\/>/;
								if (pattern.test(http.responseText)) {
									wpnonce = RegExp.$1;
								}
							}
							WordPress.Settings.result = wpnonce;
						}
					});
					WordPress.Settings.timer = setInterval("WordPress.User.inviteContributor('')", 100);
					return;
				}

				if (WordPress.Settings.subquery == 1) {
					WordPress.Settings.subquery = 0;
				}
				new Ajax.Request(WordPress.Settings.mirror, {
					method: "get",
					parameters: {url: WordPress.Settings.usersPage, new_role: "contributor",
						newuser: WordPress.Settings.params["email"], _wpnonce: WordPress.Settings.result, action: "addexistinguser",
						_wp_http_referer: "/wp-admin/users.php", adduser: "Add User",
						post: WordPress.Settings.post, charset: WordPress.Settings.charset,
						params: 0, update: 1
					},
					onSuccess: function(http) {
						var roleGained = false;
						if (http.responseText != '') {
							var pattern = /(<body id="error-page">)|(<form action='invites.php')/;
							if (pattern.test(http.responseText) == false) {
								roleGained = true;
								WordPress.User.setParams(WordPress.Settings.params["email"], "contributor");
							}
							if (WordPress.Settings.resultName != null) {
								eval(WordPress.Settings.resultName + " = roleGained;");
							}
						}
					}
				});
			} else {
				eval(WordPress.Settings.resultName + " = false;");
				return;
			}
		},
		checkUserLogin: function(userLogin) {
			if (WordPress.User.checkUserLogin.arguments[1] != null) {
				var resultName = WordPress.User.checkUserLogin.arguments[1];
			}
			new Ajax.Request(WordPress.Settings.forumPage, {
				method: "get",
				parameters: {userLogin: userLogin, method: "checkLogin"},
				onSuccess: function(http) {
					var logged = false;
					if (http.responseText != '') {
						if (http.responseText != "0"){
							logged = true;
						}
					}
					if (resultName) {
						eval(resultName + " = logged;");
					}
				}
			});
		},
		setNick: function(email, nick) {
			new Ajax.Request(WordPress.Settings.mirror, {
				method: "get",
				parameters: {url: WordPress.Settings.userSettingsPage,
					post: WordPress.Settings.post, charset: WordPress.Settings.charset,
					update: 1
				},
				onSuccess: function(http) {
					var wpnonce = "";
					if (http.responseText != '') {
						var pattern = /<form.*id="your-profile"[\w\W]*<input[^>]*name="_wpnonce"[^>]*value="([^"]*)"[^>]*\/>/;
						if (pattern.test(http.responseText)) {
							wpnonce = RegExp.$1;
							new Ajax.Request(WordPress.Settings.mirror, {
								method: "get",
								parameters: {url: WordPress.Settings.userSettingsPage,
									post: WordPress.Settings.post, charset: WordPress.Settings.charset,
									update: 1, _wpnonce: wpnonce, use_ssl: 1, nickname: nick, display_name: nick,
									email: email, action: "update"
								}
							});
						}
					}
				}
			});
		}
	},
	Settings: {
		initialize: function(siteURL, mirrorPath) {
			this.mirror = mirrorPath;
			this.site = siteURL;
			this.loginPage = this.site + "wp-login.php";
			this.articlesPage = this.site + "category/technology/";
			this.commentsPage = this.site + 'wp-comments-post.php';
			this.newArticlePage = this.site + 'wp-admin/post-new.php';
			this.articleCreatorPage = this.site + 'wp-admin/post.php';
			this.createUserPage = 'http://en.wordpress.com/signup/?user=1';
			this.usersPage = this.site + 'wp-admin/users.php';
			this.forumPage = "inc/forum.php";
			this.userSettingsPage = "https://dashboard.wordpress.com/wp-admin/profile.php";
			this.post = '1';
			this.charset = "utf-8";
			this.logged = false;
			this.timer = null;
			this.result = null;
			this.subquery = 0;
		}
	},
	Article: function () {
		WordPress.Article.prototype.id = 0;
		WordPress.Article.prototype.name = "";
		WordPress.Article.prototype.URL = "";
		WordPress.Article.prototype.parent = WordPress;
		WordPress.Article.prototype.description = "";

		WordPress.Article.prototype.list = function() {
			if (this.list.arguments[0] != null) {
					WordPress.Settings.resultName = this.list.arguments[0];
				}

			var articles = new Array();
			new Ajax.Request(WordPress.Settings.mirror, {
				method: "get",
				parameters: {url: WordPress.Settings.articlesPage,
					charset: WordPress.Settings.charset
				},
				onSuccess: function(http) {
					if (http.responseText != '') {
						var headerPattern = /<h3 id="post-([\d]+)">.*<a.*href="([^"]+)".*>(.*)<\/a><\/h3>[\s]*<p>.*<strong>(.*)<\/strong>(.*)<\/p>/g;
						var i = 0;
						while (headerPattern.test(http.responseText)) {
							articles[i] = new WordPress.Article();
							articles[i].id = RegExp.$1;
							articles[i].name = RegExp.$3;
							articles[i].URL = RegExp.$2;
							articles[i].posts = 0;
							articles[i].lastPost = "No posts";
							articles[i].author = RegExp.$4;
							articles[i].date = RegExp.$5;
							i++;
						}
						if (WordPress.Settings.resultName != "") {
							eval(WordPress.Settings.resultName + " = articles;");
						}
					}
				}
			});
		}

		WordPress.Article.prototype.getContent = function (update) {
			var text = new Array();
			var resultName = "";
			if (this.getContent.arguments[1] != null) {
				resultName = this.getContent.arguments[1];
			}
			new Ajax.Request(this.parent.Settings.mirror, {
				method: "get",
				parameters: {url: this.URL, charset: WordPress.Settings.charset, update: update},
				onSuccess: function(http) {
					if (http.responseText != '') {
						var textPattern = /(<div[^>]*class="entry"[^>]*>(([^<]|<[^\/]|<\/[^d]|<\/d[^i]|<\/di[^v])*<\/div>){3})/;
						//var commentsPattern = /(<ol class="commentlist[\w\W]*<\/ol>)/;
						var commentsPattern = /<li class="comment[^>]*>[\s]*<div class="entry">[\s]*(<img[^>]*>)[\s]*(([^<]|<[^u]|<u[^l])+)([^<]|<[^d]|<d[^i]|<di[^v])+<[^>]*>[\s]*.*<strong>([\w]*)<\/strong>.*on (([^<]|<[^b]|<b[^r])*)[^>]+>([^<]*).*[\s]*<p><\/p>[\s]*<p>[\s]*(.*)/g;
						if (textPattern.match(http.responseText)) {
							text['article'] = RegExp.$1;
						}
						text["comments"] = new Array();
						for (var i = 0; commentsPattern.match(http.responseText); i++) {
							text['comments'][i] = {avatar: RegExp.$1, text: RegExp.$2, nick: RegExp.$5,
								date: RegExp.$6 + RegExp.$8, info: RegExp.$9};
							if (text['comments'][i]["info"] == "</p>") {
								text['comments'][i]["info"] = "";
							}
						}
						if (resultName != "") {
							eval(resultName + " = text;");
						}
					}
				}
			});
		}
		
		WordPress.Article.prototype.postComment = function (comment) {
			var success = false;
			var resultName = "";
			if (this.postComment.arguments[1] != null) {
				resultName = this.postComment.arguments[1];
			}
			new Ajax.Request(this.parent.Settings.mirror, {
				method: "get",
				parameters: {url: this.parent.Settings.commentsPage, comment_post_ID: this.id, comment: comment,
					post: this.parent.Settings.post, charset: this.parent.Settings.charset, update: 1
				},
				onSuccess: function(http) {
					if (http.responseText != '') {
						var pattern = /<body id="error-page">/;
						if (pattern.test(http.responseText) == false) {
							success = true;
						}
						if (resultName != "") {
							eval(resultName + " = success;");
						}
					}
				}
			});
			if (resultName != "") {
				eval(resultName + " = success;");
			}
		}

		WordPress.Article.prototype.create =  function(title, content) {
			if (WordPress.Settings.timer == null) {
				if (this.create.arguments[2] != null) {
					WordPress.Settings.resultName = this.create.arguments[2];
				}
				WordPress.Settings.params = {title: title, content: content};
				new Ajax.Request(WordPress.Settings.mirror, {
					method: "get",
					parameters: {url: WordPress.Settings.newArticlePage,
						charset: WordPress.Settings.charset, update: 1
					},
					onSuccess: function(http) {
						var result = false;
						if (http.responseText != '') {
							var pattern = /<input[^>]*name="_wpnonce"[^>]*value="([^"]*)"[^>]*\/>[\w\W]*<input[^>]*name="user_ID"[^>]*value="([^"]*)"[^>]*\/>/;
							if (pattern.test(http.responseText)) {
								result = {wpnonce: RegExp.$1, userID: RegExp.$2};
							}
						} 
						WordPress.Settings.result = result;
					}
				});
				WordPress.Settings.article = new WordPress.Article();
				WordPress.Settings.timer = setInterval("WordPress.Settings.article.create('', '')", 100);
				WordPress.Settings.result = null;
			}
			if (WordPress.Settings.result === null) {
				return;
			}
			clearInterval(WordPress.Settings.timer);
			WordPress.Settings.timer = null;

			if (WordPress.Settings.result === false) {
				eval(WordPress.Settings.resultName + " = false;");
				return;
			}
				
			new Ajax.Request(WordPress.Settings.mirror, {
				method: "post",
				postBody: "url=" + WordPress.Settings.articleCreatorPage + "&post_title=" + WordPress.Settings.params.title +
				"&action=post&original_post_status=draft&ping_status=open&comment_status=open&content= " + WordPress.Settings.params.content +
					"&publish=Submit%20for%20Review&post_category%5B%5D=6&user_ID=" + WordPress.Settings.result.userID +
					"&update=1&_wpnonce=" + WordPress.Settings.result.wpnonce +
					"&post=" + WordPress.Settings.post + "&charset=" + WordPress.Settings.charset,
				onSuccess: function(http) {
					var success = false;
					if (http.responseText != '') {
						var pattern = /<body id="error-page">/;
						if (pattern.test(http.responseText) == false) {
							success = true;
						}
					}
					if (WordPress.Settings.resultName != null) {
								eval(WordPress.Settings.resultName + " = success;");
					}
				}
			});
		}
	}
}
