// Intergrid KMS Controller
//
// Receives inputs and initiates a response by making calls on model objects
//

// ------ On document ready -------


$().ready(function() {

  //if (document.body.clientHeight>document.body.scrollHeight) inith = document.body.clientHeight; else inith = document.body.scrollHeight;
$('#page').height('auto');
$('#sidemenu').height('auto');

if (parseInt(navigator.appVersion)>3) {
 if (navigator.appName=="Netscape") {
  winW = window.innerWidth;
  winH = window.innerHeight;
 }
 if (navigator.appName.indexOf("Microsoft")!=-1) {
  winW = document.body.offsetWidth;
  winH = document.body.offsetHeight;
 }
}

  refreshUI();

});

// --------- ajax load ----------

function ajaxLoadinnerHTML(file,idElement)
{
var oRequest;
try {
        oRequest=new XMLHttpRequest();
     } catch (e)   {
     try {
          oRequest=new ActiveXObject("Msxml2.XMLHTTP");
          } catch (e) {
          try {
              oRequest=new ActiveXObject("Microsoft.XMLHTTP");
               } catch (e) {
                   alert("Error. Your browser does not support AJAX. Please upgrade.");
                  return false;
               }
         }
      }
   oRequest.onreadystatechange=function() {

	// ON COMPLETE
     if(oRequest.readyState==4)
      {
//	 alert('carrega '+idElement);     
         if (idElement=="fitxa") { showFitxa(); } else { $("div#"+idElement).show(); refreshUI(); }
	// document.getElementById(idElement).innerHTML = oRequest.responseText;
       setAndExecute (idElement, oRequest.responseText);
       // alert (oRequest.responseText);
      }
    }

  oRequest.open("GET",file,true);
  oRequest.send(null);

}

function setAndExecute(divId, innerHTML)  
{  
   // execute all <scriptz
   var div = document.getElementById(divId);  
    div.innerHTML = innerHTML;  
    var x = div.getElementsByTagName("script");   
    for(var i=0;i<x.length;i++)  
    {  
        eval(x[i].text);  
    } 


  eval($('input').attr('onload'));

  // execute all onload= elements
   var element = document.getElementByTagName("input");
    var x = element.getAttribute('onload');
    for(var i=0;i<x.length;i++)
    {
	alert(x[i].text);
        eval(x[i].text);
    }
}  

// ----------------- navigation ----------------

function nav(action) {

  if (action==-1) {

           $.ajax({
                url: "/kms/lib/navigation.php",
                type: "POST",
                data: 'i=-1',
                cache: false,
                success: function(html){
        //                      alert(html); 
                },
               error: function (xhr, textStatus, thrownError){
//                    alert('error '+xhr.status+' '+textStatus+' '+responseText);
                }
            });
	}


}


// ---------------- user interface --------------

function refreshUI(x) {

$('#page').height('auto');
$('#sidemenu').height('auto');

}

function getconfvar(variable) {
           $.ajax({
                url: "lib/getconfvar.php",
                type: "POST",
		data: "var="+variable,
                cache: false,
                success: function(msg){
			  //$('#page').width(msg);
			return msg;
                },
            });
}

// -------------- collapsible menu --------------

function switchMenu(cli_template,cli_style) 
{
        if ($("#leftmenu:visible").length>0) {
		hideMenu(cli_template,cli_style);
	} else {
		showMenu(cli_template,cli_style);
	}

}

function hideMenu(cli_template,cli_style)
{
        x=180; // document.getElementById('contents').style.left;
	var t = 0;
	m_size = x;
	for (i = x;i > 7;--i)
	{
		t += 5;
		i -= Math.round(i / 5);
		setTimeout("resizeContents(\"" + i + "\")", x - i < t ? x - i : t);
	}
	$("#leftmenu").hide();
        document.getElementById('bar_button').src="/kms/tpl/"+cli_template+"/styles/"+cli_style+"/img/interface/bar_open.gif";
	document.getElementById('contents').style.width = $('#kmsbody').width()-10+"px";
	$('.dashboard_window').width($('div#contents').width()-20);
        refreshUI();
}
function showMenu(cli_template,cli_style)
{
	var x = 180-6; //$("#contents").width();
	var t = 0;
	for (i = 7;i < x;++i)
	{
		t += 5;
		i += Math.round(i / 5);
		setTimeout("resizeContents(\"" + i + "\")", i < t ? i : t);
	}
	setTimeout("$('#leftmenu').show();refreshUI();",100);
	document.getElementById('bar_button').src="/kms/tpl/"+cli_template+"/styles/"+cli_style+"/img/interface/bar_close.gif";	
}


