/**
 * システム名：新CiNii
 * cinii.js Copyright FUJITSU LIMITED 2008.
 * NO.  日付        Ver.    更新者             内容
 * 1    20080722    1.0     富士通株式会社     新規作成
 * 2    20090619    1.1     富士通株式会社     負の数のバリッドチェックを行うように修正
 *                                                 対応箇所: 巻、号、ページ、出版年(From)、出版年(To)
 * 3    20090622    1.1     富士通株式会社     OpenURL受信ページング対応(検索項目ページのUI変更)
 */

function dosearch() {
	
	var validResult = validCheck();
	var urlLengthResult = urlLengthCheck();
	var voidResult = voidCheck();
	var fm = document.searchform;

	if(document.listoption){
		document.searchform.count.value = document.listoption.count.value;
		document.searchform.sortorder.value = document.listoption.sortorder.value;
	}
	
	if(validResult && urlLengthResult && voidResult) {

		if(document.searchform.submittime){
			if((new Date()).getTime() - document.searchform.submittime.getTime() < 2000){
				return false;
			}else{
				document.searchform.submittime = new Date();
			}
		}else{
			document.searchform.submittime = new Date();
		}
	
		if(fm.q.value == "フリーワード"){fm.q.value = "";}
		if(fm.q.value.length == 0){fm.q.disabled = true;}
		
		var normalsearch = document.getElementById('advanced_search').style.display == 'none';
		fm.title.disabled = normalsearch || fm.title.value.length == 0;
		fm.author.disabled = normalsearch || fm.author.value.length == 0;
		fm.affiliation.disabled = normalsearch || fm.affiliation.value.length == 0;
		fm.journal.disabled = normalsearch || fm.journal.value.length == 0;
		fm.issn.disabled = normalsearch || fm.issn.value.length == 0;
		fm.volume.disabled = normalsearch || fm.volume.value.length == 0;
		fm.issue.disabled = normalsearch || fm.issue.value.length == 0;
		fm.page.disabled = normalsearch || fm.page.value.length == 0;
		fm.publisher.disabled = normalsearch || fm.publisher.value.length == 0;
		fm.references.disabled = normalsearch || fm.references.value.length == 0;
		fm.year_from.disabled = normalsearch || fm.year_from.value.length == 0;
		fm.year_to.disabled = normalsearch || fm.year_to.value.length == 0;

		document.searchform.submit();
		
		fm.q.disabled = false;
		if(fm.q.value.length == 0){
			fm.q.value = "フリーワード";
			fm.q.style.color = "#999999";
        }
		fm.title.disabled = false;
		fm.author.disabled = false;
		fm.affiliation.disabled = false;
		fm.journal.disabled = false;
		fm.issn.disabled = false;
		fm.volume.disabled = false;
		fm.issue.disabled = false;
		fm.page.disabled = false;
		fm.publisher.disabled = false;
		fm.references.disabled = false;
		fm.year_from.disabled = false;
		fm.year_to.disabled = false;
		
	}
	return validResult && urlLengthResult && voidResult;
}

function deleteCoordinatesByKey() {
    if((window.attachEvent && !window.opera) && (event.keyCode == 13)){
    	dosearch();
    	return false;
    }
    return true;
}

