//==============================         Basic Vars           ============================== {

cur_type=0;
show_gradually_timer=[];
block_height=[];
block_switch_timer=[];
calc_table=[];
calc_table['rooms']=[];
calc_table['total']=[];

//    /Basic Vars    == }

//==============================         Basic Functions      ============================== {

function $(id) { return document.getElementById(id); }

uid = (
	function(){
		var id=0; 
		return function(){
			return id++ ;
		};
	} 
)();

function clear_timeout(obj) {
	if (obj) for (var i=0;i<obj.length;i++) clearTimeout(obj[i]);
}

function getWinSize() {
	var x,y;
	if (self.innerHeight) {
		x = self.innerWidth;
		y = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		x = document.documentElement.clientWidth;
		y = document.documentElement.clientHeight;
	} else if (document.body) {
		x = document.body.clientWidth;
		y = document.body.clientHeight;
	}
	return [x,y];
}

function getWinScrolls() {
	var x,y;
	if (self.pageYOffset) {
		x = self.pageXOffset;
		y = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	} else if (document.body) {
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	return [x,y];
}

function show_gradually(el, func, func_timeout) {
	if (!func_timeout) var func_timeout=0;
	if (!func) var func='';
	if (typeof(el)=='string') el=$(el);
	if (!el.id) el.id="tmp"+uid();
	var id=el.id;
	clear_timeout(show_gradually_timer[id]);
	show_gradually_timer[id]=[];
	var n=1;
	var opacity=parseInt(el.style.opacity);
	if (opacity==1 && el.style.visibility=='visible') return;
	if (opacity>0.1) var start_op=(opacity+0.1)*10;
	else {
		el.style.opacity=0.2;
		var start_op=3;
	}
	el.style.visibility='visible';
	for (var i=start_op;i<=10;i++) {
		show_gradually_timer[id].push(setTimeout("$('"+id+"').style.opacity="+(i/10), n*15));
		n++;
	}
	if (func=="hide") func="hide_gradually('"+id+"');";
	if (func) show_gradually_timer[id].push(setTimeout(func, n*15+func_timeout));
}

function hide_gradually(el, func) {
	if (!func) var func='';
	if (typeof(el)=='string') el=$(el);
	if (!el.id) el.id="tmp"+uid();
	var id=el.id;
	if (el.style.visibility=='hidden') return;
	clear_timeout(show_gradually_timer[id]);
	show_gradually_timer[id]=[];
	var n=1;
	var opacity=parseInt(el.style.opacity);
	if (opacity<1) var start_op=(opacity-0.1)*10;
	else {
		el.style.opacity=0.9;
		var start_op=8;
	}
	for (var i=start_op;i>0;i--) {
		show_gradually_timer[id].push(setTimeout("$('"+id+"').style.opacity="+(i/10), n*15));
		n++;
	}
	show_gradually_timer[id].push(setTimeout("$('"+id+"').style.visibility='hidden';"+func, n*15));
}

//    /Basic Functions    == }

//==============================         AJAX Functions       ============================== {

function _Request(method, url, frontend, data, sync, dontSend, if_error) {
	var async = (!sync) ? true : false;
    var rq;
    try {
		rq = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			rq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				rq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				rq = false;
			}
		}
	}
	if (!rq) {
		alert("Error! Can't create XMLHttpRequest object. If you are using an old version of browser, please update it. Otherwise, the problem may occur if ActiveX is turned off.");
		if (if_error) if_error();
	}

	rq.open(method, url, async);
	if (method=='post') rq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	rq.onreadystatechange = function() {
		if (rq.readyState == 4) {
			if (rq.status == 200) {
				if (rq.responseText.indexOf("<!--error-->")!=-1) {
					var e=rq.responseText.substring(12, rq.responseText.indexOf("<!--/error-->"));
					alert("Error.\n"+e);
				}
				frontend();
			} else if (rq.status == 404) {
				alert("Error 404. File not found.");
				if (if_error) if_error();
			} else {
				alert("Error " + rq.status + ".");
				if (if_error) if_error();
			}
		}
	}
	var cont = (!data) ? null : (data instanceof Object) ? urlEncodeData(data) : data;
	
	if (!dontSend) rq.send(cont);

    return rq;
}

function mySubmit(form, frontend, add) {
	var data=[];
	for (var i=0;i<form.elements.length;i++) {
		if (form.elements[i].name.substr(0,4)=="skip") continue;
		if (form.elements[i].nodeName!="SELECT") data[form.elements[i].name]=form.elements[i].value;
		else data[form.elements[i].name]=form.elements[i].options[form.elements[i].selectedIndex].value;
	}
	if (add) {
		for(var i=0;i<add.length;i++) {
			data[add[i][0]]=add[i][1];
		}
	}
	var rq=_Request("post", form.action, frontend, data);
	return rq;
}

