var glogster = {};

//help function
glogster.$ = function(id) {
  return document.getElementById(id);
};

//ajax for sending a request
glogster.xmlhttpPost = function(str_url, query_string, on_response, sync) {
  var xmlHttpReq = false;
  var async = !sync;

  //alert(query_string);

  var self = this;
  // Mozilla/Safari
  if (window.XMLHttpRequest) {
    self.xmlHttpReq = new XMLHttpRequest();
  }
  // IE
  else if (window.ActiveXObject) {
    self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
  }
  self.xmlHttpReq.open('POST', str_url, async);
  self.xmlHttpReq.setRequestHeader(
    'Content-Type',
    'application/x-www-form-urlencoded'
  );
  self.xmlHttpReq.onreadystatechange = function() {
    if (self.xmlHttpReq.readyState == 4) {
      on_response(self.xmlHttpReq.responseText);
    }
  };
  self.xmlHttpReq.send(query_string);
};

glogster.userActions = {
  checkNickname: function(element, sync) {
    var v = jQuery(element).val();
    if (v.length < 5 || v.length > 30) {
      this.warning(element.name, "nick-length");
    } else if (v.search(/^[a-zA-Z0-9]{4,30}$/gi) == -1) {
      this.warning(element.name, "nick-format");
    } else {
      this.warning(element.name, 0);
      new glogster.xmlhttpPost(
        '/@ajax.php', '&field=nick&value='
          + encodeURIComponent(v)
          + "&id=" + encodeURIComponent(element.name),
        glogster.userActions.response, sync);
    }
  },

  response : function(response) {
    //alert(response);
    var res = response.split("=");
    glogster.userActions.warning(res[0], res[1]);
  },

  warning : function(name, status) {
    var errPopup = glogster.$("err-" + name);
    //alert([status, errPopup.outerHTML, name]);

    var text = "";
    if (status != 0) {
      if (name.search(/^uids/i) == 0) {
        switch(status) {
        case "nick-length":
        case "-1":
        case "-5":
          text = 'Nickname must be longer than 4 characters and less or equal than 30 characters';
          break;

        case "-2":
          text = 'This nickname is already being used, choose another one';
          break;

        case "-3":
          text = "Nickname can't be a registered trademark or reserved word";
          break;

        case "nick-format":
          text = 'Choose a nickname without any special characters';
          break;
        }
      }
    }

    if (text) {
      jQuery(errPopup).html("<em class='error'>" + text + "</em>");
    } else {
      jQuery(errPopup).html("");
    }
  }
};

