var ufoLoader = function () {
	Highlighter.init();
	UniFormJacker.init();
}
addLoadEvent(ufoLoader);

// Highlighter script By Ilija Studen - http://ilija.biz/
// Modified from Woofoo forms

/*--------------------------------------------------------------------------*/

//http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}

//http://www.bigbold.com/snippets/posts/show/2630
function addClassName(objElement, strClass, blnMayAlreadyExist){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      if ( blnMayAlreadyExist ){
         var strClassUpper = strClass.toUpperCase();
         for ( var i = 0; i < arrList.length; i++ ){
            if ( arrList[i].toUpperCase() == strClassUpper ){
               arrList.splice(i, 1);
               i--;
             }
           }
      }
      arrList[arrList.length] = strClass;
      objElement.className = arrList.join(' ');
   }
   else{  
      objElement.className = strClass;
   }
}

//http://www.bigbold.com/snippets/posts/show/2630
function removeClassName(objElement, strClass){
   if ( objElement.className ){
      var arrList = objElement.className.split(' ');
      var strClassUpper = strClass.toUpperCase();
      for ( var i = 0; i < arrList.length; i++ ){
         if ( arrList[i].toUpperCase() == strClassUpper ){
            arrList.splice(i, 1);
            i--;
         }
      }
      objElement.className = arrList.join(' ');
   }
}

// Highlighter
// Highlights the parent's parent of the focused form control (input, textarea, checkbox, select, radio)

var Highlighter = window.Highlighter || {};

Highlighter.settings = {
  'row_class'   : 'highlight_row',
  'field_class' : 'highlighter',
  'focus_class' : 'focus'
}

Highlighter.init = function() {
  var fields = getElementsByClassName(document, '*', Highlighter.settings.field_class);
	for (i = 0; i < fields.length; i++) {
		if (fields[i].type == 'radio' || fields[i].type == 'checkbox' || fields[i].type == 'file') {
			fields[i].onclick = function() {
			  Highlighter.unhighlight();
			  Highlighter.highlight(this);
			};
			fields[i].onfocus = function() {
			  Highlighter.unhighlight();
			  Highlighter.highlight(this);
		  };
		} else {
			fields[i].onfocus = function() {
			  Highlighter.unhighlight();
			  Highlighter.highlight(this);
		  	};
			fields[i].onblur = function() {
			  removeClassName(this.parentNode.parentNode, "focused");
			};
		}
	} 
};

Highlighter.highlight = function(node) {
	if (node.parentNode.parentNode.nodeName == 'DIV') pnode = node.parentNode.parentNode;
	else pnode = node.parentNode.parentNode.parentNode;
	addClassName(pnode, "focused", true);
}

Highlighter.unhighlight = function() {
  var fields = getElementsByClassName(document, '*', Highlighter.settings.field_class);
	for (i = 0; i < fields.length; i++) {
  	  if (fields[i].parentNode.parentNode.nodeName == 'DIV') pnode = fields[i].parentNode.parentNode;
	  else pnode = fields[i].parentNode.parentNode.parentNode;
	  removeClassName(pnode, "focused");
	} 
};

//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();
    }
  }
}

// getHttpObject
function getHttpObject() {
	var xhr = false;
	if (window.XMLHttpRequest) xhr = new XMLHttpRequest();
	else if (window.ActiveXObject) {
		try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch(e) {
			try { xhr = new ActiveXObject("Microsoft.XMLHTTP");	}
			catch(e) { xhr = false;	}
		}
	}
	return xhr;
}

// HIJAX
var UniFormJacker = {
	request : getHttpObject(),
	uniform : '',
	ufowrap : '',
	init : function() {
		if (!document.getElementById) return false;
		if (!document.getElementById("uniform_wrapper")) { alert('Element with id="uniform_wrapper" not found!'); return false; }
		if (!document.getElementById("uniform")) { return false; }

		this.uniform = document.getElementById("uniform");
		// if multipart/form-data HttpObject can't handle it
		if (this.uniform.getAttribute("enctype") == "multipart/form-data") return false;
		this.ufowrap = document.getElementById("uniform_wrapper");
		this.wheretosumit = document.getElementById("wheretosumit").value;
		this.uniform.onsubmit = function() {
			var data = '';
			/// ovde je negde greska
			var input = UniFormJacker.uniform.getElementsByTagName("input");
			for (var i=0; i < input.length; i++) {
				var type = input[i].getAttribute("type");
				switch(type) {
					case 'checkbox' :
						if (input[i].checked) data += input[i].name + '=true&';
						break;
					case 'radio' :
						if (input[i].checked) data += input[i].name + '=' + input[i].value + '&';
						break;
					default :
						if (input[i].value) data += input[i].name + '=' + encodeURIComponent(input[i].value) + '&';
						break;
				}
			}
			var textarea = UniFormJacker.uniform.getElementsByTagName("textarea");
			for (var i=0; i < textarea.length; i++) {
				if (textarea[i].value) data += textarea[i].name + '=' + encodeURIComponent(textarea[i].value) + '&';
			}
			var select = UniFormJacker.uniform.getElementsByTagName("select");
			for (var i=0; i < select.length; i++) {
				if (select[i].value) data += select[i].name + '=' + encodeURIComponent(select[i].value) + '&';
			}
			/////
			
			return !UniFormJacker.sendData(data);		
		}
	},
	sendData : function(data) {
		if (this.request) {
			this.request.onreadystatechange = function() { UniFormJacker.parseResponse(UniFormJacker.request); }
			this.request.open("POST", this.wheretosumit, true);
			this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			this.request.send(data);
			return true;
		}
		else return false;
	},
	parseResponse : function(request) {
		if (request.readyState == 4) {
			if (request.status == 200 || request.status == 304) {
				var data = request.responseText;
				this.ufowrap.innerHTML = request.responseText;
				ufoLoader();
			}
		}
		else this.ufowrap.innerHTML = '<p>Verifying data, be patient...<\/p>';
	}
}