function urlEncodeData(data) {
    var query = [];
	var encodeArray = function(obj, keys, name) {
		for (var key in obj) {
			if (obj[key] instanceof Object) {
				var n_keys = keys.slice(0);
				n_keys.push(key);
				encodeArray(obj[key], n_keys, name);
			} else {
				var indexes="";
				for (var i=0;i<keys.length;i++) {
					indexes+="["+encodeURIComponent(keys[i])+"]";
				}
				indexes+="["+encodeURIComponent(key)+"]";
				query.push(name+indexes+"="+encodeURIComponent(obj[key]));
			}
		}
	}
    if (data instanceof Object) {
        for (var k in data) { 
			if (data[k] instanceof Object) {
				encodeArray(data[k], [], k);
			} else query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
        }
		return query.join('&');
    } else {
        return encodeURIComponent(data);
    }
}

//    /AJAX Functions    == }

//==============================         Main Functions       ============================== {

function add_room(f) {
	if (cur_type==2) var subtype="&nbsp;";
	else var subtype=f.roomtype.value;
	var len=Math.round(parseInt(f.r_length.value*100))/100;
	var bre=Math.round(parseInt(f.r_breadth.value*100))/100;
	if (!len || !bre) {
		alert("Error.\nYou haven't entered the size of the room.");
		return false;
	}
	if (isNaN(len) || isNaN(bre)) {
		alert("Error.\nPlease make sure you have entered the numbers correctly.");
		return false;
	}
	switch(cur_type) {
		case 1:
		var type="Meal Room";
		break;
		case 2:
		var type="Bed Room";
		break;
		case 3:
		var type="Other Area";
		break;
		case 4:
		var type="Other Room";
		break;
		case 5:
		var type="Living Room";
		break;
	}
	var area=Math.round(parseInt(len*bre*100))/100;
	var kwatts=Math.round(area*135/1000*100)/100;
	var tr=document.createElement("tr");
	var td1=document.createElement("td");
	var td2=document.createElement("td");
	var td3=document.createElement("td");
	var td4=document.createElement("td");
	var td5=document.createElement("td");
	td1.className='calc1';
	td2.className='calc2';
	td3.className='calc3';
	td4.className='calc4';
	td5.className='calc5';
	td1.innerHTML='<b>'+type+'</b><br />'+subtype;
	td2.innerHTML=len+'x'+bre+' m<i>2</i>';
	td3.innerHTML='<span>'+area+'</span> m<i>2</i>';
	td4.innerHTML='<span>'+kwatts+'</span> KiloWatts<i>2</i>';
	td5.innerHTML=
		'<a href="javascript:void(0)" onclick="switch_row(this)" class="calc_row_on"></a>'+
		'<a href="javascript:void(0)" onclick="delete_row(this)" class="calc_row_rm"></a>';
	tr.appendChild(td1);
	tr.appendChild(td2);
	tr.appendChild(td3);
	tr.appendChild(td4);
	tr.appendChild(td5);
	//tr.innerHTML='<td class="calc1"><b>'+type+'</b><br />'+subtype+'</td>'+
	//	'<td class="calc2">'+len+'x'+bre+' m<i>2</i></td>'+
	//	'<td class="calc3"><span>'+area+'</span> m<i>2</i></td>'+
	//	'<td class="calc4"><span>'+kwatts+'</span> KiloWatts<i>2</i></td>'+
	//	'<td class="calc5">'+
	//		'<a href="javascript:void(0)" onclick="switch_row(this)" class="calc_row_on"></a>'+
	//		'<a href="javascript:void(0)" onclick="delete_row(this)" class="calc_row_rm"></a>'+
	//	'</td>';
	$('calc_tbody').insertBefore(tr, $('calc_total'));
	total();
	hide_gradually("calc_popup", "$('calc_popup_arrow_tl').style.visibility=$('calc_popup_arrow_bl').style.visibility=$('calc_popup_arrow_br').style.visibility='hidden';$('calc_select').style.visibility='hidden';");
	cur_type=0;
	return false;
}

function delete_row(el) {
	el.parentNode.parentNode.parentNode.removeChild(el.parentNode.parentNode);
	total();
}

function email() {
	var div=$('calc_email');
	var status=$('calc_email_status');
	var wSize=getWinSize();
	var wScroll=getWinScrolls();
	wWidth=wSize[0]; wHeight=wSize[1]; scrollTop=wScroll[1]; scrollLeft=wScroll[0];
	div.style.left=(wWidth/2)-(div.clientWidth/2)+scrollLeft+'px';
	div.style.top=(wHeight/2)-(div.clientHeight/2)+scrollTop+'px';
	status.innerHTML="";
	show_gradually(div);
	$('calc_email_name').focus();
}

function email_close() {
	hide_gradually('calc_email');
}