//working with registration form
glogster.register = {
  completed : 0,
  field_status : {
	nick: 0,
	password: 0,
	password_confirm: 0,
	email: 0,
	//postal: 0
	terms: 0,
	captcha: 0,
	teacher_code: 0,
	age: 0
  },
  field_check : new Array(
    'nick',
    'password',
    'password_confirm',
    'email',
    'terms',
    'captcha',
    'teacher_code',
    'age'
  ),
  field_startup_check : new Array('nick', 'email'/*, 'postal'*/, 'terms'),

  //tests one field of formular
  formcheck : function(elem, sync, notnull) {
	glogster.register.form = elem.form;

	if (
      elem.name == 'nick' /*|| elem.name == 'phone'*/
        || elem.name == 'email'
        || elem.name == 'captcha'
        || elem.name == 'teacher_code'
    ) {
	  if (elem.value.length > 0 || notnull) {
		if (
          elem.name == 'nick'
            && elem.value.search(/^[a-zA-Z0-9]{5,30}$/gi) == -1
        ) {
          this.warning(elem.name, -1, elem.value.length);
        } else if (
          elem.name == 'password'
            && elem.value.search(/^[a-zA-Z0-9]{5,}$/gi) == -1
        ) {
          this.warning(elem.name, -1, elem.value.length);
          //else if (elem.name == 'phone' && elem.value.search(/^[0-9]{9}$/gi) == -1) this.warning(elem.name, -1);
        } else if (elem.name == 'email' && (elem.value == '@' && !notnull)) {
        } else {
          this.warning(elem.name, 0);
          new glogster.xmlhttpPost(
            '/@ajax.php', '&field='
              + encodeURIComponent(elem.name)
              + '&value=' + encodeURIComponent(elem.value),
            glogster.register.response, sync
          );
        }
      }
    }
    //		else if (elem.name == 'postal') {
	//		if (elem.value != parseInt(elem.value) || elem.value.length != 5) this.warning(elem.name, -1);
	//	else this.warning(elem.name, 1);
	//}
	else if (elem.name == 'password') {
	  if (elem.value.length > 0 || notnull) {
		if (elem.value.length < 5) {
          this.warning(elem.name, -1);
        }
      } else {
        this.warning(elem.name, 1);
      }

	  this.formcheck(elem.form['password_confirm']);
	} else if (elem.name == 'password_confirm') {
	  if (elem.value.length > 0 || notnull) {
		if (elem.value != elem.form.password.value) {
          this.warning(elem.name, -1);
        }
      } else {
        this.warning(elem.name, 1);
      }
	} else if (elem.name == 'terms') {
	  if (elem.checked == false) {
        this.warning(elem.name, -1);
      } else {
        this.warning(elem.name, 1);
      }
	}  else if (elem.name == 'age') {
	  if (elem.checked == false) {
	        this.warning(elem.name, -1);
	      } else {
	        this.warning(elem.name, 1);
	      }
		}
  },

  //testing all form fields
  formcheck_submit : function(elem) {
	var fields = this.field_check;

	for(var i = 0; i < fields.length; i++) {
      if (this.field_status[fields[i]] < 1) {
        this.formcheck(elem.elements[ fields[i] ], true, true);
      }
	}

	return (this.completed >= fields.length);
  },

  //testing all form fields
  formcheck_startup : function(elem, startup, wait) {
	var fields = this.field_startup_check;

	for(var i = 0; i < fields.length; i++) {
      if (this.field_status[fields[i]] < 1) {
        this.formcheck(elem.elements[ fields[i] ]);
      }
	}
  },

  //trigger for receiving the answer from ajax
  response : function(response) {
	var res = response.split('=');
	glogster.register.warning(res[0], res[1]);
  },

  //highlighting the field of formular
  warning : function(name, status, length) {
    var err_elem, color;
	if (this.field_status[name] != undefined) {
	  this.completed += status - this.field_status[name];
	  this.field_status[name] = status;
	}

	//glogster.$('submit').disabled = (this.completed >= this.field_check.length - 1) ? false : true;
    if (glogster.register.form) {
	  err_elem = glogster.$(glogster.register.form[name].id + '-err');
	} else {
	  err_elem = glogster.register;
    }

	var text = color = '';

	if (status == -1) {
	  if (name == 'password_confirm') text = 'Passwords are not the same';
	  else if (name == 'captcha') text = 'Incorrect verification code';
	  else if (name == 'terms') text = 'You must accept the terms of use';
	  else if (name == 'age') text = 'You must confirm that you are 13 years of age or older.';
	  else if (name == 'password') text = 'Choose a password longer than 4 characters';
	  else if (name == 'nick') {
		if (length < 5) {
                    text = 'Nickname must be longer than 4 characters';
                } else if (length > 30) {
                    text = 'Nickname must be less or equal than 30 characters'
                } else {
                    text =  'Choose a nickname without any special characters';
                }
	  } else if (name == 'email') {
		text = 'Enter a valid email';
	  } else {
        text = 'Wrong format, try again';
      }
	  color = 'error';
	}
	else if (status == -2) {
      if (name == 'nick') {
		text = 'This nickname is already being used, choose another one';
      } else if (name == 'email') {
	    text = 'This email is already being used, choose another one';
      }
	  color = 'error';
	} else if (status == -3) { //forbidden nick
	  text = "Nickname can't be a registered trademark or reserved word";
	  color = 'error';
	} else if (status == 1) {
	  if (name == 'terms'){
       	//text = 'Souhlas potvrzen';
       	text = '';
      } else {
        //        text = 'Správn�>';
        text = '';
      }
	  color = 'ok';
	} else if (status == 0) {
      //temporary commented until it will be working properly
	  //text checking
	  //text = 'Checking&hellip;'; //glogster.register.form[name].style.border = '1px solid black';
	  //color = 'message';
	}

    //		err_elem.innerHTML = text;
	if (text) {
      err_elem.innerHTML = '<em class='+color+'>'+ text + '</em>';
  	  //err_elem.className = color;
	} else {
	  err_elem.innerHTML = '';
    }
  },

  requestCaptcha : function(img) {
	glogster.register.captcha = img;
	new glogster.xmlhttpPost(
      '/@ajax.php',
      '&captcha=1',
      glogster.register.showCaptcha
    );
  },

  showCaptcha : function(response) {
	//alert(glogster.register);
	glogster.register.captcha.src = response;
  }
};