function resizeContents(s)
{
	document.getElementById('contents').style.left = s+"px";
//	document.getElementById('contents').style.width = "100%";
}


// ----------- POPUPS -----------

function popupConfirm (msg,f) {
	openPopup("confirm",msg,210,120,f);
}

function openPopup(t,contents,w,h,f) {

     if (!$("div#mask").length) createMask(35);
     $("#mask").css('z-index','100');
     $('#mask').css('display','block');

     if (!$("div#myPopup").length) {

        var newpopup = document.createElement('div');
        var divIdName = 'myPopup';

        newpopup.setAttribute('id',divIdName);
        newpopup.style.width = w+"px";
        newpopup.style.height = h+"px";
        newpopup.style.left = "50%";
        newpopup.style.top = "15%";
        newpopup.style.position = "absolute";
        newpopup.style.background = "#00C";
        newpopup.style.border = "2px solid #555";
        newpopup.style.marginLeft= -w/2;
        newpopup.style.padding= "15px";
        newpopup.style.background="#ffffff";
//      newpopup.innerHTML = 'Test';
        document.body.appendChild(newpopup);

        $("#myPopup").css('display','block');
	$("#myPopup").css('z-index','101');
	$("#myPopup").css('left','50%');
	$("#myPopup").css('marginLeft',-w/2);

	if (t=="url") { $("div#myPopup").load(contents); }
	 else if (t=="confirm") { 
		$("#myPopup").load('/kms/tpl/default/confirm.php'); 
		setTimeout(function() { 
			butyes = document.getElementById ("confirm_yes");
			butyes.onclick = function() { f();closePopup(); }}, 400);
	  } else if (t=="info") {
		$("#myPopup").html(contents);
		setTimeout("$('#myPopup').fadeOut('slow');",1000);
		if (contents.substr(0,2)=="ko") {alert(contents); timeout=5000;} else {timeout=1500;}
		setTimeout("closePopup()",timeout);
	}
     }
}

function closePopup() {
        $("div#mask").remove();
        $("div#myPopup").remove();
}


// ----------- CALLS -----------


// Open UI
function loadUI (id, type, container, resident) {

}

// Open URL
function loadURL (url,container) {
	//    if (opc=="opc2") b.style.background-color = '#ffffff';
    if (container == undefined) container = "main_tab";

    $(".dashboard_window").hide();
    $("#main_tab").hide();

    if (url.substr(0,4)=="http") {
		$("#"+container).height('100%');
		$("#"+container).html("<iframe id='externalurl_iframe' width='100%' height='100%' frameborder='0'></iframe>");
		$("#externalurl_iframe").attr("src",url);
	} else {
	    $("#"+container).load(url);
	}

    $("#"+container).show();
    refreshUI();


}

function loadHTML (container, content, b,opc) {
    // if (opc=="opc2") b.style.background-color = '#ffffff';
    container = "main_tab";
    $("div#"+container).html(content);
    $("div#"+container).show();
    refreshUI();
    //b.style.background-color = "#ffffff";
}

function loadFolder(mod,dr_folder,container) {
    container = "main_tab";
    $("div#"+container).load('?mod='+mod+'&dr_folder='+dr_folder);
     refreshUI();
}

