var xmlHttp = createXmlHttpRequestObject();
var url = host;

/* ajax */
function createXmlHttpRequestObject() {
  // will store the reference to the XMLHttpRequest object
  var xmlHttp;
  // this should work for all browsers except IE6 and older
  try {
    // try to create XMLHttpRequest object
    xmlHttp = new XMLHttpRequest();
  }
  catch(e) {
    // assume IE6 or older
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // try every prog id until one works
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {
      try {
        // try to create XMLHttpRequest object
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {}
    }
  }
  // return the created object or display an error message
  if (!xmlHttp)
    alert("Error creating the XMLHttpRequest object.");
  else
    return xmlHttp;
}

function handleHttpConn(method, params, callbackmethod){
  if(document.getElementById("loaderContainer"))
    document.getElementById("loaderContainer").style.display = "";
  // only continue if xmlHttp isn't void
  if (xmlHttp){
    // try to connect to the server
    try{
		if(method=='POST'){
			xmlHttp.open("POST", url, true);
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlHttp.setRequestHeader("Content-length", params.length);
			xmlHttp.setRequestHeader("Connection", "close");
			xmlHttp.send(params);
		}
		if(method=='GET'){
			xmlHttp.open("GET", url+'?'+params, true);
			xmlHttp.send(null);
		}
		xmlHttp.onreadystatechange = function(){
			if (xmlHttp.readyState==4) {
				try{
				if((xmlHttp.status==200)||(xmlHttp.status==0)){
					callbackmethod(xmlHttp);
                    if(document.getElementById("loaderContainer"))
					  document.getElementById("loaderContainer").style.display = "none";
				}
				}
				catch(e){
					//alert('fail')
				}
			}
		}
		//setTimeout(handleHttpConn(method, params, callbackmethod), 2500);
    }
    // display the error in case of failure
    catch(e){
      alert("Can't connect to server:\n" + e.toString());
    }
  }
}

function handleHttpResult(req){
	//alert(req.responseText)
	var json = eval('(' +req.responseText+ ')');

	for (var i=0; i<json.data.length; i++){
		//alert(json.data[i])
		var data = json.data[i].split('|');
		var type = data[2];
		var val = data[1];;
		var loc = data[0];

		if(type=='html'){ document.getElementById(loc).innerHTML = val; }
		if(type=='val'){ document.getElementById(loc).value = val; }
		if(type=='link'){ window.location = val; }
        if(type=='focus'){ document.getElementById(loc).focus(); }
        if(type=='close'){ window.opener.window.location.reload(true); window.close(); }
        if(type=='style'){ document.getElementById('dlist').style.display=val; }
        if(type=='alert'){ alert(val); }
	}
}

function randomNum(){
	var rand = parseInt(Math.random()*99999999);
	return rand;
}

function $(string){
	if(document.getElementById(string)){
		return document.getElementById(string);
	}
}

function clearSection(id){
	if(document.getElementById(id)){
		document.getElementById(id).innerHTML = '';
	}
}

function deleteit(func){
	if(confirm("Are you sure want to proceed this?")){
		linkto(func);
	}
}

function getParams(){
	var data = '{';
	var inputtype = new Array("input", "select", "textarea");
	for (var j=0; j<inputtype.length; j++) {
		var paras = document.getElementsByTagName(inputtype[j]);
		if(j!=0 && data!='{' && paras.length!=0) data += ',';
		for (var i=0; i<paras.length; i++ ) {
			var val = paras[i].getAttribute("id");
			//alert(val);
			if(val) {
				if(i!=0 && data!='{') data += ',';
				if(val=='content' || val=='info') {
					var oEditor = FCKeditorAPI.GetInstance(val) ;
					var des = oEditor.GetXHTML();
					data += '"'+val+'":"'+encodeURIComponent(des)+'"';
				}
				else{
					data += '"'+val+'":"'+encodeURIComponent(document.getElementById(val).value)+'"';
				}
			}
		}
	}
	data += '}';
	//alert(data)
	return base64encode(data);
}

   function get(obj) {
      var data = '{';
      for (i=0; i<obj.getElementsByTagName("textarea").length; i++) {
        //if(i!=0 || data!='{') data += ',';
         if (obj.getElementsByTagName("textarea")[i].tagName == "TEXTAREA") {
            data += '"' + obj.getElementsByTagName("textarea")[i].name + '":"' + obj.getElementsByTagName("textarea")[i].value + '",';
         }
      }
      for (i=0; i<obj.getElementsByTagName("select").length; i++) {
         if (obj.getElementsByTagName("select")[i].tagName == "SELECT") {
            var sel = obj.getElementsByTagName("select")[i];
            data += '"' + sel.name + '":"' + sel.options[sel.selectedIndex].value + '",';
         }
      }
      for (i=0; i<obj.getElementsByTagName("input").length; i++) {
            if (obj.getElementsByTagName("input")[i].type == "text" || obj.getElementsByTagName("input")[i].type == "password") {
               data += '"' + obj.getElementsByTagName("input")[i].name + '":"' + obj.getElementsByTagName("input")[i].value + '",';
            }
            if (obj.getElementsByTagName("input")[i].type == "checkbox") {
               if (obj.getElementsByTagName("input")[i].checked) {
                  data += '"' + obj.getElementsByTagName("input")[i].name + '":"' + obj.getElementsByTagName("input")[i].value + '",';
               } //else {
                  //data += '"' + obj.getElementsByTagName("input")[i].name + '":"",';
               //}
            }
            if (obj.getElementsByTagName("input")[i].type == "radio") {
               if (obj.getElementsByTagName("input")[i].checked) {
                  data += '"' + obj.getElementsByTagName("input")[i].name + '":"' + obj.getElementsByTagName("input")[i].value + '",';
               }
         }
      }
      data = data.slice(0,-1);
      data += '}';
      //alert(data)
      //document.getElementById('msg').innerHTML = data;
	  return base64encode(data);
   }

        function encodeNameAndValue(sName, sValue) {
            var sParam = encodeURIComponent(sName);
            sParam += "=";
            sParam += encodeURIComponent(sValue);
            return sParam;
        }
        function inputtext(text){
            if(text.length>0){
                var val = text.split(",");
                var bParams = new Array();
                for(var i=0; i<val.length; i++){
                    var oEditor = FCKeditorAPI.GetInstance(val[i]) ;
        			var des = oEditor.GetXHTML();
                    bParams.push(encodeNameAndValue(val[i], des));
                }
                return bParams.join("&");
            }
            return '';
        }
        function getRequestBody(oForm) {
          //var bParams;
            //array to hold the params
            var aParams = new Array();

            //get your reference to the form
            //var oForm = document.forms[0];

            //iterate over each element in the form
            for (var i=0 ; i < oForm.elements.length; i++) {

                //get reference to the field
                var oField = oForm.elements[i];

                //different behavior based on the type of field
                switch (oField.type) {

                    //buttons - we don't care
                    case "button":
                    case "submit":
                    case "reset":
                             break;

                    //checkboxes/radio buttons - only return the value if the control is checked.
                    case "checkbox":
                    case "radio":
                        if (!oField.checked) {
                            break;
                        } //End: if

                    //text/hidden/password all return the value
                    case "text":
                    case "hidden":
                    case "password":
                        aParams.push(encodeNameAndValue(oField.name, oField.value));
                        break;

                    //everything else
                    default:
                        switch(oField.tagName.toLowerCase()) {
                            case "select":
                                aParams.push(encodeNameAndValue(oField.name, oField.options[oField.selectedIndex].value));
                                break;
                            default:
                                aParams.push(encodeNameAndValue(oField.name, oField.value));
                        }
                }
            }
            return aParams.join("&");
        }

function sendto(mod, obj, aim, textval){
  //alert(obj);
	//var data = get(obj);
    if(obj!=undefined){
        var data = getRequestBody(obj);
    }
    var text = (textval!=undefined) ? inputtext(textval) : '';
	params = 'mod='+mod+'&aim='+aim+'&'+data+'&'+text+'&rand='+randomNum();
	//alert(params)
	handleHttpConn('POST', params, handleHttpResult);
}

function linkto(mod, aim){
	var data = getParams();
	params = 'mod='+mod+'&aim='+aim+'&data='+data+'&rand='+randomNum();
	//alert(params)
	handleHttpConn('POST', params, handleHttpResult);
}

function select_all(form, name, value) {
    formblock= document.getElementById(form);
    forminputs = formblock.getElementsByTagName('input');
    for (i = 0; i < forminputs.length; i++) {
        // regex here to check name attribute
        var regex = new RegExp(name, "i");
        if (regex.test(forminputs[i].getAttribute('name'))) {
            if (value == '1') {
                forminputs[i].checked = true;
            } else {
                forminputs[i].checked = false;
            }
        }
    }
}

function searchto(){
	var price = document.getElementById('searchprice').value;
	var cat = document.getElementById('searchcat').value;
	window.location = "index.php?_m=search&_p="+price+"&_c="+cat;
}

function confirmlinkto(mod, linkid){
	if(confirm("Are you sure want to proceed this?")){
		linkto(mod, linkid);
	}
}

function confirmsendto(mod, obj, aim, textval){
	if(confirm("Are you sure want to proceed this?")){
		sendto(mod, obj, aim, textval);
	}
}

function popup(link, n, w, h){
    window.open(link, '+n+','scrollbars=1,statusbar=1,resizable=1,width='+w+',height='+h+'');
}

function popupon(mod, obj, n, w, h){
	if(obj!=undefined){
        var data = getRequestBody(obj);
    }
    var doc = window.open('index.php?ToDo='+mod+'&'+data, '+n+','scrollbars=1,statusbar=1,resizable=1,width='+w+',height='+h+'');
    if (window.focus) doc.focus();
}

function popuphtml(link, type){
    window.open('index.php?ToDo=html&type='+type+'&id='+encodeURIComponent(link), 'popuphtml','scrollbars=1,statusbar=1,resizable=1,width=650,height=650');
}

function popuplink(link){
    window.open('includes/tcpdf/examples/test.php?&lik='+encodeURIComponent(link), 'popup','scrollbars=1,statusbar=1,resizable=1,width=400,height=510');
}

function chkboxclick(chkbox){
  chkbox.value=0;
  if(chkbox.checked){
    chkbox.value=1;
  }
}

function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'

    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;

    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    };
    return sa ? s : s[0];
}

