//////////////////////////////////////////////////
//////////////////////////////////////////////////

/**
 * general.js
 * This software is provided "AS IS," without a warranty of any kind.
 */
if (window != top) 
    top.location.href = location.href

function w(s) {
    document.write(s)
}

var URIHostname = location.hostname;

function SetFocus(TargetFormName) {
  var target = 0;
  if (TargetFormName != "") {
    for (i=0; i<document.forms.length; i++) {
      if (document.forms[i].name == TargetFormName) {
        target = i;
        break;
      }
    }
  }

  var TargetForm = document.forms[target];
    
  for (i=0; i<TargetForm.length; i++) {
    if ( (TargetForm.elements[i].type != "image") && (TargetForm.elements[i].type != "hidden") && (TargetForm.elements[i].type != "reset") && (TargetForm.elements[i].type != "submit") ) {
      TargetForm.elements[i].focus();

      if ( (TargetForm.elements[i].type == "text") || (TargetForm.elements[i].type == "password") ) {
        TargetForm.elements[i].select();
      }

      break;
    }
  }
}

function RemoveFormatString(TargetElement, FormatString) {
  if (TargetElement.value == FormatString) {
    TargetElement.value = "";
  }

  TargetElement.select();
}

function CheckDateRange(from, to) {
  if (Date.parse(from.value) <= Date.parse(to.value)) {
    return true;
  } else {
    return false;
  }
}

