
function setEmptyInputField(id) {
	$('#'+id).val('');
}

function getTodaysDate() {
	var todays=new Date();
	return todays.getDate()+'/'+(todays.getMonth()+1)+'/'+todays.getFullYear();
}

function setLang(lang) {
	if (lang == 'in') {
		$('.en').hide();
		$('.in').show();
	} else {
		$('.en').show();
		$('.in').hide();
	}
}

function showKalenderAkademikPerArea(id) {
	$('.kalender_akademik').hide();
	$('#kalender_'+id).show('fast');
}

function deleteImageSamping(pagephp, id_data)
{	
	var reqUrl = ROOTPATH+'admin/'+pagephp+'.php?what=delete_images&id='+id_data;
	if (confirm('Anda yakin akan menghapus image ini ?')) {
		wsDelete(reqUrl, function (json) {
			if (json.status == 'OK') {
				$('#image-samping').remove();
				$('#delete-button-samping').remove();
			} else {
				alert(json.message);
			}
		});
	}
}

function setIsPrimaryImages(elm) {
	$('.is_primary_field').val('');
	$(elm).parents('.radio_field').find('.is_primary_field').val(1);
	$('.list_item').css('background-color', '#FFFFFF');
	$(elm).parents('.list_item').css('background-color', '#F6F64F');
}

function setPrimaryImgAndBackground(elm) {
	$('#photo_primary_images').val($(elm).val());
	$('.list_photo_images').css('background-color', '#FFFFFF');
	$('#list_'+$(elm).val()).css('background-color', '#F6F64F');
}

function setDeleteEventGalleryImages(id, elm) {
	if ($(elm).attr('checked') == true) {
		$(elm).attr('checked', 'checked');
		$('#delete_images_'+id).val($('#photo_images_'+id).val());
		$('#list_'+id).css('border', '2px solid #FF0000');
	} else {
		$(elm).removeAttr('checked');
		$('#delete_images_'+id).val('');
		$('#list_'+id).css('border', '2px solid #CCC');
	}
}

function setDeleteFiles(elm) {
	if ($(elm).attr('checked') == true) {
		$(elm).parents('.row_data_files').find('.delete_files').val(1);
		$(elm).attr('checked', 'checked');
		$(elm).parents('.chk_files').css('border', '1px solid #FF0000');
	} else {
		$(elm).parents('.row_data_files').find('.delete_files').val('');
		$(elm).removeAttr('checked');
		$(elm).parents('.chk_files').css('border', '1px solid #CCCCCC');
	}
}