function email_submit(form) {
	var status=$('calc_email_status');
	status.innerHTML='Sending...';
	var add=["table", calc_table];
	var rq=mySubmit(form, function() {
		if (rq.responseText=="1") status.innerHTML='Sent. Thank you.';
		else {
			alert("Sorry, wasn't able to send your message for unknown reason.\nPlease try later or contact us in other way.");
			email_close();
		}
	}, [add]);
	return false;
}

function show_popup(type) {	
	var type_vis="$('calc_popup_type_hider').style.visibility='hidden';$('calc_select').style.visibility='visible';"
	
	switch(type) {
		case 1:
			var ar='tl';
			var l=70;
			var t=265;
			var ops=["Kitchen", "Dining Room", "Meals Area", "Other"];
		break;
		case 2:
			var ar='br';
			var l=55;
			var t='0';
			var ops=["Kitchen", "Dining Room", "Meals Area", "Other"];
			type_vis="$('calc_popup_type_hider').style.visibility='visible';$('calc_select').style.visibility='hidden';"
		break;
		case 3:
			var ar='br';
			var l=46;
			var t=81;
			var ops=["Passage", "Hallway", "Stair Case", "Landing", "Entry", "Other"];
		break;
		case 4:
			var ar='br';
			var l=52;
			var t=115;
			var ops=["Study", "Den", "Studio", "Other"];
		break;
		case 5:
			var ar='bl';
			var l=165;
			var t=90;
			var ops=["Living Room", "Lounge", "Family Room", "Entertainment Room"];
		break;
	}
	var sel=$('calc_select');
	sel.options.length=0;
	for(var i=0;i<ops.length;i++) {
		sel.options[i]=new Option(ops[i], ops[i], false);
	}
	var action="$('calc_popup_arrow_tl').style.visibility="+
		"$('calc_popup_arrow_bl').style.visibility="+
		"$('calc_popup_arrow_br').style.visibility='hidden';"+
		"$('calc_popup_arrow_"+ar+"').style.visibility='visible';"+
		"$('calc_popup').style.left='"+l+"px';"+
		"$('calc_popup').style.top='"+t+"px';"+
		"$('calc_length').value='';"+
		"$('calc_breadth').value='';"+
		type_vis;
	if (cur_type==type) {
		hide_gradually("calc_popup", "$('calc_popup_arrow_tl').style.visibility=$('calc_popup_arrow_bl').style.visibility=$('calc_popup_arrow_br').style.visibility='hidden';$('calc_select').style.visibility='hidden';");
		cur_type=0;
	} else if (cur_type==0) {
		eval(action);
		show_gradually('calc_popup', "$('calc_length').focus()");
		cur_type=type;
	} else {
		hide_gradually("calc_popup", action+"show_gradually('calc_popup', \"$('calc_length').focus()\");");
		cur_type=type;
	}
}

function switch_row(el) {
	if (el.className=='calc_row_on') {
		el.parentNode.parentNode.className='off';
		el.className='calc_row_off';
	} else {
		el.parentNode.parentNode.className='on';
		el.className='calc_row_on';
	}
	total();
}

function total() {
	var tb=$('calc_tbody');
	var area=kwatts=0;
	calc_table['rooms']=[];
	var tb1=tb.cloneNode(true);
	for (var i=0;i<tb.childNodes.length;i++) {
		if (tb.childNodes[i].nodeName!="TR") continue;
		if (tb.childNodes[i].className=="off") continue;
		if (tb.childNodes[i].className=="total") break;
		area+=parseFloat(tb.childNodes[i].childNodes[2].firstChild.innerHTML);
		kwatts+=parseFloat(tb.childNodes[i].childNodes[3].firstChild.innerHTML);
		
		var room=[];
		room[0]=tb1.childNodes[i].childNodes[0].innerHTML;
		
		tb1.childNodes[i].childNodes[1].removeChild(tb1.childNodes[i].childNodes[1].lastChild);
		room[1]=tb1.childNodes[i].childNodes[1].innerHTML;
		
		tb1.childNodes[i].childNodes[2].removeChild(tb1.childNodes[i].childNodes[2].lastChild);
		room[2]=tb1.childNodes[i].childNodes[2].innerHTML;
		
		tb1.childNodes[i].childNodes[3].removeChild(tb1.childNodes[i].childNodes[3].lastChild);
		room[3]=tb1.childNodes[i].childNodes[3].innerHTML;
		
		calc_table['rooms'].push(room);
	}
		
	$('total_area').innerHTML=Math.round(area*100)/100;
	$('total_watts').innerHTML=Math.round(kwatts*100)/100;
	calc_table['total']=[area, kwatts];
	if (area>0) $('calc_total').style.visibility=$('calc_footer').style.visibility="visible";
	else $('calc_total').style.visibility=$('calc_footer').style.visibility="hidden";
}

//    /Main Functions    == }


