/* 
Script to process "Rate site" form
Created by: CSP team csp@comodo.od.ua
*/

// Process of email onchange event
var req = null;
var av_def = "/usertrust/images/face.gif";

// Send XML HTTP request
function sendRequest(url) {
	req = initXMLHTTPRequest();
	if (req){
		req.onreadystatechange = onReadyState;
		req.open("GET", url, true);
		req.send(null);
		}
	}

// Initiation XML HTTP request
function initXMLHTTPRequest() {
	var xRequest = null;
	if (window.XMLHttpRequest){
		xRequest = new XMLHttpRequest();
		}
	else if (window.ActiveXObject){
		xRequest = new ActiveXObject("Microsoft.XMLHTTP");
		}
	return xRequest;
	}

// Process of XML HTTP response
function onReadyState() {
	var ready = req.readyState;
	if (ready == 4) {
		var f_name = document.getElementById("name");
		var f_avatar = document.getElementById("avatar");
		if ((req.status == 200) && req.responseXML) {
			// success XML response
			var response = req.responseXML;
			if (response.getElementsByTagName('name')[0]){
				// get name XML object
				var name_obj = response.getElementsByTagName('name')[0];
				// change name field value
				if (name_obj.firstChild){
					f_name.value = name_obj.firstChild.data;
					}
				else { f_name.value = ''; }
				}
			else { f_name.value = ''; }
			f_name.disabled = false;
			if (response.getElementsByTagName('avatar')[0]){
				// get avatar XML object
				var avatar_obj = response.getElementsByTagName('avatar')[0];
				// change avatar image src
				if (avatar_obj.firstChild){
					f_avatar.src = avatar_obj.firstChild.data;
					}
				else { f_avatar.src = av_def; }
				}
			else { f_avatar.src = av_def; }
			}
		else {
			// by default
			f_name.disabled = false;
			f_name.value = '';
			f_avatar.src = av_def;
			}
		}
	}

// Process of form fields
function checkfield(which) {
	var pass = true;
	var err = 0;
	var vstr = "";
	var i = 0;
	var lorig = 0;
	var aVar = new Array();
	for (i=0;i<which.length;i++) {
		var tempobj=which.elements[i];
		if (tempobj.id.substring(0,3)=="req") {
			// check required fields: email and comment
			if (((tempobj.type=="text"||tempobj.type=="textarea") && tempobj.value=='') || (tempobj.type.toString().charAt(0)=="s" && tempobj.selectedIndex==0)) {
				pass=false;
				break;
				}
			}
		if (tempobj.name=="email") {
			// check email field
			aVar = which.email.value.split('@');
			if( aVar.length != 2 ) { err = 1; } 
			if( err == 0) {
				// check name
				if ( ! /^\w+([\.\-\+]\w+)*[\-\+\w]$/.test(aVar[0])) { err = 1;}
				if( /^[a-z0-9\_]$/i.test(aVar[0])) { err = 0; }
				// check domain
				if ( err == 0 && ! /^(\[?)[a-z0-9\-\.]+\.([a-z]{2,12}|[0-9]{1,3})(\]?)$/i.test(aVar[1])) { err = 1;}
				}
			if (err == 1) {
				lorig = which.email.value.length;
				vstr = which.email.value.substring(0,50);
				if ( lorig > vstr.length) {
					vstr = vstr+'...';
					}
				vstr = vstr.replace(/</g,'&lt;').replace(/>/g,'&gt;');
				err = "Invalid e-mail address: "+vstr+"<br>Please re-enter.";
				rewrite_string(err);
				return (false);
				}
			}
		if ((tempobj.name=="rating") && (which.rating.value=='')) {
			// check rating field
			err = "Please select stars of rating";
			rewrite_string(err);
			return (false);
			}
		}
	if (!pass) {
		// empty required fields
		fieldName=tempobj.name.toUpperCase();
		err = "The "+fieldName+" field is a required field.";
		rewrite_string(err);
		return false;
		}
	else {
		return true;
		}
	}

// Clean lines function created by: Ilya Gerasimenko
// http://www.gerasimenko.com/
function cleanUpLine(str,limit) {
	//replace punctuation with spaces
	var clean_pass1 = str.replace(/[\n\r\f\t\v\{\}\|\&><\`]/g, ' ');
	// compact multiple whitespaces
	var clean_pass2 = clean_pass1.replace(/\s{2,}/g, ' '); 
	// trim whitespaces from beginning or end of string
	var clean_pass3 = clean_pass2.replace(/^\s+|\s+$/g, '');
	// trim string
	var clean_pass4 = clean_pass3.substring(0,limit);
	return clean_pass4;
	}

// Length validation function created by: Ilya Gerasimenko
// http://www.gerasimenko.com/
function cleanUpList(fld) {
	// max number of characters + 1
	var charLimit = 251;
	var lineLimit = 1;
	var cleanList = [];
	// all non-space characters
	var re1 = /\S/;
	// all line breaks
	var re2 = /[\n\r]/;
	var tempList = fld.value.split('\n');
	var rest = charLimit;
	// Set when it's used insert text
	var insert = 1; 
	for (var i=0; i<tempList.length;i++) {
		if (re1.test(tempList[i])) {
			// store filtered lines in an array
			var cleanS = cleanUpLine(tempList[i],charLimit);
			rest = charLimit - cleanS.length;
			if(rest > 0) {
				lineLimit++;
				charLimit = rest;
				cleanList.push(cleanS);
				// Take into account line breaks
				charLimit = charLimit-1;
				// Unset when user write text
				insert = 0;
				}
			else {
				if(charLimit > 0) {
					cleanList.push(cleanS);
					// Take into account line breaks
					if(charLimit > 1) charLimit = charLimit-1;
					}
				if(insert == 1) {
					// User insert some big text 
					charLimit = 0;
					i = tempList.length;
					}
				lastElement = cleanList.length -1;
				lastSymbol = cleanList[lastElement].length -1;
				cleanList[lastElement] = cleanList[lastElement].substring(0,lastSymbol);
				fld.value = cleanList.join('\n');
				}
			}
		}
	if (cleanList.length > lineLimit) {
		// remove last line
		cleanList.pop();
		// restore from array
		fld.value = cleanList.join('\n');
		}
	// onblur - restore from array
	fld.onblur = function () {this.value = cleanList.join('\n');}
	}

// Write error string
function rewrite_string(err) {
    var top = "We cannot process your request.<br>";
    document.getElementById("err_msg").innerHTML = top+err;
    }

// Multiple onload function created by: Simon Willison
// http://simonwillison.net/2004/May/26/addLoadEvent/
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

// Set onkeyup event
addLoadEvent(
	function () {
		document.subreview.comment.onkeyup = function () {
			cleanUpList(document.subreview.comment);
 			}
		}
	);

// Set onchange event
addLoadEvent(
	function () {
		document.subreview.email.onchange =	function () {
			var f_email = document.getElementById('req_email');
			sendRequest('/usertrust/fb_user_info?email='+f_email.value);
			}
		}
	);

