// JavaScript generic functions common to all pages
//////////////////////////////////////////////////////////////////////

//------------------------------------------------------------------------
// Open Demo Applet 
function openDemo()
{
	window.open("kscore.html","Karya Score","menubar=1,resizable=1,width=220,height=465");
}


//------------------------------------------------------------------------
function clearDefault(el, defvalue) {
if ((el.defaultValue==el.value)&&(el.value == defvalue)) el.value = ""
}

//------------------------------------------------------------------------
// Shows <div>s with the given idString, a " " separated list of ids 
function show(idString) { 
	var idList = idString.split(" ");
	var id="";
	for (i=0; i<idList.length; i++) {
		id = idList[i];
        if (document.getElementById) { // DOM3 = IE5, NS6
				var el = document.getElementById(id);
				if (el) { el.style.display = 'block';}
        } else if (document.layers) {  
                document.id.display = 'block';
        } else {
                document.all.id.style.display = 'block';
        } 
	}
}

//------------------------------------------------------------------------
// Shows <div>s with the given idString, a " " separated list of ids 
function hide(idString) { 
	var idList = idString.split(" ");
	var id="";
	for (i=0; i<idList.length; i++) {
		id = idList[i];
        if (document.getElementById) { // DOM3 = IE5, NS6
				var el = document.getElementById(id);
				if (el) { el.style.display = 'none';}
        } else if (document.layers) {   
                document.id.display = 'none';
        } else {
                document.all.id.style.display = 'none';
        } 
	}
}


// ----------------------------------------
// hides one div,shows the other
function toggleDiv(div1Name, div2Name) {
	var div1 = $(div1Name);
	var div2 = $(div2Name);
	if (!div1 || !div2) {
		return false;
	}
	if (div1.style.display == 'none') {
		div1.style.display = 'block';
		div2.style.display = 'none';
	} else {
		div1.style.display = 'none';
		div2.style.display = 'block';
	}
	return false;
}


//------------------------------------------------------------------------
// Cookie utilities
function createCookie(name,value,days)
{
        if (days)
        {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
}

//------------------------------------------------------------------------
function readCookie(name)
{
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++)
        {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
        }
        return null;
}

//------------------------------------------------------------------------
function eraseCookie(name)
{
        createCookie(name,"",-1);
}


// --------------------------------------------------------
function formatPhoneNumber(elem){
    var str2 = document.getElementById(elem).value;
    if(str2 == ""){
       document.getElementById('mobile').value = "";
       return(true);
    }
    str = str2.replace(/[\s\.\-\/]+/g,"");
    sub1 = str.substr(0,str.length-7);
    sub2 = str.substr(str.length-7,3);
    sub3 = str.substr(str.length-4,4);
    formattedstr = sub1+"-"+sub2+"-"+sub3;
    document.getElementById('mobile').value = formattedstr;
    return(true);
}

// --------------------------------------------------------
function addEvent(objObject, strEventName, fnHandler) {
 // DOM-compliant way to add an event listener
 if (objObject.addEventListener)
   objObject.addEventListener(strEventName, fnHandler, false);
 // IE/windows way to add an event listener
 else if (objObject.attachEvent)
   objObject.attachEvent("on" + strEventName, fnHandler);
}


// -----------------------------------------
// Change string to proper case
function toProperCase(s)
{
  if(!s) { return ""; }
  return s.toLowerCase().replace(/^(.)|\s(.)/g, 
          function($1) { return $1.toUpperCase(); });
}

// -----------------------------------------
// Trim leading/trailing whitespace off string
function trim(str)
{
  if(str) {
   return str.replace(/^\s+|\s+$/g, '');
  } else {
	 return "";
  }
}

// -----------------------------------------
// Delayed focus setting to get around IE bug
function setFocusDelayed()
{
  glb_vfld.focus()
}

// -----------------------------------------
// save vfld in global variable so value retained when routine exits
function setfocus(vfld)
{
  glb_vfld = vfld;
  setTimeout( 'setFocusDelayed()', 100 );
}

// -----------------------------------------
// Display warn/error message in HTML element
function displaymsg(fld,  // id of element to display message in
             	message,  // string to display
			  	msgtype) // class to give element ("warn" or "error")) 
{
  var elem = document.getElementById(fld);
  elem.innerHTML = message; 
  if (msgtype) { 
	elem.className = msgtype;   // set the CSS class to adjust appearance of message
  }
}