function submitFormProfileGuru(form) {
	form_elm = '#'+form;
	
	if ($('#name').val() == '') {
		alert('Nama harus di isi !!');
		$('#name').focus().select();
	} else if ($('#password').val() != '' && $('#password2').val() == '') {
		alert('Password dan Konfirmasi Password harus sama !!');
		$('#password2').focus().select();
	} else if ($('#password').val() == '' && $('#password2').val() != '') {
		alert('Password dan Konfirmasi Password harus sama !!');
		$('#password').focus().select();
	} else if ($('#password').val() != $('#password2').val()) {
		alert('Password dan Konfirmasi Password harus sama !!');
		$('#password2').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormProfileMurid(form) {
	form_elm = '#'+form;
	
	if ($('#name').val() == '') {
		alert('Nama harus di isi !!');
		$('#name').focus().select();
	} else if ($('#password').val() != '' && $('#password2').val() == '') {
		alert('Password dan Konfirmasi Password harus sama !!');
		$('#password2').focus().select();
	} else if ($('#password').val() == '' && $('#password2').val() != '') {
		alert('Password dan Konfirmasi Password harus sama !!');
		$('#password').focus().select();
	} else if ($('#password').val() != $('#password2').val()) {
		alert('Password dan Konfirmasi Password harus sama !!');
		$('#password2').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormAbsensiMuridGuru(form) {
	form_elm = '#'+form;
	
	if ($('#tgl_absensi').val() == '') {
		alert('Tanggal Absensi harus di isi !!');
		$('#tgl_absensi').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormKalender(form) {
	form_elm = '#'+form;
	
	if ($('#year_akademik').val() == '') {
		alert('Tahun ajaran harus di isi !!');
		$('#year_akademik').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormEvent(form) {
	form_elm = '#'+form;
	
	if ($('#name_in').val() == '') {
		alert('Nama event harus di isi !!');
		$('#name_in').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormNews(form) {
	form_elm = '#'+form;
	
	if ($('#title_in').val() == '') {
		alert('Judul berita harus di isi !!');
		$('#title_in').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormLogin(form) {
	form_elm = '#'+form;
	if ($('#username').val() == '') {
		alert('Username must be filled !!');
		$('#username').focus().select();
	} else if ($('#password').val() == '') {
		alert('Password must be filled !!');
		$('#password').focus().select();
	} else {
		$(form_elm).submit();
	}
}

function submitFormSetup(form) {
	form_elm = '#'+form;
	$(form_elm).submit();
}

function submitFormWithoutValidation(form) {
	form_elm = '#'+form;
	$(form_elm).submit();
}

function submitFormTraining(form) {
	form_elm = '#'+form;
	
	if ($('#title').val() == '') {
		alert('Title must be filled !!');
		$('#title').focus().select();
	//} else if ($('#job_desc___Frame').children('body:last').text() == '') {
		//alert('Job Description must be filled !!');
		//$('#job_desc').focus().select();
	//} else if ($('#requirement').text() == '') {
		//alert('Requirement must be filled !!');
		//$('#requirement').focus().select();
	} else {
		$(form_elm).submit();
	}
	
}

function submitForm(form) {
	var regu = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT|biz|BIZ|info|INFO|name|NAME)$";
	var re = new RegExp(regu);
	form_elm = '#'+form;
	
	if ($('#title').val() == '') {
		alert('Title must be filled !!');
		$('#title').focus().select();
	} else if ($('#responsible_person').val() == '') {
		alert('Responsible Person must be filled !!');
		$('#responsible_person').focus().select();
	} else if ($('#responsible_email').val() == '') {
		alert('Email must be filled !!');
		$('#responsible_email').select().focus();
		return false;
	} else if ($('#responsible_email').val().search(re) == -1) {
		alert('Invalid email format !!');
		$('#responsible_email').select().focus();
		return false;
	} else {
		$(form_elm).submit();
	}
	
}

function submitForm2(form) {
	$('#'+form).submit();
}

/// General ///////////////////////////////////////////////////////////////////

/**
 * Ensures that a jQuery object wrapper for the given argument is returned.
 * @param {string | jQuery} arg  selector string or jQuery object
 */
function $obj(arg) {
    if ((typeof arg == 'object') && arg.jquery != undefined) {
        return arg;
    } else {
        return $(arg);
    }
}

/**
 * Returns a string with all HTML entities decoded.
 */
function decodeHtmlEntity(encoded) {
    return $('<textarea />').html(encoded).val();
}

/**
 * Highlights the specified term in the given string.
 * @param {string} term  the term to be highlighted
 * @param {string} str  the string to highlight
 */
function hl(str, term) {
    term = $.trim(term);
    var regex = new RegExp('('+term+')', 'i');
    var arr = regex.exec(str);
    if (arr != null && str != null) {
        return str.substring(0, arr.index)
            + '<span class="hl">'+arr[1]+'</span>'
            + str.substring(arr.index+term.length);
    } else {
        return str;
    }
}

function initDatePickerYearForward()
{
	$(".datepicker").datepicker({
		changeMonth: true,
		changeYear: true,
		duration: 'fast',
		dateFormat: 'dd/mm/yy',
		yearRange: '2010:2090',
		showOn: 'both',
		showButtonPanel: true,
		closeText: "Close",
		buttonImage: ROOTPATH+"rsrc/img/calendar.gif",
		buttonImageOnly: true
	});
	$(".datepicker").attr('size', '12');
}

function initDatePicker()
{
	$(".datepicker").datepicker({
		changeMonth: true,
		changeYear: true,
		duration: 'fast',
		dateFormat: 'dd/mm/yy',
		yearRange: '1930:2090',
		showOn: 'both',
		showButtonPanel: true,
		closeText: "Close",
		buttonImage: ROOTPATH+"rsrc/img/calendar.gif",
		buttonImageOnly: true
	});
	$(".datepicker").attr('size', '12');
}

function initPage()
{	
	$('.button').button();
	
	$('.no_induk').addClass('readonly_style');
	$(".readonly_style").attr("readonly","readonly");
	$(".readonly_style").removeClass("text");
	$(".readonly_style2").attr("readonly","readonly");
	$(".readonly_style2").removeClass("text");
	$(".dis_on").attr("disabled","disabled");
	initDatePicker();
	$('.num').numeric();
	$('.num_left').numeric();
	$('.num_comma').constrain({
		allow: { chars: '1234567890.,-'}
	});
	
	
	var defaultOpts = {
        modal: true,
        autoOpen: false,
		//show: 'clip',
		hide: 'fold',
		width: 400
    };
    initInputDialog('#dialog-login', defaultOpts);
    initInputDialog('#dialog-comment', defaultOpts);
}

/// Path //////////////////////////////////////////////////////////////////////

function basename(path) {
    return path.replace( /.*\//, "" );
}

function dirname(path) {
    return path.match( /.*\// );
}

/// Search ////////////////////////////////////////////////////////////////////

function initSubmitOnEnter(selector) {
    $obj(selector).keypress(function (e) {
        if (e.which == 13) { // enter key
            $(this).parents('form:first').submit();
        }
    });
}

function initSearchBox(selector) {
    $obj(selector).keypress(function (e) {
        if (e.which == 13) { // enter key
            $('.search-button', this).click();
        }
    });
}

/// List & Table ///////////////////////////////////////////////////////////////

function addTableRow(tbl, rowElm) {
    $tbl = $obj(tbl);
    $('tbody', $tbl).append(rowElm);
    restyleTableRows($tbl);
}

function clearTableRows(tbl) {
    $('tbody tr', tbl).remove();
}

function restyleTableRows(tbl) {
    $obj(tbl).find('tbody tr').each(function (i) {
        $(this).removeClass("even").removeClass("odd");
        var rowClass = ((i % 2) == 0) ? "even" : "odd";
        $(this).addClass(rowClass);
    });
}

function initSortableTableHeader(tbl, fnReloadRows) {
    var $ascImg = $('<img src="'+ROOTPATH+'rsrc/img/sort-up.gif" class="list-header-sorter" />');
    var $descImg = $('<img src="'+ROOTPATH+'rsrc/img/sort-down.gif" class="list-header-sorter" />');
    var $tbl = $(tbl);
    var $tblHeaders = $('thead th:not(.icon)', $tbl);
    //var $tblHeaders = $('.table-header', $tbl);
    $tblHeaders.wrapInner('<a href="#" class="list-header" onClick="return false;"></a>')
    .each(function (i) {
        $('a', this).click(function () {
            var oldIndex = $tbl.data('sort');
            if (oldIndex != undefined) {
                if (oldIndex == i) {
                    // If the same table header, flip the descending flag and 
                    // replace the image indicator
                    if ($tbl.data('desc') == 1) {
                        $tbl.data('desc', 0);
                        $descImg.replaceWith($ascImg);
                    } else {
                        $tbl.data('desc', 1);
                        $ascImg.replaceWith($descImg);
                    }
                } else {
                    // Remove old indicators from previous header
                    $descImg.remove();
                    $tblHeaders.eq(oldIndex).find('a').removeClass('sorted');

                    // Set new values and indicators
                    $tbl.data('sort', i);
                    $tbl.data('desc', 0);
                    $(this).append($ascImg);
                    $(this).addClass('sorted');
                }
            } else {
                $tbl.data('sort', i);
                $tbl.data('desc', 0);
                $(this).append($ascImg);
                $(this).addClass('sorted');
            }
            fnReloadRows();
        });
    })
}


/// List Query Parameters //////////////////////////////////////////////////////

function getSearchQuery(searchField) {
    return 'q='+$obj(searchField).val();
}

function getSortQuery(table) {
    $tbl = $obj(table);
    if ($tbl.data('sort') != undefined) {
        return 'sort='+$tbl.data('sort')+'&desc='+$tbl.data('desc');
    } else {
        return '';
    }
}

function getPageQuery(pager) {
    $pager = $obj(pager);
    if ($pager.data('current_page') != undefined) {
        return 'pg='+$pager.data('current_page');
    } else {
        return '';
    }
}

function getListQueryString(searchField, table, pager) {
    var searchQuery = getSearchQuery(searchField);
    var sortQuery = getSortQuery(table);
    var pageQuery = getPageQuery(pager);

    var queryStr = searchQuery;
    if (queryStr != '' && sortQuery != '') queryStr += '&';
    queryStr += sortQuery;
    if (queryStr != '' && pageQuery != '') queryStr += '&';
    queryStr += pageQuery;

    return queryStr;
}


/// List Pager /////////////////////////////////////////////////////////////////

/**
 * Recreates the list pager according to the given parameters.
 * @param {string | jQuery} pager  selector string or jQuery object
 * @param {int} totalItems  the total number of items in the list
 * @param {function} fnReloadList  the function to reload the list
 */
function updateListPager(pager, totalItems, fnReloadList) {
    $pager = $obj(pager);
    var pageCount = getPageCount(totalItems);
    var currentPage = getCurrentPage($pager);
    if (currentPage == undefined) {
        currentPage = 1;
    } else if (currentPage > pageCount) {
        currentPage = pageCount;
        setCurrentPage($pager, pageCount);
    }

    var firstPageLink, prevPageLink, nextPageLink, lastPageLink;
    if (pageCount > 1) {
        // First, Prev page links
        if (currentPage > 1) {
            firstPageLink = pageLink($pager, 1, 'First', fnReloadList);
            prevPageLink = pageLink($pager, currentPage - 1, 'Prev', fnReloadList);
        } else {
            firstPageLink = '<span class="link-disabled">First</span>';
            prevPageLink = '<span class="link-disabled">Prev</span>';
        }
        // Next, Last page links
        if (currentPage < pageCount) {
            nextPageLink = pageLink($pager, currentPage + 1, 'Next', fnReloadList);
            lastPageLink = pageLink($pager, pageCount, 'Last', fnReloadList);
        } else {
            nextPageLink = '<span class="link-disabled">Next</span>';
            lastPageLink = '<span class="link-disabled">Last</span>';
        }
        
        // Numbered page links
        var startPage = 1;
        if (pageCount > QHR_LIST_PAGER_MAX_LINKS) {
            var currentPgAtCenter = currentPage - Math.floor(QHR_LIST_PAGER_MAX_LINKS / 2);
            var lastPgAtEnd = pageCount - QHR_LIST_PAGER_MAX_LINKS + 1;
            startPage = Math.min(Math.max(1, currentPgAtCenter), lastPgAtEnd);
        }

        var vbar = '<span style="color:#a0a0a0;"> | </span>';
        $pager.empty();
        $pager.append(firstPageLink).append(vbar).append(prevPageLink).append(vbar);

        for (var i = startPage; i <= pageCount && i < startPage+QHR_LIST_PAGER_MAX_LINKS; i++) {
            if (i == currentPage) {
                $pager.append('<span class="current-page">'+i+'</span>');
            } else {
                $pager.append(pageLink($pager, i, i, fnReloadList));
            }
            $pager.append(' ');
        }

        $pager.append(vbar).append(nextPageLink).append(vbar).append(lastPageLink);
        $pager.show();
    }
    else {
        $pager.hide();
    }
}

function updateListPagerAdmin(pager, totalItems, fnReloadList) {
    $pager = $obj(pager);
    var pageCount = getPageCountAdmin(totalItems);
    var currentPage = getCurrentPage($pager);
    if (currentPage == undefined) {
        currentPage = 1;
    } else if (currentPage > pageCount) {
        currentPage = pageCount;
        setCurrentPage($pager, pageCount);
    }

    var firstPageLink, prevPageLink, nextPageLink, lastPageLink;
    if (pageCount > 1) {
        // First, Prev page links
        if (currentPage > 1) {
            firstPageLink = pageLink($pager, 1, 'First', fnReloadList);
            prevPageLink = pageLink($pager, currentPage - 1, 'Prev', fnReloadList);
        } else {
            firstPageLink = '<span class="link-disabled">First</span>';
            prevPageLink = '<span class="link-disabled">Prev</span>';
        }
        // Next, Last page links
        if (currentPage < pageCount) {
            nextPageLink = pageLink($pager, currentPage + 1, 'Next', fnReloadList);
            lastPageLink = pageLink($pager, pageCount, 'Last', fnReloadList);
        } else {
            nextPageLink = '<span class="link-disabled">Next</span>';
            lastPageLink = '<span class="link-disabled">Last</span>';
        }
        
        // Numbered page links
        var startPage = 1;
        if (pageCount > QHR_LIST_PAGER_MAX_LINKS) {
            var currentPgAtCenter = currentPage - Math.floor(QHR_LIST_PAGER_MAX_LINKS / 2);
            var lastPgAtEnd = pageCount - QHR_LIST_PAGER_MAX_LINKS + 1;
            startPage = Math.min(Math.max(1, currentPgAtCenter), lastPgAtEnd);
        }

        var vbar = '<span style="color:#a0a0a0;"> | </span>';
        $pager.empty();
        $pager.append(firstPageLink).append(vbar).append(prevPageLink).append(vbar);

        for (var i = startPage; i <= pageCount && i < startPage+QHR_LIST_PAGER_MAX_LINKS; i++) {
            if (i == currentPage) {
                $pager.append('<span class="current-page">'+i+'</span>');
            } else {
                $pager.append(pageLink($pager, i, i, fnReloadList));
            }
            $pager.append(' ');
        }

        $pager.append(vbar).append(nextPageLink).append(vbar).append(lastPageLink);
        $pager.show();
    }
    else {
        $pager.hide();
    }
}

/**
 * Resets the list pager's current_page data.
 * @param {string | jQuery} pager  selector string or jQuery object
 */
function resetListPager(pager) {
    $obj(pager).data('current_page', 1); // reset current_page to 1
}

/**
 * Returns the number of page needed to display the total number of items.
 * @param {int} totalItems  the total number of items in the list
 */
function getPageCount(totalItems) {
    return Math.max(1, Math.ceil(totalItems / QHR_LIST_ITEMS_PER_PAGE));
}
function getPageCountAdmin(totalItems) {
    return Math.max(1, Math.ceil(totalItems / QHR_LIST_ITEMS_PER_PAGE_ADMIN));
}

/**
 * Returns the list pager's current_page data.
 * @param {string | jQuery} pager  selector string or jQuery object
 */
function getCurrentPage(pager) {
    return $obj(pager).data('current_page');
}

/**
 * Sets the list pager's current_page data.
 * @param {string | jQuery} pager  selector string or jQuery object
 * @param {int} num  the new page number
 */
function setCurrentPage(pager, num) {
    return $obj(pager).data('current_page', num);
}

/**
 * Returns a link object to load the specified page number.
 * @param {string | jQuery} pager  selector string or jQuery object
 * @param {int} num       the page number
 * @param {string} label  the link label
 * @param {function} fnReloadList  the function to reload the list
 */
function pageLink(pager, num, label, fnReloadList) {
    if (label == undefined) var label = num+"";
    var $linkObj = $('<a href="#" style="color: #000;">'+label+'</a>');
    $linkObj.click(function () {
        $obj(pager).data('current_page', num);
        fnReloadList();
		return false;
    });
    return $linkObj;
}


/// Dialog /////////////////////////////////////////////////////////////////////

/**
 * Shows the given URL on a popup window.
 */
function showPopup(myUrl, title, width, height) {
    if (width == undefined) var width = 800;
    if (height == undefined) var height = 600;
    var options = "width="+width+",height="+height+",menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=1";
    window.open(myUrl, title, options);
}


/// Input Fields //////////////////////////////////////////////////////////////

function initFieldWatermark(field, imgUrl) {
    var bgImgUrl = 'url("'+imgUrl+'")';

    $(field).css('background-image', bgImgUrl).css('background-repeat', 'no-repeat')
    .focus(function () {
          $(this).css('background-image', '');
    })
    .blur(function () {
          if ($(this).val() == '') {
              $(this).css('background-image', bgImgUrl);
          }
    });
}


/// Upload /////////////////////////////////////////////////////////////////////

function initFileUpload(targetUrl, button, fileNameInput, fnComplete) {
    new AjaxUpload($(button),{
        action: targetUrl,
        name: fileNameInput,
        onSubmit : function(file, ext){
            if (! (ext && /^(csv)$/.test(ext))) {
                alert('Error: invalid image file extension');
                return false;
            }
        },
        onComplete: function(file, response){
            fnComplete(response, file);
        }
    });
}

/// Misc //////////////////////////////////////////////////////////////////////

function format_number(val) {
    var a = val;
    var b = String(a.replace(/[^\d]/g,""));
    var c = String("");
    var i = Number(0);
    var j = Number(0);
    var k = Number(b.length);
    for (i = k; i > 0; i--) {
        j = j + 1;
        if (((j % 3) == 1) && (j != 1)) {
            c = b.substr(i-1,1) + "," + c;
        } else {
            c = b.substr(i-1,1) + c;
        }
    }
    return c;
}

function amountFormatted(ex) {
	if (ex != null && ex != '') {
		ex = ex.toFixed(2);
		ex = ex.replace('.',',');
		ex = ex.split(',');
		ex[0] = format_number(ex[0]);
		if (ex[1] != null) ex = ex[0]+'.'+ex[1];
		else ex = ex[0]+'.00';
	} else {
		ex = '0.00';
	}
	
	return ex;
}

function removeAmountFormatted(ex) {
	if (ex != null && ex != '') {
		ex = ex.split('.');
		ex[0] = ex[0].replace(/,/g,'');
		if (ex[1] != null) ex = ex[0]+'.'+ex[1];
		else ex = ex[0]+'.00';
	} else {
		ex = '0.00';
	}
	
	return ex;
}

function init_datepicker(dateField, options) {
    var defaultOptions = {
		changeMonth: true,
		changeYear: true,
		duration: 'fast',
		dateFormat: 'dd/mm/yy',
		yearRange: '1920:2019',
		showOn: 'both',
		showButtonPanel: true,
		closeText: "Close",
		//appendText: "&nbsp;(dd/mm/yyyy)",
		buttonImage: "rsrc/img/calendar.gif",
		buttonImageOnly: true
    };
    if (options != undefined) {
        $.extend(defaultOptions, options);
    }
    $obj(dateField).datepicker(defaultOptions);
}

function getDayDiff(from, to)
{
	var one_day=1000*60*60*24;
	return Math.ceil((to-from)/(one_day));
}

function getLastDayOfMonth(month, year)
{
	if (month == 1) return 31;
	else if (month == 2 && year % 4 ==0 ) return 29;
	else if (month == 2 && year % 4 !=0 ) return 28;
	else if (month == 3) return 31;
	else if (month == 4) return 30;
	else if (month == 5) return 31;
	else if (month == 6) return 30;
	else if (month == 7) return 31;
	else if (month == 8) return 31;
	else if (month == 9) return 30;
	else if (month == 10) return 31;
	else if (month == 11) return 30;
	else if (month == 12) return 31;
}

function setListTableNoData(tbl)
{
	$('#'+tbl).append('<tr><td colspan="2" style="background-color:transparent; color:#FF0000; font-weight:bold; ">NO DATA !!</td></tr>') 
}