function IsValidDate(DateToCheck, FormatString) {
  var strDateToCheck;
  var strDateToCheckArray;
  var strFormatArray;
  var strFormatString;
  var strDay;
  var strMonth;
  var strYear;
  var intday;
  var intMonth;
  var intYear;
  var intDateSeparatorIdx = -1;
  var intFormatSeparatorIdx = -1;
  var strSeparatorArray = new Array("-"," ","/",".");
  var strMonthArray = new Array("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
  var intDaysArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

  strDateToCheck = DateToCheck.toLowerCase();
  strFormatString = FormatString.toLowerCase();
  
  if (strDateToCheck.length != strFormatString.length) {
    return false;
  }

  for (i=0; i<strSeparatorArray.length; i++) {
    if (strFormatString.indexOf(strSeparatorArray[i]) != -1) {
      intFormatSeparatorIdx = i;
      break;
    }
  }

  for (i=0; i<strSeparatorArray.length; i++) {
    if (strDateToCheck.indexOf(strSeparatorArray[i]) != -1) {
      intDateSeparatorIdx = i;
      break;
    }
  }

  if (intDateSeparatorIdx != intFormatSeparatorIdx) {
    return false;
  }

  if (intDateSeparatorIdx != -1) {
    strFormatArray = strFormatString.split(strSeparatorArray[intFormatSeparatorIdx]);
    if (strFormatArray.length != 3) {
      return false;
    }

    strDateToCheckArray = strDateToCheck.split(strSeparatorArray[intDateSeparatorIdx]);
    if (strDateToCheckArray.length != 3) {
      return false;
    }

    for (i=0; i<strFormatArray.length; i++) {
      if (strFormatArray[i] == 'mm' || strFormatArray[i] == 'mmm') {
        strMonth = strDateToCheckArray[i];
      }

      if (strFormatArray[i] == 'dd') {
        strDay = strDateToCheckArray[i];
      }

      if (strFormatArray[i] == 'yyyy') {
        strYear = strDateToCheckArray[i];
      }
    }
  } else {
    if (FormatString.length > 7) {
      if (strFormatString.indexOf('mmm') == -1) {
        strMonth = strDateToCheck.substring(strFormatString.indexOf('mm'), 2);
      } else {
        strMonth = strDateToCheck.substring(strFormatString.indexOf('mmm'), 3);
      }

      strDay = strDateToCheck.substring(strFormatString.indexOf('dd'), 2);
      strYear = strDateToCheck.substring(strFormatString.indexOf('yyyy'), 2);
    } else {
      return false;
    }
  }

  if (strYear.length != 4) {
    return false;
  }

  intday = parseInt(strDay, 10);
  if (isNaN(intday)) {
    return false;
  }
  if (intday < 1) {
    return false;
  }

  intMonth = parseInt(strMonth, 10);
  if (isNaN(intMonth)) {
    for (i=0; i<strMonthArray.length; i++) {
      if (strMonth == strMonthArray[i]) {
        intMonth = i+1;
        break;
      }
    }
    if (isNaN(intMonth)) {
      return false;
    }
  }
  if (intMonth > 12 || intMonth < 1) {
    return false;
  }

  intYear = parseInt(strYear, 10);
  if (isNaN(intYear)) {
    return false;
  }
  if (IsLeapYear(intYear) == true) {
    intDaysArray[1] = 29;
  }

  if (intday > intDaysArray[intMonth - 1]) {
    return false;
  }
  
  return true;
}

function IsLeapYear(intYear) {
  if (intYear % 100 == 0) {
    if (intYear % 400 == 0) {
      return true;
    }
  } else {
    if ((intYear % 4) == 0) {
      return true;
    }
  }

  return false;
}

var cutsheet=null;
function cutsheetOpen(aURL, aWidth, aHeight, aResize) {
    var dWidth = "700";
    var dHeight= "700";
    var dResize = "no";
    if (aWidth) dWidth = aWidth;
    if (aHeight) dHeight = aHeight;
    if (aResize) dResize = "yes";

    if (!cutsheet || cutsheet.closed ) {
        if (aResize)    cutsheet=window.open(aURL,"cutsheet","width="+dWidth+",height="+dHeight+",top=10,left=10,resizable=yes,scrollbars=yes,menubar=no,toolbar=no,status=no,location=no");
        else            cutsheet=window.open(aURL,"cutsheet","width="+dWidth+",height="+dHeight+",top=10,left=10,resizable=no,scrollbars=no,menubar=no,toolbar=no,status=no,location=no");
        //cutsheet=window.open(aURL,'cutsheet');
        if (cutsheet.focus) cutsheet.focus();
        //if (!cutsheet.opener) cutsheet.opener = self;
    } else {
        cutsheet.location=aURL;
        if (cutsheet.focus) cutsheet.focus();
    }
    return false;
}

function cutsheetClose() {
    var quirksMode = (top == self);
    if (quirksMode) {
        top.location.href = '/index.php';
    } else {
        if (parent.focus) parent.focus();
        if (window.focus) window.focus();
    }
    if (!cutsheet || cutsheet.closed ) {
    } else {
        if (cutsheet.focus) cutsheet.blur();
    }
}

function addToFavorites(urlAddress, pageName) {
	if (window.external)
        window.external.AddFavorite(urlAddress,pageName)
	else 
        alert('Sorry! Your browser does not support this function.')
}

function pagePrint() {
    if (window.print) window.print();
    else alert("This script does not work in your browser.\nTry using ctr+p on Windows or cmd+p on Mac");
}

function js_restore_images() { //v3.0
  var i,x,a=document.js_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function js_preload_images() { //v3.0
  var d=document; if(d.images){ if(!d.js_p) d.js_p=new Array();
    var i,j=d.js_p.length,a=js_preload_images.arguments; 
    for(i=0; i<a.length; i++)
      if (a[i].indexOf("#")!=0){ d.js_p[j]=new Image; d.js_p[j++].src=bTI.a[i];}}
}

function js_find_obj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=js_find_obj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function js_swap_image() { //v3.0
  var i,j=0,x,a=js_swap_image.arguments; document.js_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=js_find_obj(a[i]))!=null){document.js_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function js_jump_menu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}
function js_redirect() { //v3.0
  var i, args=js_redirect.arguments; document.js_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}
function js_menu_redirect(targ,selObj,nURL,nID) { //v3.0
  var i, f, v, u;
  
  //for (i=0; i<(args.length-1); i+=3) {
    //f = js_find_obj(selObj);
    v = selObj.options[selObj.selectedIndex].value;
    u = nURL+"&"+nID+"="+v;
    eval(targ+".location='"+u+"'");
  //}
}
function overImage(imgID, img1, img2) { //v3.0
  var x;
  x = js_find_obj(imgID);
  
  if(x.src == img1) {
    x.src = img2;
  } else {
    x.src = img1;
  }
}

function preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.js_p) d.js_p=new Array();
  var i,j=d.js_p.length,a; 
    
    a=preloadImagesArray;
    for(i=0; i<a.length; i++)
      if (a[i].indexOf("#")!=0){ d.js_p[j]=new Image; d.js_p[j++].src=bTI.a[i];}}
}

function ResetContents(FCKeditorField)
{
	var i, oEditor, oValue;
	var oFields = ResetContents.arguments;
	
	for (i=0; i<oFields.length; i++) {
	// Get the editor instance that we want to interact with.
	    oEditor = FCKeditorAPI.GetInstance(oFields[i]) ;
	    oValue  = js_find_obj(oFields[i]) ;
        
        if (oEditor && oValue) {
	        // Set the editor contents (replace the actual one).
	        oEditor.SetHTML( oValue.value ) ;
	        oEditor.ResetIsDirty();
	    }
	}
}