//next row for sending invitation
glogster.invitations_add = function(col1, col2, count) {
  var input_nick = document.createElement('INPUT');
  var input_email = document.createElement('INPUT');

  input_nick.name = "invitations[" + count + "][nick]";
  input_email.name = "invitations[" + count + "][email]";
  input_email.value = "@";

  var div_nick = document.createElement('DIV');
  div_nick.appendChild(input_nick);
  div_nick.className = "cont";

  var div_email = document.createElement('DIV');
  div_email.appendChild(input_email);
  div_email.className = "cont";

  col1.parentNode.insertBefore(div_nick, col1);
  col2.appendChild(div_email);

  return ++count;
};

//highlights selected avatar
glogster.select_avatar = function(elem, avatar) {
  var elem_input = glogster.$('avatar');

  if (elem_input.value > 0) {
	var elem_old = glogster.$('avatar' + elem_input.value);
	elem_old.className = "";
  }

  elem.className = "choosed";
  elem_input.value = avatar;
};
/*
 //rating
 glogster.rating = {
 //rate
 rate : function(blog_id, rating) {
 //check input vars
 rating = parseInt(rating);
 blog_id = parseInt(blog_id);

 //do the ajax
 new glogster.xmlhttpPost('/@ajax.php', '&blog_id=' + blog_id + '&rating=' + rating, glogster.rating.show);
 },

 //show rating
 show : function(response) {
 glogster.$('rate-the-glog').innerHTML = response;
 }
 }
 */
//rating
/*
 glogster.comments = {
 //rate
 get_one : function(comment_id) {
 //check input vars
 comment_id = parseInt(comment_id);

 //hide old popup
 if (glogster.comments.comment_id != undefined) {
 comment_elem = glogster.$('comment'+glogster.comments.comment_id);
 comment_elem.style.display = 'none';
 }

 //show new one
 comment_elem = glogster.$('comment'+comment_id);
 comment_elem.style.display = 'block';

 glogster.comments.comment_id = comment_id;

 //if already loded
 if (comment_elem.childNodes.length > 1) return;
 //show loading
 comment_elem.innerHTML = 'Loading..';


 //do the ajax
 new glogster.xmlhttpPost('/@ajax.php', '&comment_id=' + comment_id + '&show=comment', glogster.comments.show_one);
 },

 //show rating
 show_one : function(response) {
 //console.debug(response);
 comment_id = glogster.comments.comment_id;

 comment_elem = glogster.$('comment'+comment_id);
 comment_elem.innerHTML = response;
 },

 send : function(form) {
 //console.debug(form);
 user_id = (form.user_id != undefined ? form.user_id.value : 0);
 blog_id = (form.blog_id != undefined ? form.blog_id.value : 0);

 new glogster.xmlhttpPost(
 '/@ajax.php',
 '&action=message_enter&user_id=' + encodeURIComponent(user_id) + '&blog_id=' + encodeURIComponent(blog_id) + '&type=' + encodeURIComponent(form.type.value) + '&message=' + encodeURIComponent(form.message.value),
 glogster.comments.onsent
 );
 },

 onsent : function(response) {
 if (response == 1) alert('OK');
 else alert('error');
 }

 }
 */

//trida zprav
/*
 glogster.messages = {
 //nacte zpravy uzivatelu
 load : function(elem, show, offset) {
 glogster.messages.elem = elem;
 new glogster.xmlhttpPost('/@ajax.php', '&offset=' + encodeURIComponent(offset), glogster.messages.show);
 },

 //zobrazi zpravy uzivatelu
 show : function(response) {
 glogster.messages.elem.innerHTML = response;
 }
 }
 */

/* Registration EDU - checkbox activate text field */
$(document).ready(
  function() {
    $('#subaccounts-check').click(
      function() {
        if ($(this).is(':checked')) {
          $('#subaccounts').val('').attr('disabled', false);
        } else {
          $('#subaccounts').attr('disabled', true);
        }
      }
    );
  }
);

