1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 2<!-- 3 * FCKeditor - The text editor for Internet - http://www.fckeditor.net 4 * Copyright (C) 2003-2010 Frederico Caldeira Knabben 5 * 6 * == BEGIN LICENSE == 7 * 8 * Licensed under the terms of any of the following licenses at your 9 * choice: 10 * 11 * - GNU General Public License Version 2 or later (the "GPL") 12 * http://www.gnu.org/licenses/gpl.html 13 * 14 * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") 15 * http://www.gnu.org/licenses/lgpl.html 16 * 17 * - Mozilla Public License Version 1.1 or later (the "MPL") 18 * http://www.mozilla.org/MPL/MPL-1.1.html 19 * 20 * == END LICENSE == 21--> 22<html> 23 <head> 24 <title>SCAYT Properties</title> 25 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 26 <meta content="noindex, nofollow" name="robots"> 27 <script src="common/fck_dialog_common.js" type="text/javascript"></script> 28 <link type="text/css" href="fck_scayt/scayt_dialog.css" rel="stylesheet" /> 29 <script type="text/javascript"> 30 31 var dialog = window.parent ; 32 var oEditor = dialog.InnerDialogLoaded() ; 33 var FCKLang = oEditor.FCKLang; 34 var scayt = oEditor.scayt; 35 var scayt_control = oEditor.scayt_control; 36 var lang_list = {}; 37 var sLang; 38 var fckLang; 39 var chosed_lang; 40 var options; 41 var tabs = scayt_control.uiTags || [1,1,0,1]; 42 var userDicActive = tabs[2] == 1; 43 var captions; 44 var dic_buttons = [ 45 // [0] contains buttons for creating 46 "dic_create,dic_restore", 47 // [1] contains buton for manipulation 48 "dic_rename,dic_delete" 49 ]; 50 51 var get = 52 new function(){ 53 54 var mergeObjs = function(obj1, obj2) 55 { 56 for (var k in obj1) 57 obj2[k] = obj1[k]; 58 59 return obj2; 60 }; 61 62 var removeWhitespaces = function( s ) 63 { 64 s = s.replace( new RegExp("^ +| +$"), '' ) ; 65 return s ; 66 }; 67 68 var addEvent = function( el ,sEventName, fTodo ) 69 { 70 if (el.addEventListener) { 71 el.addEventListener (sEventName,fTodo,false); 72 73 } else if (el.attachEvent) { 74 el.attachEvent ("on"+sEventName,fTodo); 75 76 } else { 77 el["on"+sEventName] = fTodo; 78 } 79 }; 80 81 var getElementsByClassName = function (node,classname ,strTag) { 82 strTag = strTag || "*"; 83 node = node || document; 84 if (node.getElementsByClassName) 85 return node.getElementsByClassName(classname); 86 else { 87 var objColl = node.getElementsByTagName(strTag); 88 if (!objColl.length && strTag == "*" && node.all) objColl = node.all; 89 var arr = new Array(); 90 var delim = classname.indexOf('|') != -1 ? '|' : ' '; 91 var arrClass = classname.split(delim); 92 for (var i = 0, j = objColl.length; i < j; i++) { 93 var arrObjClass = objColl[i].className.split(' '); 94 if (delim == ' ' && arrClass.length > arrObjClass.length) continue; 95 var c = 0; 96 comparisonLoop: 97 for ( var k = 0, l = arrObjClass.length ; k < l ; k++ ) 98 { 99 for ( var m = 0, n = arrClass.length ; m < n ; m++ ) 100 { 101 if ( arrClass[m] == arrObjClass[k] ) 102 c++ ; 103 104 if ( ( delim == '|' && c == 1 ) || ( delim == ' ' && c == arrClass.length ) ) 105 { 106 arr.push( objColl[i] ) ; 107 break comparisonLoop ; 108 } 109 } 110 } 111 } 112 return arr; 113 } 114 }; 115 116 var hasClassName = function ( sClassName, elem ) { 117 //.split(/\s+/); 118 var aCnames = elem.className.split(/\s+/) || []; 119 for (var i=0, l=aCnames.length; i<l ; i++){ 120 if (sClassName == aCnames[i]) 121 return true; 122 } 123 return false; 124 } 125 126 var single = { 127 addClass : function ( sClassName ) { 128 //console.info( sClassName, this.className, ); 129 if ( hasClassName(sClassName , this) ) 130 return this; 131 var s = removeWhitespaces(this.className + " " +sClassName); 132 this.className = s; 133 return this; 134 135 }, 136 removeClass : function ( sClassName ) { 137 var s = removeWhitespaces(this.className.replace(sClassName,"")); 138 this.className = s; 139 return this; 140 }, 141 setStyle : function( oStyles ) 142 { 143 for ( var style in oStyles ) 144 { 145 this.style[style] = oStyles[style] ; 146 } 147 return this ; 148 }, 149 bindOnclick : function ( handler ) { 150 //addEvent( this, "click" , handler); 151 this.onclick = handler; 152 return this; 153 }, 154 bindOnchange : function ( handler ) { 155 //addEvent( this, "change" , handler); 156 this.onchange = handler; 157 return this; 158 }, 159 getAttr : function ( sAttrName ) 160 { 161 if ( !sAttrName ) 162 return null; 163 164 return this[sAttrName]; 165 }, 166 setAttr : function ( sAttrName , attrVal ) 167 { 168 if ( !sAttrName || !attrVal ) 169 return null; 170 171 this[sAttrName] = attrVal; 172 173 return this; 174 }, 175 remAttr : function ( sAttrName ) 176 { 177 if ( !sAttrName ) 178 return null; 179 } 180 }; 181 182 var singleCaller = function ( sMethod,args ) { 183 for ( var i=0, l=this.length; i<l ; i++ ){ 184 var oItem = mergeObjs( single, this[i] ); 185 oItem[sMethod].apply(this[i],args); 186 } 187 }; 188 189 190 var collection = { 191 192 addClass : function ( sClassName ){ 193 singleCaller.call(this, "addClass", [sClassName]) 194 return this; 195 }, 196 removeClass : function ( sClassName ) { 197 singleCaller.call(this, "removeClass", [sClassName]) 198 return this; 199 }, 200 setStyle : function ( oStyles ) { 201 singleCaller.call(this, "setStyle", [oStyles]) 202 return this; 203 }, 204 bindOnclick : function ( f ) { 205 singleCaller.call(this, "bindOnclick", [f]) 206 return this; 207 }, 208 bindOnchange : function ( f ) { 209 singleCaller.call(this, "bindOnchange", [f]) 210 return this; 211 }, 212 213 forEach : function ( fTodo ) { 214 //el,i 215 for (var i=0, l=this.length; i<l ; i++){ 216 fTodo.apply(this[i], [this[i],i ]); 217 } 218 return this; 219 } 220 221 }; 222 223 224 225 this.byClass = function( sClassName ){ 226 var o = getElementsByClassName(document, sClassName ); 227 return o ? mergeObjs( collection, o ) : o; 228 }; 229 230 this.byId = function( sId ){ 231 var o = document.getElementById( sId ); 232 return o ? mergeObjs( single, o ) : o; 233 }; 234 235 this.gup = function ( name ){ 236 name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ; 237 var regexS = '[\\?&]' + name + '=([^&#]*)' ; 238 var regex = new RegExp( regexS ) ; 239 var results = regex.exec( window.location.href ) ; 240 241 if( results == null ) 242 return '' ; 243 else 244 return results[ 1 ] ; 245 }; 246 this.wrap = function ( o ) { 247 return o ? mergeObjs( single, o ) : o; 248 }; 249 this.forEach = function ( oScope, fTodo ){ 250 collection.forEach.apply( oScope,[fTodo] ); 251 }; 252 253 }; 254 255 256 257 // Add the dialog tabs. 258 tabs[0] == 1 && dialog.AddTab( 'options', FCKLang.ScaytOptionsTab||'Options' ) ; 259 tabs[1] == 1 && dialog.AddTab( 'langs', FCKLang.ScaytLangsTab || 'Languages' ) ; 260 tabs[2] == 1 && dialog.AddTab( 'dictionary', FCKLang.ScaytDictTab || 'Dictionary' ) ; 261 tabs[3] == 1 && dialog.AddTab( 'about', FCKLang.ScaytAboutTab ||'About' ) ; 262 263 // Function called when a dialog tab is selected. 264 function OnDialogTabChange( tabCode ) 265 { 266 ShowE('inner_options' , ( tabCode == 'options' ) ) ; 267 ShowE('inner_langs' , ( tabCode == 'langs' ) ) ; 268 ShowE('inner_dictionary' , ( tabCode == 'dictionary' ) ) ; 269 ShowE('inner_about' , ( tabCode == 'about' ) ) ; 270 } 271 272 273 274 275 276 window.onload = function() 277 { 278 // Things to do when the page is loaded. 279 280 if ( document.location.search.length ) 281 dialog.SetSelectedTab( document.location.search.substr(1) ) ; 282 283 dialog.SetOkButton( true ) ; 284 285 286 if (!scayt) throw "SCAYT is undefined"; 287 if (!scayt_control) throw "SCAYT_CONTROL is undefined"; 288 289 // show alowed tabs 290 tabs = scayt_control.uiTags || [1,1,1,0]; 291 292 293 sLang = scayt_control.getLang(); 294 fckLang = "en"; 295 options = scayt_control.option(); 296 // apply captions 297 scayt.getCaption( fckLang, function( caps ) 298 { 299 //console.info( "scayt.getCaption runned" ) 300 captions = caps; 301 apllyCaptions(); 302 //lang_list = scayt.getLangList(); 303 lang_list = scayt.getLangList() ;//|| {ltr: {"en_US" : "English","en_GB" : "British English","pt_BR" : "Brazilian Portuguese","da_DK" : "Danish","nl_NL" : "Dutch","en_CA" : "English Canadian","fi_FI" : "Finnish","fr_FR" : "French","fr_CA" : "French Canadian","de_DE" : "German","el_GR" : "Greek","hu_HU" : "Hungarian","it_IT" : "Italian","nb_NO" : "Norwegian","pl_PL" : "Polish","pt_PT" : "Portuguese","ru_RU" : "Russian","es_ES" : "Spanish","sv_SE" : "Swedish","tr_TR" : "Turkish","uk_UA" : "Ukrainian","cy_GB" : "Welsh"},rtl: {"ar_EG" : "Arabic"}}; 304 305 306 307 308 // ** animate options 309 get.byClass("_scayt_option").forEach(function(el,i){ 310 311 if ('undefined' != typeof(options[el.name])) { 312 // *** set default values 313 314 if ( 1 == options[ el.name ] ){ 315 //el.setAttribute("checked","true"); 316 get.wrap(el).setAttr("checked" ,true) 317 //document.all_options[el.name].checked = "true"; 318 //el.checked = true; 319 //alert( options[ dojo.attr(el ,'name') ] + " el " ) 320 } 321 //console.info(options) 322 // *** bind events 323 get.wrap(el).bindOnclick( function(ev){ 324 325 var that = get.wrap(this); 326 var isCheck = that.getAttr("checked"); 327 //console.info(isCheck) 328 if ( isCheck == false ) { 329 330 //that.setAttr("checked",false); 331 options[ this.name ] = 0; 332 }else{ 333 //that.setAttr("checked",true); 334 options[ this.name ] = 1; 335 } 336 //console.info(options) 337 }); 338 } 339 }); 340 341 342 // * Create languages tab 343 // ** convert langs obj to array 344 var lang_arr = []; 345 346 for (var k in lang_list.rtl){ 347 // find curent lang 348 if ( k == sLang) 349 chosed_lang = lang_list.rtl[k] + "::" + k; 350 lang_arr[lang_arr.length] = lang_list.rtl[k] + "::" + k; 351 352 } 353 for (var k in lang_list.ltr){ 354 // find curent lang 355 if ( k == sLang) 356 chosed_lang = lang_list.ltr[k] + "::" + k; 357 lang_arr[lang_arr.length] = lang_list.ltr[k] + "::" + k; 358 } 359 lang_arr.sort(); 360 361 // ** find lang containers 362 363 var lcol = get.byId("lcolid"); 364 var rcol = get.byId("rcolid"); 365 // ** place langs in DOM 366 367 get.forEach(lang_arr , function( l , i ){ 368 369 //console.info( l,i ); 370 371 var l_arr = l.split('::'); 372 var l_name = l_arr[0]; 373 var l_code = l_arr[1]; 374 var row = document.createElement('div'); 375 row.id = l_code; 376 row.className = "li"; 377 // split langs on half 378 var col = ( i < lang_arr.length/2 ) ? lcol:rcol ; 379 380 // append row 381 //console.dir( col ) 382 col.appendChild(row); 383 var row_dom = get.byId( l_code ) 384 row_dom.innerHTML = l_name; 385 386 var checkActiveLang = function( id ){ 387 return chosed_lang.split("::")[1] == id; 388 }; 389 // bind click 390 row_dom.bindOnclick(function(ev){ 391 392 if ( checkActiveLang(this.id) ) return false; 393 var elId = this.id; 394 get.byId(this.id) 395 .addClass("Button") 396 .removeClass("DarkBackground"); 397 398 window.setTimeout( function (){ get.byId(elId).setStyle({opacity:"0.5",cursor:"no-drop"}); } ,300 ); 399 400 get.byId(chosed_lang.split("::")[1]) 401 .addClass("DarkBackground") 402 .removeClass("Button") 403 .setStyle({opacity:"1",cursor:"pointer"}); 404 405 chosed_lang = this.innerHTML + "::" + this.id; 406 return true; 407 }) 408 .setStyle({ 409 cursor:"pointer" 410 }); 411 // select current lang 412 if (l == chosed_lang) 413 row_dom.addClass("Button").setStyle({opacity:"0.5",cursor:"no-drop"}); 414 else 415 row_dom.addClass("DarkBackground").setStyle({opacity:"1"}); 416 417 }); 418 // * user dictionary 419 if ( userDicActive ){ 420 initUserDictionary() 421 422 } 423 }); 424 425 426 427 } 428 429 430 431 432 var buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ]; 433 var labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ]; 434 435 436 function apllyCaptions ( ) 437 { 438 439 // fill tabs headers 440 // add missing captions 441 442 get.byClass("PopupTab").forEach(function(el,i){ 443 444 if ( tabs[i] == 1 ){ 445 el.style.display = "block"; 446 } 447 el.innerHTML = captions['tab_'+el.id]; 448 449 }); 450 451 // Fill options labels. 452 for ( i in labels ) 453 { 454 var label = 'label_' + labels[ i ], 455 fckLangStr = 'Scayt' + labels[ i ]; 456 labelElement = document.getElementById( label ); 457 458 if ( 'undefined' != typeof labelElement 459 && 'undefined' != typeof captions[ label ] && captions[ label ] !== "" 460 && 'undefined' != typeof options[labels[ i ]] ) 461 { 462 463 var label_text = FCKLang[fckLangStr] || captions[ label ]; 464 labelElement.innerHTML = label_text; 465 var labelParent = labelElement.parentNode; 466 labelParent.style.display = "block"; 467 } 468 } 469 470 // fill dictionary section 471 for ( var i in buttons ) 472 { 473 var button = buttons[ i ]; 474 get.byId( button ).innerHTML = '<span>' + captions[ 'button_' + button] +'</span>' ; 475 } 476 get.byId("dname").innerHTML = captions['label_dname']; 477 get.byId( 'dic_info' ).innerHTML = captions[ 'dic_info' ]; 478 479 // fill about tab 480 var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+ 481 '<p>' + captions[ 'version' ] + scayt.version.toString() + '</p>' + 482 '<p>' + captions[ 'about_throwt_copy' ] + '</p>'; 483 484 get.byId( 'scayt_about' ).innerHTML = about; 485 486 } 487 488 489 function initUserDictionary () { 490 491 scayt.getNameUserDictionary( 492 function( o ) 493 { 494 var dic_name = o.dname; 495 if ( dic_name ) 496 { 497 get.byId( 'dic_name' ).value = dic_name; 498 display_dic_buttons( dic_buttons[1] ); 499 } 500 else 501 display_dic_buttons( dic_buttons[0] ); 502 503 }, 504 function () 505 { 506 get.byId( 'dic_name' ).value(""); 507 dic_error_message(captions["err_dic_enable"] || "Used dictionary are unaveilable now.") 508 } 509 ); 510 511 dic_success_message(""); 512 513 // ** bind event listeners 514 get.byClass("button").bindOnclick(function( ){ 515 516 // get dic name 517 var dic_name = get.byId('dic_name').value ; 518 // check common dictionary rules 519 if (!dic_name) { 520 dic_error_message(" Dictionary name should not be empty. "); 521 return false; 522 } 523 //apply handler 524 window[this.id].apply( window, [this, dic_name, dic_buttons ] ); 525 526 //console.info( typeof window[this.id], window[this.id].calle ) 527 return false; 528 }); 529 530 } 531 532 dic_create = function( el, dic_name , dic_buttons ) 533 { 534 // comma separated button's ids include repeats if exists 535 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; 536 537 var err_massage = captions["err_dic_create"]; 538 var suc_massage = captions["succ_dic_create"]; 539 //console.info("--plugin "); 540 541 scayt.createUserDictionary(dic_name, 542 function(arg) 543 { 544 //console.info( "dic_create callback called with args" , arg ); 545 hide_dic_buttons ( all_buttons ); 546 display_dic_buttons ( dic_buttons[1] ); 547 suc_massage = suc_massage.replace("%s" , arg.dname ); 548 dic_success_message (suc_massage); 549 }, 550 function(arg) 551 { 552 //console.info( "dic_create errorback called with args" , arg ) 553 err_massage = err_massage.replace("%s" ,arg.dname ); 554 dic_error_message ( err_massage + "( "+ (arg.message || "") +")"); 555 }); 556 557 }; 558 559 dic_rename = function( el, dic_name , dic_buttons ) 560 { 561 // 562 // try to rename dictionary 563 // @TODO: rename dict 564 //console.info ( captions["err_dic_rename"] ) 565 var err_massage = captions["err_dic_rename"] || ""; 566 var suc_massage = captions["succ_dic_rename"] || ""; 567 scayt.renameUserDictionary(dic_name, 568 function(arg) 569 { 570 //console.info( "dic_rename callback called with args" , arg ); 571 suc_massage = suc_massage.replace("%s" , arg.dname ); 572 set_dic_name( dic_name ); 573 dic_success_message ( suc_massage ); 574 }, 575 function(arg) 576 { 577 //console.info( "dic_rename errorback called with args" , arg ) 578 err_massage = err_massage.replace("%s" , arg.dname ); 579 set_dic_name( dic_name ); 580 dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" ); 581 }); 582 }; 583 584 dic_delete = function ( el, dic_name , dic_buttons ) 585 { 586 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; 587 var err_massage = captions["err_dic_delete"]; 588 var suc_massage = captions["succ_dic_delete"]; 589 590 // try to delete dictionary 591 // @TODO: delete dict 592 scayt.deleteUserDictionary( 593 function(arg) 594 { 595 //console.info( "dic_delete callback " , dic_name ,arg ); 596 suc_massage = suc_massage.replace("%s" , arg.dname ); 597 hide_dic_buttons ( all_buttons ); 598 display_dic_buttons ( dic_buttons[0] ); 599 set_dic_name( "" ); // empty input field 600 dic_success_message( suc_massage ); 601 }, 602 function(arg) 603 { 604 //console.info( " dic_delete errorback called with args" , arg ) 605 err_massage = err_massage.replace("%s" , arg.dname ); 606 dic_error_message(err_massage); 607 }); 608 }; 609 610 dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons ) 611 { 612 // try to restore existing dictionary 613 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; 614 var err_massage = captions["err_dic_restore"]; 615 var suc_massage = captions["succ_dic_restore"]; 616 617 scayt.restoreUserDictionary(dic_name, 618 function(arg) 619 { 620 //console.info( "dic_restore callback called with args" , arg ); 621 suc_massage = suc_massage.replace("%s" , arg.dname ); 622 hide_dic_buttons ( all_buttons ); 623 display_dic_buttons(dic_buttons[1]); 624 dic_success_message( suc_massage ); 625 }, 626 function(arg) 627 { 628 //console.info( " dic_restore errorback called with args" , arg ) 629 err_massage = err_massage.replace("%s" , arg.dname ); 630 dic_error_message( err_massage ); 631 }); 632 }; 633 634 function dic_error_message( m ) 635 { 636 if ( !m ) 637 return ; 638 639 get.byId('dic_message').innerHTML = '<span class="error">' + m + '</span>' ; 640 } 641 642 function dic_success_message( m ) 643 { 644 if ( !m ) 645 return ; 646 647 get.byId('dic_message').innerHTML = '<span class="success">' + m + '</span>' ; 648 } 649 650 function display_dic_buttons ( sIds ){ 651 sIds = new String( sIds ); 652 get.forEach( sIds.split(','), function ( id,i) { 653 get.byId(id).setStyle({display:"inline"}); 654 }); 655 } 656 function hide_dic_buttons ( sIds ){ 657 sIds = new String( sIds ); 658 get.forEach( sIds.split(','), function ( id,i) { 659 get.byId(id).setStyle({display:"none"}); 660 }); 661 } 662 function set_dic_name ( dic_name ) { 663 get.byId('dic_name').value = dic_name; 664 } 665 function display_dic_tab () { 666 get.byId("dic_tab").style.display = "block"; 667 } 668 669 function Ok() 670 { 671 // Things to do when the Ok button is clicked. 672 var c = 0; 673 // set upp options if any was set 674 var o = scayt_control.option(); 675 //console.info(options) 676 for ( var oN in options ) { 677 678 if ( o[oN] != options[oN] && c == 0){ 679 //console.info( "set option " ) 680 scayt_control.option( options ); 681 c++; 682 } 683 } 684 //setup languge if it was change 685 var csLang = chosed_lang.split("::")[1]; 686 if ( csLang && sLang != csLang ){ 687 scayt_control.setLang( csLang ); 688 //console.info(sLang+" -> "+csLang , scayt_control) 689 c++; 690 } 691 692 if ( c > 0 ) scayt_control.refresh(); 693 694 return dialog.Cancel(); 695 696 } 697 698 </script> 699 </head> 700 <body style="OVERFLOW: auto" scroll="yes"> 701 <div class="tab_container" id="inner_options"> 702 703 <ul id="scayt_options"> 704 <li class="_scayt_options"> 705 <input class="_scayt_option" type="checkbox" value="0" name="allCaps" /> 706 <label for="allCaps" id="label_allCaps"></label> 707 </li> 708 <li> 709 <input class="_scayt_option" type="checkbox" value="0" name="ignoreDomainNames" /> 710 <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label> 711 </li> 712 <li> 713 <input class="_scayt_option" type="checkbox" value="0" name="mixedCase" /> 714 <label for="mixedCase" id="label_mixedCase"></label> 715 </li> 716 <li> 717 <input class="_scayt_option" type="checkbox" value="0" name="mixedWithDigits" /> 718 <label for="mixedWithDigits" id="label_mixedWithDigits"></label> 719 </li> 720 </ul> 721 </div> 722 <div class="tab_container" id="inner_langs"> 723 724 <div class="lcol" id="lcolid"></div> 725 <div class="rcol" id="rcolid"></div> 726 </div> 727 <div class="tab_container" id="inner_dictionary"> 728 729 <div id="dic_message"></div> 730 <div id="_off_dic_tab" class="dictionary" > 731 <div style="padding-left:10px;"> 732 <label id="dname" for="dname"></label> 733 <input type="text" size="14" maxlength="15" value="" id="dic_name" name="dic_name"/> 734 </div> 735 <div class="dic_buttons"> 736 <a href="#" id="dic_create" class="button"> </a> 737 <a href="#" id="dic_delete" class="button"> </a> 738 <a href="#" id="dic_rename" class="button"> </a> 739 <a href="#" id="dic_restore" class="button"> </a> 740 </div> 741 742 <div id="dic_info"></div> 743 744 </div> 745 </div> 746 <div id="inner_about" class="tab_container"> 747 <div id="scayt_about"></div> 748 </div> 749 </body> 750</html> 751