function textCounter(field, maxlimit) {
    if (field.value.length > maxlimit) {
        field.value = field.value.substring(0, maxlimit);
        alert('Only '+maxlimit+' character allowed!');
    } 
}

function toggleBlock(pstrID){
  var myDiv = document.getElementById(pstrID);
  if (myDiv){
    if (myDiv.style.display == 'none'){
      showBlock(pstrID);
    } else{
      hideBlock(pstrID);
    }
  }
}

function showBlock(pstrID){
  var myDiv = document.getElementById(pstrID);
  if (myDiv){
    myDiv.style.display = 'block';
  }
}
function hideBlock(pstrID){
  var myDiv = document.getElementById(pstrID);
  if (myDiv){
    myDiv.style.display = 'none';
  }
}

//FORM-CHECKING
function check_input(form_name, field_name, field_size, message) {
  var ThisForm = js_find_obj(form_name);
  
  if (ThisForm.elements[field_name] && (ThisForm.elements[field_name].type != "hidden")) {
    var field_value = ThisForm.elements[field_name].value;

    if (field_value == '' || field_value.length < field_size) {
      error_message = error_message + "* " + message + "\n";
      error = true;
    }
  }
}

function check_radio(form_name, field_name, message) {
  var isChecked = false;
  var ThisForm = js_find_obj(form_name);

  if (ThisForm.elements[field_name] && (ThisForm.elements[field_name].type != "hidden")) {
    var radio = ThisForm.elements[field_name];

    for (var i=0; i<radio.length; i++) {
      if (radio[i].checked == true) {
        isChecked = true;
        break;
      }
    }

    if (isChecked == false) {
      error_message = error_message + "* " + message + "\n";
      error = true;
    }
  }
}

function check_select(form_name, field_name, field_default, message) {
  var ThisForm = js_find_obj(form_name);

  if (ThisForm.elements[field_name] && (ThisForm.elements[field_name].type != "hidden")) {
    var field_value = ThisForm.elements[field_name].value;

    if (field_value == field_default) {
      error_message = error_message + "* " + message + "\n";
      error = true;
    }
  }
}

function changeMenu(obj) {
  var objMenu=js_find_obj(obj);
  if (objMenu.className=='menutop_text') {
    objMenu.className='menutop_text_on';
  } else {
    objMenu.className='menutop_text';
  }
}

function loginForm(formName, captcha) {
  var lF = new formValidator(formName);
  
  lF.addField("username", "Username field", "required||alnumhyphen");
  lF.addField("password", "Password field", "required");
  
  if (captcha===true) {
    lF.addField("fcaptcha", "Security field", "required");
    pageLogin();
  }
}

var captchaEventLoad = false;
function menuLogin() {
  var divL = js_find_obj('divlogin');
  var divC = js_find_obj('divcaptcha');
  var fldC = js_find_obj('fcaptcha');
  var imgC = js_find_obj('flogin_cop');
  var URILogin = URIHttp + 'images/login.gif?r=' + getRandom();
  var isPost = true;
  
  //alert(URILogin);
  if (divC && fldC && divC.style.display=='none' && fldC.value=='') {
    isPost = false;
    var iC = new Image();
    iC.onload = function (evt) {
      if(captchaEventLoad === false) { 
        captchaEventLoad = true;
        imgC.src = iC.src;
      }
    };
    divL.style.display = 'none';
    divC.style.display = '';
    divC.style.display = 'block';
    fldC.focus();
    if(captchaEventLoad === false) { 
      iC.src = URILogin;
      //alert("Loading security image...\nPlease type the text in the image to security field.");
    }
    isPost = false;
  }
  
  return isPost;
}

function pageLogin() {
  var iCop = new Image();
  var cCop = js_find_obj("flogin_cop");
  var URILogin = URIHttp + 'images/login.gif?r=' + getRandom();

  iCop.onload = function (evt) {
    if(captchaEventLoad === false) {
      captchaEventLoad = true;
      cCop.src = iCop.src;
    }
  };
  if(captchaEventLoad === false) {
    iCop.src = URILogin;
    //alert(URILogin);
  }
}

function getRandom() {
  var currentTime = new Date();
  var day = LZX(currentTime.getDate());
  var month = LZX(currentTime.getMonth() + 1);
  var year = currentTime.getFullYear();
  var r= year+''+month+''+day+'-'+Math.round(99999999*Math.random());
  
  return r;
}

function LZX(zx) {
  return (zx<0||zx>9?"":"0")+zx;
}

function rowOverEffect(object) {
  if (object.className == 'dataTableRow') object.className = 'dataTableRowOver';
}