function validCheck(){
	var issn = document.searchform.issn; 
	var volume = document.searchform.volume;
	var issue = document.searchform.issue;
	var page = document.searchform.page;
	var year_from = document.searchform.year_from;
	var year_to = document.searchform.year_to;
	var errormessage = "";

	//ISSNチェック
	if(issn.value.length > 16) {
		errormessage = "ISSN の桁数が不適切です。ISSNを16桁以内で入力してください。";
	}	
	if(issn.value.length > 0 && ! Fulltohalf(issn.value).match(/^[0-9xXｘＸ‐-]+$/)){
		errormessage = "ISSN の入力文字が不適切です。ISSNは数字およびアルファベットの'X'、'x'、記号の'‐'、'-'のみ入力可能です。";
	}
	
	//巻チェック
	if(volume.value.length > 9) {
		errormessage = "巻 の桁数が不適切です。巻を9桁以内で入力してください。";
	}
	// 20090619 MODIFY START 負の数のバリッドチェックを行うように修正
	// if( isNaN(Fulltohalf(volume.value))) {
	if(volume.value.length > 0 && ! Fulltohalf(volume.value).match(/^[0-9]+$/)){
		errormessage = "巻 の入力文字が不適切です。巻は数字で入力して下さい。";
	}
	
	//号チェック
	if(issue.value.length > 9) {
		errormessage = "号 の桁数が不適切です。号を9桁以内で入力してください。";
	}
	// if( isNaN(Fulltohalf(issue.value))) {
	if(issue.value.length > 0 && ! Fulltohalf(issue.value).match(/^[0-9]+$/)) {
		errormessage = "号 の入力文字が不適切です。号は数字で入力して下さい。";
	}
	
	// 20090622 MODIFY START OpenURL受信ページング対応(検索項目ページのUI変更)
	//ページチェック
	if(page.value.length > 9) {
		//errormessage = "ページ の桁数が不適切です。ページを9桁以内で入力してください。";
		var hyphenindex = Fulltohalf(page.value).indexOf("-", 0);
		if(hyphenindex > -1) {
			// 開始ページ桁数チェック
			if(hyphenindex > 9) {
				errormessage = "開始ページ の桁数が不適切です。開始ページを9桁以内で入力してください。";
			}
			// 終了ページ桁数チェック
			if((page.value.length - (hyphenindex + 1)) > 9) {
				errormessage = "終了ページ の桁数が不適切です。終了ページを9桁以内で入力してください。";
			}
		} else {
			errormessage = "ページ の桁数が不適切です。ページを9桁以内で入力してください。";
		}
	}
	// if( isNaN(Fulltohalf(page.value))) {
	if(page.value.length > 0 && ! Fulltohalf(page.value).match(/^[0-9-]+$/)) {
		errormessage = "ページ の入力文字が不適切です。ページは数字および記号の'-'のみ入力可能です。";
	} else {
		var hyphenindex = Fulltohalf(page.value).indexOf("-", 0);
		// 1つ目の"-"
		if(hyphenindex > -1) {
			// 2つ目の"-"
			if(Fulltohalf(page.value).indexOf("-", hyphenindex + 1) > -1) {
				errormessage = "ページ の入力文字の記号 '-' の数が不適切です。'-' は１つ以下で入力して下さい。";
			}
		}
	}
	// 20090622 MODIFY END OpenURL受信ページング対応(検索項目ページのUI変更)
	
	//出版年（From）チェック
	if(year_from.value.length > 4) {
		errormessage = "出版年 の桁数が不適切です。出版年を4桁以内で入力してください。";
	}
	// if( isNaN(Fulltohalf(year_from.value))) {
	if(year_from.value.length > 0 && ! Fulltohalf(year_from.value).match(/^[0-9]+$/)) {
		errormessage = "出版年 の入力文字が不適切です。出版年は数字で入力して下さい。";
	}
	
	//出版年（To）チェック
	if(year_to.value.length > 4) {
		errormessage = "出版年 の桁数が不適切です。出版年を4桁以内で入力してください。";
	}
	// if( isNaN(Fulltohalf(year_to.value))) {
	if(year_to.value.length > 0 && ! Fulltohalf(year_to.value).match(/^[0-9]+$/)) {
		errormessage = "出版年 の入力文字が不適切です。出版年は数字で入力して下さい。";
	}
	// 20090619 MODIFY END 負の数のバリッドチェックを行うように修正
	
	// フリーワード
	if(! searchOperaorCheck(document.searchform.q.value)){
		errormessage = "フリーワード の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	// 論文名
	if(! searchOperaorCheck(document.searchform.title.value)){
		errormessage = "論文名 の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	// 著者名
	if(! searchOperaorCheck(document.searchform.author.value)){
		errormessage = "著者名 の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	//著者所属
	if(! searchOperaorCheck(document.searchform.affiliation.value)){
		errormessage = "著者所属 の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	// 刊行物名
	if(! searchOperaorCheck(document.searchform.journal.value)){
		errormessage = "刊行物名 の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	// 出版者
	if(! searchOperaorCheck(document.searchform.publisher.value)){
		errormessage = "出版者 の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	// 参考文献
	if(! searchOperaorCheck(document.searchform.references.value)){
		errormessage = "参考文献 の入力が不適切です。項目間のOR検索、NOT検索は行えません。";
	}
	
	if(errormessage.length > 0) {
		document.getElementById("validation_error").innerHTML = "<p class=\"error_list\">" + errormessage + "</p>";
		document.getElementById("validation_error").style.display = "block";
		return false;
	}
	
	return true;
}

String.prototype.trim = function() {
	return this.replace(/^[\s　]+|[\s　]+$/g, '');
}

function searchOperaorCheck(value){
	value = value.trim().replace("　", " ");
	if(value.indexOf("OR ") == 0
		|| value.indexOf("ＯＲ ") == 0
		|| value.indexOf("NOT ") == 0
		|| value.indexOf("ＮＯＴ ") == 0
		|| value.indexOf("-") == 0
		|| value.indexOf("\| ") == 0
		|| value.indexOf("\｜ ") == 0
	){
		return false;
	}
	return true;
	
}

function voidCheck(){
	var fm = document.searchform;
	return ! ((fm.q.value.length == 0 || fm.q.value == "フリーワード") && fm.title.value.length == 0 && fm.author.value.length == 0 &&
			fm.affiliation.value.length == 0 && fm.journal.value.length == 0 && fm.issn.value.length == 0 &&
			fm.volume.value.length == 0 && fm.issue.value.length == 0 && fm.page.value.length == 0 &&
			fm.publisher.value.length == 0 && fm.references.value.length == 0 && fm.year_to.value.length == 0 && fm.year_from.value.length == 0);
}

function urlLengthCheck(){

	if(! (window.attachEvent && !window.opera)){
		return true;
	}
	var fm = document.searchform;
	var url = "http://ci.nii.ac.jp/search";

	var total = url.length;
	
	if(fm.q.value != "フリーワード" && fm.q.value.length != 0){total += encodeURIComponent(fm.q.value).length + 3}
	total += 8; //range
	total += encodeURIComponent(fm.count.value).length + 7;
	total += encodeURIComponent(fm.sortorder.value).length + 11;
	
	if(document.getElementById('advanced_search').style.display != 'none'){
		if(fm.title.value.length != 0){total += encodeURIComponent(fm.title.value).length + 7}
		if(fm.author.value.length != 0){total += encodeURIComponent(fm.author.value).length + 8}
		if(fm.affiliation.value.length != 0){total += encodeURIComponent(fm.affiliation.value).length + 13}
		if(fm.journal.value.length != 0){total += encodeURIComponent(fm.journal.value).length + 9}
		if(fm.issn.value.length != 0){total += encodeURIComponent(fm.issn.value).length + 6}
		if(fm.volume.value.length != 0){total += encodeURIComponent(fm.volume.value).length + 8}
		if(fm.issue.value.length != 0){total += encodeURIComponent(fm.issue.value).length + 7}
		if(fm.page.value.length != 0){total += encodeURIComponent(fm.page.value).length + 6}
		if(fm.publisher.value.length != 0){total += encodeURIComponent(fm.publisher.value).length + 11}
		if(fm.references.value.length != 0){total += encodeURIComponent(fm.references.value).length + 12}
		if(fm.year_from.value.length != 0){total += encodeURIComponent(fm.year_from.value).length + 11}
		if(fm.year_to.value.length != 0){total += encodeURIComponent(fm.year_to.value).length + 9}
	}
	
	if(total > 2083) {
		alert("URLの長さが2083文字を超えました。");
		return false;
	}
	
	return true;
}

function linkUrlLengthCheck(url){
	if(! (window.attachEvent && !window.opera)){
		return true;
	}
	var header = "http://ci.nii.ac.jp";
	if(url.length + header.length > 2083) {
		alert("URLの長さが2083文字を超えました。");
		return false;
	}
	return true;
}

function Fulltohalf(data) {
	var char1 = new Array("１","２","３","４","５","６","７","８","９","０");
	var char2 = new Array(1,2,3,4,5,6,7,8,9,0);
	var count;
	
	while(data.match(/[０-９]/)){     	//入力データに全角数字がある場合
		for(count = 0; count < char1.length; count++){
				//入力データを全角数字から半角数字に置換する
			data = data.replace(char1[count], char2[count]);
		}
	}
	return data;
}

function openALL(){

	if(document.actionform.fileType.value == "default"){
		return false;
	}
	
	if(document.actionform.submittime){
		if((new Date()).getTime() - document.actionform.submittime.getTime() < 2000){
			return false;
		}else{
			document.actionform.submittime = new Date();
		}
	}else{
		document.actionform.submittime = new Date();
	}

	if(document.actionform.fileType.value == 0){
		var uri = "/naid/";
		document.searchform.target = "_blank";
		document.searchform.method = "post";
		if(document.searchform.q.value == "フリーワード"){
			document.searchform.q.value = "";
		}
		
		if(document.articlelist.docSelect.length){
			for(var i=0; i<document.articlelist.docSelect.length; i++){
				if(i == 20){
					break;
				}
				if(document.articlelist.docSelect[i].checked){
					document.searchform.action = "/naid/" + document.articlelist.docSelect[i].value
					document.searchform.submit();
				}
			}
		}else{
			document.searchform.action = "/naid/" + document.articlelist.docSelect.value
			document.searchform.submit();
		}
		resetSearchbox();
		
	}else{
		var checked = false;
		
		if(document.articlelist.docSelect.length){
			for(var i=0; i<document.articlelist.docSelect.length; i++){
				if(document.articlelist.docSelect[i].checked){
					checked = true;
					break;
				}
			}
		}else{
			if(document.articlelist.docSelect.checked){
				checked = true;
			}
		}
		if(checked){
			document.articlelist.submit();
		}
	}
	return false;
}

function checkALL(check){
	
	if(document.articlelist.docSelect.length){
		for(var i=0; i<document.articlelist.docSelect.length; i++){
			document.articlelist.docSelect[i].checked = check;
		}
	
	}else{
		document.articlelist.docSelect.checked = check;
	}
	
}

function nocheckalert(){

	if(document.actionform.fileType.value == "default"){
		return false;
	}

    var flg = 0;
    if(document.articlelist.docSelect.length){
        if(document.actionform.fileType.value != 0){
            for(var i=0; i<document.articlelist.docSelect.length; i++){
                if(document.articlelist.docSelect[i].checked){
                    flg++;
                }
            }
            if(flg == 0){
                alert("チェックボックスを選択してください");
            }
        }
    }else{
        if(document.actionform.fileType.value != 0){
            if(document.articlelist.docSelect.checked){
                flg++;
            }
            if(flg == 0){
                alert("チェックボックスを選択してください");
            }
        }
    }
}

function resetSearchbox(){
	document.searchform.target = "";
	document.searchform.method = "get";
	document.searchform.action = "/search";
	if(document.searchform.q.value == ""){
		document.searchform.q.value = "フリーワード";
	}
}

function opendetail(naid){
	if(document.searchform.q.value == "フリーワード"){
		document.searchform.q.value = "";
	}
	document.searchform.action = "/naid/" + naid;
	document.searchform.method = "post";
	document.searchform.submit();
	resetSearchbox();
	return false;
}

function detailpaging(uri){
	var lengthCheck = linkUrlLengthCheck(uri);
	if(! lengthCheck){
		return false;
	}
	if(document.searchform.q.value == "フリーワード"){
		document.searchform.q.value = "";
	}
	document.searchform.action = uri;
	document.searchform.method = "post";
	document.searchform.submit();
	resetSearchbox();
	return false;
}