function toggle(target){
	var obj=document.getElementById(target);
	obj.style.display='inline';
}

function setFile(elementId){
    var win = window.open(filehost+elementId, 'ajaxFileImageManager', 'width=782,height=500');
	return false;
}

// Returns true if all dates selected form a contiguous block (ie no gaps between earliest and latest dates)
function isContiguousDates() {
    var selectedDatesFound = false;
    var contiguousBlockOfDatesHasBeenFound = false;
	var boxSelected = '';

    for (var i=0; i<14; i++) {
        var dealCheckbox = getDealCheckbox(i);
        if (dealCheckbox && dealCheckbox.checked) {
			if(boxSelected!='') boxSelected+=',';
			boxSelected += dealCheckbox.value;
            if(contiguousBlockOfDatesHasBeenFound) {
                // we should not have any more checked boxes once a contiguous block has been identifed
                return false;
            }
            selectedDatesFound = true;
        } else {
            if(selectedDatesFound) {
                // there are some dates selected, and we have hit an unchecked box, therefore we have found a contiguous block
                contiguousBlockOfDatesHasBeenFound = true;
            }
        }
    }
    return boxSelected;
}

function getDealCheckbox(index) {
    return document.getElementById('deal' + index);
}

function showDealSelectionError(mode) {
    var errorMsg = document.getElementById('dealSelectionError');
    errorMsg.style.display = mode;
}

function dateCheckBoxClicked() {
    if (boxSelected=isContiguousDates()) {
		showDealSelectionError('none');
		//document.getElementById('rateresult').innerHTML = boxSelected;
		sendto('calroomrate', document.form1, 'rateresult');
        return true;
    }
    showDealSelectionError('block');
    return false;
}

function calRoomPrice(tim){
	var rid = document.getElementById('rid').value;
	var mid = document.getElementById('mid').value;
	var hid = document.getElementById('hid').value;
	var room = document.getElementById('room').value;
	var bed = document.getElementById('bed').value;
	//var url = window.location.protocol+"//"+window.location.hostname+"/hotspots/index.php";
	params = 'mod=hotel&task=calrate&hid='+hid+'&rid='+rid+'&mid='+mid+'&time='+tim+'&room='+room+'&bed='+bed+'&rand='+randomNum();
	handleHttpConn('GET', url, params, displayRateResult, 'rateresult');
}