// posar extraparams i fora
function loadObject(action,id,mod,dr_folder,container,sortby,sortdir,page,view) {
    if (container == undefined) container="main_tab";
    if ((page == undefined)||(page=="")) page=1;
    if (view == undefined) view="default";

    //insert
    if (action=='i') url = '?_=i&mod='+mod+'&dr_folder='+dr_folder+'&view='+view;
    //edit
    else if (action=='e') url = '?_=e&mod='+mod+'&dr_folder='+dr_folder+'&id='+id+'&view='+view;
    //browse
    else if (action=='b') {
	url = '?_='+action+'&id='+id+'&mod='+mod+'&dr_folder='+dr_folder+'&sortby='+sortby+'&sortdir='+sortdir+'&page='+page+'&view='+view;
   //clear search results
   } else if (action=='c') {
	$('#queryfield').val('');
        $('#query').val(' ');
	url = '?_action=clear&mod='+mod+'&dr_folder='+dr_folder+"&queryfield=&query=&view="+view;
  }
//alert(url);
//    $("div#"+container).load(url);
    $('#dashboard').hide();
//    $("div#"+container).hide();
//alert(url);  
      ajaxLoadinnerHTML(url,container);
  
  // $("div#"+container).show();
//    refreshUI();
//    setTimeout("refreshUI(true)",500);
}

// --- search ----

function search(mod, dr_folder, queryfield, query, view) {
   if (view == undefined) view="default";
   url = '?_=b&mod='+mod+'&dr_folder='+dr_folder+'&queryfield='+queryfield+'&query='+query+'&view='+view;
   //alert(url);
   container = "main_tab";
   $("#"+container).load(url);
   $("#"+container).show();
   refreshUI();
}

function searchObject(mod, dr_folder, queryfield, query) {
   url = '?_=b&mod='+mod+'&dr_folder='+dr_folder+'&queryfield='+queryfield+'&query='+query;
   //alert(url);
   container = "main_tab";
   $("#"+container).load(url);
   $('.dashboard_window').hide();
   $("#"+container).show();
   refreshUI();
}

// ---- other
function saveObject(mod,fields,dr_folder,view) {
    // save into database
    var url = "/kms/lib/objWrite.php";
    var fields_arr = fields.split(',');
    var dataString = ""; 
    var fields = "`";
    var values = "`";
    for (i in fields_arr) { 
				fields += fields_arr[i]+"`,`"; 
				if ($("[name="+fields_arr[i]+"]").attr('class')=="hasDatepicker") {
		                        values += myDateFormat($("[name="+fields_arr[i]+"]").val())+"`,`";
				} else {
					values += $('#'+fields_arr[i]).val()+"`,`";  
//					alert (escape($('#'+fields_arr[i]).val()));
					values = replaceChars(values,"&","[AMPERSAND]");
				}
			}
    fields = fields.substr(0,fields.length-2);
    values = values.substr(0,values.length-2);
    dataString += "mod="+mod+"&dr_folder="+dr_folder+"&_kms_action=insert&fields="+fields+"&values="+values;
//alert(dataString);
            $.ajax({
                url: url,
                type: "POST",
                data: dataString,
                cache: false,
                success: function(msg){ 
			   hideFitxa();
			   loadObject("b","",mod,dr_folder,"main_tab",'','','',view);
                           showMessage(msg);
		},
               error: function (xhr, textStatus, thrownError){
//                    alert('error '+xhr.status+' '+textStatus+' '+responseText);
                }
            });
}

function myDateFormat(strDate) {
   // converts a date from dd-mm-yyyy to yyyy-mm-dd for mysql
   if (strDate.substr(2,1)=='-') return (strDate.substr(6,4)+'-'+strDate.substr(3,2)+'-'+strDate.substr(0,2));
   else return strDate;
}

function replaceChars(str,searchstr,replacestr) {
	add = "z"; // with this
	temp = str; // temporary holder
	
	while (temp.indexOf(searchstr)>-1) {
	pos= temp.indexOf(searchstr);
	temp = "" + (temp.substring(0, pos) + replacestr + 
	temp.substring((pos + searchstr.length), temp.length));
	}
	return temp;
}

