﻿//Ver 1.0
//02/03 --emptycopmbo--> cmb_empty
//02/03 cmb_add eklendi
//01/07 UC_AIR Eklendi
/* ---------------------------------------------------------------------- *\
  BİRDENBİRE # Ali BİNGÖL 01/11/2009#
\* ---------------------------------------------------------------------- */
var MY=new function(){
    /* ---------------------------------------------------------------------- *\
      Common js
    \* ---------------------------------------------------------------------- */
    //IsDate
    this.IsDate=function(val)  {
        if(val=='undefined') return false;    
        if(val==null) return false;    
	    var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;	
	    var matchArray = val.match(datePat);	
	    if (matchArray == null) return false;	
    	
	    day = matchArray[1];
	    month = matchArray[3];
	    year = matchArray[5];
    	
	    if (month < 1 || month > 12)  return false;// check month range	
	    if (day < 1 || day > 31) return false;		
	    if ((month==4 || month==6 || month==9 || month==11) && day==31) return false;	
    	
	    if (month == 2) { // check for february 29th
		    var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		    if (day > 29 || (day==29 && !isleap)) return false;		
	    }
	    return true;
    }    
    //IsTime
    this.IsTime=function(strVal) {
	    var hours, minutes;
	    if (strVal.length != 5 || strVal.substring(2,3)!=":")	return false;
	    //saat kysmy
	    hours=strVal.substring(0,2);
	    if (isNaN(hours)==true) 	{ return false;	}
	    if (hours.substring(0,1)=='.' || hours.substring(1,2)=='.')	return false;
	    if ((parseInt(hours) >= 0 && parseInt(hours) < 24)==false) 	return false;
	    //dakika kysmy
	    minutes=strVal.substring(3,5);
	    if (isNaN(minutes)==true) 	return false;
	    if (minutes.substring(0,1)=='.' || minutes.substring(1,2)=='.')	return false;
	    if ((parseInt(minutes) >= 0 && parseInt(minutes) < 60)==false) 	return false;
	    return true;
    }    
    //IsNumeric
    this.IsNumeric=function(val) {    
       var ValidChars = "0123456789.",Char;       
       if(val=='') return false;
       for (i = 0; i < val.length; i++)  {
          Char = val.charAt(i);
          if (ValidChars.indexOf(Char) == -1) return false;
        }
       return true;
    }    
    //dateadd
    this.dateAdd=function(p_Interval, p_Number, p_Date){
	    if(isNaN(p_Number)){return "invalid number: '" + p_Number + "'";}	

	    p_Number = new Number(p_Number);
	    var dt = new Date(p_Date);
	    switch(p_Interval.toLowerCase()){
		    case "yyyy": {// year
			    dt.setFullYear(dt.getFullYear() + p_Number);
			    break;
		    }
		    case "q": {		// quarter
			    dt.setMonth(dt.getMonth() + (p_Number*3));
			    break;
		    }
		    case "m": {		// month
			    dt.setMonth(dt.getMonth() + p_Number);
			    break;
		    }
		    case "y":		// day of year
		    case "d":		// day
		    case "w": {		// weekday
			    dt.setDate(dt.getDate() + p_Number);
			    break;
		    }
		    case "ww": {	// week of year
			    dt.setDate(dt.getDate() + (p_Number*7));
			    break;
		    }
		    case "h": {		// hour
			    dt.setHours(dt.getHours() + p_Number);
			    break;
		    }
		    case "n": {		// minute
			    dt.setMinutes(dt.getMinutes() + p_Number);
			    break;
		    }
		    case "s": {		// second
			    dt.setSeconds(dt.getSeconds() + p_Number);
			    break;
		    }
		    case "ms": {		// second
			    dt.setMilliseconds(dt.getMilliseconds() + p_Number);
			    break;
		    }
		    default: {
			    return "invalid interval: '" + p_Interval + "'";
		    }
	    }
	    return dt;
    }    
    //datepart
    this.datePart=function (p_Interval, p_Date){
	    var dtPart = new Date(p_Date);
	    switch(p_Interval.toLowerCase()){
		    case "yyyy": return dtPart.getFullYear();
		    case "q": return parseInt(dtPart.getMonth()/3)+1;
		    case "m": return dtPart.getMonth()+1;
		    case "y": return dateDiff("y", "1/1/" + dtPart.getFullYear(), dtPart);			// day of year
		    case "d": return dtPart.getDate();
		    case "w": return dtPart.getDay();	// weekday
		    case "ww":return dateDiff("ww", "1/1/" + dtPart.getFullYear(), dtPart);		// week of year
		    case "h": return dtPart.getHours();
		    case "n": return dtPart.getMinutes();
		    case "s": return dtPart.getSeconds();
		    case "ms":return dtPart.getMilliseconds();	// millisecond	// <-- extension for JS, NOT available in VBScript
		    default: return "invalid interval: '" + p_Interval + "'";
	    }
    }    
    
    
    this.cmb_empty=function(cmb)   {
	    //Clears the state combo box contents.	    	    
	    for (var count = cmb.options.length-1; count >-1; count--)
	    {
		    cmb.options[count] = null;
	    }
	    return true
    }
    this.cmb_add=function(cmb,val,str)   {
	    cmb.options[cmb.options.length] = new Option(str, val);
	    return true
    }    
    
    /* ---------------------------------------------------------------------- *\
      UC_text
    \* ---------------------------------------------------------------------- */    
    var _objectsTEXT
    this.TEXT=function(objectId){                
        this.TEXT.Get=function() {  
            //alz('F')          
            if(!_objectsTEXT) return             
            for(var i=0;i<_objectsTEXT.length;i++) {
                if(_objectsTEXT[i].objectId==objectId) return _objectsTEXT[i];
            }
            return
        }        
        //initialize
        this.TEXT.Init=function(argIsMultiLang,argLangSep,argDefLangCode_InArray,argTextMode,argAllLangNames,preWarning,imageList,maxlength) {
            if(!_objectsTEXT) _objectsTEXT=new Array();
            var _new=new TEXT_Init(objectId,argIsMultiLang,argLangSep,argDefLangCode_InArray,argTextMode,argAllLangNames,preWarning,imageList,maxlength)
            _objectsTEXT[_objectsTEXT.length]=_new
            return _new
        }
        //objects
        this.TEXT_objects=_objectsTEXT;
        return this.TEXT ;        
    }
    
    function TEXT_Init(objectId,argIsMultiLang,argLangSep,argDefLangCode_InArray,argTextMode,argAllLangNames,preWarning,imageList,maxlength){     
        this.objectId=objectId;
        this.IsMultiLang=argIsMultiLang;
        this.SEP=argLangSep;
        this.DefLangCode_InArray=argDefLangCode_InArray;
        this.TextMode=argTextMode;        
        this.AllLangNames=argAllLangNames;
        this.preWarning=preWarning;        
        this.imageList=imageList;
        this.maxlength=(maxlength?maxlength:0);
        //
        var txtALLVALS=$('#'+this.objectId+'_TXTAllVal');
        var txtDEF_JQ;
        if(this.TextMode==3){//EDITOR             
            this.IsTiny=true;
            $('.txtNormalA').ckeditor();
            //$('#'+this.objectId+'_TXT').ckeditor(); // böyle olursa bir önceki yok oluyor, mecburen clas'dan gideceğiz ve document.readyde
            //config buttons, her seferde yapacak ama olsun
            CKEDITOR.config.skin='office2003';
            CKEDITOR.config.toolbarStartupExpanded=false;
            CKEDITOR.config.toolbar = [ //'Image','Flash'
                ['Bold','Italic','Underline','Strike','-','Subscript','Superscript','NumberedList','BulletedList','-','Outdent','Indent','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
                ['Link','Unlink','Table','HorizontalRule','Font','FontSize','TextColor','BGColor'],'/',
                ['Cut','Copy','Paste','PasteText','PasteFromWord','-','SpellChecker', 'Scayt'],
                ['Undo','Redo','-','Find','Replace','-','Source','Preview','Templates','Print','Maximize']
            ];

            //set blur
            CKEDITOR.instances[this.objectId+'_TXT'].on('blur', function(e){
                 $('#'+this.name).trigger('blur');
            });
        }else{
            this.IsTiny=false;
            txtDEF_JQ=$('#'+this.objectId+'_TXT');
        }
        //sub functions               
        this.TextGet=function ()    { //default obje value, tiny veya $Query            
            if(this.IsTiny)                
                return CKEDITOR.instances[this.objectId+'_TXT'].getData();             
            else
                return txtDEF_JQ.val();
        }
        this.TextSet=function (value)    { //default obje value, tiny veya $Query            
            if(this.IsTiny)                                
                CKEDITOR.instances[this.objectId+'_TXT'].setData(value);
            else
                txtDEF_JQ.val(value);
            return true
        }
        //sadece default girilen text maxlength'den fazla mı diye bakar, zaten diğerlerini açılan popouptan kontrol ediyoruz
        this.IsValid=function ()    {
            if(this.maxlength==0) return true
            var val=this.TextGet()
            if(val.length>this.maxlength) return false
            return true
        }        
        this.Serialize=function ()    {
            var lcRet=''    
            var lcArr=txtALLVALS.val().split(this.SEP);//all old data
            for (var i=0;i<lcArr.length;i++){
                if(i==this.DefLangCode_InArray){
                    lcRet +=this.TextGet();//default data, (text entry may change)
                }else{
                    lcRet +=lcArr[i]
                }
                if(i<lcArr.length-1) lcRet +=this.SEP //except last one
            }    
            return lcRet    
        }        
        //
        this.DeSerialize=function (datas)    {
            txtALLVALS.val(datas)
            var lcArr=datas.split(this.SEP);
            this.TextSet(lcArr[this.DefLangCode_InArray]);//default show data
            //
            this.ShowWarnings();
        }
        //
        this.ShowWarnings=function ()    {                
            $('#spnMsg'+this.objectId).html('');
            var lcMessage=''
            var lcArrNames=this.AllLangNames.split(this.SEP);
            var lcArr=txtALLVALS.val().split(this.SEP);//all data            
            for (var i=0;i<lcArr.length;i++){        
                if(lcArr[i]==''){
                    //Sistemde tanımlı olmayanlar için mesaj çıkmasın
                    if(i<lcArrNames.length) lcMessage +=(lcMessage==''?'':',') + lcArrNames[i];
                }
            }
            if(lcMessage!=''){
                $('#spnMsg'+this.objectId).html('<br /><b>'+preWarning+'</b> : ' + lcMessage);
            }
        }
        //ilk seferde henüz hiç data olmayabilri. O zaman tamamına missing yazsın diye default val set edelim
        if(this.IsMultiLang) {
            var lcalldata=txtALLVALS.val()
            if(lcalldata=='') {
                var lcArrNames=this.AllLangNames.split(this.SEP);
                for (var i=0;i<lcArrNames.length;i++){lcalldata +=this.SEP}
                txtALLVALS.val(lcalldata);
            }
            this.ShowWarnings();
        }
    }
    /* ---------------------------------------------------------------------- *\
      UC_dat için 
    \* ---------------------------------------------------------------------- */    
    this.DAT=function(objectId){            
        return Init_DAT(this,objectId)
    }
    function Init_DAT(parent,objectId) {
        this.IsValid=function(){
            return parent.IsDate(this.RetVal())
        }
        this.RetVal=function(){            
            if(!$('#' + objectId+'_chkDate:checked')) { //not checked
                return '01/01/1900'
            }
            return $('#' + objectId+'_txtDate').val();
        }
        this.SetVal=function(value){
            $('#' + objectId+'_txtDate').val(value);
        }
        this.RetValDate=function(){
            var dtStr=this.RetVal();
            return ConvertStrToDate(dtStr)
        }        
        this.SetValDate=function(value){
	        var xDay = parent.datePart('d',value),xMon = parent.datePart('m',value);	
	        if (xDay<10) xDay='0' + xDay;            
            if (xMon<10) xMon='0' + xMon;
            $('#' + objectId+'_txtDate').val(xDay + '/'+ xMon + '/'+ parent.datePart('yyyy',value));
        }        

        // dd/mm/yyyy
        function ConvertStrToDate(argDateStr) {
	        var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	        var matchArray = argDateStr.match(datePat); // is the format ok?	
	        day = matchArray[1];
	        month = matchArray[3];
	        year = matchArray[5];        	
            return new Date(month + '/'+ day + '/'+ year) ;
        }
        return this;
    }
    /* ---------------------------------------------------------------------- *\
      UC_Air için 
    \* ---------------------------------------------------------------------- */    
    var _objectsAIR
    this.AIR=function(objectId){                
        this.AIR.Get=function() {  
            //alz('F')          
            if(!_objectsAIR) return             
            for(var i=0;i<_objectsAIR.length;i++) {
                if(_objectsAIR[i].objectId==objectId) return _objectsAIR[i];
            }
            return
        }        
        //initialize
        this.AIR.Init=function() {
            if(!_objectsAIR) _objectsAIR=new Array();
            var _new=new AIR_Init(objectId)
            _objectsAIR[_objectsAIR.length]=_new
            return _new
        }
        //objects
        this.AIR_objects=_objectsAIR;
        return this.AIR ;
    }

    function AIR_Init(objectId){     
        this.objectId=objectId;
        //
        //var txtALLVALS=$('#'+this.objectId+'_TXTAllVal');
        var txtDEF_JQ=$('#'+this.objectId+'_TXT');        
        var hidVAL_JQ=$('#'+this.objectId+'_hidVal');        
	    txtDEF_JQ.autocomplete("ServiceLocale.asmx/SearchAirports", {
		    minChars: 0,
		    width: txtDEF_JQ.width()+100,
            dataType: 'json',
            httpMethod: 'POST',        
            contentType: 'application/json; charset=utf-8',		
		    autoFill: false,
		    formatItem: function(row, i, max) {
			    var rowx=row[0].split('$');			
			    if(parseInt(rowx[0])<0) 
			        return '<img src="images/city.png" />'+rowx[1];
			    else    
			        return '<img src="images/plane.png" />'+rowx[1];
		    },
		    formatMatch: function(row, i, max) {
			    return row[0].split('$')[1]
		    },
		    formatResult: function(row) {
			    return row[0].split('$')[1]
		    }
	    });
        txtDEF_JQ.result(function(event, data, formatted) {                
            var row=data[0].split('$')
            hidVAL_JQ.val(row[0]);
            
        });	    	    
        //sub functions       
        this.IsValid=function ()    {
            return hidVAL_JQ.val()!='';
        }        
        this.IsAirport=function ()    {
            return parseInt(hidVAL_JQ.val())>0;
        }        
        this.RetVal=function ()    {
            return hidVAL_JQ.val();
        }
        this.RetText=function ()    {
            return txtDEF_JQ.val();
        }        
        this.focus=function ()    {
            return txtDEF_JQ.focus();
        }
        this.CloneVal=function (air)    {
            hidVAL_JQ.val(air.RetVal());
            txtDEF_JQ.val(air.RetText());
        }
    }
    
}