Cybernetikz_ToTheGame - Version 0.1.0

Version Notes

- ToTheGame Feed Import Implement and Ready to Use

Download this release

Release Info

Developer CyberNetikz
Extension Cybernetikz_ToTheGame
Version 0.1.0
Comparing to
See all releases


Version 0.1.0

app/code/local/Cybernetikz/ToTheGame/Block/Adminhtml/System/Config/Fieldset/Hint.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Renderer for ToTheGame Settings in System Configuration
5
+ * Author : Cybernetikz
6
+ * Author Email: info@cybernetikz.com
7
+ * Blog : http://blog.cybernetikz.com
8
+ * Website : http://www.cybernetikz.com
9
+ */
10
+
11
+ class Cybernetikz_ToTheGame_Block_Adminhtml_System_Config_Fieldset_Hint extends Mage_Adminhtml_Block_Abstract implements Varien_Data_Form_Element_Renderer_Interface {
12
+
13
+ protected $_template = 'cybernetikz/tothegame/system/config/fieldset/hint.phtml';
14
+
15
+ /**
16
+ * Render fieldset html
17
+ *
18
+ * @param Varien_Data_Form_Element_Abstract $element
19
+ * @return string
20
+ */
21
+ public function render(Varien_Data_Form_Element_Abstract $element) {
22
+ return $this->toHtml();
23
+ }
24
+ }
app/code/local/Cybernetikz/ToTheGame/Helper/Data.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author : Cybernetikz
4
+ * Author Email: info@cybernetikz.com
5
+ * Blog : http://blog.cybernetikz.com
6
+ * Website : http://www.cybernetikz.com
7
+ */
8
+
9
+ class Cybernetikz_ToTheGame_Helper_Data extends Mage_Core_Helper_Abstract
10
+ {
11
+ /* ToTheGame Settings */
12
+ const XML_SUBSCRIBER_ID = 'tothegame/setting/subscriberid';
13
+ const XML_IMPORT_CACHE_TTL = 'tothegame/setting/importcachettl';
14
+
15
+ public function getSubscriberId($store = null)
16
+ {
17
+ return Mage::getStoreConfig(self::XML_SUBSCRIBER_ID, $store);
18
+ }
19
+
20
+ public function getImportCacheTTL($store = null)
21
+ {
22
+ return Mage::getStoreConfig(self::XML_IMPORT_CACHE_TTL, $store);
23
+ }
24
+
25
+ public function getExtensionName(){
26
+ return "ToTheGame Feeder";
27
+ }
28
+
29
+ public function getCheckConfig(){
30
+
31
+ $extension_name = $this->getExtensionName();
32
+
33
+ if($this->getSubscriberId()=="" || $this->getImportCacheTTL()==""){
34
+ Mage::getSingleton('adminhtml/session')->addError($extension_name." is not configured. You need to configure before use the extension.");
35
+ $this->setRedirectUrl('adminhtml/system_config/edit/section/tothegame'); //Redirect to Extension System Configuration
36
+ }
37
+
38
+ return;
39
+ }
40
+
41
+ public function setRedirectUrl($redirect_url){
42
+ $url = Mage::helper("adminhtml")->getUrl($redirect_url);
43
+ $response = Mage::app()->getFrontController()->getResponse();
44
+ $response->setRedirect($url);
45
+ $response->sendResponse();
46
+ exit;
47
+ }
48
+
49
+ }
app/code/local/Cybernetikz/ToTheGame/Model/Resource/Mysql4/Setup.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author : Cybernetikz
4
+ * Author Email: info@cybernetikz.com
5
+ * Blog : http://blog.cybernetikz.com
6
+ * Website : http://www.cybernetikz.com
7
+ */
8
+
9
+ class Cybernetikz_ToTheGame_Model_Resource_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup{
10
+
11
+ }
12
+ ?>
app/code/local/Cybernetikz/ToTheGame/controllers/Adminhtml/ToTheGameController.php ADDED
@@ -0,0 +1,810 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Author : Cybernetikz
4
+ * Author Email: info@cybernetikz.com
5
+ * Blog : http://blog.cybernetikz.com
6
+ * Website : http://www.cybernetikz.com
7
+ */
8
+
9
+ class Cybernetikz_ToTheGame_Adminhtml_ToTheGameController extends Mage_Adminhtml_Controller_Action
10
+ {
11
+
12
+ protected $_startTime;
13
+ protected $gameCount = 0;
14
+
15
+ /*
16
+ Diclar destruct
17
+ */
18
+ /*function __destruct(){
19
+ $this->_PhpShutdown();
20
+ }*/
21
+
22
+
23
+ /**
24
+ * Init actions
25
+ *
26
+ * @return Mage_Adminhtml_ToTheGameController
27
+ */
28
+ protected function _initAction()
29
+ {
30
+ // load layout, set active menu and breadcrumbs
31
+ $this->loadLayout()
32
+ ->_setActiveMenu('catalog/system_tothegame')
33
+ ->_addBreadcrumb(
34
+ Mage::helper('catalog')->__('Catalog'),
35
+ Mage::helper('catalog')->__('Catalog'))
36
+ ->_addBreadcrumb(
37
+ Mage::helper('cybernetikz_tothegame')->__('ToTheGame Feed Import'),
38
+ Mage::helper('cybernetikz_tothegame')->__('ToTheGame Import'))
39
+ ;
40
+ return $this;
41
+ }
42
+
43
+ /*
44
+ Game Import Manage
45
+ */
46
+ public function gameimportAction()
47
+ {
48
+ Mage::helper('cybernetikz_tothegame')->getCheckConfig(); // Check Configuration
49
+
50
+ $this->_title($this->__('Catalog'))->_title($this->__('ToTheGame Feed Import'));
51
+
52
+ $this->_initAction()->renderLayout();
53
+ }
54
+
55
+ /*
56
+ Single ToTheGame Feed Import
57
+ */
58
+ public function singlegameimportAction()
59
+ {
60
+
61
+ $this->_startTime = microtime(true);
62
+
63
+ set_time_limit(0);
64
+
65
+ $req = array('game_id' => 'array');
66
+ $sent = array();
67
+ $error = false;
68
+
69
+ if (!$this->_ValidateData($_GET, $req, $sent) || $_GET['game_id'][0] == ""){
70
+ echo "<span style='color:red;'>Error: You need to provide ToTheGame Game ID for the game that needs to be imported.</span><br>";
71
+ $error = true;
72
+ }
73
+
74
+ if(!$error){
75
+ $gamesids=explode(",",$sent['game_id'][0]);
76
+ //print_r($gamesids);exit;
77
+
78
+ foreach($gamesids as $gameid){
79
+ echo 'Getting more info for GameId: ', $gameid, "<br>";
80
+ $this->importGame($gameid);
81
+ ++$this->gameCount;
82
+ }
83
+ }
84
+
85
+ $this->_PhpShutdown();
86
+ }
87
+
88
+ /*
89
+ Import Single Game Process
90
+ */
91
+ protected function importGame($gameId) {
92
+
93
+ $SUBSCRIBER_ID = Mage::helper('cybernetikz_tothegame')->getSubscriberId(); // Subscriber Id
94
+ $IMPORT_USE_CACHE = 1;
95
+ $IMPORT_CACHE_TTL = (Mage::helper('cybernetikz_tothegame')->getImportCacheTTL()*3600); // # of seconds when the cache is set to expire
96
+ $gameProducttId = "";
97
+
98
+ $gameUrl = 'http://export.tothegame.com/gamefeeder/v3/gamelookup.aspx?&subscriberid='.$SUBSCRIBER_ID.'&gameid='.$gameId;
99
+
100
+ $xml = new DOMDocument(); // Create new DOM object
101
+
102
+ $_product = Mage::getModel('catalog/product')->loadByAttribute('game_id', $gameId);
103
+ //print_r($_product);exit;
104
+
105
+ if(!empty($_product)){
106
+ $gameProducttId = (int)$_product->getId();
107
+ }
108
+ //echo $gameProducttId; exit;
109
+
110
+ try {
111
+
112
+ // Create Feed Upload Directtory
113
+ $upload_gamefeed = Mage::getBaseDir('media') . DS .'gamefeed';
114
+ if (!is_dir($upload_gamefeed)) {
115
+ if (!mkdir($upload_gamefeed, 0777, true)) {
116
+ echo "<span style='color:red;'>--Error: Failed to create folders...</span><br>";
117
+ return;
118
+ }
119
+ }
120
+
121
+ $gamefeed_file_path = $upload_gamefeed. DS .$gameId.".xml";
122
+
123
+ if (file_exists($gamefeed_file_path) && $IMPORT_USE_CACHE && time() - filectime($gamefeed_file_path) < $IMPORT_CACHE_TTL) {
124
+ echo "-- Loading game data from cache<br>";
125
+ $xml->load($gamefeed_file_path);
126
+ } else {
127
+ echo "-- Loading game data from publisher<br>";
128
+ $xml->load($gameUrl);
129
+ // cache the file
130
+ $xml->save($gamefeed_file_path);
131
+ }
132
+
133
+ // Check Product Availability
134
+ if(!$this->_getElementValue($xml, 'OfficialTitle')){
135
+ echo "<span style='color:red;'>--Error: Game Id not available. Please check Game Id and try again later.</span><br>";
136
+ return;
137
+ }
138
+
139
+ $_productData = array(
140
+ 'name' => $this->_getElementValue($xml, 'OfficialTitle'),
141
+ 'description' => '', // Factsheet in the XML, description of the game in english
142
+ 'GameId' => $gameId,
143
+ 'LastUpdated' => $this->_getElementValue($xml, 'LastUpdated'),
144
+ 'EAN' => array(),
145
+ 'PlatformId' => $this->_getElementValue($xml, 'PlatformId'),
146
+ 'Platform' => $this->_getElementValue($xml, 'Platform'),
147
+ 'LogoUrl' => $this->_getElementValue($xml, 'LogoUrl'),
148
+ 'LocalizedTitle' => '',
149
+ 'InGameLanguage' => array(),
150
+ 'Releases' => array(),
151
+ 'Packshots' => array(),
152
+ 'PegiRating' => $this->_getElementValue($xml, 'PegiRating'),
153
+ 'PegiRatingId' => $this->_getElementValue($xml, 'PegiRatingId'),
154
+ 'Publisher' => array(),
155
+ 'DeveloperId' => $this->_getElementValue($xml, 'DeveloperId'),
156
+ 'DeveloperName' => $this->_getElementValue($xml, 'DeveloperName'),
157
+ 'DeveloperHomepage' => $this->_getElementValue($xml, 'DeveloperHomepage'),
158
+ 'MainGame' => $this->_getElementValue($xml, 'MainGame'),
159
+ 'AlsoAvailableOn' => array(), // expansion pack IDs
160
+ 'Editions' => array(), // IDs of the game editions
161
+ 'Videos' => array(),
162
+ 'Screenshots' => array(),
163
+ 'Keywords' => $this->_getElementValue($xml, 'Keywords'),
164
+ 'child_category' => $this->_getElementValue($xml, 'Category')
165
+
166
+ );
167
+
168
+ //EANs
169
+ $temp = $xml->getElementsByTagName('EAN');
170
+
171
+ if ($temp->length) {
172
+ foreach ($temp->item(0)->getElementsByTagName('string') as $i => $el)
173
+ $_productData['EAN'][] = $el->nodeValue;
174
+ }
175
+
176
+ //LocalizedTitle
177
+ $temp = $xml->getElementsByTagName('LocalizedTitles');
178
+
179
+ if ($temp->length) {
180
+ foreach ($temp->item(0)->childNodes as $i => $el) {
181
+ if ($el->nodeType == XML_ELEMENT_NODE && strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
182
+ $_productData['LocalizedTitle'] = $el->getElementsByTagName('Title')->item(0)->nodeValue;
183
+ break;
184
+ }
185
+ }
186
+ }
187
+
188
+ //InGameLanguage
189
+ $temp = $xml->getElementsByTagName('InGameLanguage');
190
+
191
+ if ($temp->length) {
192
+ foreach ($temp->item(0)->getElementsByTagName('string') as $i => $el)
193
+ $_productData['InGameLanguage'][] = $el->nodeValue;
194
+ }
195
+
196
+ //Releases
197
+ $temp = $xml->getElementsByTagName('Releases');
198
+
199
+ if ($temp->length) {
200
+ foreach ($temp->item(0)->getElementsByTagName('Release') as $i => $el) {
201
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
202
+ $_productData['Releases'] = array(
203
+ 'ReleaseStatus' => $el->getElementsByTagName('ReleaseStatus')->item(0)->nodeValue,
204
+ 'ReleaseDate' => $el->getElementsByTagName('ReleaseDate')->item(0)->nodeValue
205
+ );
206
+ $_productData['ReleaseDate'] = $_productData['Releases']['ReleaseDate'];
207
+ break;
208
+ }
209
+ }
210
+ }
211
+
212
+ //PackShots
213
+ $temp = $xml->getElementsByTagName('Packshots');
214
+
215
+ if ($temp->length) {
216
+
217
+ foreach ($temp->item(0)->getElementsByTagName('Packshot') as $i => $el) {
218
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
219
+
220
+ $_productData['Packshots']['UrlMedium'] = $el->getElementsByTagName('UrlMedium')->item(0)->nodeValue;
221
+
222
+ $elem = $el->getElementsByTagName('UrlHiRez');
223
+ if ($elem->length) {
224
+ $_productData['Packshots']['UrlHiRez'] = $elem->item(0)->nodeValue;
225
+ }
226
+
227
+ $elem = $el->getElementsByTagName('UrlThumb');
228
+ if ($elem->length) {
229
+ $_productData['Packshots']['UrlThumb'] = $elem->item(0)->nodeValue;
230
+ }
231
+
232
+ break;
233
+ }
234
+ }
235
+ }
236
+
237
+ //Factsheets
238
+ $temp = $xml->getElementsByTagName('Factsheets');
239
+
240
+ if ($temp->length) {
241
+ foreach ($temp->item(0)->getElementsByTagName('LocalizedDescription') as $i => $el) {
242
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
243
+ $_productData['description'] = $el->getElementsByTagName('Description')->item(0)->nodeValue;
244
+ break;
245
+ }
246
+ }
247
+ }
248
+
249
+ //Publisher
250
+ $temp = $xml->getElementsByTagName('Publishers');
251
+
252
+ if ($temp->length) {
253
+ foreach ($temp->item(0)->getElementsByTagName('Publisher') as $i => $el) {
254
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
255
+ $_productData['Publisher'] = array(
256
+ 'PublisherId' => $el->getElementsByTagName('PublisherId')->item(0)->nodeValue,
257
+ 'PublisherName' => $el->getElementsByTagName('PublisherName')->item(0)->nodeValue,
258
+ 'PublisherHomepage' => $el->getElementsByTagName('PublisherHomepage')->item(0)->nodeValue
259
+ );
260
+ break;
261
+ }
262
+ }
263
+ }
264
+
265
+ //AlsoAvailableOn
266
+ //TODO maybe find and prepare the products that are related for easier fetching later?
267
+ $temp = $xml->getElementsByTagName('AlsoAvailableOn');
268
+
269
+ if ($temp->length) {
270
+ foreach ($temp->item(0)->getElementsByTagName('int') as $i => $el)
271
+ $_productData['AlsoAvailableOn'][] = $el->nodeValue;
272
+ }
273
+
274
+ //Editions
275
+ $temp = $xml->getElementsByTagName('Editions');
276
+
277
+ if ($temp->length) {
278
+ foreach ($temp->item(0)->getElementsByTagName('int') as $i => $el)
279
+ $_productData['Editions'][] = $el->nodeValue;
280
+ }
281
+
282
+ //Videos
283
+ $temp = $xml->getElementsByTagName('Videos');
284
+
285
+ if ($temp->length) {
286
+
287
+ foreach ($temp->item(0)->getElementsByTagName('Video') as $i => $el) {
288
+ $v = array(
289
+ 'VideoId' => $el->getElementsByTagName('VideoId')->item(0)->nodeValue,
290
+ 'Url' => $el->getElementsByTagName('Url')->item(0)->nodeValue,
291
+ 'Title' => $el->getElementsByTagName('Title')->item(0)->nodeValue,
292
+ 'AgeWarning' => $el->getElementsByTagName('AgeWarning')->item(0)->nodeValue,
293
+ 'Timestamp' => $el->getElementsByTagName('Timestamp')->item(0)->nodeValue,
294
+ 'PreviewFrameUrl' => $el->getElementsByTagName('PreviewFrameUrl')->item(0)->nodeValue
295
+ );
296
+
297
+ $_productData['Videos'][] = $v;
298
+ }
299
+ }
300
+
301
+ //Screenshots
302
+ $temp = $xml->getElementsByTagName('Screenshots');
303
+
304
+ if ($temp->length) {
305
+
306
+ foreach ($temp->item(0)->getElementsByTagName('Screenshot') as $i => $el) {
307
+ $s = array(
308
+ 'UrlLarge' => $el->getElementsByTagName('UrlLarge')->item(0)->nodeValue,
309
+ 'UrlThumb' => $el->getElementsByTagName('UrlThumb')->item(0)->nodeValue
310
+ );
311
+
312
+ $_productData['Screenshots'][] = $s;
313
+ }
314
+ }
315
+
316
+ /*------ Start Edition Game Info -------*/
317
+ $edition_temp = $xml->getElementsByTagName('Edition');
318
+ if($edition_temp->length){
319
+ $edition_temp = $edition_temp->item(0);
320
+
321
+ // Update Edition Title
322
+ $temp = $edition_temp->getElementsByTagName('Title');
323
+
324
+ if ($temp->length) {
325
+ $_productData['name']=$this->_getElementValue($edition_temp, 'Title');
326
+ }
327
+
328
+ // Update Edition Releases
329
+ $temp = $edition_temp->getElementsByTagName('Releases');
330
+
331
+ if ($temp->length) {
332
+ foreach ($temp->item(0)->getElementsByTagName('Release') as $i => $el) {
333
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
334
+ $_productData['Releases'] = array(
335
+ 'ReleaseStatus' => $el->getElementsByTagName('ReleaseStatus')->item(0)->nodeValue,
336
+ 'ReleaseDate' => $el->getElementsByTagName('ReleaseDate')->item(0)->nodeValue
337
+ );
338
+ $_productData['ReleaseDate'] = $_productData['Releases']['ReleaseDate'];
339
+ break;
340
+ }
341
+ }
342
+ }
343
+
344
+ //Update Edition Description
345
+ $temp = $edition_temp->getElementsByTagName('Extra');
346
+
347
+ if ($temp->length) {
348
+ foreach ($temp->item(0)->getElementsByTagName('LocalizedDescription') as $i => $el) {
349
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
350
+ $_productData['description'] = $el->getElementsByTagName('Description')->item(0)->nodeValue;
351
+ break;
352
+ }
353
+ }
354
+ }
355
+
356
+ //Update Edition Publisher
357
+ $temp = $edition_temp->getElementsByTagName('Publishers');
358
+ if ($temp->length) {
359
+ foreach ($temp->item(0)->getElementsByTagName('Publisher') as $i => $el) {
360
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
361
+ $_productData['Publisher'] = array(
362
+ 'PublisherId' => $el->getElementsByTagName('PublisherId')->item(0)->nodeValue,
363
+ 'PublisherName' => $el->getElementsByTagName('PublisherName')->item(0)->nodeValue,
364
+ 'PublisherHomepage' => $el->getElementsByTagName('PublisherHomepage')->item(0)->nodeValue
365
+ );
366
+ break;
367
+ }
368
+ }
369
+ }
370
+
371
+ //Update Edition PackShots
372
+ $temp = $edition_temp->getElementsByTagName('Packshots');
373
+
374
+ if ($temp->length) {
375
+
376
+ foreach ($temp->item(0)->getElementsByTagName('Packshot') as $i => $el) {
377
+ if (strtolower($el->getElementsByTagName('Territory')->item(0)->nodeValue) == 'uk') {
378
+
379
+ $_productData['Packshots']['UrlMedium'] = $el->getElementsByTagName('UrlMedium')->item(0)->nodeValue;
380
+
381
+ $elem = $el->getElementsByTagName('UrlHiRez');
382
+ if ($elem->length) {
383
+ $_productData['Packshots']['UrlHiRez'] = $elem->item(0)->nodeValue;
384
+ }
385
+
386
+ $elem = $el->getElementsByTagName('UrlThumb');
387
+ if ($elem->length) {
388
+ $_productData['Packshots']['UrlThumb'] = $elem->item(0)->nodeValue;
389
+ }
390
+
391
+ break;
392
+ }
393
+ }
394
+ }
395
+
396
+ }
397
+
398
+ //print_r($_productData); exit;
399
+
400
+ $genre_val = $this->_addAttributeValue("genre",$_productData['child_category']);
401
+
402
+ if(count($_productData['Publisher'])>0){
403
+ $publisher_val = $this->_addAttributeValue("publishers",$_productData['Publisher']['PublisherName']);
404
+ }
405
+ $shortDescription = substr(strip_tags($_productData['description']),0,200);
406
+
407
+ $parts= explode(" ",$_productData['PegiRating']);
408
+ $age_val = NULL;
409
+ if(is_int($parts[1])){
410
+ $age_val = $this->_addAttributeValue("age",$parts[1]);
411
+ }
412
+
413
+ $_productData['EAN'] = implode(",",$_productData['EAN']);
414
+ $_productData['AlsoAvailableOn'] = implode(',',$_productData['AlsoAvailableOn']);
415
+
416
+ if($_productData['LocalizedTitle'])
417
+ $_productData['LocalizedTitle'] = serialize($_productData['LocalizedTitle']);
418
+
419
+ if($_productData['Releases'])
420
+ $_productData['Releases'] = serialize($_productData['Releases']);
421
+
422
+ if($_productData['Publisher'])
423
+ $_productData['Publisher'] = serialize($_productData['Publisher']);
424
+
425
+ if($_productData['Editions'])
426
+ $_productData['Editions'] = serialize($_productData['Editions']);
427
+
428
+ if($_productData['Videos'])
429
+ $_productData['Videos'] = serialize($_productData['Videos']);
430
+
431
+ if($_productData['Keywords'])
432
+ $_productData['Keywords'] = implode(',',$_productData['Keywords']);
433
+
434
+
435
+ // Start Add Or Update Product
436
+ if ($gameProducttId) {
437
+
438
+ // Start Update Product Here
439
+ echo "-- updating ", $_productData['name'], " --productdata<br>";
440
+ $_product = Mage::getModel('catalog/product')->load($gameProducttId);
441
+
442
+ /*
443
+ Start Remove Old and Add New Images
444
+ */
445
+ $mediaApi = Mage::getModel("catalog/product_attribute_media_api");
446
+ $mediaApiItems = $mediaApi->items($_product->getId());
447
+ foreach($mediaApiItems as $item) {
448
+ $datatemp=$mediaApi->remove($_product->getId(), $item['file']);
449
+ echo "-- rem. ", $item['file'], " from Local Server<br>";
450
+ }
451
+ $_product->save(); //before adding need to save product
452
+ $_product = Mage::getModel('catalog/product')->load($gameProducttId);
453
+
454
+ // Assign Packsthot Image as Product Images
455
+ foreach($_productData['Packshots'] as $type => $PackshotImage){
456
+ $importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
457
+ $image_name = $gameId."-packshot"."-".$type.".jpg";
458
+ $packImageUrl = $importDir. DS .$image_name;
459
+ // Copy Image from totheGame server to local server
460
+ if(copy($PackshotImage, $packImageUrl)){
461
+ echo "-- upl. ", $PackshotImage, " to Local Server<br>";
462
+ // Add three image sizes to media gallery
463
+ $_product->addImageToMediaGallery($packImageUrl, array('image','thumbnail','small_image'), false, false); // Assigning packshot image, thumb and small image to media gallery
464
+ break;
465
+ }
466
+ }
467
+
468
+ // Assign Screenshot Image as Product Images
469
+ foreach($_productData['Screenshots'] as $type => $screenshotImages){
470
+ $screenshotImage = $screenshotImages['UrlLarge'];
471
+ $importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
472
+ $image_name = $gameId."-screenshot"."-".$type.".jpg";
473
+ $screenshotImageUrl = $importDir. DS .$image_name;
474
+ // Copy Image from totheGame server to local server
475
+ if(copy($screenshotImage, $screenshotImageUrl)){
476
+ echo "-- upl. ", $screenshotImage, " to Local Server<br>";
477
+ // Add three image sizes to media gallery
478
+ $_product->addImageToMediaGallery($screenshotImageUrl, false, false, false); // Assigning screenshot image to media gallery
479
+ }
480
+ }
481
+
482
+ /*
483
+ End Remove Old and Add New Images
484
+ */
485
+
486
+ $_product->setName($_productData['name']);
487
+ $_product->setDescription($_productData['description']);
488
+ $_product->setShortDescription($shortDescription);
489
+ $_product->setGenre($genre_val);
490
+ if(count($_productData['Publisher'])>0){
491
+ $_product->setPublishers($publisher_val);
492
+ }
493
+ if($age_val)
494
+ $_product->setAge($age_val);
495
+
496
+ $_product->setGameId($gameId);
497
+ $_product->setLastUpdated($_productData['LastUpdated']);
498
+ $_product->setEan($_productData['EAN']);
499
+ $_product->setPlatformId($_productData['PlatformId']);
500
+ $_product->setPlatform($_productData['Platform']);
501
+ $_product->setLogoUrl($_productData['LogoUrl']);
502
+ $_product->setLocalizedTitle($_productData['LocalizedTitle']);
503
+ $_product->setReleases($_productData['Releases']);
504
+ $_product->setPegiRating($_productData['PegiRating']);
505
+ $_product->setPegiRatingId($_productData['PegiRatingId']);
506
+ $_product->setPublisher($_productData['Publisher']);
507
+ $_product->setDeveloperId($_productData['DeveloperId']);
508
+ $_product->setDeveloperName($_productData['DeveloperName']);
509
+ $_product->setDeveloperHomepage($_productData['DeveloperHomepage']);
510
+ $_product->setMainGame($_productData['MainGame']);
511
+ $_product->setAlsoAvailableOn($_productData['AlsoAvailableOn']);
512
+ $_product->setEditions($_productData['Editions']);
513
+ $_product->setVideos($_productData['Videos']);
514
+ $_product->setKeywords($_productData['Keywords']);
515
+
516
+ try {
517
+ $_product->save();
518
+ echo "-- Updated --<br>";
519
+ }
520
+ catch (Exception $e) {
521
+ echo "--! update failed<br>";
522
+ return;
523
+ }
524
+
525
+ } else {
526
+
527
+ // Start Add Product Here
528
+ echo '-- importing ', $_productData['name'], " --productdata<br>";
529
+
530
+ $websiteids="";
531
+ foreach (Mage::app()->getWebsites() as $website) {
532
+ $websiteids[]=$website->getWebsiteId();
533
+ }
534
+
535
+ $storeids="";
536
+ $stores=Mage::getModel('core/store')->getCollection()->load()->getAllIds();
537
+ foreach($stores as $estoreid){
538
+ $storeids[]=$estoreid;
539
+ }
540
+ //print_r($websiteids);
541
+ //print_r($storeids);
542
+ //exit;
543
+
544
+ $product = new Mage_Catalog_Model_Product();
545
+
546
+ $product->setSku($gameId);
547
+ $product->setTypeId('simple');
548
+ $product->setPrice(0.00);
549
+ $product->setWeight(0.00);
550
+ $product->setAttributeSetId(4);
551
+ $product->setWebsiteIDs($websiteids);
552
+ $product->setStatus(2);
553
+ $product->setTaxClassId(0);
554
+ $product->setStockData(array(
555
+ 'manage_stock'=>1,
556
+ 'use_config_manage_stock'=>0,
557
+ 'qty' => 0,
558
+ 'is_in_stock'=>0
559
+ ));
560
+
561
+ $product->setName($_productData['name']);
562
+ $product->setDescription($_productData['description']);
563
+ $product->setShortDescription($shortDescription);
564
+
565
+ $product->setGenre($genre_val);
566
+ if(count($_productData['Publisher'])>0){
567
+ $product->setPublishers($publisher_val);
568
+ }
569
+ if($age_val)
570
+ $_product->setAge($age_val);
571
+
572
+ $product->setGameId($gameId);
573
+ $product->setLastUpdated($_productData['LastUpdated']);
574
+ $product->setEan($_productData['EAN']);
575
+ $product->setPlatformId($_productData['PlatformId']);
576
+ $product->setPlatform($_productData['Platform']);
577
+ $product->setLogoUrl($_productData['LogoUrl']);
578
+ $product->setLocalizedTitle($_productData['LocalizedTitle']);
579
+ $product->setReleases($_productData['Releases']);
580
+ $product->setPegiRating($_productData['PegiRating']);
581
+ $product->setPegiRatingId($_productData['PegiRatingId']);
582
+ $product->setPublisher($_productData['Publisher']);
583
+ $product->setDeveloperId($_productData['DeveloperId']);
584
+ $product->setDeveloperName($_productData['DeveloperName']);
585
+ $product->setDeveloperHomepage($_productData['DeveloperHomepage']);
586
+ $product->setMainGame($_productData['MainGame']);
587
+ $product->setAlsoAvailableOn($_productData['AlsoAvailableOn']);
588
+ $product->setEditions($_productData['Editions']);
589
+ $product->setVideos($_productData['Videos']);
590
+ $product->setKeywords($_productData['Keywords']);
591
+
592
+ // Assign Packsthot Image as Product Images
593
+ foreach($_productData['Packshots'] as $type => $PackshotImage){
594
+ $importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
595
+ $image_name = $gameId."-packshot"."-".$type.".jpg";
596
+ $packImageUrl = $importDir. DS .$image_name;
597
+ // Copy Image from totheGame server to local server
598
+ if(copy($PackshotImage, $packImageUrl)){
599
+ echo "-- upl. ", $PackshotImage, " to Local Server<br>";
600
+ // Add three image sizes to media gallery
601
+ $product->addImageToMediaGallery($packImageUrl, array('image','thumbnail','small_image'), false, false); // Assigning packshot image, thumb and small image to media gallery
602
+ break;
603
+ }
604
+ }
605
+
606
+ // Assign Screenshot Image as Product Images
607
+ foreach($_productData['Screenshots'] as $type => $screenshotImages){
608
+ $screenshotImage = $screenshotImages['UrlLarge'];
609
+ $importDir = Mage::getBaseDir('media') . DS . 'import'.DS;
610
+ $image_name = $gameId."-screenshot"."-".$type.".jpg";
611
+ $screenshotImageUrl = $importDir. DS .$image_name;
612
+ // Copy Image from totheGame server to local server
613
+ if(copy($screenshotImage, $screenshotImageUrl)){
614
+ echo "-- upl. ", $screenshotImage, " to Local Server<br>";
615
+ // Add three image sizes to media gallery
616
+ $product->addImageToMediaGallery($screenshotImageUrl, false, false, false); // Assigning screenshot image to media gallery
617
+ }
618
+ }
619
+
620
+ //print_r($product->getData()); exit;
621
+
622
+ try {
623
+ $product->save();
624
+ echo "-- Product success added<br>";
625
+ }
626
+ catch (Exception $e) {
627
+ echo "--! import failed<br>";
628
+ return;
629
+ }
630
+ }
631
+
632
+ /*$index_arr=array(1,4);
633
+ foreach($index_arr as $index){
634
+ $process = Mage::getModel('index/process')->load($index);
635
+ $process->reindexAll();
636
+ }*/
637
+
638
+ } catch (Exception $e) {
639
+ echo '--! exception: ', $e->getMessage(), "<br>";
640
+ }
641
+
642
+ $xml = null;
643
+ }
644
+
645
+ protected function _getElementValue(&$el, $nodeName) {
646
+ $ch = $el->getElementsByTagName($nodeName);
647
+
648
+ if ($ch->length == 0)
649
+ return '';
650
+
651
+ return $ch->item(0)->nodeValue;
652
+ }
653
+
654
+ /*
655
+ PHP Shutdown and calculate
656
+ */
657
+ protected function _PhpShutdown() {
658
+ echo "<br>Import of ", $this->gameCount, ' items finished in ', (microtime(true)-$this->_startTime), 's; memory usage peak ', $this->_FormatBytes(memory_get_usage(true)), "<br>";
659
+ }
660
+
661
+ /*
662
+ Calculate Usages Memory
663
+ */
664
+ protected function _FormatBytes($size){
665
+ $units = array(' B', ' KiB', ' MiB', ' GiB', ' TiB', ' PiB');
666
+
667
+ for ($i = 0; $size >= 1024 && $i < 6; $i++)
668
+ $size /= 1024;
669
+
670
+ return round($size, 2).$units[$i];
671
+ }
672
+
673
+ /* Validation Data */
674
+ protected function _ValidateData(&$data, $req, &$values, $escape = true) {
675
+ $ok = TRUE;
676
+
677
+ foreach ($req as $fieldName => $dataType) {
678
+ if (!isset($data[$fieldName])) {
679
+ $values[$fieldName] = '';
680
+ $data[$fieldName] = null;
681
+ $ok = FALSE;
682
+ }
683
+
684
+ switch ($dataType) {
685
+ case 'plain_text':
686
+ $values[$fieldName] = strip_tags(htmlspecialchars($data[$fieldName]));
687
+
688
+ if ($values[$fieldName] === '')
689
+ $ok = FALSE;
690
+ // handle character escapipng
691
+ if ($escape)
692
+ $values[$fieldName] = get_magic_quotes_gpc() ? $values[$fieldName] : addslashes($values[$fieldName]);
693
+ else
694
+ $values[$fieldName] = stripslashes($values[$fieldName]);
695
+
696
+ break;
697
+
698
+ case 'rich_text':
699
+ $values[$fieldName] = $data[$fieldName];
700
+ if ($values[$fieldName] === '')
701
+ $ok = FALSE;
702
+ // handle character escapipng
703
+ if ($escape)
704
+ $values[$fieldName] = get_magic_quotes_gpc() ? $values[$fieldName] : addslashes($values[$fieldName]);
705
+ else
706
+ $values[$fieldName] = stripslashes($values[$fieldName]);
707
+
708
+ break;
709
+
710
+ case 'integer':
711
+ if (!is_numeric($data[$fieldName])) {
712
+ $ok = FALSE;
713
+ $values[$fieldName] = '';
714
+ } else
715
+ $values[$fieldName] = (int)$data[$fieldName];
716
+
717
+ break;
718
+
719
+ case 'float':
720
+ if (!is_numeric($data[$fieldName])) {
721
+ $ok = FALSE;
722
+ $values[$fieldName] = '';
723
+ } else
724
+ $values[$fieldName] = (float)$data[$fieldName];
725
+
726
+ break;
727
+
728
+ case 'array':
729
+ if (!is_array($data[$fieldName])) {
730
+ $ok = FALSE;
731
+ $values[$fieldName] = array();
732
+ } else
733
+ $values[$fieldName] = $data[$fieldName];
734
+
735
+ break;
736
+
737
+ case 'date':
738
+ $values[$fieldName] = strip_tags($data[$fieldName]);
739
+ $values[$fieldName] = $this->_cncValidateDate($values[$fieldName], '.');
740
+
741
+ if (!$values[$fieldName]) {
742
+ $values[$fieldName] = '';
743
+ $ok = FALSE;
744
+ continue;
745
+ }
746
+
747
+ break;
748
+ }
749
+ }
750
+ return $ok;
751
+ }
752
+
753
+ /*
754
+ Add catalog drowdown attribute new option with check existing option value
755
+ */
756
+ protected function _addAttributeValue($arg_attribute, $arg_value)
757
+ {
758
+ $attribute_model = Mage::getModel('eav/entity_attribute');
759
+
760
+ $attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
761
+ $attribute = $attribute_model->load($attribute_code);
762
+
763
+ if(!$this->_attributeValueExists($arg_attribute, $arg_value))
764
+ {
765
+ $value['option'] = array($arg_value,$arg_value);
766
+ $result = array('value' => $value);
767
+ $attribute->setData('option',$result);
768
+ $attribute->save();
769
+ }
770
+
771
+ $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
772
+ $attribute_table = $attribute_options_model->setAttribute($attribute);
773
+ $options = $attribute_options_model->getAllOptions(false);
774
+
775
+ foreach($options as $option)
776
+ {
777
+ if ($option['label'] == $arg_value)
778
+ {
779
+ return $option['value'];
780
+ }
781
+ }
782
+ return false;
783
+ }
784
+
785
+ /*
786
+ Add check attribute existing option value
787
+ */
788
+ protected function _attributeValueExists($arg_attribute, $arg_value)
789
+ {
790
+ $attribute_model = Mage::getModel('eav/entity_attribute');
791
+ $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table') ;
792
+
793
+ $attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute);
794
+ $attribute = $attribute_model->load($attribute_code);
795
+
796
+ $attribute_table = $attribute_options_model->setAttribute($attribute);
797
+ $options = $attribute_options_model->getAllOptions(false);
798
+
799
+ foreach($options as $option)
800
+ {
801
+ if ($option['label'] == $arg_value)
802
+ {
803
+ return $option['value'];
804
+ }
805
+ }
806
+
807
+ return false;
808
+ }
809
+
810
+ }
app/code/local/Cybernetikz/ToTheGame/etc/adminhtml.xml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <menu>
4
+ <catalog>
5
+ <children>
6
+ <tothegame translate="title" module="cybernetikz_tothegame">
7
+ <title>ToTheGame Feed Import</title>
8
+ <action>adminhtml/tothegame/gameimport</action>
9
+ <sort_order>25</sort_order>
10
+ </tothegame>
11
+ </children>
12
+ </catalog>
13
+ </menu>
14
+
15
+ <acl>
16
+ <resources>
17
+ <admin>
18
+ <children>
19
+ <catalog>
20
+ <children>
21
+ <tothegame translate="title" module="cybernetikz_tothegame">
22
+ <title>ToTheGame Feed Import</title>
23
+ </tothegame>
24
+ </children>
25
+ </catalog>
26
+ <system>
27
+ <children>
28
+ <config>
29
+ <children>
30
+ <tothegame translate="title" module="cybernetikz_tothegame">
31
+ <title>ToTheGame Settings</title>
32
+ </tothegame>
33
+ </children>
34
+ </config>
35
+ </children>
36
+ </system>
37
+ </children>
38
+ </admin>
39
+ </resources>
40
+ </acl>
41
+ </config>
app/code/local/Cybernetikz/ToTheGame/etc/config.xml ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Cybernetikz_ToTheGame>
5
+ <version>0.1.0</version>
6
+ </Cybernetikz_ToTheGame>
7
+ </modules>
8
+ <global>
9
+ <helpers>
10
+ <cybernetikz_tothegame>
11
+ <class>Cybernetikz_ToTheGame_Helper</class>
12
+ </cybernetikz_tothegame>
13
+ </helpers>
14
+ <blocks>
15
+ <cybernetikz_tothegame>
16
+ <class>Cybernetikz_ToTheGame_Block</class>
17
+ </cybernetikz_tothegame>
18
+ </blocks>
19
+ <resources>
20
+ <tothegame_setup>
21
+ <setup>
22
+ <module>Cybernetikz_ToTheGame</module>
23
+ <class>Cybernetikz_ToTheGame_Model_Resource_Mysql4_Setup</class>
24
+ </setup>
25
+ <connection>
26
+ <use>core_setup</use>
27
+ </connection>
28
+ </tothegame_setup>
29
+ <tothegame_write>
30
+ <connection>
31
+ <use>core_write</use>
32
+ </connection>
33
+ </tothegame_write>
34
+ <tothegame_read>
35
+ <connection>
36
+ <use>core_read</use>
37
+ </connection>
38
+ </tothegame_read>
39
+ </resources>
40
+ </global>
41
+ <admin>
42
+ <routers>
43
+ <adminhtml>
44
+ <args>
45
+ <modules>
46
+ <Cybernetikz_ToTheGame before="Mage_Adminhtml">Cybernetikz_ToTheGame_Adminhtml</Cybernetikz_ToTheGame>
47
+ </modules>
48
+ </args>
49
+ </adminhtml>
50
+ </routers>
51
+ </admin>
52
+ <adminhtml>
53
+ <layout>
54
+ <updates>
55
+ <cybernetikz_tothegame>
56
+ <file>cybernetikz_tothegame.xml</file>
57
+ </cybernetikz_tothegame>
58
+ </updates>
59
+ </layout>
60
+ <acl>
61
+ <resources>
62
+ <all>
63
+ <title>Allow Everything</title>
64
+ </all>
65
+ <admin>
66
+ <children>
67
+ <system>
68
+ <children>
69
+ <config>
70
+ <children>
71
+ <tothegame translate="label" module="cybernetikz_tothegame">
72
+ <label>CyberNetikz - All</label>
73
+ <sort_order>10</sort_order>
74
+ </tothegame>
75
+ </children>
76
+ </config>
77
+ </children>
78
+ </system>
79
+ </children>
80
+ </admin>
81
+ </resources>
82
+ </acl>
83
+ </adminhtml>
84
+
85
+ <default>
86
+ <tothegame>
87
+
88
+ <setting>
89
+ <importcachettl>24</importcachettl>
90
+ </setting>
91
+
92
+ </tothegame>
93
+ </default>
94
+
95
+ </config>
app/code/local/Cybernetikz/ToTheGame/etc/system.xml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <cybernetikz translate="label" module="cybernetikz_tothegame">
5
+ <label>Cybernetikz Extension</label>
6
+ <sort_order>200</sort_order>
7
+ <show_in_default>1</show_in_default>
8
+ <show_in_website>1</show_in_website>
9
+ <show_in_store>1</show_in_store>
10
+ </cybernetikz>
11
+ </tabs>
12
+ <sections>
13
+ <tothegame translate="label" module="cybernetikz_tothegame">
14
+ <label>ToTheGame Settings</label>
15
+ <tab>cybernetikz</tab>
16
+ <sort_order>10</sort_order>
17
+ <show_in_default>1</show_in_default>
18
+ <show_in_website>1</show_in_website>
19
+ <show_in_store>1</show_in_store>
20
+
21
+ <groups>
22
+ <hint>
23
+ <frontend_model>cybernetikz_tothegame/adminhtml_system_config_fieldset_hint</frontend_model>
24
+ <sort_order>0</sort_order>
25
+ <show_in_default>1</show_in_default>
26
+ <show_in_website>1</show_in_website>
27
+ <show_in_store>1</show_in_store>
28
+ </hint>
29
+ <setting translate="label" module="cybernetikz_tothegame">
30
+ <label>Settings</label>
31
+ <frontend_type>text</frontend_type>
32
+ <sort_order>10</sort_order>
33
+ <show_in_default>1</show_in_default>
34
+ <show_in_website>1</show_in_website>
35
+ <show_in_store>1</show_in_store>
36
+ <fields>
37
+ <subscriberid translate="label">
38
+ <label>Subscriber Id</label>
39
+ <frontend_type>text</frontend_type>
40
+ <comment>Please enter your ToTheGame Subscriber Id</comment>
41
+ <validate>required-entry</validate>
42
+ <sort_order>0</sort_order>
43
+ <show_in_default>1</show_in_default>
44
+ <show_in_website>1</show_in_website>
45
+ <show_in_store>1</show_in_store>
46
+ </subscriberid>
47
+
48
+ <importcachettl translate="label">
49
+ <label>Import Cache Time Limit</label>
50
+ <frontend_type>text</frontend_type>
51
+ <comment>Please enter feed file import cache time limit (hour)</comment>
52
+ <sort_order>20</sort_order>
53
+ <show_in_default>1</show_in_default>
54
+ <show_in_website>1</show_in_website>
55
+ <show_in_store>1</show_in_store>
56
+ </importcachettl>
57
+ </fields>
58
+ </setting>
59
+ </groups>
60
+
61
+ </tothegame>
62
+ </sections>
63
+ </config>
app/code/local/Cybernetikz/ToTheGame/sql/tothegame_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @category CyberNetikz
5
+ * @package CyberNetikz_ToTheGame
6
+ * @author CyberNetikz
7
+ * @author_url http://www.cybernetikz.com/
8
+ */
9
+
10
+ /** @var $installer Cybernetikz_ToTheGame_Model_Resource_Mysql4_Setup */
11
+ $installer = $this;
12
+ $installer->startSetup();
13
+
14
+ $select_attributes=array('genre','publishers','age','ean','platform_id','platform','release_date','publisher','editions','last_update','also_available_on','keywords','localized_title','main_game','company_logo_url','developer_homepage','developer_id','developer_name','pegi_rating','pegi_rating_id','in_game_language',/*'packshots','screenshots',*/'videos');
15
+ foreach($select_attributes as $attribute_label=>$attribute_code){
16
+ $type_model = Mage::getModel('eav/entity_type')->loadByCode('catalog_product');
17
+ $model = Mage::getModel('catalog/entity_attribute');
18
+ $model->loadByCode($type_model->getId(), $attribute_code);
19
+ if($model->getId()) {
20
+ $model->delete();
21
+ }
22
+ }
23
+
24
+ $attribute_set_group='Game Information';
25
+
26
+ $select_attributes=array('Genre'=>'genre','Publishers'=>'publishers');
27
+ $ap=0;
28
+ foreach($select_attributes as $attribute_label=>$attribute_code){
29
+ $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attribute_code, array(
30
+ 'group' => $attribute_set_group,
31
+ 'backend' => '',
32
+ 'frontend' => '',
33
+ 'label' => $attribute_label,
34
+ 'type' => 'int',
35
+ 'input' => 'select',
36
+ 'source' => 'eav/entity_attribute_source_table',
37
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
38
+ 'visible' => true,
39
+ 'required' => false,
40
+ 'user_defined' => true,
41
+ 'default' => '',
42
+ 'searchable' => false,
43
+ 'filterable' => true,
44
+ 'comparable' => false,
45
+ 'configurable' => false,
46
+ 'visible_on_front' => false,
47
+ 'position' => $ap
48
+ ));
49
+ $ap+=10;
50
+ }
51
+
52
+ $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'age', array(
53
+ 'group' => $attribute_set_group,
54
+ 'backend' => 'eav/entity_attribute_backend_array',
55
+ 'frontend' => '',
56
+ 'label' => 'Age',
57
+ 'type' => 'varchar',
58
+ 'input' => 'multiselect',
59
+ 'source' => '',
60
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
61
+ 'visible' => true,
62
+ 'required' => false,
63
+ 'user_defined' => true,
64
+ 'default' => '',
65
+ 'searchable' => false,
66
+ 'filterable' => true,
67
+ 'comparable' => false,
68
+ 'configurable' => false,
69
+ 'visible_on_front' => false,
70
+ 'position' => 20
71
+ ));
72
+
73
+ $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'game_id', array(
74
+ 'group' => $attribute_set_group,
75
+ 'backend' => '',
76
+ 'frontend' => '',
77
+ 'label' => 'Game Id',
78
+ 'type' => 'varchar',
79
+ 'input' => 'text',
80
+ 'source' => '',
81
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
82
+ 'visible' => true,
83
+ 'required' => false,
84
+ 'user_defined' => true,
85
+ 'default' => '',
86
+ 'unique' => true,
87
+ 'searchable' => false,
88
+ 'filterable' => false,
89
+ 'comparable' => false,
90
+ 'configurable' => false,
91
+ 'visible_on_front' => false,
92
+ 'position' => 30
93
+ ));
94
+
95
+ $text_attributes = array('EAN'=>'ean','Platform Id'=>'platform_id','Platform'=>'platform','Release Date'=>'release_date','Publisher'=>'publisher','Editions'=>'editions','Last Update'=>'last_update','Also Available On'=>'also_available_on','Keywords'=>'keywords','Localized Title'=>'localized_title','Main Game'=>'main_game','Company Logo URL'=>'company_logo_url','Developer Homepage'=>'developer_homepage','Developer Id'=>'developer_id','Developer Name'=>'developer_name','Pegi Rating'=>'pegi_rating','Pegi Rating Id'=>'pegi_rating_id','In Game Language'=>'in_game_language');
96
+ $ap=40;
97
+ foreach($text_attributes as $attribute_label=>$attribute_code){
98
+ $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attribute_code, array(
99
+ 'group' => $attribute_set_group,
100
+ 'backend' => '',
101
+ 'frontend' => '',
102
+ 'label' => $attribute_label,
103
+ 'type' => 'varchar',
104
+ 'input' => 'text',
105
+ 'source' => '',
106
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
107
+ 'visible' => true,
108
+ 'required' => false,
109
+ 'user_defined' => true,
110
+ 'default' => '',
111
+ 'searchable' => false,
112
+ 'filterable' => false,
113
+ 'comparable' => false,
114
+ 'configurable' => false,
115
+ 'visible_on_front' => false,
116
+ 'position' => $ap
117
+ ));
118
+ $ap+=10;
119
+ }
120
+
121
+ $textarea_attributes = array(/*'Packshots'=>'packshots','Screenshots'=>'screenshots',*/'Videos'=>'videos');
122
+ foreach($textarea_attributes as $attribute_label=>$attribute_code){
123
+ $installer->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attribute_code, array(
124
+ 'group' => $attribute_set_group,
125
+ 'backend' => '',
126
+ 'frontend' => '',
127
+ 'label' => $attribute_label,
128
+ 'type' => 'text',
129
+ 'input' => 'textarea',
130
+ 'source' => '',
131
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
132
+ 'visible' => true,
133
+ 'required' => false,
134
+ 'user_defined' => true,
135
+ 'default' => '',
136
+ 'searchable' => false,
137
+ 'filterable' => false,
138
+ 'comparable' => false,
139
+ 'configurable' => false,
140
+ 'visible_on_front' => false,
141
+ 'position' => $ap
142
+ ));
143
+ $ap+=10;
144
+ }
145
+
146
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/cybernetikz_tothegame.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_tothegame_gameimport>
4
+ <reference name="content">
5
+ <block type="adminhtml/template" name="tothegame" template="cybernetikz/tothegame/gameimport.phtml"/>
6
+ </reference>
7
+ </adminhtml_tothegame_gameimport>
8
+ </layout>
app/design/adminhtml/default/default/template/cybernetikz/tothegame/gameimport.phtml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);?>adminhtml/default/default/cybernetikz/tothegame/js/jquery.js"></script>
2
+ <script type="text/javascript">jQuery.noConflict();</script>
3
+ <div class="content-header">
4
+ <table cellspacing="0" class="grid-header">
5
+ <tr>
6
+ <td><h3><?php echo $this->__('Game Feed Import')?></h3></td>
7
+ </tr>
8
+ </table>
9
+ </div>
10
+
11
+ <div class="wrap">
12
+ <div style="width:80%; float:left; margin-right:1%;">
13
+ <h4><?php echo $this->__('Single Game Import')?></h4>
14
+ <form action="<?php echo Mage::helper("adminhtml")->getUrl("adminhtml/tothegame/singlegameimport");?>" method="get" target="sync_output_test" class="sync-form">
15
+ <p>
16
+ <label for="cnc_game_id">Game ID</label>
17
+ <input type="text" name="game_id[]" id="cnc_game_id" />
18
+ <button type="submit" class="scalable save">Run</button>
19
+ </p>
20
+ </form>
21
+ <p>
22
+ <small><?php echo $this->__('Only game with a given Game Id will be import. Please use comma(,) separator for muliple Game Ids.'); ?></small>
23
+ </p>
24
+ </div>
25
+ <div style="clear:both;"></div>
26
+
27
+ <h4>Report <img src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);?>adminhtml/default/default/cybernetikz/tothegame/images/indicator.gif" alt="Please wait&hellip;" title="Please wait&hellip;" class="work-indicator" style="display:none;" /></h4>
28
+ <iframe id="sync-output-test" name="sync_output_test" src="about:blank" frameborder="1" width="100%" height="500" style="border:1px solid #DADADA;"><?php echo $this->__('Your browser does not support floating frames (iframe HTML element). Please upgrade your browser and try again.'); ?></iframe>
29
+ </div>
30
+ <script type="text/javascript">
31
+ jQuery(function () {
32
+ jQuery('.sync-form').submit(function () {
33
+ jQuery('.work-indicator').show();
34
+ jQuery('#sync-output-test').load(function () {
35
+ jQuery('.work-indicator').hide();
36
+ });
37
+ });
38
+ });
39
+ </script>
app/design/adminhtml/default/default/template/cybernetikz/tothegame/system/config/fieldset/hint.phtml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <div style="padding:10px; border:1px solid #cccccc; background-color:#eaf0ee;margin-bottom:10px;">
2
+ <div style="padding-left:76px;"><a href="http://www.cybernetikz.com" target="_blank"><img src="http://www.cybernetikz.com/images/cn-logo.jpg" alt="Cybernetikz" /></a></div>
3
+ <p style="font-family:Arial, Helvetica, sans-serif; font-size:13px; font-weight:normal;padding:0px; margin:0px; padding-top:5px;"><strong>ToTheGame Feeder by <a href="http://www.cybernetikz.com" target="_blank">CyberNetikz</a></strong></p>
4
+ <p style="font-family:Arial, Helvetica, sans-serif; font-size:13px; font-weight:normal;padding:0px; margin:0px; padding-top:5px;"><a href="mailto:support@cybernetikz.com">Email Us</a> for any Customization of the Extension or Feedback.</p>
5
+ <p style="font-family:Arial, Helvetica, sans-serif; font-size:13px; font-weight:normal;padding:0px; margin:0px; padding-top:5px;">Call: +1-347-261-2888 ( NY, USA ) | <a href="http://www.cybernetikz.com/website/web-development/magento/" target="_blank">Browse Our Magento Projects</a></p>
6
+ </div>
app/etc/modules/Cybernetikz_ToTheGame.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Cybernetikz_ToTheGame>
5
+ <active>true</active>
6
+ <codePool>local</codePool>
7
+ </Cybernetikz_ToTheGame>
8
+ </modules>
9
+ </config>
package.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Cybernetikz_ToTheGame</name>
4
+ <version>0.1.0</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL 3.0)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>Automatically import (add/update) product information from ToTheGame game feed for your store.</summary>
10
+ <description>- Allow You to Import Product from ToTheGame Feeder into Magento&#xD;
11
+ - Allow You to Show All Products Info into Your Product Detail Page like Title, Descriptions, Platform, Boxshots, Screenshots, Videos, Genre, Publisher, Release Date, Developers etc</description>
12
+ <notes>- ToTheGame Feed Import Implement and Ready to Use</notes>
13
+ <authors><author><name>CyberNetikz</name><user>CyberNetikz</user><email>sales@cybernetikz.com</email></author></authors>
14
+ <date>2015-01-08</date>
15
+ <time>11:46:44</time>
16
+ <contents><target name="mageetc"><dir name="modules"><file name="Cybernetikz_ToTheGame.xml" hash="56a3597fb67967ea0407b087d251c4e3"/></dir></target><target name="magelocal"><dir name="Cybernetikz"><dir name="ToTheGame"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="595da4f66a0fe867d47c9cdd71015823"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="f86910ee11b8e1330cb9ea157ddacf76"/></dir><dir name="Model"><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="a30938317dace0f4c48832dfb06773d0"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ToTheGameController.php" hash="52ec51265f1b1a521d89105066461d6f"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="0667d87d1bcccac7d5f9f1cd3719432c"/><file name="config.xml" hash="9763bed945675a401751cb35d3eda237"/><file name="system.xml" hash="180d791b1f52a8bb78a901bb13499aed"/></dir><dir name="sql"><dir name="tothegame_setup"><file name="mysql4-install-0.1.0.php" hash="57ee1befe5d68afc4e7faa50487b8333"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="cybernetikz_tothegame.xml" hash="aa961d53d71288758b51cee8d3d155d3"/></dir><dir name="template"><dir name="cybernetikz"><dir name="tothegame"><file name="gameimport.phtml" hash="005fdd07c423b199f5a3661384fc8124"/><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="77c083d7b58e29bd9f6a4b432a9d5ce1"/></dir></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="cybernetikz"><dir name="tothegame"><dir name="images"><file name="indicator.gif" hash="86b1ac6d1c485d54efa3a53643e91ceb"/></dir><dir name="js"><file name="jquery.js" hash="a9331828c517ac5d97f93b3cfdbcc9bc"/></dir></dir></dir></dir></dir></dir></target></contents>
17
+ <compatible/>
18
+ <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
19
+ </package>
skin/adminhtml/default/default/cybernetikz/tothegame/images/indicator.gif ADDED
Binary file
skin/adminhtml/default/default/cybernetikz/tothegame/js/jquery.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery 1.2.6 - New Wave Javascript
3
+ *
4
+ * Copyright (c) 2008 John Resig (jquery.com)
5
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
6
+ * and GPL (GPL-LICENSE.txt) licenses.
7
+ *
8
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
9
+ * $Rev: 5685 $
10
+ */
11
+ (function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
12
+ return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
13
+ return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
14
+ selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
15
+ return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
16
+ this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
17
+ return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
18
+ jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
19
+ script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
20
+ for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
21
+ for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
22
+ jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
23
+ ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
24
+ while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
25
+ while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
26
+ for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
27
+ jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
28
+ xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
29
+ jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
30
+ for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
31
+ s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
32
+ e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();