function updateObject(id,mod,fields,dr_folder,view) {
    // save into database
    var url = "/kms/lib/objWrite.php";
    var fields_arr = fields.split(',');
    var dataString = "data=";

    for (i in fields_arr) 
	{  
		// in some cases, like rte and datepicker, we have to fetch de value in different manners, and through name= attribute,
		if ($("[name="+fields_arr[i]+"]").attr('class')=="rte")
		{
			myifr_id = $("[name="+fields_arr[i]+"]").attr('id')
			myIframe = document.getElementById(myifr_id+"_ifr");
			content = myIframe.contentWindow.document.body.innerHTML;
			dataString += "[KMS_FIELD_SEPARATOR]"+fields_arr[i]+"[KMS_EQUAL_SEPARATOR]"+content;
		} else if ($("[name="+fields_arr[i]+"]").attr('class')=="hasDatepicker") {
			dataString += "[KMS_FIELD_SEPARATOR]"+fields_arr[i]+"[KMS_EQUAL_SEPARATOR]"+myDateFormat($("[name="+fields_arr[i]+"]").val());
		} else {
		// in the rest we fetch the value through id
			// if field contains & character, we encode it.
//			if ($('#'+fields_arr[i]).val().indexOf('&')) $('#'+fields_arr[i]).val(escape($('#'+fields_arr[i]).val()));
			strvalue = $('#'+fields_arr[i]).val();
			strvalue = replaceChars(strvalue,"&","[AMPERSAND]");
			dataString += "[KMS_FIELD_SEPARATOR]"+fields_arr[i]+"[KMS_EQUAL_SEPARATOR]"+strvalue;
		}

	}
    dataString += "&id="+id+"&mod="+mod+"&dr_folder="+dr_folder+"&_kms_action=update";
            $.ajax({
                url: url,
                type: "POST",
                data: dataString,
                cache: true,
                global: true,
                dataType: "html",
                success: function(msg){ 
			showMessage(msg); 
   			hideFitxa();
		        loadObject("b","",mod,dr_folder,"main_tab",'','','',view);
		},
                error: function (xhr, ajaxOptions, thrownError){
                    alert('error '+xhr.status+' '+ajaxOptions+' '+thrownError);
                }
            });
}

function deleteObject(id,mod,dr_folder,view) {
    // save into database
    var url = "/kms/lib/objWrite.php";
    var dataString = "";
    dataString += "&id="+id+"&mod="+mod+"&dr_folder="+dr_folder+"&_kms_action=delete";
    //alert (dataString);

//    popupConfirm(fetchConstant("_KMS_GL_CONFIRM_DELETE"), function () {
  popupConfirm("", function () {
            $.ajax({
                url: url,
                type: "POST",
                data: dataString,
                cache: true,
                global: true,
                dataType: "html",
                success: function(msg){ 
			           hideFitxa();
			           loadObject("b","",mod,dr_folder,"main_tab",'','','',view);
	                           showMessage(msg);
		},
                error: function (xhr, ajaxOptions, thrownError){
			           hideFitxa();
                }
            });

    });
}

function insertObject(mod,dr_folder,view) {
        loadObject("i",'',mod,dr_folder,"fitxa",'','','',view);
        //showFitxa();
}

function editObject(mod,id,dr_folder,view) {
        loadObject("e",id,mod,dr_folder,"fitxa",'','','',view);
	//showFitxa();
}

function closeObject(content_type,id) {
      $("#fitxa").style.display='none';
}


function createMask(alpha) {
        var mask = document.createElement('div');
        var divIdName = 'mask';
        mask.setAttribute('id',divIdName);
        mask.style.width = "100%";
        mask.style.height = "100%";
        mask.style.left = "0";
        mask.style.top = "0";
        mask.style.position = "absolute";
        mask.style.background = "#000000";
        mask.style.filter = "alpha(opacity="+alpha+")";
        mask.style.mozopacity = "."+alpha;
        mask.style.opacity = "."+alpha;
        document.body.appendChild(mask);
}