// -----------------------------------------
// Validate e-mail address
// Returns true if so (and also if could not be executed because of old browser)
function validateEmail  (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
						 message,    // message to be displayed
                         reqd)   // true if required
{
  if (message == '') {message = "Email not valid.";}

  vfld = document.getElementById(vfld);
  if (!vfld) {
  	displaymsg (ifld, message);
    return false;
  }
  var tfld = trim(vfld.value);  // value of field with whitespace trimmed off
  if (reqd) {
  	if (!validateRequired(vfld, ifld,  message, reqd)) { return false; } 
  } else {
	if (tfld == "") {
	 displaymsg(ifld, "");
	 return true;
	} 
  }
  
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
  if (!email.test(tfld)) {
    displaymsg (ifld, message);
    setfocus(vfld);
    return false;
  }
  displaymsg (ifld, "");
  return true;
}

// -----------------------------------------
// Validate a required field
// Returns true if so (and also if could not be executed because of old browser)
function validateRequired(vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         message, 
						 reqd)   // true if required
{
  if (message == '') {message = "Required.";}
  
  elem = document.getElementById(vfld);
  if (!elem) {
  	displaymsg (ifld, message);
    return false;
  }
  
  if (elem.disabled == true) {  // return true if the field is disabled
  	displaymsg (ifld, "");
  	return true;
  }
  
  if (elem.type=="checkbox") {
	return(elem.checked);
  }
  
  var tfld = trim(elem.value);  // value of field with whitespace trimmed off
  if (reqd && (tfld == "")) {
	displaymsg (ifld, message);
    setfocus(elem);
    return false;
  }
  displaymsg (ifld, "");
  return true;
}

// -----------------------------------------
// Validate telephone number
// Returns true if so (and also if could not be executed because of old browser)
// Requires 11 digit number starting with '0'
function validatePhone  (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         message,
						 reqd)   // true if required
{
  if (message == '') {message = "Invalid phone.";}
	
  elem = document.getElementById(vfld);
  if (!elem) {
  	displaymsg (ifld, message);
    return false;
  }
  var tfld = trim(elem.value);  // value of field with whitespace trimmed off

  if (reqd) {
  	if (!validateRequired(vfld, ifld,  message, reqd)) { return false; } 
  } else {
	if (tfld == "") {
	 displaymsg(ifld, "");
	 return true;
	} 
  }
	  
  // remove ' ', '.', '-', '+', '(', ')'
  var tfld = elem.value;  
  tfld = tfld.replace(/\s|-|\+|\.|\(|\)/g,""); 
  elem.value = tfld;
  
  // check empty string
  if (reqd && (tfld == "")) {
	displaymsg (ifld, message);
	setfocus(vfld);
	return false;
  }
  
  // invalid characters
  var telnr = /^\+?[0-9 ()-]+[0-9]$/
  if (!telnr.test(tfld)) {
    displaymsg(ifld, message);
    setfocus(vfld);
    return false;
  }
  
  // require start with '0'
  if ((tfld.length > 0)  && (tfld.charAt(0)!='0')) {
	displaymsg (ifld, message);
    setfocus(vfld);
    return false;
  }
  
  // require 11 digit number
  var numdigits = 0;
  for (var j=0; j<tfld.length; j++) {
    if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;
  }

  if (numdigits != 11) {
    displaymsg (ifld, message);
    setfocus(vfld);
    return false;
  }
  				 
  displaymsg (ifld, "");
  return true;
}

// -----------------------------------------
// Validate  number
function validateNumber  (vfld,   // element to be validated
                         ifld,   // id of element to receive info/error msg
                         message,
						 reqd)   // true if required
{ 
  if (message == '') {message = "Numeric field required.";}
  
  elem = document.getElementById(vfld);
  if (!elem) {
  	displaymsg (ifld, "Field not found.");
    return false;
  }
  var tfld = trim(elem.value);  // value of field with whitespace trimmed off
  
  // remove ' ', '.', '-', '+', '(', ')'
  var tfld = elem.value;  
  tfld = tfld.replace(/\s/g,""); 
  elem.value = tfld;
    
  if (reqd) {
  	if (!validateRequired(vfld, ifld,  message, reqd)) { return false; } 
  } else {
	if (tfld == "") {
	 displaymsg(ifld, "");
	 return true;
	} 
  }
  // digits, ',', and '.' only
  var nr = /[^(0-9|\.|,)]/
  if (nr.test(tfld)) {
    displaymsg(ifld, message);
    setfocus(vfld);
    return false;
  }

  displaymsg (ifld, "");
  return true;
}

// -----------------------------------------
function validateRadio(vfld,   // element to be validated
                       ifld,   // id of element to receive info/error msg
                       message,
					   reqd) {
	if (!reqd) {
		return true;
	}
	
	var radioList = document.getElementsByName(vfld);
	if (!radioList.length) {
		return true;
	}
	
	var radioChecked = false;
    for (var i=0; (i < radioList.length) && !(radioChecked); i++) {
		radioChecked = radioList[i].checked;
	}

	if (!radioChecked) {
		displaymsg(ifld, message);
		return false;
	}
	displaymsg (ifld, "");
    return true;
}