function rowOutEffect(object) {
  if (object.className == 'dataTableRowOver') object.className = 'dataTableRow';
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function formRating(formName) {
  var fv = new formValidator(formName);
  
  fv.addField("rating_selected", "Rating", "required");
  fv.addField("rating_data", "Kunjungan", "required");
  fv.addField("rating_confirm", "Konfirmasi", "checkbox");
}

function formInvestment(formName) {
  var fv = new formValidator(formName);
  
  fv.addField("entry_subject", "Subjek", "required||minlength=5||maxlength=250");
  fv.addField("entry_description", "Keterangan", "fckeditor||minlength=5||maxlength=2500");
  fv.addField("entry_file1", "File-1", "checkfile=gif#jpg#bmp#pdf#doc#xls#zip#rar");
  fv.addField("entry_file2", "File-2", "checkfile=gif#jpg#bmp#pdf#doc#xls#zip#rar");
  fv.addField("entry_file3", "File-3", "checkfile=gif#jpg#bmp#pdf#doc#xls#zip#rar");
}

var listOptionSelect = new Array();
var listOption  = null;
var parentOlObj = null;
function addListOption() {
  if (parentOlObj == null) {
  	var args = addListOption.arguments;
    var parentOL  = document.getElementById(args[0]);
    parentOlObj   = parentOL;
  } else {
    var parentOL = parentOlObj;
  }
  
  if (listOptionSelect.length > 10) {
    alert('Hanya diperkenankan 10 options!');
    return;
  }
  
  var parentLI  = parentOL.childNodes[0];
  var currentLI = parentOL.lastChild;
  var opID = currentLI.childNodes[0];
  var ovID = currentLI.childNodes[1];
  var butt = currentLI.childNodes[2];
  
  if (listOption == null) {
  	listOption = document.createElement("select");
  	for (var i=0; i<opID.options.length; i++) {
  		listOption.options[i] = new Option(opID.options[i].text,opID.options[i].value);
  	}
  }
    
  if (opID.selectedIndex==0 || ovID.value=='') {
     alert('Silahkan pilih option dan isi nilainya!');
     return;
  } 
  
  if (!document.createElement) {
  	alert("Your browser does not support add/create element!");
  	return;
  } 
  
  if (opID.remove) {
  	listOptionSelect[listOptionSelect.length] = opID.value;
  	var opIDText  = opID.options[opID.selectedIndex].text;
  	var opIDValue = opID.options[opID.selectedIndex].value;

  	var i=opID.options.length;
  	while(i>0) {
  		opID.remove(i-1);
  		i=opID.options.length;
  	}
  	opID.options[0] = new Option(opIDText, opIDValue);
  }

  var newPlus  = document.createElement("input");
  newPlus.type = "button";
  newPlus.name = "plus";
  newPlus.value= "[+]";
  newPlus.style.width= butt.style.width;
  newPlus.style.className = butt.style.className;
  newPlus.onclick = addListOption;

  var newMin  = document.createElement("input");
  newMin.type = "button";
  newMin.name = "minus";
  newMin.value= "[-]";
  newMin.style.width= butt.style.width;
  newMin.style.className = butt.style.className;
  newMin.onclick = removeListOption;

  var newOv  = document.createElement("input");
  newOv.name = ovID.name;
  newOv.type = ovID.type;
  newOv.style.width = ovID.style.width;
  newOv.style.className = ovID.style.className;
  newOv.size = ovID.size;
  newOv.maxlength = ovID.maxlength;

  //creating select element
  var newOp  = document.createElement("select");
  newOp.name = opID.name+'_'+listOptionSelect.length;
  newOp.style.width= opID.style.width;
  newOp.style.className = opID.style.className;
  newOp.id   = opID.id+'_'+listOptionSelect.length;
  
  var k=0;
  var finded = false;
  for (var i=0; i<listOption.length; i++) {
    finded = false;
    for (var j=0; j<listOptionSelect.length; j++) {
      if (listOption[i].value == listOptionSelect[j]) {
        finded=true;
        break;
      }
    }
    
    if (!finded) {
      newOp.options[k] = new Option(listOption.options[i].text,listOption.options[i].value);
      k++;
    }
  }
    
  var newRow = document.createElement("li");
  newRow.appendChild(newOp);
  newRow.appendChild(newOv);
  newRow.appendChild(newPlus);
  newRow.appendChild(newMin);
  parentOL .appendChild(newRow);

  for(var i=1; i<currentLI.childNodes.length; i++) {
    var iChild = currentLI.childNodes[i];
    
    if (i<2) 
        iChild.readOnly=true;
    else {
        iChild.disabled=true;
    }
  }
}

function removeListOption() {
  if (parentOlObj == null) {
  	var args = addListOption.arguments;
    var parentOL  = document.getElementById(args[0]);
    parentOlObj   = parentOL;
  } else {
    var parentOL = parentOlObj;
  }
  
  var currentLI = parentOL.lastChild;

  while (currentLI.childNodes.length > 0) {
    var iChild = currentLI.firstChild;
    currentLI.removeChild(iChild);
  }
  
  parentOL.removeChild(currentLI);

  currentLI = parentOL.lastChild;
  for(var i=1; i<currentLI.childNodes.length; i++) {
    var iChild = currentLI.childNodes[i];
    if (i<2) 
        iChild.readOnly=false;
    else
        iChild.disabled=false;
  }

  listOptionSelect.splice((listOptionSelect.length - 1),1);
  var opID = currentLI.firstChild;
  var opIDValue = opID.options[opID.selectedIndex].value;

  if (opID.remove) {
    var i=opID.options.length;
    while(i>0) {
    	opID.remove(i-1);
    	i=opID.options.length;
    }
    
    var k=0;
    var finded = false;
    for (var i=0; i<listOption.length; i++) {
      finded = false;
      for (var j=0; j<listOptionSelect.length; j++) {
        if (listOption[i].value == listOptionSelect[j]) {
          finded=true;
          break;
        }
      }
      
      if (!finded) {
        opID.options[k] = new Option(listOption.options[i].text,listOption.options[i].value);
        if (listOption.options[i].value == opIDValue) {
        	opID.selectedIndex=k;
        }
        k++;
      }
    }
  }
  
}

var cord = new Array("ac",28,97,74,113,"ba",506,414,540,430,"bb",289,266,342,284,"be",129,318,208,334,"bt",223,377,284,393,"go",656,206,742,225,"ja",185,250,236,265,"jb",296,384,346,400,"ji",431,414,479,430,"jk",281,354,361,370,"jt",359,386,420,404,"kb",380,206,438,223,"ki",530,171,586,186,"kr",239,198,319,214,"ks",504,292,560,310,"kt",443,254,509,272,"la",235,329,314,348,"ma",844,326,907,343,"mu",779,202,843,235,"nb",558,418,597,434,"nt",682,419,719,434,"pa",1099,327,1155,345,"pb",944,246,1004,263,"ri",154,197,193,213,"sa",739,174,786,191,"sb",106,241,168,255,"sg",687,296,767,328,"sn",568,328,652,345,"sr",584,267,642,285,"ss",212,290,276,305,"st",636,237,703,255,"su",82,159,137,175,"yo",365,421,415,437);

function mapDbArea(imgid, percent) {
	var mapid  		= imgid+'_map';
	var mapvalue 	= eval(imgid+'_value');
	var mapObj 		= document.getElementById(mapid);
	var j=0,tot,popupimg;
	var popup='popup_statistic_city.php?img=';
	
	if (percent <= 0) percent = 1/2;
	
	for (var i=0; i<cord.length; i++) {
		var mapArea = document.createElement("area");
		var tot = parseInt(mapvalue[j+2]);
		mapArea.id 			= mapid+'_'+mapvalue[j];
		mapArea.name 		= cord[i];
		mapArea.title 	= ""+ mapvalue[j+1]+"\n"+'Total: #'+mapvalue[j+2];
		mapArea.alt 		= ""+ mapvalue[j+1]+"\n"+'Total: #'+mapvalue[j+2];
		mapArea.shape 	= 'rect';
		mapArea.coords 	= cord[i+1]*percent+','+cord[i+2]*percent+','+cord[i+3]*percent+','+cord[i+4]*percent;
		mapArea.href		= "#"+mapvalue[j+0];
		if (tot>0) {
		  var filenames = popup+'c'+imgid+'_h400_p'+mapvalue[j+0];
		  mapArea.onclick = new Function("cutsheetOpen('"+filenames+"', 720, 450, true);return false");
		} else {
		  mapArea.onclick = new Function("alert('Tidak terdapat statistik untuk propinsi ini.'); return false");
		}
		mapObj.appendChild(mapArea);
		
		i=i+4;
		j=j+3;
	}
	var imgObj = document.getElementById(imgid);
	imgObj.timeout = setTimeout(function(){mapDbTooltip(imgObj, "Fokus pada salah satu propinsi untuk detail...")}, 1000);
}

function mapDbTooltip() {
	var args = mapDbTooltip.arguments;
	var salt  = args[0].alt;
	args[0].alt 	= args[1];
	args[0].title = args[1];
	
	clearTimeout(args[0].timeout);
	args[0].timeout = setTimeout(function(){mapDbTooltip(args[0], salt)}, 1000);
}