function showFitxa() {

     $("#fitxa").hide();
     if (!$("div#mask").length) createMask(25);
     $("#mask").css('z-index','96');
     $('#mask').css('display','block');
     $("#fitxa").css('left','40px');  
     $("#fitxa").css('display','none');
     // fitxa del tamany del formulari
     $("#fitxa").css('left',(document.body.clientWidth-$("#fitxa").width())/2);
     setTimeout("refreshUI();",200);
     setTimeout("refreshUI();",900);
     setTimeout("animateFitxa();",0);
}

function animateFitxa() {
     $("#fitxa").css('top','-8000px');
     $("#fitxa").css('display','block');
     $("#fitxa").css('top','-'+$('#data_form').height()+'px');
    
     $("#fitxa").animate({
        top: $('#top').height(),
//      opacity: 0.4,
//      fontSize: "3em",
      }, 500 );


}

function hideFitxa() {
      $("#fitxa").animate({
        top: '-'+$('#main_tab').height()+'px',
        opacity: -0.4,
        fontSize: "3em",
      }, 500 );
     setTimeout("$('#fitxa').css('display','none');$('#mask').css('display','none')",505);
     setTimeout("$('html').scrollTo('0px', 500);",510);
}



function activate(id,url,target) {
        mydiv = '#'+id;
        $(mydiv).show();
        
        if (target!=undefined) {
                // obrim en una nova pestanya
                form = document.createElement("form");
                form.method = "GET";
                form.action = url;
                form.target = "_blank";
                document.body.appendChild(form);
                form.submit();
                } else 
                {
                // obrim mateixa finestra
                if (url!=undefined) { $('#'+id).load(url); } //document.getElementById("i"+id).src=url;
                }
	refreshUI();
        }

        function toggle(id,url,target) {
         //id es la pestanya
         $actual = $('.dashboard_window:visible');
         $('.dashboard_window').hide();
         $('.dashboard_transparent').hide();
        if (id=="tools") $actual.show(); // activate window
         activate(id,url,target);
        }

        function loadContents(divID, url) {
        //alert ($(divID).load(url,{},function(response,textstatus,request){ alert (response+"|"+textstatus+"|"+request)}));
        $(divID).load(url,{},function(response,textstatus,request){ alert (response+"|"+textstatus+"|"+request)});
        refreshUI();
        }


        function loadOn(url) {
         $actual = $('.dashboard_window:visible');
         $('.dashboard_window').hide();
         $('.dashboard_transparent').hide();
//      document.getElementById("imain_tab").src=url;  // iframe
         $('#main_tab').load(url);
         $('#main_tab').show(); 
         //alert($('#main_tab').height());
        document.getElementById("main_tab").style.display='block'; 
        }

// --------- FETCH CONSTANTS -----------

function fetchConstant(c) {
    dataString = "&constant="+c;
            $.ajax({
                url: '/kms/lib/fetchConstant.php',
                type: "POST",
                data: dataString,
                cache: true,
                global: true,
                dataType: "html",
                success: function(msg){ 
			return msg; 
                },
                error: function (xhr, ajaxOptions, thrownError){
                    alert('error '+xhr.status+' '+ajaxOptions+' '+thrownError);
                }
            });
}
// ---------- DATA RELATIONS ----------

// Set key : data relations between containers

function setKey (fieldsource, container, fieldtarget) {


}


// --------- CONTAINERS ---------

function addContainer (name, width, height, left, top, position, background, alpha, zindex, collapsible, resizable, dragable, closebutton) {

	if ($("div#"+name).length) { 
		return false; // error: this container already exists
	} else 
	{

	var container = document.createElement('div');
        container.setAttribute('id',name);
        container.style.width = width;
        container.style.height = height;
        container.style.left = left;
        container.style.top = top;
        container.style.position = position;
        container.style.background = background;
        container.style.filter = "alpha(opacity="+alpha+")";
        container.style.mozopacity = "."+alpha;
        container.style.opacity = "."+alpha;
        container.style.zindex = zindex;
        document.body.appendChild(container);

	return true;
	}

}

function removeContainer(name) {
	if (!$("div#"+name).length) {
                return false; // error: this container doesn't exists
        } else
        {
        $("div#"+name).remove();
	return true;
	}
}


