var $A = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

if(typeof(XMLHttpRequest) == "undefined")
{
	var XMLHttpRequest = function()
	{
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
}

var CContactsFields = function() {
	this.formAction 	= '';
	this.formSubmit 	= null;
	this.uploadAction 	= '';
	this.baseUrl 		= '';
	this.formName 		= '';
	this.formFields 	= null;
	this.isBlurDone 	= false;
};

CContactsFields.prototype = {

	install: function()
	{
		var formObj = document.forms[this.formName];
		for ( var i = 0; i < formObj.elements.length; i++ )
		{
			switch (formObj.elements[i].type)
			{
				case 'file':
				formObj.elements[i].onselect 	= this.onActivate.bind(this); // for ff
				formObj.elements[i].onclick 	= this.onActivate.bind(this); // for ff
				formObj.elements[i].onfocus 	= this.onActivate.bind(this); //for ie
				//formObj.elements[i].onchange 	= this.backgroundSubmit.bind(this);
				break;

				case 'text':
				case 'textarea':
				case 'select-one':
				formObj.elements[i].onfocus = this.onActivate.bind(this);
				formObj.elements[i].onblur 	= this.onDeactivate.bind(this);
				break;
			}
		}
	},

	showTip: function()
	{
		document.getElementById('form-hint').style.display = '';
	},

	hideTip: function()
	{
		document.getElementById('form-hint').style.display = 'none';
	},

	onActivate: function ( evt )
	{
		if ( !this.isBlurDone )
		{
			//reset all active fields
			this.onDeactivation();
		}
		evt = evt ? evt : window.event;
		var srcEl = evt.target ? evt.target : evt.srcElement;
		if ( srcEl && srcEl.parentNode.parentNode )
			srcEl.parentNode.parentNode.className = 'contact-form-line-act';
		this.getPage(this.baseUrl+srcEl.name+'/');
		this.showTip();
		this.isBlurDone = false;
	},

	onDeactivate: function ( evt )
	{
		evt = evt ? evt : window.event;
		var srcEl = (evt.target) ? evt.target : evt.srcElement;
		if ( srcEl && srcEl.parentNode.parentNode )
			srcEl.parentNode.parentNode.className = 'contact-form-line';
		this.hideTip();
		this.isBlurDone = true;
	},

	onDeactivation: function ()
	{
		this.hideTip();
		var formObj = document.forms[this.formName];
		for ( var i = 0; i < formObj.elements.length; i++ )
		{
			switch (formObj.elements[i].type)
			{
				case 'file':
				case 'text':
				case 'select-one':
				srcEl = formObj.elements[i];
				if ( srcEl && srcEl.parentNode.parentNode )
					srcEl.parentNode.parentNode.className = 'contact-form-line';
				break;
			}
		}
	},

	getPage: function ( url )
	{
		try{
			var req = new XMLHttpRequest();
		} catch(e) {
			return;
		}

		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				if (req.status == 200)
				{
					try
					{
						var container 	= document.getElementById('form-hint');
						var inner 		= container.getElementsByTagName('div');
						if ( inner && inner[0] )
						{ 
							if ( url=='http://www.dakshasoft.com/request/requestforquote_form_company/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Company Name'
							}
							else if ( url=='http://www.dakshasoft.com/request/requestforquote_form_name/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Name';
							}
							else if ( url=='http://www.dakshasoft.com/request/requestforquote_form_email/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Email';
							}
							else if ( url=='http://www.dakshasoft.com/request/requestforquote_form_message/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Message';
							}
							else if ( url=='http://www.dakshasoft.com/request/requestforquote_form_phone/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Phone';
							}
							else if ( url=='http://www.dakshasoft.com/request/requestforquote_form_country/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Country';
							}
							else if ( url=='http://www.dakshasoft.com/request/requestforquote_form_attach/')
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML='Attach';
							}

							else
							{
								//inner[0].innerHTML 		= req.responseText;
								inner[0].innerHTML ='error';
							}
							inner[0].style.height 	= (container.parentNode.offsetHeight-40)+'px';
						}
					}
					catch (e){}
				}
			}
		}
		req.open('GET', url, true);
		req.setRequestHeader ('x-requested-with', 'XMLHttpRequest');
		req.send('');
	},

	updateTipHeight: function()
	{
		var container 	= document.getElementById('form-hint');
		var inner 		= container.getElementsByTagName('div');
		if ( inner && inner[0] )
			inner[0].style.height 	= (container.parentNode.offsetHeight-40)+'px';
	},

	getFiels: function ( url )
	{
		try{
			var req = new XMLHttpRequest();
		} catch(e) {
			return;
		}

		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				if (req.status == 200)
				{
					try
					{
						var uploaded_files 			= document.getElementById('uploaded_files');
						uploaded_files.innerHTML 	= req.responseText;
						//update tip height
						var container 	= document.getElementById('form-hint');
						var inner 		= container.getElementsByTagName('div');
						if ( inner && inner[0] )
						{
							inner[0].style.height 	= (container.parentNode.offsetHeight-40)+'px';
						}
					}
					catch (e){}
				}
			}
		}
		req.open('GET', url, true);
		req.setRequestHeader ('x-requested-with', 'XMLHttpRequest');
		req.send('');
	},

	deleteFile: function( key )
	{
		this.getFiels(this.uploadAction+'?key='+key+'&delete=1');
		return false;
	},

	frameOnLoad: function(id)
	{
		var i = document.getElementById(id);
        if (i.contentDocument) {
            var d = i.contentDocument;
        } else if (i.contentWindow) {
            var d = i.contentWindow.document;
        } else {
            var d = window.frames[id].document;
        }
        if (d.location.href == "about:blank") {
            return;
        }

		this.createFilesList(d.body.innerHTML);

		//set form action
		var formObj 		= document.forms[this.formName];
		formObj.action 		= this.formAction;
		this.updateFileField();
		formObj.setAttribute('target', '_self');
		formObj.onsubmit 	= this.formSubmit;
		this.updateTipHeight();
	},

	updateFileField: function()
	{
		//
		var fileField = document.getElementById('requestforquote_form_attach');
		var pNode = fileField.parentNode;
		pNode.removeChild(fileField);

		//create new file field
		var newFileField 		= document.createElement('INPUT');
		newFileField.type 		= 'file';
		newFileField.name 		= 'requestforquote_form_attach';
		newFileField.id 		= 'requestforquote_form_attach';
		newFileField.className 	= 'input input-full';
		newFileField.onselect 	= this.onActivate.bind(this); // for ff
		newFileField.onclick 	= this.onActivate.bind(this); // for ff
		newFileField.onfocus 	= this.onActivate.bind(this); //for ie
		newFileField.onchange 	= this.backgroundSubmit.bind(this);
		pNode.appendChild(newFileField);
	},

	createFilesList: function( content )
	{
		var uploaded_files = document.getElementById('uploaded_files');
		uploaded_files.innerHTML = content;
	},

	frame: function() {

        var n = 'f' + Math.floor(Math.random() * 99999);
        var d = document.createElement('DIV');
        d.innerHTML = '';
        document.body.appendChild(d);
        return n;
    },

	backgroundSubmit: function()
	{
		var formObj 	= document.forms[this.formName];
		formObj.action 	= this.uploadAction;
		formObj.setAttribute('target', name);
		var name = this.frame();
		formObj.setAttribute('target', name);

		if ( !this.formSubmit )
			this.formSubmit = formObj.onsubmit;

		formObj.onsubmit= function() {
			return false;
		};
		formObj.submit();
		return false;
	}
}

var contactFields = new CContactsFields();