// -----------------------------------------
function validateSelect(vfld,   // element to be validated
                       ifld,   // id of element to receive info/error msg
                       message,
					   reqd) {
	if (!reqd) {
		return true;
	}
	
	var selectList = document.getElementById(vfld);
	if (typeof(selectList)== "undefined") {
		return true;
	}
	if (selectList.options[selectList.selectedIndex].value == "") {
		displaymsg(ifld, message);
		return false;
	}
	displaymsg (ifld, "");
    return true;
}


// -----------------------------------------
// Begin -- Date validation functions
function validateDate(vfld,   // element to be validated
                       ifld,   // id of element to receive info/error msg
                       message,
					   reqd) {
	if (!reqd) {
		return true;
	}
	
	if (!message) {
		message = 'Tarih geçersiz.';
	}
	
	var dateField = document.getElementById(vfld);
	if (chkdate(dateField) == false) {
		displaymsg(ifld, message);
		return false;
	}
	else {
		displaymsg (ifld, "");
		return true;
	}
}


function chkdate(datefield) {
//var strDatestyle = "US"; //United States date style
var strDatestyle = "TR";  //Turkish date style
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
var err = 0;
var strMonthArray = new Array(12);
strMonthArray[0] = "Jan";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Apr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Aug";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dec";
strDate = datefield.value;
if (strDate.length < 1) {
	return true;
}
for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
	if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
		strDateArray = strDate.split(strSeparatorArray[intElementNr]);
		if (strDateArray.length != 3) {
			err = 1;
			return false;
		} else {
			strDay = strDateArray[0];
			strMonth = strDateArray[1];
			strYear = strDateArray[2];
		}
		booFound = true;
   }
}
if (booFound == false) {
	if (strDate.length>5) {
		strDay = strDate.substr(0, 2);
		strMonth = strDate.substr(2, 2);
		strYear = strDate.substr(4);
   }
}
if (strYear.length == 2) {
	strYear = '20' + strYear;
}
// US style
if (strDatestyle == "US") {
	strTemp = strDay;
	strDay = strMonth;
	strMonth = strTemp;
}
intday = parseInt(strDay, 10);
if (isNaN(intday)) {
	err = 2;
	return false;
}
intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
	for (i = 0;i<12;i++) {
		if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
			intMonth = i+1;
			strMonth = strMonthArray[i];
			i = 12;
	   }
	}
	if (isNaN(intMonth)) {
		err = 3;
		return false;
	}
}
intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
	err = 4;
	return false;
}
if (intMonth>12 || intMonth<1) {
	err = 5;
	return false;
}
if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
	err = 6;
	return false;
}
if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
	err = 7;
	return false;
}
if (intMonth == 2) {
	if (intday < 1) {
		err = 8;
		return false;
	}
	if (LeapYear(intYear) == true) {
		if (intday > 29) {
			err = 9;
			return false;
		}
	} else {
		if (intday > 28) {
			err = 10;
			return false;
		}
	}
}

// to reformat the date field
if (strDatestyle == "US") {
	datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
}
else {
	intday = ((intday < 10) ? '0' : '') + intday; 	// pad zeros
	intMonth = ((intMonth < 10) ? '0' : '') + intMonth;
	datefield.value = intday + "/" + intMonth + "/" + strYear;
}

return true;
}


function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}
// End -- Date validation functions
// -----------------------------------------

// -----------------------------------------
// Format number
function formatNumber(vfld)   
{ 
  // remove ' ', '.', ','
  var tfld = vfld.value;  
  tfld = tfld.replace(/\s|\.|,/g,""); 
  vfld.value = tfld;
}

// -----------------------------------------
// Format phone number
function formatPhone(vfld)   
{ 
  // remove ' ', '.', '-', '+', '(', ')'
  var tfld = vfld.value;  
  tfld = tfld.replace(/\s|-|\+|\.|\(|\)/g,""); 
  vfld.value = tfld;
}

//-------------------------------
// Find active window size
// Browser Window Size and Position
function pageWidth() {
	return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth :null;
} 
//-------------------------------
function pageHeight() {
	return  window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ?  document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
} 
//-------------------------------
function posLeft() {
	return typeof window.pageXOffset != 'undefined' ? window.pageXOffset :document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
} 
//-------------------------------
function posTop() {
	return typeof window.pageYOffset != 'undefined' ?  window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
} 
//-------------------------------
function posRight() {return posLeft()+pageWidth();} 
//-------------------------------
function posBottom() {return posTop()+pageHeight();}
//-------------------------------


